diff --git a/Assets/Scripts/Demo/SceneSettings.cs b/Assets/Scripts/Demo/SceneSettings.cs index 39693a63e..45c3b5062 100644 --- a/Assets/Scripts/Demo/SceneSettings.cs +++ b/Assets/Scripts/Demo/SceneSettings.cs @@ -18,7 +18,8 @@ public class SceneSettings : MonoBehaviour public Transform GearNode; - public ObiLateFixedUpdater obiFixedUpdater; + + // public ObiLateFixedUpdater obiFixedUpdater; public LineRenderer LineRenderer; @@ -37,7 +38,7 @@ public class SceneSettings : MonoBehaviour GearNode = Node; } - obiFixedUpdater = FindFirstObjectByType(); + // obiFixedUpdater = FindFirstObjectByType(); } private void Start() diff --git a/Assets/ThirdParty/Obi.meta b/Assets/ThirdParty/Obi.meta index 1ad2351c4..a1435212a 100644 --- a/Assets/ThirdParty/Obi.meta +++ b/Assets/ThirdParty/Obi.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 08ea2ef4e5fdc3c4b8076ae99f26dc34 +guid: 36112b76e54ae47b48e48d646aee4ed0 folderAsset: yes +timeCreated: 1435850625 +licenseType: Store DefaultImporter: - externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/CHANGELOG_rope.txt b/Assets/ThirdParty/Obi/CHANGELOG_rope.txt index 8183430e4..97384c8fa 100644 --- a/Assets/ThirdParty/Obi/CHANGELOG_rope.txt +++ b/Assets/ThirdParty/Obi/CHANGELOG_rope.txt @@ -1,22 +1,77 @@ # Change Log All notable changes to “Obi - Advanced ropes for Unity” will be documented in this file. -## [6.5.4] +## [7.1] + +### Added +- ObiBone now exposes one particle group per bone in the hierarchy, allowing to easily use attachments. +- New ObiBoneOverride component that allows to override curve-driven properties for a specific sub-hierarchy. +- Solvers can now optionally enforce boundary limits, so that particles can't go outside those limits. This is often more convenient than manually placing invisible colliders for the same purpose. +- Dynamic ObiParticleAttachments now have a "projection" boolean, when enabled it forces the rendered position/orientation of the attached particles to match that of the attachment location, even if the constraint doesn't fully converge. This is useful to avoid visual gaps under extreme conditions. +- Actors now have a "mass scale" parameter, that multiplies the mass of all particles in the blueprinyt at the time of loading it into the solver. This is handy to create actors of different masses without the need to create a new blueprint. +- ObiForceZones now have a "color" parameter, that can be used to change the color of particles entering the zone. + +### Changed +- Improved performance for large amounts of static colliders: they're not processed at all during ObiSolver.Update(). ### Fixed -- Workaround for kinematic rigidbody velocities not writable in Unity 2022.1 and above. +- Null reference exception when using a ObiRopeExtrudedRenderer that doesn't reference a section asset. -## [6.5.3] +## [7.0.5] + +### Added +- New pinhole constraint type and ObiPinhole component, that allows to constrain ropes to a point in space while allowing it to slide trough it. Supports two-way rigidbody coupling and can be motor driven. + +### Fixed +- Erratic bend/twist constraint behavior when darboux vector is close to identity. +- Crash when attempting to bake ObiRopeExtrudedRenderer paired with an ObiPathSmoother that uses a non-zero decimation factor. +- IndexOutOfRangeError when having ropes using multiple different section assets and disabling all rope instances using one of them. +- InvalidOperationException in Burst backend when having simulateWhenInvisible = false and solver not seen by any camera. + +## [7.0.4] + +### Fixed +- Bug that caused inactive particles to still be rendered by ObiInstancedParticleRenderer. +- Bug that preventing pin constraints' break threshold from working when using the Compute backend. + +## [7.0.3] + +### Added +- Object layer support for all renderers. +- New "Synchronous Fixed" solver synchronization mode, similar to Obi 6, offers tighter integration with rigidbody physics. +- New "Tangled Ropes" sample scene. + +## [7.0.2] + +### Fixed +- Solvers not placed at the scene origin would result in actors having incorrect motion blur in HDRP. +- Fixed issue when disabling all solvers and colliders simultaneously: ipon re-enabling them, the colliders would be ignored. +- Issue withe ElectricalSparks sample scene, ObiRopePrefabPlugger sample component may sometimes thorw an exception dependin on Unity's OnEnable call order. +- Rope would sometimes disappear when using aerodynamic constraints with zero wind in Burst, due to a math.project returning NaN. Replaced with math.projectsafe. + +## [7.0.1] + +### Added +- BakeMesh functionality to ObiRopeChainRenderer, you can now export baked chain meshes. +- Render layer mask support to all rope renderers and particle renderers. + +### Fixed +- Sceneview mouse lookaround in flytrough mode (right click + drag) didn't work in the path editor in Windows. +- Having a ObiParticleRenderer with no material applied resulted in a exception in builds due GetInstanceID() returning 0 in editor but raising a nullref exception in the build. + +## [7.0] + +### Added +- Compute shader based GPU solver backend. +- More efficient solver update cycle, that also removes the need to have ObiUpdater components. +- Aerodynamic constraint support for ObiRope, ObiRod and ObiBone. ### Changed -- Updated UnsafeList with its generic version for supporting newer versions of the Collections package. +- Rendering system is now fully multithreaded, integrated with the solver backend. -## [6.5.2] - -### Changed -- Slightly improved overall performance by only updating collision material references during OnValidate() -- Exposed solver.activeParticles and solver.colors as a ObiNativeIntList instead of int[], which allows to use them directly in jobs. -- Updated for compatibility with newest Collections package. +### Removed +- Native library based 'Oni' solver backend. +- ObiUpdater and all derived classes have been removed. ## [6.5.1] diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs index 0676df0d8..c2c9e1233 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs @@ -85,7 +85,7 @@ namespace Obi EditorGUI.BeginChangeCheck(); meshBasedEditor.particleCulling = (ObiMeshBasedActorBlueprintEditor.ParticleCulling)EditorGUILayout.EnumPopup("Culling", meshBasedEditor.particleCulling); - if (editor.selectedCount == 0) + if (ObiActorBlueprintEditor.selectedCount == 0) { EditorGUILayout.HelpBox("Select at least one particle to use selection mask.", MessageType.Info); selectionMask = false; @@ -111,13 +111,16 @@ namespace Obi public override bool Editable(int index) { - return editor.visible[index] && (!selectionMask || editor.selectionStatus[index]); + return editor.visible[index] && (!selectionMask || ObiActorBlueprintEditor.selectionStatus[index]); } public override void OnSceneGUI(SceneView view) { if (Camera.current != null) { + var blueprint = meshBasedEditor.blueprint as ObiMeshBasedActorBlueprint; + paintBrush.raycastTransform = blueprint != null ? Matrix4x4.TRS(Vector3.zero, blueprint.rotation, blueprint.scale) : Matrix4x4.identity; + paintBrush.raycastTarget = meshBasedEditor.sourceMesh; paintBrush.DoBrush(editor.blueprint.positions); } diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs index 99ff3bcdc..6a21eb662 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs @@ -32,8 +32,8 @@ namespace Obi public override string GetHelpString() { - if (editor.selectedCount > 0) - return "" + editor.selectedCount + " selected particles."; + if (ObiActorBlueprintEditor.selectedCount > 0) + return "" + ObiActorBlueprintEditor.selectedCount + " selected particles."; else return "No particles selected. Click and drag over particles to select them."; } @@ -65,12 +65,12 @@ namespace Obi { if ((Event.current.modifiers & EventModifiers.Shift) == 0) { - for (int p = 0; p < editor.selectionStatus.Length; p++) - editor.selectionStatus[p] = false; + for (int p = 0; p < ObiActorBlueprintEditor.selectionStatus.Length; p++) + ObiActorBlueprintEditor.selectionStatus[p] = false; } foreach (int p in group.particleIndices) - editor.selectionStatus[p] = true; + ObiActorBlueprintEditor.selectionStatus[p] = true; UpdateSelection(); } @@ -78,9 +78,9 @@ namespace Obi if (GUI.Button(new Rect(rect.x + rect.width * 0.5f, rect.y, rect.width * 0.5f, EditorGUIUtility.singleLineHeight), "Set", EditorStyles.miniButtonRight)) { group.particleIndices.Clear(); - for (int p = 0; p < editor.selectionStatus.Length; p++) + for (int p = 0; p < ObiActorBlueprintEditor.selectionStatus.Length; p++) { - if (editor.selectionStatus[p]) + if (ObiActorBlueprintEditor.selectionStatus[p]) group.particleIndices.Add(p); } } @@ -95,9 +95,9 @@ namespace Obi var group = editor.blueprint.AppendNewParticleGroup("new group"); - for (int i = 0; i < editor.selectionStatus.Length; i++) + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) { - if (editor.selectionStatus[i]) + if (ObiActorBlueprintEditor.selectionStatus[i]) group.particleIndices.Add(i); } @@ -116,33 +116,33 @@ namespace Obi GUILayout.FlexibleSpace(); if (GUILayout.Button(new GUIContent(Resources.Load("InvertButton"), "Invert selection"), GUILayout.MaxHeight(24), GUILayout.MaxWidth(48))) { - for (int i = 0; i < editor.selectionStatus.Length; i++) + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) { if (editor.blueprint.IsParticleActive(i)) - editor.selectionStatus[i] = !editor.selectionStatus[i]; + ObiActorBlueprintEditor.selectionStatus[i] = !ObiActorBlueprintEditor.selectionStatus[i]; } UpdateSelection(); } - GUI.enabled = editor.selectedCount > 0; + GUI.enabled = ObiActorBlueprintEditor.selectedCount > 0; if (GUILayout.Button(new GUIContent(Resources.Load("ClearButton"), "Clear selection"), GUILayout.MaxHeight(24), GUILayout.MaxWidth(48))) { - for (int i = 0; i < editor.selectionStatus.Length; i++) - editor.selectionStatus[i] = false; + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) + ObiActorBlueprintEditor.selectionStatus[i] = false; UpdateSelection(); } if (GUILayout.Button(new GUIContent(Resources.Load("OptimizeButton"), "Optimize selected"), GUILayout.MaxHeight(24), GUILayout.MaxWidth(48))) { Undo.RecordObject(editor.blueprint, "Optimize particles away"); - editor.blueprint.RemoveSelectedParticles(ref editor.selectionStatus); + editor.blueprint.RemoveSelectedParticles(ref ObiActorBlueprintEditor.selectionStatus); editor.Refresh(); } if (GUILayout.Button(new GUIContent(Resources.Load("RemoveButton"), "Remove selected"), GUILayout.MaxHeight(24), GUILayout.MaxWidth(48))) { Undo.RecordObject(editor.blueprint, "Remove particles"); - editor.blueprint.RemoveSelectedParticles(ref editor.selectionStatus, false); + editor.blueprint.RemoveSelectedParticles(ref ObiActorBlueprintEditor.selectionStatus, false); editor.Refresh(); } GUI.enabled = true; @@ -175,12 +175,12 @@ namespace Obi maxSelectionValue = EditorGUILayout.FloatField("Maximum " + property.name, maxSelectionValue); if (EditorGUI.EndChangeCheck()) { - for (int i = 0; i < editor.selectionStatus.Length; i++) + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) { if (editor.blueprint.IsParticleActive(i)) { var value = property.Get(i); - editor.selectionStatus[i] = value >= minSelectionValue && value <= maxSelectionValue; + ObiActorBlueprintEditor.selectionStatus[i] = value >= minSelectionValue && value <= maxSelectionValue; } } UpdateSelection(); @@ -244,9 +244,9 @@ namespace Obi if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(editor.blueprint, "Set particle property"); - for (int i = 0; i < editor.selectionStatus.Length; i++) + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) { - if (!editor.selectionStatus[i]) continue; + if (!ObiActorBlueprintEditor.selectionStatus[i]) continue; editor.currentProperty.SetDefaultToIndex(i); } editor.Refresh(); @@ -287,7 +287,7 @@ namespace Obi EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); editor.RenderModeSelector(); - editor.dotRadiusScale = EditorGUILayout.Slider(new GUIContent("Particle dot size"), editor.dotRadiusScale, 0, 5); + ObiActorBlueprintEditor.dotRadiusScale = EditorGUILayout.Slider(new GUIContent("Particle dot size"), ObiActorBlueprintEditor.dotRadiusScale, 0, 5); editor.currentProperty.VisualizationOptions(); EditorGUILayout.EndVertical(); @@ -301,31 +301,31 @@ namespace Obi protected void UpdateSelection() { - editor.selectedCount = 0; + ObiActorBlueprintEditor.selectedCount = 0; mixedPropertyValue = false; // Find out how many selected particles we have, and whether they all have the same value for the current property: - for (int i = 0; i < editor.selectionStatus.Length; i++) + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) { - if (editor.blueprint.IsParticleActive(i) && editor.selectionStatus[i]) + if (editor.blueprint.IsParticleActive(i) && ObiActorBlueprintEditor.selectionStatus[i]) { - editor.selectedCount++; + ObiActorBlueprintEditor.selectedCount++; - if (editor.activeParticle >= 0) + if (ObiActorBlueprintEditor.activeParticle >= 0) { - if (!editor.currentProperty.Equals(editor.activeParticle, i)) + if (!editor.currentProperty.Equals(ObiActorBlueprintEditor.activeParticle, i)) mixedPropertyValue = true; } else - editor.activeParticle = i; + ObiActorBlueprintEditor.activeParticle = i; } - else if (editor.activeParticle == i) - editor.activeParticle = -1; + else if (ObiActorBlueprintEditor.activeParticle == i) + ObiActorBlueprintEditor.activeParticle = -1; } // Set initial property value: - if (!mixedPropertyValue && editor.activeParticle >= 0) - editor.currentProperty.GetDefaultFromIndex(editor.activeParticle); + if (!mixedPropertyValue && ObiActorBlueprintEditor.activeParticle >= 0) + editor.currentProperty.GetDefaultFromIndex(ObiActorBlueprintEditor.activeParticle); editor.Repaint(); SceneView.RepaintAll(); diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs index 2eb81ee9d..8ceee4b05 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs @@ -52,7 +52,7 @@ namespace Obi private void FloatFromTexture(int i, Color color) { - if (!selectionMask || editor.selectionStatus[i]) + if (!selectionMask || ObiActorBlueprintEditor.selectionStatus[i]) { float value = minPropertyValue + color[(int)textureChannel] * (maxPropertyValue - minPropertyValue); floatProperty.Set(i, value); @@ -61,7 +61,7 @@ namespace Obi private void ColorFromTexture(int i, Color color) { - if (!selectionMask || editor.selectionStatus[i]) + if (!selectionMask || ObiActorBlueprintEditor.selectionStatus[i]) colorProperty.Set(i, color); } diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs index f89078b36..a1e4d29fe 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs @@ -57,20 +57,20 @@ namespace Obi if (GUILayout.Button("Generate tethers",GUILayout.MinHeight(32))) { // Select all particles in the tethered groups: - for (int i = 0; i < editor.selectionStatus.Length; ++i) + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; ++i) { - editor.selectionStatus[i] = false; + ObiActorBlueprintEditor.selectionStatus[i] = false; for (int j = 0; j < tetheredGroups.Length; ++j) { if (tetheredGroups[j] && editor.blueprint.groups[j].ContainsParticle(i)) { - editor.selectionStatus[i] = true; + ObiActorBlueprintEditor.selectionStatus[i] = true; break; } } } - editor.blueprint.GenerateTethers(editor.selectionStatus); + editor.blueprint.GenerateTethers(ObiActorBlueprintEditor.selectionStatus); editor.Refresh(); } diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs index 953b3220d..341b491bb 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs @@ -17,7 +17,7 @@ namespace Obi protected override float WeightFromDistance(float distance) { // anything outside the brush should have zero weight: - if (distance > radius) + if (distance * EditorGUIUtility.pixelsPerPoint > radius) return 0; return 1; } diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs index 490c584b5..0e819c697 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs @@ -14,29 +14,27 @@ namespace Obi [CustomEditor(typeof(ObiActorBlueprint), true)] public class ObiActorBlueprintEditor : Editor, IObiSelectableParticleProvider { - protected IEnumerator routine; - public List tools = new List(); public int currentToolIndex = 0; - protected List properties = new List(); + public List properties = new List(); public int currentPropertyIndex = 0; - protected List renderModes = new List(); + public List renderModes = new List(); public int renderModeFlags = 0; BooleanPreference showRenderModes; + public bool autoGenerate = false; public bool editMode = false; public bool isEditing = false; - protected List m_SceneStates; - protected SceneSetup[] oldSetup; protected UnityEngine.Object oldSelection; //Additional status info for all particles: - public float dotRadiusScale = 1; - public int selectedCount = 0; - public int activeParticle = -1; - public bool[] selectionStatus = new bool[0]; + public static float dotRadiusScale = 1; + public static int selectedCount = 0; + public static int activeParticle = -1; + public static bool[] selectionStatus = new bool[0]; + public bool[] visible = new bool[0]; public Color[] tint = new Color[0]; protected float[] sqrDistanceToCamera = new float[0]; @@ -78,6 +76,10 @@ namespace Obi public virtual void OnEnable() { + properties.Clear(); + renderModes.Clear(); + tools.Clear(); + properties.Add(new ObiBlueprintMass(this)); properties.Add(new ObiBlueprintRadius(this)); properties.Add(new ObiBlueprintFilterCategory(this)); @@ -88,11 +90,12 @@ namespace Obi #if (UNITY_2019_1_OR_NEWER) renderCallback = new System.Action((cntxt, cam) => { DrawWithCamera(cam); }); - RenderPipelineManager.beginCameraRendering -= renderCallback; RenderPipelineManager.beginCameraRendering += renderCallback; #endif - Camera.onPreCull -= DrawWithCamera; Camera.onPreCull += DrawWithCamera; + SceneView.duringSceneGui += OnSceneGUI; + + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; } public virtual void OnDisable() @@ -103,8 +106,8 @@ namespace Obi RenderPipelineManager.beginCameraRendering -= renderCallback; #endif Camera.onPreCull -= DrawWithCamera; - - ObiParticleEditorDrawing.DestroyParticlesMesh(); + SceneView.duringSceneGui -= OnSceneGUI; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; foreach (var tool in tools) { @@ -116,51 +119,77 @@ namespace Obi { renderMode.OnDestroy(); } - - properties.Clear(); - renderModes.Clear(); } - protected void Generate() + void OnPlayModeStateChanged(PlayModeStateChange playmodeState) { - if (blueprint.empty) + if (playmodeState == PlayModeStateChange.ExitingEditMode) + { + if (StageUtility.GetCurrentStage() is ObiActorBlueprintEditorStage) + StageUtility.GoToMainStage(); + } + } + + protected bool Generate() + { + if (!blueprint.edited) { EditorUtility.SetDirty(target); CoroutineJob job = new CoroutineJob(); - routine = job.Start(blueprint.Generate()); - EditorCoroutine.ShowCoroutineProgressBar("Generating blueprint...", ref routine); + IEnumerator routine = job.Start(blueprint.Generate()); + EditorCoroutine.ShowCoroutineProgressBar("Generating blueprint...", routine); Refresh(); EditorGUIUtility.ExitGUI(); } else { - if (EditorUtility.DisplayDialog("Blueprint generation", "This blueprint already contains data. Are you sure you want to re-generate this blueprint from scratch?", "Ok", "Cancel")) + if (EditorUtility.DisplayDialog("Blueprint generation", "This blueprint contains manually edited data. If you regenerate the blueprint, these changes will be lost. Are you sure you want to proceed?", "Ok", "Cancel")) { EditorUtility.SetDirty(target); CoroutineJob job = new CoroutineJob(); - routine = job.Start(blueprint.Generate()); - EditorCoroutine.ShowCoroutineProgressBar("Generating blueprint...", ref routine); + IEnumerator routine = job.Start(blueprint.Generate()); + EditorCoroutine.ShowCoroutineProgressBar("Generating blueprint...", routine); Refresh(); EditorGUIUtility.ExitGUI(); } + else return false; } + return true; } protected virtual bool ValidateBlueprint() { return true; } + private void DrawGenerationControls() + { + GUILayout.BeginHorizontal(); + + float originalLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 72; + autoGenerate = EditorGUILayout.ToggleLeft("Auto Generate", autoGenerate, GUILayout.ExpandWidth(false)); + EditorGUIUtility.labelWidth = originalLabelWidth; + + GUI.enabled = !autoGenerate; + if (GUILayout.Button("Generate", GUI.skin.FindStyle("LargeButton"), GUILayout.Height(32))) + Generate(); + + GUILayout.EndHorizontal(); + } + public override void OnInspectorGUI() { - serializedObject.UpdateIfRequiredOrScript(); EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + EditorGUI.BeginChangeCheck(); DrawBlueprintProperties(); + bool blueprintPropertiesChanged = EditorGUI.EndChangeCheck(); + bool blueprintValid = ValidateBlueprint(); GUILayout.Space(10); - GUI.enabled = ValidateBlueprint(); - if (GUILayout.Button("Generate", GUI.skin.FindStyle("LargeButton"), GUILayout.Height(32))) - Generate(); + + GUI.enabled = blueprintValid; + DrawGenerationControls(); GUI.enabled = (blueprint != null && !blueprint.empty && !Application.isPlaying); EditorGUI.BeginChangeCheck(); @@ -180,7 +209,10 @@ namespace Obi if (GUI.changed) { - serializedObject.ApplyModifiedProperties(); + serializedObject.ApplyModifiedPropertiesWithoutUndo(); + + if (autoGenerate && blueprintValid && blueprintPropertiesChanged) + blueprint.GenerateImmediate(); // There might be blueprint editing operations that have no undo entry, so do this to // ensure changes are serialized to disk by Unity. @@ -206,51 +238,17 @@ namespace Obi } } - - [System.Serializable] - protected class SceneStateCache - { - public SceneView view; - public SceneView.SceneViewState state; - } - void EnterBlueprintEditMode() { if (!isEditing) { -#if (UNITY_2019_1_OR_NEWER) - SceneView.duringSceneGui -= this.OnSceneGUI; - SceneView.duringSceneGui += this.OnSceneGUI; -#else - SceneView.onSceneGUIDelegate -= this.OnSceneGUI; - SceneView.onSceneGUIDelegate += this.OnSceneGUI; -#endif + ActiveEditorTracker.sharedTracker.isLocked = true; - oldSelection = Selection.activeObject; - if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) - { - ActiveEditorTracker.sharedTracker.isLocked = true; + string assetPath = AssetDatabase.GetAssetPath(blueprint); + ObiActorBlueprintEditorStage stage = ObiActorBlueprintEditorStage.CreateStage(assetPath, this); + StageUtility.GoToStage(stage, true); - oldSetup = EditorSceneManager.GetSceneManagerSetup(); - EditorSceneManager.NewScene(NewSceneSetup.EmptyScene); - - // Set properties for all scene views: - m_SceneStates = new List(); - foreach (SceneView s in SceneView.sceneViews) - { - m_SceneStates.Add(new SceneStateCache { state = new SceneView.SceneViewState(s.sceneViewState), view = s }); - s.sceneViewState.showFlares = false; - s.sceneViewState.alwaysRefresh = false; - s.sceneViewState.showFog = false; - s.sceneViewState.showSkybox = false; - s.sceneViewState.showImageEffects = false; - s.sceneViewState.showParticleSystems = false; - s.Frame(blueprint.bounds); - } - - isEditing = true; - Repaint(); - } + isEditing = true; } } @@ -258,52 +256,18 @@ namespace Obi { if (isEditing) { - isEditing = false; - AssetDatabase.SaveAssets(); - - // Reset all scene views: - foreach (var state in m_SceneStates) - { - if (state.view == null) - continue; - - state.view.sceneViewState.showFog = state.state.showFog; - state.view.sceneViewState.showFlares = state.state.showFlares; - state.view.sceneViewState.alwaysRefresh = state.state.alwaysRefresh; - state.view.sceneViewState.showSkybox = state.state.showSkybox; - state.view.sceneViewState.showImageEffects = state.state.showImageEffects; - state.view.sceneViewState.showParticleSystems = state.state.showParticleSystems; - } - - ActiveEditorTracker.sharedTracker.isLocked = false; - - if (SceneManager.GetActiveScene().path.Length <= 0) - { - if (oldSetup != null && oldSetup.Length > 0) - { - EditorSceneManager.RestoreSceneManagerSetup(oldSetup); - oldSetup = null; - } - else - { - EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects); - } - } - - Selection.activeObject = oldSelection; - -#if (UNITY_2019_1_OR_NEWER) - SceneView.duringSceneGui -= this.OnSceneGUI; -#else - SceneView.onSceneGUIDelegate -= this.OnSceneGUI; -#endif - - Repaint(); + StageUtility.GoToMainStage(); } } + public void CleanupEditor() + { + ActiveEditorTracker.sharedTracker.isLocked = false; + ObiParticleEditorDrawing.DestroyParticlesMesh(); + } + public virtual void OnSceneGUI(SceneView sceneView) { @@ -318,7 +282,7 @@ namespace Obi { // Update camera facing status and world space positions array: - UpdateParticleVisibility(); + UpdateParticleVisibility(sceneView.camera); // Generate sorted indices for back-to-front rendering: for (int i = 0; i < sortedIndices.Length; i++) @@ -339,7 +303,7 @@ namespace Obi UpdateTintColor(); // Draw particle handles: - ObiParticleEditorDrawing.DrawParticles(sceneView.camera, blueprint, activeParticle, visible, tint, sortedIndices, dotRadiusScale); + ObiParticleEditorDrawing.DrawParticles(sceneView.camera, blueprint, visible, tint, sortedIndices, dotRadiusScale); } @@ -370,6 +334,7 @@ namespace Obi { if (blueprint.positions != null) { + activeParticle = Mathf.Min(activeParticle, blueprint.positions.Length - 1); Array.Resize(ref selectionStatus, blueprint.positions.Length); Array.Resize(ref visible, blueprint.positions.Length); Array.Resize(ref tint, blueprint.positions.Length); @@ -413,7 +378,9 @@ namespace Obi public void Refresh() { - currentProperty.RecalculateMinMax(); + // currentProperty might be null after reloading editor during + // asset saving. + currentProperty?.RecalculateMinMax(); // refresh render modes: for (int i = 0; i < renderModes.Count; ++i) @@ -425,7 +392,7 @@ namespace Obi SceneView.RepaintAll(); } - public virtual void UpdateParticleVisibility() + public virtual void UpdateParticleVisibility(Camera cam) { for (int i = 0; i < blueprint.positions.Length; i++) @@ -436,7 +403,7 @@ namespace Obi if (Camera.current != null) { - Vector3 camToParticle = Camera.current.transform.position - blueprint.positions[i]; + Vector3 camToParticle = cam.transform.position - blueprint.positions[i]; sqrDistanceToCamera[i] = camToParticle.sqrMagnitude; } } diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs new file mode 100644 index 000000000..561ee8976 --- /dev/null +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs @@ -0,0 +1,72 @@ +using System; +using System.IO; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; + +namespace Obi +{ + [Serializable] + class ObiActorBlueprintEditorStage : PreviewSceneStage + { + ObiActorBlueprintEditor m_BlueprintEditor; + + string m_AssetPath; + public override string assetPath { get { return m_AssetPath; } } + + internal static ObiActorBlueprintEditorStage CreateStage(string assetPath, ObiActorBlueprintEditor avatarEditor) + { + ObiActorBlueprintEditorStage stage = CreateInstance(); + stage.Init(assetPath, avatarEditor); + return stage; + } + + private void Init(string modelAssetPath, ObiActorBlueprintEditor avatarEditor) + { + m_AssetPath = modelAssetPath; + m_BlueprintEditor = avatarEditor; + } + + protected override bool OnOpenStage() + { + base.OnOpenStage(); + + if (!File.Exists(assetPath)) + { + Debug.LogError("ActivateStage called on BlueprintStage with an invalid path: Blueprint file not found " + assetPath); + return false; + } + + return true; + } + + protected override void OnCloseStage() + { + m_BlueprintEditor.CleanupEditor(); + + base.OnCloseStage(); + } + + protected override void OnFirstTimeOpenStageInSceneView(SceneView sceneView) + { + // Frame in scene view + sceneView.Frame(m_BlueprintEditor.blueprint.bounds); + + // Setup Scene view state + sceneView.sceneViewState.showFlares = false; + sceneView.sceneViewState.alwaysRefresh = false; + sceneView.sceneViewState.showFog = false; + sceneView.sceneViewState.showSkybox = false; + sceneView.sceneViewState.showImageEffects = false; + sceneView.sceneViewState.showParticleSystems = false; + sceneView.sceneLighting = true; + } + + protected override GUIContent CreateHeaderContent() + { + return new GUIContent( + "Blueprint Editor", + Resources.Load("Icons/ObiActorBlueprint Icon")); + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BuildSimplexAabbs.cs.meta b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta similarity index 83% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BuildSimplexAabbs.cs.meta rename to Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta index d0ff571de..91b16abee 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BuildSimplexAabbs.cs.meta +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7834dd4a6de2346b5b36154d6aaa531a +guid: 4c8d9d8042d49436c89c515b001088ac MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs index 2bedb1c7a..98630677a 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs @@ -18,6 +18,7 @@ namespace Obi } protected Mesh visualizationMesh; + protected Mesh visualizationWireMesh; public ParticleCulling particleCulling = ParticleCulling.Back; protected Material gradientMaterial; @@ -75,46 +76,50 @@ namespace Obi public abstract int VertexToParticle(int vertexIndex); - public override void UpdateParticleVisibility() + public override void UpdateParticleVisibility(Camera cam) { - if (sourceMesh != null && Camera.current != null) + if (cam != null) { - Vector3[] meshNormals = sourceMesh.normals; - for (int i = 0; i < sourceMesh.vertexCount; i++) + for (int i = 0; i < blueprint.positions.Length; i++) { - int particle = VertexToParticle(i); - - if (particle >= 0 && particle < blueprint.positions.Length) + if (blueprint.IsParticleActive(i)) { - Vector3 camToParticle = Camera.current.transform.position - blueprint.positions[particle]; + Vector3 camToParticle = cam.transform.position - blueprint.positions[i]; + sqrDistanceToCamera[i] = camToParticle.sqrMagnitude; - sqrDistanceToCamera[particle] = camToParticle.sqrMagnitude; + Vector3 normal; switch (particleCulling) { case ParticleCulling.Off: - visible[particle] = true; + visible[i] = true; break; case ParticleCulling.Back: - visible[particle] = Vector3.Dot(meshNormals[i], camToParticle) > 0; + normal = blueprint.restOrientations[i] * Vector3.forward; + visible[i] = Vector3.Dot(normal, camToParticle) > 0; break; case ParticleCulling.Front: - visible[particle] = Vector3.Dot(meshNormals[i], camToParticle) <= 0; + normal = blueprint.restOrientations[i] * Vector3.forward; + visible[i] = Vector3.Dot(normal, camToParticle) <= 0; break; } } - } if ((renderModeFlags & 1) != 0) Refresh(); } - } public void DrawGradientMesh(float[] vertexWeights = null, float[] wireframeWeights = null) { + // Due to this Unity bug: https://issuetracker.unity3d.com/issues/drawmeshnow-is-not-drawing-mesh-immediately-dx12 + // we need to create two meshes insteaf of one :( + if (sourceMesh == null) + return; + visualizationMesh = GameObject.Instantiate(sourceMesh); + visualizationWireMesh = GameObject.Instantiate(sourceMesh); if (gradientMaterial.SetPass(0)) { @@ -157,15 +162,16 @@ namespace Obi colors[i] = Color.gray; } - visualizationMesh.colors = colors; + visualizationWireMesh.colors = colors; GL.wireframe = true; - Graphics.DrawMeshNow(visualizationMesh, matrix); + Graphics.DrawMeshNow(visualizationWireMesh, matrix); GL.wireframe = false; } } GameObject.DestroyImmediate(visualizationMesh); + GameObject.DestroyImmediate(visualizationWireMesh); } @@ -223,7 +229,8 @@ namespace Obi RenderTexture.active = tempRT; GL.PushMatrix(); - GL.LoadProjectionMatrix(Matrix4x4.Ortho(0, 1, 0, 1, -1, 1)); + + var proj = Matrix4x4.Ortho(0, 1, 0, 1, -1, 1); if (Camera.current != null) proj = proj * Camera.current.worldToCameraMatrix.inverse; GL.LoadProjectionMatrix(proj); Color[] colors = new Color[sourceMesh.vertexCount]; for (int i = 0; i < colors.Length; i++) diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs index 37cc9734a..b3af4d4a8 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs @@ -32,7 +32,7 @@ namespace Obi GameObject.DestroyImmediate(particlesMesh); } - public static void DrawParticles(Camera cam, ObiActorBlueprint blueprint, int activeParticle, bool[] visible, Color[] baseColor, int[] sortedIndices, float radiusScale = 1) + public static void DrawParticles(Camera cam, ObiActorBlueprint blueprint, bool[] visible, Color[] baseColor, int[] sortedIndices, float radiusScale = 1) { CreateParticlesMesh(); CreateParticleMaterials(); diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs index dfa50af4c..83d73b9fd 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs @@ -22,6 +22,7 @@ namespace Obi public override void Set(int index, Color value) { editor.blueprint.colors[index] = value; + editor.blueprint.edited = true; } public override bool Masked(int index) { diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs index 6441902ee..acd53eef4 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs @@ -22,6 +22,7 @@ namespace Obi public override void Set(int index, int value) { editor.blueprint.filters[index] = ObiUtils.MakeFilter(ObiUtils.GetMaskFromFilter(editor.blueprint.filters[index]), value); + editor.blueprint.edited = true; } public override bool Masked(int index) { diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs index 42dcc76f4..6c2d57b57 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs @@ -22,6 +22,7 @@ public override void Set(int index, int value) { editor.blueprint.filters[index] = ObiUtils.MakeFilter(value,ObiUtils.GetCategoryFromFilter(editor.blueprint.filters[index])); + editor.blueprint.edited = true; } public override bool Masked(int index) { diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs index f45dcc2eb..32b0e3dd6 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs @@ -23,6 +23,7 @@ namespace Obi public override void Set(int index, float value) { editor.blueprint.invMasses[index] = ObiUtils.MassToInvMass(value); + editor.blueprint.edited = true; } public override bool Masked(int index) { diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs index 2c41466bb..21f8d384e 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs @@ -27,6 +27,7 @@ namespace Obi value = Mathf.Max(0.0000001f, value); float ratio = value / Get(index); editor.blueprint.principalRadii[index] = editor.blueprint.principalRadii[index] * ratio; + editor.blueprint.edited = true; } public override bool Masked(int index) { diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs index 634c56b95..2f3473b9d 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs @@ -24,10 +24,10 @@ namespace Obi { ObiPaintBrushEditorTool paintTool = (ObiPaintBrushEditorTool)meshBasedEditor.currentTool; - float[] weights = new float[editor.selectionStatus.Length]; + float[] weights = new float[ObiActorBlueprintEditor.selectionStatus.Length]; for (int i = 0; i < weights.Length; i++) { - if (paintTool.selectionMask && !editor.selectionStatus[i]) + if (paintTool.selectionMask && !ObiActorBlueprintEditor.selectionStatus[i]) weights[i] = 0; else weights[i] = 1; diff --git a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs index 4465ebfe3..47135af02 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs @@ -13,11 +13,13 @@ namespace Obi private Shader shader; private Material material; private ParticleImpostorRendering impostorDrawer; + private MaterialPropertyBlock mpb; public ObiBlueprintRenderModeParticles(ObiActorBlueprintEditor editor) :base(editor) { impostorDrawer = new ParticleImpostorRendering(); impostorDrawer.UpdateMeshes(editor.blueprint); + mpb = new MaterialPropertyBlock(); } void CreateMaterialIfNeeded() @@ -43,8 +45,10 @@ namespace Obi public override void DrawWithCamera(Camera camera) { CreateMaterialIfNeeded(); + mpb.SetFloat("_RadiusScale", 1); + mpb.SetColor("_ParticleColor", Color.white); foreach (Mesh mesh in impostorDrawer.Meshes) - Graphics.DrawMesh(mesh, Matrix4x4.identity, material, 0, camera); + Graphics.DrawMesh(mesh, Matrix4x4.identity, material, 0, camera, 0, mpb); } public override void Refresh() diff --git a/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiColliderEditor.cs b/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiColliderEditor.cs index 310bbddb8..548574a92 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiColliderEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiColliderEditor.cs @@ -1,11 +1,12 @@ using UnityEditor; using UnityEngine; -namespace Obi{ - - [CustomEditor(typeof(ObiColliderBase), true), CanEditMultipleObjects] - public class ObiColliderEditor : Editor - { +namespace Obi +{ + + [CustomEditor(typeof(ObiColliderBase), true), CanEditMultipleObjects] + public class ObiColliderEditor : Editor + { ObiColliderBase collider; SerializedProperty collisionFilter; @@ -16,11 +17,42 @@ namespace Obi{ collisionFilter = serializedObject.FindProperty("filter"); } + protected void NonReadableMeshWarning(Mesh mesh) + { + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + Texture2D icon = EditorGUIUtility.Load("icons/console.erroricon.png") as Texture2D; + EditorGUILayout.LabelField(new GUIContent("The input mesh is not readable. Read/Write must be enabled in the mesh import settings.", icon), EditorStyles.wordWrappedMiniLabel); + + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Fix now", GUILayout.MaxWidth(100), GUILayout.MinHeight(32))) + { + string assetPath = AssetDatabase.GetAssetPath(mesh); + ModelImporter modelImporter = AssetImporter.GetAtPath(assetPath) as ModelImporter; + if (modelImporter != null) + { + modelImporter.isReadable = true; + } + modelImporter.SaveAndReimport(); + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + } + public override void OnInspectorGUI() { serializedObject.UpdateIfRequiredOrScript(); + foreach (ObiColliderBase t in targets) + { + ObiMeshShapeTracker meshTracker = t.Tracker as ObiMeshShapeTracker; + if (meshTracker != null) + { + if (meshTracker.targetMesh != null && !meshTracker.targetMesh.isReadable) + NonReadableMeshWarning(meshTracker.targetMesh); + } + } var rect = EditorGUILayout.GetControlRect(); var label = EditorGUI.BeginProperty(rect, new GUIContent("Collision category"), collisionFilter); @@ -56,8 +88,13 @@ namespace Obi{ } EditorGUI.EndProperty(); + DrawPropertiesExcluding(serializedObject, "m_Script", "CollisionMaterial", "filter", "Thickness", "Inverted"); - DrawPropertiesExcluding(serializedObject, "m_Script", "CollisionMaterial", "filter", "Thickness"); + foreach (ObiColliderBase t in targets) + { + if (!t.gameObject.isStatic) + t.ForceUpdate(); + } // Apply changes to the serializedProperty if (GUI.changed) diff --git a/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs b/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs index 2e205425e..1ca4989cb 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs @@ -68,7 +68,7 @@ namespace Obi{ EditorUtility.SetDirty(target); CoroutineJob job = new CoroutineJob(); routine = job.Start( distanceField.Generate()); - EditorCoroutine.ShowCoroutineProgressBar("Generating distance field",ref routine); + EditorCoroutine.ShowCoroutineProgressBar("Generating distance field", routine); UpdatePreview(); EditorGUIUtility.ExitGUI(); } diff --git a/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs b/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs new file mode 100644 index 000000000..884ac4c0e --- /dev/null +++ b/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs @@ -0,0 +1,30 @@ +using UnityEditor; +using UnityEngine; + +namespace Obi +{ + + /** + * Custom inspector for ObiForceZone component. + */ + + [CustomEditor(typeof(ObiForceZone)), CanEditMultipleObjects] + public class ObiForceZoneEditor : Editor + { + + public override void OnInspectorGUI() + { + + serializedObject.UpdateIfRequiredOrScript(); + + DrawPropertiesExcluding(serializedObject, "m_Script"); + + // Apply changes to the serializedProperty + if (GUI.changed) + serializedObject.ApplyModifiedProperties(); + } + + } + +} + diff --git a/Assets/ThirdParty/Obi/Editor/Common/ObiOniInitialize.cs.meta b/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta similarity index 83% rename from Assets/ThirdParty/Obi/Editor/Common/ObiOniInitialize.cs.meta rename to Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta index 6551e37e3..99479b1eb 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/ObiOniInitialize.cs.meta +++ b/Assets/ThirdParty/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e97d151316d5f4d16ac5ae6e68acccb6 +guid: 724435a7a84154b27bb0c8ea49b611df MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ThirdParty/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs b/Assets/ThirdParty/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs index 65fb7e83f..579843b35 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs @@ -24,10 +24,20 @@ namespace Obi GUI.Box(position,"",ObiEditorUtils.GetToggleablePropertyGroupStyle()); GUI.enabled = true; - // Draw main constraint toggle: - enabled.boolValue = EditorGUI.ToggleLeft(contRect, label.text, enabled.boolValue, EditorStyles.boldLabel); + // Draw main constraint toggle: + EditorGUI.BeginProperty(position, label, enabled); + EditorGUI.BeginChangeCheck(); + var newEnabled = EditorGUI.ToggleLeft(contRect, label.text, enabled.boolValue, EditorStyles.boldLabel); + // Only assign the value back if it was actually changed by the user. + // Otherwise a single value will be assigned to all objects when multi-object editing, + // even when the user didn't touch the control. + if (EditorGUI.EndChangeCheck()) + { + enabled.boolValue = newEnabled; + } + EditorGUI.EndProperty(); - if (enabled.boolValue){ + if (enabled.boolValue){ Rect evalRect = new Rect(position.x+padding, position.y+propHeight+padding, position.width-padding*2, propHeight); Rect iterRect = new Rect(position.x+padding, position.y+propHeight*2+padding, position.width-padding*2, propHeight); diff --git a/Assets/ThirdParty/Obi/Editor/Common/ObiOniInitialize.cs b/Assets/ThirdParty/Obi/Editor/Common/ObiOniInitialize.cs deleted file mode 100644 index 49c1e0fb0..000000000 --- a/Assets/ThirdParty/Obi/Editor/Common/ObiOniInitialize.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEditor; - -namespace Obi -{ - [InitializeOnLoad] - public class ObiOniInitialize - { - private static BuildTargetGroup[] supportedBuildTargetGroups = - { - BuildTargetGroup.Standalone, - BuildTargetGroup.Android, - BuildTargetGroup.iOS - }; - - static ObiOniInitialize() - { - - foreach(var group in supportedBuildTargetGroups) - { - var defines = GetDefinesList(group); - if (!defines.Contains("OBI_ONI_SUPPORTED")) - { - defines.Add("OBI_ONI_SUPPORTED"); - PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", defines.ToArray())); - } - } - } - - private static List GetDefinesList(BuildTargetGroup group) - { - return new List(PlayerSettings.GetScriptingDefineSymbolsForGroup(group).Split(';')); - } - } -} diff --git a/Assets/ThirdParty/Obi/Editor/Common/ObiSettingsProvider.cs b/Assets/ThirdParty/Obi/Editor/Common/ObiSettingsProvider.cs index 168c3046e..a03cb52b5 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/ObiSettingsProvider.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/ObiSettingsProvider.cs @@ -15,7 +15,9 @@ namespace Obi public static GUIContent brushWireframe = new GUIContent("Brush wireframe"); public static GUIContent particle = new GUIContent("Particle"); public static GUIContent selectedParticle = new GUIContent("Selected particle"); + public static GUIContent activeParticle = new GUIContent("Active particle"); public static GUIContent propertyGradient = new GUIContent("Property gradient"); + public static GUIContent particlePicking = new GUIContent("Particle GO picking"); } const string m_ObiEditorSettingsPath = "Assets/ObiEditorSettings.asset"; @@ -52,7 +54,11 @@ namespace Obi EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_BrushWireframe"),Styles.brushWireframe); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_Particle"),Styles.particle); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_SelectedParticle"),Styles.selectedParticle); + EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_ActiveParticle"), Styles.activeParticle); EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_PropertyGradient"), Styles.propertyGradient); + + EditorGUILayout.LabelField("Scene view", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_ParticlePicking"), Styles.particlePicking); } // Register the SettingsProvider diff --git a/Assets/ThirdParty/Obi/Editor/Common/Solver/ObiSolverEditor.cs b/Assets/ThirdParty/Obi/Editor/Common/Solver/ObiSolverEditor.cs index 1c9e190b7..bf3eebebb 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Solver/ObiSolverEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Solver/ObiSolverEditor.cs @@ -1,5 +1,6 @@ using UnityEditor; using UnityEngine; +using UnityEditor.IMGUI.Controls; using UnityEditorInternal; using System; using System.Collections; @@ -40,13 +41,34 @@ namespace Obi ObiSolver solver; SerializedProperty backend; + SerializedProperty substeps; + SerializedProperty maxStepsPerFrame; + SerializedProperty synchronization; SerializedProperty simulateWhenInvisible; SerializedProperty parameters; SerializedProperty gravity; SerializedProperty gravitySpace; + SerializedProperty ambientWind; + SerializedProperty windSpace; + SerializedProperty useLimits; + SerializedProperty boundaryLimits; + SerializedProperty killOffLimitsParticles; SerializedProperty worldLinearInertiaScale; SerializedProperty worldAngularInertiaScale; + SerializedProperty foamSubsteps; + SerializedProperty foamMinNeighbors; + SerializedProperty foamCollisions; + SerializedProperty foamRadiusScale; + SerializedProperty foamVolumeDensity; + SerializedProperty foamAmbientDensity; + SerializedProperty foamScatterColor; + SerializedProperty foamAmbientColor; + SerializedProperty maxFoamVelocityStretch; + SerializedProperty foamFade; + SerializedProperty foamAccelAgingRange; + SerializedProperty foamAccelAging; + SerializedProperty distanceConstraintParameters; SerializedProperty bendingConstraintParameters; SerializedProperty particleCollisionConstraintParameters; @@ -58,37 +80,72 @@ namespace Obi SerializedProperty shapeMatchingConstraintParameters; SerializedProperty tetherConstraintParameters; SerializedProperty pinConstraintParameters; + SerializedProperty pinholeConstraintParameters; SerializedProperty stitchConstraintParameters; SerializedProperty densityConstraintParameters; SerializedProperty stretchShearConstraintParameters; SerializedProperty bendTwistConstraintParameters; SerializedProperty chainConstraintParameters; + SerializedProperty maxSurfaceChunks; + SerializedProperty maxQueryResults; + SerializedProperty maxFoamParticles; + SerializedProperty maxParticleNeighbors; + SerializedProperty maxParticleContacts; + BooleanPreference solverFoldout; BooleanPreference simulationFoldout; + BooleanPreference advectionFoldout; BooleanPreference collisionsFoldout; BooleanPreference constraintsFoldout; + BooleanPreference memoryFoldout; GUIContent constraintLabelContent; + BoxBoundsHandle limitsBoxHandle; + public void OnEnable() { solver = (ObiSolver)target; constraintLabelContent = new GUIContent(); + limitsBoxHandle = new BoxBoundsHandle(); solverFoldout = new BooleanPreference($"{target.GetType()}.solverFoldout", true); simulationFoldout = new BooleanPreference($"{target.GetType()}.simulationFoldout", false); + advectionFoldout = new BooleanPreference($"{target.GetType()}.advectionFoldout", false); collisionsFoldout = new BooleanPreference($"{target.GetType()}.collisionsFoldout", false); constraintsFoldout = new BooleanPreference($"{target.GetType()}.constraintsFoldout", false); + memoryFoldout = new BooleanPreference($"{target.GetType()}.memoryFoldout", false); backend = serializedObject.FindProperty("m_Backend"); + substeps = serializedObject.FindProperty("substeps"); + maxStepsPerFrame = serializedObject.FindProperty("maxStepsPerFrame"); + synchronization = serializedObject.FindProperty("synchronization"); simulateWhenInvisible = serializedObject.FindProperty("simulateWhenInvisible"); parameters = serializedObject.FindProperty("parameters"); gravity = serializedObject.FindProperty("gravity"); gravitySpace = serializedObject.FindProperty("gravitySpace"); + ambientWind = serializedObject.FindProperty("ambientWind"); + windSpace = serializedObject.FindProperty("windSpace"); + useLimits = serializedObject.FindProperty("useLimits"); + boundaryLimits = serializedObject.FindProperty("boundaryLimits"); + killOffLimitsParticles = serializedObject.FindProperty("killOffLimitsParticles"); worldLinearInertiaScale = serializedObject.FindProperty("worldLinearInertiaScale"); worldAngularInertiaScale = serializedObject.FindProperty("worldAngularInertiaScale"); + foamSubsteps = serializedObject.FindProperty("foamSubsteps"); + foamMinNeighbors = serializedObject.FindProperty("foamMinNeighbors"); + foamCollisions = serializedObject.FindProperty("foamCollisions"); + foamRadiusScale = serializedObject.FindProperty("foamRadiusScale"); + foamVolumeDensity = serializedObject.FindProperty("foamVolumeDensity"); + foamAmbientDensity = serializedObject.FindProperty("foamAmbientDensity"); + foamScatterColor = serializedObject.FindProperty("foamScatterColor"); + foamAmbientColor = serializedObject.FindProperty("foamAmbientColor"); + maxFoamVelocityStretch = serializedObject.FindProperty("maxFoamVelocityStretch"); + foamFade = serializedObject.FindProperty("foamFade"); + foamAccelAgingRange = serializedObject.FindProperty("foamAccelAgingRange"); + foamAccelAging = serializedObject.FindProperty("foamAccelAging"); + distanceConstraintParameters = serializedObject.FindProperty("distanceConstraintParameters"); bendingConstraintParameters = serializedObject.FindProperty("bendingConstraintParameters"); particleCollisionConstraintParameters = serializedObject.FindProperty("particleCollisionConstraintParameters"); @@ -100,19 +157,45 @@ namespace Obi shapeMatchingConstraintParameters = serializedObject.FindProperty("shapeMatchingConstraintParameters"); tetherConstraintParameters = serializedObject.FindProperty("tetherConstraintParameters"); pinConstraintParameters = serializedObject.FindProperty("pinConstraintParameters"); + pinholeConstraintParameters = serializedObject.FindProperty("pinholeConstraintParameters"); stitchConstraintParameters = serializedObject.FindProperty("stitchConstraintParameters"); densityConstraintParameters = serializedObject.FindProperty("densityConstraintParameters"); stretchShearConstraintParameters = serializedObject.FindProperty("stretchShearConstraintParameters"); bendTwistConstraintParameters = serializedObject.FindProperty("bendTwistConstraintParameters"); chainConstraintParameters = serializedObject.FindProperty("chainConstraintParameters"); + + maxSurfaceChunks = serializedObject.FindProperty("m_MaxSurfaceChunks"); + maxQueryResults = serializedObject.FindProperty("maxQueryResults"); + maxFoamParticles = serializedObject.FindProperty("maxFoamParticles"); + maxParticleNeighbors = serializedObject.FindProperty("maxParticleNeighbors"); + maxParticleContacts = serializedObject.FindProperty("maxParticleContacts"); + } + + public void OnSceneGUI() + { + if (solver.useLimits) + { + using (new Handles.DrawingScope(Color.red, solver.transform.localToWorldMatrix)) + { + limitsBoxHandle.center = solver.boundaryLimits.center; + limitsBoxHandle.size = solver.boundaryLimits.size; + + EditorGUI.BeginChangeCheck(); + limitsBoxHandle.DrawHandle(); + if (EditorGUI.EndChangeCheck()) + { + solver.boundaryLimits = new Bounds(limitsBoxHandle.center, limitsBoxHandle.size); + EditorUtility.SetDirty(target); + } + } + } } public override void OnInspectorGUI() { - serializedObject.UpdateIfRequiredOrScript(); - EditorGUILayout.HelpBox("Particles:" + solver.allocParticleCount +"\n"+ - "Simplices:" + solver.simplexCounts.simplexCount+"\n" + + EditorGUILayout.HelpBox("Particles:" + solver.allocParticleCount + "\n" + + "Simplices:" + solver.simplexCounts.simplexCount + "\n" + "Contacts:" + solver.contactCount + "\n" + "Simplex contacts:" + solver.particleContactCount, MessageType.None); @@ -123,13 +206,14 @@ namespace Obi EditorGUILayout.PropertyField(backend); #if !(OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) - if (backend.enumValueIndex == (int)ObiSolver.BackendType.Burst) - EditorGUILayout.HelpBox("The Burst backend depends on the following packages: Mathematics, Collections, Jobs and Burst. The default backend (Oni) will be used instead, if possible.", MessageType.Warning); -#endif -#if !(OBI_ONI_SUPPORTED) - if (backend.enumValueIndex == (int)ObiSolver.BackendType.Oni) - EditorGUILayout.HelpBox("The Oni backend is not compatible with the target platform. Please switch to a compatible platform, or use the Burst backend instead.", MessageType.Warning); + if (backend.enumValueIndex == (int)ObiSolver.BackendType.Burst) + EditorGUILayout.HelpBox("The Burst backend depends on the following packages: Mathematics, Collections, Jobs and Burst. Please install the required dependencies. The solver will try to fall back to the Compute backend instead.", MessageType.Warning); #endif + if (!SystemInfo.supportsComputeShaders) + { + EditorGUILayout.HelpBox("This platform doesn't support compute shaders. Please switch to the Burst backend.", MessageType.Error); + } + if (EditorGUI.EndChangeCheck()) { @@ -138,9 +222,11 @@ namespace Obi (t as ObiSolver).UpdateBackend(); } - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("mode")); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("interpolation")); + EditorGUILayout.PropertyField(synchronization); + EditorGUILayout.PropertyField(substeps); + EditorGUILayout.PropertyField(maxStepsPerFrame); } EditorGUILayout.EndFoldoutHeaderGroup(); @@ -149,24 +235,57 @@ namespace Obi { EditorGUILayout.PropertyField(gravitySpace); EditorGUILayout.PropertyField(gravity); + EditorGUILayout.PropertyField(windSpace); + EditorGUILayout.PropertyField(ambientWind); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("sleepThreshold")); + EditorGUILayout.PropertyField(parameters.FindPropertyRelative("maxVelocity")); + EditorGUILayout.PropertyField(parameters.FindPropertyRelative("maxAngularVelocity")); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("damping")); EditorGUILayout.PropertyField(worldLinearInertiaScale); EditorGUILayout.PropertyField(worldAngularInertiaScale); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("maxAnisotropy")); EditorGUILayout.PropertyField(simulateWhenInvisible); + EditorGUILayout.PropertyField(useLimits); + if (useLimits.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(killOffLimitsParticles); + EditorGUILayout.PropertyField(boundaryLimits); + EditorGUI.indentLevel--; + } + } + EditorGUILayout.EndFoldoutHeaderGroup(); + + advectionFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(advectionFoldout, "Foam settings"); + if (advectionFoldout) + { + EditorGUILayout.PropertyField(foamSubsteps); + EditorGUILayout.PropertyField(foamMinNeighbors); + EditorGUILayout.PropertyField(foamCollisions, new GUIContent("Foam Collisions (Compute only)")); + EditorGUILayout.PropertyField(foamRadiusScale); + EditorGUILayout.PropertyField(foamVolumeDensity); + EditorGUILayout.PropertyField(foamAmbientDensity); + EditorGUILayout.PropertyField(foamScatterColor); + EditorGUILayout.PropertyField(foamAmbientColor); + EditorGUILayout.PropertyField(maxFoamVelocityStretch); + EditorGUILayout.PropertyField(parameters.FindPropertyRelative("foamGravityScale")); + EditorGUILayout.PropertyField(foamFade); + EditorGUILayout.PropertyField(foamAccelAgingRange); + EditorGUILayout.PropertyField(foamAccelAging); } EditorGUILayout.EndFoldoutHeaderGroup(); collisionsFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(collisionsFoldout, "Collision settings"); if (collisionsFoldout) { - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("continuousCollisionDetection")); + EditorGUILayout.PropertyField(parameters.FindPropertyRelative("colliderCCD")); + EditorGUILayout.PropertyField(parameters.FindPropertyRelative("particleCCD")); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("collisionMargin")); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("maxDepenetration")); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("shockPropagation")); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("surfaceCollisionIterations")); EditorGUILayout.PropertyField(parameters.FindPropertyRelative("surfaceCollisionTolerance")); + EditorGUILayout.PropertyField(parameters.FindPropertyRelative("diffusionMask")); } EditorGUILayout.EndFoldoutHeaderGroup(); @@ -206,6 +325,9 @@ namespace Obi constraintLabelContent.text = "Pin"; EditorGUILayout.PropertyField(pinConstraintParameters, constraintLabelContent); + constraintLabelContent.text = "Pinhole"; + EditorGUILayout.PropertyField(pinholeConstraintParameters, constraintLabelContent); + constraintLabelContent.text = "Stitch"; EditorGUILayout.PropertyField(stitchConstraintParameters, constraintLabelContent); @@ -223,13 +345,46 @@ namespace Obi } EditorGUILayout.EndFoldoutHeaderGroup(); + memoryFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(memoryFoldout, "Memory budget"); + if (memoryFoldout) + { + EditorGUILayout.PropertyField(maxQueryResults); + EditorGUILayout.PropertyField(maxFoamParticles); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(maxSurfaceChunks); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + foreach (var t in targets) + (t as ObiSolver).dirtyRendering |= (int)Oni.RenderingSystemType.Fluid; + } + + EditorGUILayout.PropertyField(maxParticleNeighbors); + EditorGUILayout.PropertyField(maxParticleContacts); + + uint usedChunks = solver.usedSurfaceChunks; + float usagePercentage = usedChunks / (float)maxSurfaceChunks.intValue; + uint foamParticles = solver.initialized ? solver.implementation.activeFoamParticleCount : 0; + + // memory consumption per chunk: + // (8 + 12 + 64*4 + 64*6*4 + 64*16) = 2836 bytes + EditorGUILayout.HelpBox("Active foam particles: " + foamParticles + "/" + maxFoamParticles.intValue + "\n"+ + "Surface memory (Mb): " + string.Format("{0:N2}", maxSurfaceChunks.intValue * 0.002836f)+ "\n"+ + "Used surface chunks: "+ usedChunks + "/"+ maxSurfaceChunks.intValue + ", hashtable usage "+ string.Format("{0:N1}", usagePercentage * 100) + "%", MessageType.None); + + if (usagePercentage >= 0.5f) + { + EditorGUILayout.HelpBox("Hashtable usage should be below 50% for best performance. Increase max surface chunks if % is too high.", MessageType.Warning); + } + } + EditorGUILayout.EndFoldoutHeaderGroup(); + // Apply changes to the serializedProperty if (GUI.changed) { - serializedObject.ApplyModifiedProperties(); solver.PushSolverParameters(); - } } @@ -237,15 +392,12 @@ namespace Obi [DrawGizmo(GizmoType.InSelectionHierarchy | GizmoType.Selected)] static void DrawGizmoForSolver(ObiSolver solver, GizmoType gizmoType) { - if ((gizmoType & GizmoType.InSelectionHierarchy) != 0) { - Gizmos.color = new Color(1, 1, 1, 0.5f); - Bounds bounds = solver.Bounds; + var bounds = solver.bounds; Gizmos.DrawWireCube(bounds.center, bounds.size); } - } } diff --git a/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiEditorUtils.cs b/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiEditorUtils.cs index c3e8d2b15..be05d5a30 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiEditorUtils.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiEditorUtils.cs @@ -4,6 +4,7 @@ using UnityEngine.SceneManagement; using UnityEditor; using UnityEditor.SceneManagement; using System.IO; +using UnityEngine.Rendering; namespace Obi{ @@ -127,17 +128,7 @@ namespace Obi{ public static GameObject CreateNewSolver() { // Root for the actors. - var root = new GameObject("Obi Solver"); - ObiSolver solver = root.AddComponent(); - - // Try to find a fixed updater in the scene (though other kinds of updaters can exist, updating in FixedUpdate is the preferred option). - ObiFixedUpdater updater = StageUtility.GetCurrentStageHandle().FindComponentOfType(); - // If we could not find an fixed updater in the scene, add one to the solver object. - if (updater == null) - updater = root.AddComponent(); - - // Add the solver to the updater: - updater.solvers.Add(solver); + var root = new GameObject("Obi Solver", typeof(ObiSolver)); // Works for all stages. StageUtility.PlaceGameObjectInCurrentStage(root); @@ -230,7 +221,34 @@ namespace Obi{ // Return the currently selected item's index return selected; } - } + + public static void DrawArrowHandle(Vector3 posA, Vector3 posB, float headAngle = 30, float headLength = 0.18f) { + Handles.DrawLine(posA, posB); + + var look = Quaternion.LookRotation(posA - posB, Camera.current.transform.forward); + var one = look * Quaternion.Euler(0, 180 + headAngle, 0) * new Vector3(0, 0, 1); + var two = look * Quaternion.Euler(0, 180 - headAngle, 0) * new Vector3(0, 0, 1); + + var sizeA = HandleUtility.GetHandleSize(posA) * headLength; + Handles.DrawLine(posA, posA + one * sizeA); + Handles.DrawLine(posA, posA + two * sizeA); + + var sizeB = HandleUtility.GetHandleSize(posB) * headLength; + Handles.DrawLine(posB, posB - one * sizeB); + Handles.DrawLine(posB, posB - two * sizeB); } + + public static Material GetDefaultMaterial() + { + if (GraphicsSettings.defaultRenderPipeline != null) + { + return GraphicsSettings.defaultRenderPipeline.defaultMaterial; + } + else + { + return AssetDatabase.GetBuiltinExtraResource("Default-Diffuse.mat"); + } + } + } } diff --git a/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs b/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs new file mode 100644 index 000000000..42d4e21df --- /dev/null +++ b/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs @@ -0,0 +1,24 @@ +using UnityEditor; +using UnityEngine; + +namespace Obi +{ + + [CustomEditor(typeof(ObiFoamGenerator)), CanEditMultipleObjects] + public class ObiFoamGeneratorEditor : Editor + { + public override void OnInspectorGUI() + { + serializedObject.UpdateIfRequiredOrScript(); + + DrawPropertiesExcluding(serializedObject, "m_Script"); + + // Apply changes to the serializedProperty + if (GUI.changed) + serializedObject.ApplyModifiedProperties(); + } + + } + +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateInertiaTensorsJob.cs.meta b/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta similarity index 83% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateInertiaTensorsJob.cs.meta rename to Assets/ThirdParty/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta index 87288db8c..baab18072 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateInertiaTensorsJob.cs.meta +++ b/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fac27eeae85e84131bebdf89ad1d6802 +guid: b9656e2c54d9e4c478c74ca6d97428f8 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs b/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs index 5b34b8eca..b9f0bf988 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs @@ -15,6 +15,7 @@ namespace Obi SerializedProperty targetTransform; SerializedProperty particleGroup; SerializedProperty attachmentType; + SerializedProperty projectPosition; SerializedProperty constrainOrientation; SerializedProperty compliance; SerializedProperty breakThreshold; @@ -28,9 +29,10 @@ namespace Obi targetTransform = serializedObject.FindProperty("m_Target"); particleGroup = serializedObject.FindProperty("m_ParticleGroup"); attachmentType = serializedObject.FindProperty("m_AttachmentType"); + projectPosition = serializedObject.FindProperty("m_Projection"); constrainOrientation = serializedObject.FindProperty("m_ConstrainOrientation"); compliance = serializedObject.FindProperty("m_Compliance"); - breakThreshold = serializedObject.FindProperty("m_BreakThreshold"); + breakThreshold = serializedObject.FindProperty("breakThreshold"); } public override void OnInspectorGUI() @@ -55,7 +57,16 @@ namespace Obi } } - EditorGUILayout.PropertyField(targetTransform, new GUIContent("Target")); + EditorGUI.BeginChangeCheck(); + Transform trget = EditorGUILayout.ObjectField("Target", attachment.target, typeof(Transform), true) as Transform; + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(attachment, "Set target"); + attachment.target = trget; + PrefabUtility.RecordPrefabInstancePropertyModifications(attachment); + } + + var blueprint = attachment.actor.sourceBlueprint; if (blueprint != null) @@ -89,6 +100,7 @@ namespace Obi if (attachment.attachmentType == ObiParticleAttachment.AttachmentType.Dynamic) { + EditorGUILayout.PropertyField(projectPosition, new GUIContent("Projection")); EditorGUILayout.PropertyField(compliance, new GUIContent("Compliance")); EditorGUILayout.PropertyField(breakThreshold, new GUIContent("Break threshold")); } diff --git a/Assets/ThirdParty/Obi/Editor/ObiStitcherEditor.cs b/Assets/ThirdParty/Obi/Editor/ObiStitcherEditor.cs index 8e5ebb1e8..0c4b395ba 100644 --- a/Assets/ThirdParty/Obi/Editor/ObiStitcherEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/ObiStitcherEditor.cs @@ -42,6 +42,9 @@ namespace Obi{ if (EditorGUI.EndChangeCheck()){ Undo.RecordObject(stitcher, "Set first actor"); stitcher.Actor1 = actor1; + if (actor1 != null) + sewingToolHandle1 = actor1.transform.position; + PrefabUtility.RecordPrefabInstancePropertyModifications(stitcher); } EditorGUI.BeginChangeCheck(); @@ -49,7 +52,10 @@ namespace Obi{ if (EditorGUI.EndChangeCheck()){ Undo.RecordObject(stitcher, "Set second actor"); stitcher.Actor2 = actor2; - } + if (actor2 != null) + sewingToolHandle2 = actor2.transform.position; + PrefabUtility.RecordPrefabInstancePropertyModifications(stitcher); + } if (stitcher.Actor1 != null && stitcher.Actor2 != null && stitcher.Actor1.solver != stitcher.Actor2.solver){ EditorGUILayout.HelpBox("Both actors must be managed by the same solver.",MessageType.Error); @@ -63,14 +69,13 @@ namespace Obi{ if (editing){ - EditorGUILayout.HelpBox("Remember that when working with the sewing tool, you can use Unity's snap to vertex feature by pressing 'V' in your keyboard.",MessageType.Info); - // Clear all stitches if (GUILayout.Button("Clear all stitches")){ if (EditorUtility.DisplayDialog("Clearing stitches","Are you sure you want to remove all stitches?","Ok","Cancel")){ Undo.RecordObject(stitcher, "Clear all stitches"); stitcher.Clear(); - } + PrefabUtility.RecordPrefabInstancePropertyModifications(stitcher); + } } // Remove selected stitches @@ -93,19 +98,22 @@ namespace Obi{ foreach(int i in removedStitches.OrderByDescending(i => i)){ stitcher.RemoveStitch(i); } - } + PrefabUtility.RecordPrefabInstancePropertyModifications(stitcher); + } } // Add stitch: - if (GUILayout.Button("Add Stitch")){ - Undo.RecordObject(stitcher, "Add stitch"); + if (GUILayout.Button("Add Stitch")) + { + FindClosestParticles(out int particle1, out int particle2); - int particle1 = 0; - int particle2 = 0; - UseSewingTool(ref particle1, ref particle2); - - stitcher.AddStitch(particle1,particle2); - } + if (particle1 >= 0 && particle2 >= 0) + { + Undo.RecordObject(stitcher, "Add stitch"); + stitcher.AddStitch(particle1, particle2); + PrefabUtility.RecordPrefabInstancePropertyModifications(stitcher); + } + } } GUI.enabled = true; @@ -120,16 +128,28 @@ namespace Obi{ } - public void UseSewingTool(ref int particle1, ref int particle2){ + public void FindClosestParticles(out int particle1, out int particle2) + { + particle1 = -1; + particle2 = -1; + float minDistance = float.MaxValue; - float minDistance = float.MaxValue; + if (stitcher.Actor1 == null || stitcher.Actor2 == null) + return; - if (stitcher.Actor1 == stitcher.Actor2){ + var handle1 = HandleUtility.WorldToGUIPointWithDepth(sewingToolHandle1); + var handle2 = HandleUtility.WorldToGUIPointWithDepth(sewingToolHandle2); + + if (stitcher.Actor1 == stitcher.Actor2) + { float minDistance2 = float.MaxValue; - for (int i = 0; i < stitcher.Actor1.particleCount;++i){ + for (int i = 0; i < stitcher.Actor1.activeParticleCount;++i) + { Vector3 pos = stitcher.Actor1.GetParticlePosition(stitcher.Actor1.solverIndices[i]); - float distance1 = (pos - sewingToolHandle1).sqrMagnitude; - float distance2 = (pos - sewingToolHandle2).sqrMagnitude; + pos = HandleUtility.WorldToGUIPointWithDepth(pos); + + float distance1 = (pos - handle1).sqrMagnitude; + float distance2 = (pos - handle2).sqrMagnitude; if (distance1 < minDistance){ minDistance = distance1; particle1 = i; @@ -142,24 +162,28 @@ namespace Obi{ }else{ // find closest particle to each end of the sewing tool: - for (int i = 0; i < stitcher.Actor1.particleCount;++i){ + for (int i = 0; i < stitcher.Actor1.activeParticleCount; ++i) + { Vector3 pos = stitcher.Actor1.GetParticlePosition(stitcher.Actor1.solverIndices[i]); - float distance1 = (pos - sewingToolHandle1).sqrMagnitude; - float distance2 = (pos - sewingToolHandle2).sqrMagnitude; - float min = Mathf.Min(distance1,distance2); - if (min < minDistance){ + pos = HandleUtility.WorldToGUIPointWithDepth(pos); + + float min = (pos - handle1).sqrMagnitude; + if (min < minDistance) + { minDistance = min; particle1 = i; } } minDistance = float.MaxValue; - for (int i = 0; i < stitcher.Actor2.particleCount;++i){ + for (int i = 0; i < stitcher.Actor2.activeParticleCount; ++i) + { Vector3 pos = stitcher.Actor2.GetParticlePosition(stitcher.Actor2.solverIndices[i]); - float distance1 = (pos - sewingToolHandle1).sqrMagnitude; - float distance2 = (pos - sewingToolHandle2).sqrMagnitude; - float min = Mathf.Min(distance1,distance2); - if (min < minDistance){ + pos = HandleUtility.WorldToGUIPointWithDepth(pos); + + float min = (pos - handle2).sqrMagnitude; + if (min < minDistance) + { minDistance = min; particle2 = i; } @@ -167,10 +191,32 @@ namespace Obi{ } } - public void DrawSewingTool(){ - var fmh_171_72_638778487578760721 = Quaternion.identity; sewingToolHandle1 = Handles.FreeMoveHandle(sewingToolHandle1,HandleUtility.GetHandleSize(sewingToolHandle1)*0.05f,new Vector3(.5f,.5f,.5f),Handles.RectangleHandleCap); - var fmh_172_66_638778487578775997 = Quaternion.identity; sewingToolHandle2 = Handles.FreeMoveHandle(sewingToolHandle2,HandleUtility.GetHandleSize(sewingToolHandle2)*0.05f,new Vector3(.5f,.5f,.5f),Handles.RectangleHandleCap); - Handles.DrawDottedLine(sewingToolHandle1,sewingToolHandle2,2); + public void DrawSewingTool() + { + + FindClosestParticles(out int particle1, out int particle2); + + if (particle1 >= 0 && particle2 >= 0) + { + sewingToolHandle1 = stitcher.Actor1.GetParticlePosition(stitcher.Actor1.solverIndices[particle1]); + sewingToolHandle2 = stitcher.Actor2.GetParticlePosition(stitcher.Actor2.solverIndices[particle2]); + + float radius1 = stitcher.Actor1.GetParticleMaxRadius(stitcher.Actor1.solverIndices[particle1]); + float radius2 = stitcher.Actor2.GetParticleMaxRadius(stitcher.Actor2.solverIndices[particle2]); + + Handles.color = Color.white; +#if (UNITY_2022_1_OR_NEWER) + sewingToolHandle1 = Handles.FreeMoveHandle(sewingToolHandle1, radius1 * 2, new Vector3(.5f,.5f,.5f),Handles.SphereHandleCap); + sewingToolHandle2 = Handles.FreeMoveHandle(sewingToolHandle2, radius2 * 2, new Vector3(.5f,.5f,.5f),Handles.SphereHandleCap); +#else + sewingToolHandle1 = Handles.FreeMoveHandle(sewingToolHandle1, Quaternion.identity, radius1 * 2, new Vector3(.5f, .5f, .5f), Handles.SphereHandleCap); + sewingToolHandle2 = Handles.FreeMoveHandle(sewingToolHandle2, Quaternion.identity, radius2 * 2, new Vector3(.5f, .5f, .5f), Handles.SphereHandleCap); +#endif + + Vector3 direction = Vector3.Normalize(sewingToolHandle2 - sewingToolHandle1); + Handles.color = Color.yellow; + ObiEditorUtils.DrawArrowHandle(sewingToolHandle1 + direction*(radius1 + 0.05f), sewingToolHandle2 - direction*(radius2+0.05f)); + } } /** @@ -221,7 +267,7 @@ namespace Obi{ } break; case EventType.Repaint: - Handles.color = selectionStatus[i]?Color.red:Color.green; + Handles.color = selectionStatus[i]?Color.red:Color.cyan; Handles.DrawDottedLine(pos1,pos2,2); break; } diff --git a/Assets/ThirdParty/Obi/Editor/Resources/DistanceFieldPreview.mat b/Assets/ThirdParty/Obi/Editor/Resources/DistanceFieldPreview.mat index 43fa00188..8c7ff52c5 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/DistanceFieldPreview.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/DistanceFieldPreview.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: DistanceFieldPreview m_Shader: {fileID: 4800000, guid: f667dd333ac88440587339a2a1ac0027, type: 3} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 5 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -77,10 +81,11 @@ Material: - _UVSec: 0 - _ZWrite: 1 m_Colors: - - _AABBMax: {r: 1.3624613, g: 1.3624613, b: 1.3624613, a: 0} - - _AABBMin: {r: -1.3624613, g: -1.3624613, b: -1.3624613, a: 0} + - _AABBMax: {r: 1.1746451, g: 1.1746451, b: 1.1746451, a: 0} + - _AABBMin: {r: -1.1746451, g: -1.1746451, b: -1.1746451, a: 0} - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _InsideColor: {r: 1, g: 1, b: 1, a: 1} - _OutsideColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/Resources/EditorLines.mat b/Assets/ThirdParty/Obi/Editor/Resources/EditorLines.mat index 482247c54..c27133a91 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/EditorLines.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/EditorLines.mat @@ -2,20 +2,25 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: EditorLines m_Shader: {fileID: 4800000, guid: 80a01a94e9fdb445a9e6dff54db02fa9, type: 3} - m_ShaderKeywords: _EMISSION + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - _EMISSION m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -77,3 +82,4 @@ Material: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/Resources/EditorParticle.mat b/Assets/ThirdParty/Obi/Editor/Resources/EditorParticle.mat index 6e9639a27..926057759 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/EditorParticle.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/EditorParticle.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: EditorParticle m_Shader: {fileID: 4800000, guid: a16859f14873144e2b41f2bd03a84bbc, type: 3} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 5 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -73,3 +77,4 @@ Material: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/Resources/EditorParticleShader.shader b/Assets/ThirdParty/Obi/Editor/Resources/EditorParticleShader.shader index 74670cb63..5db70c755 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/EditorParticleShader.shader +++ b/Assets/ThirdParty/Obi/Editor/Resources/EditorParticleShader.shader @@ -18,8 +18,8 @@ #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest - #include "../../Resources/ObiMaterials/ObiEllipsoids.cginc" - #include "../../Resources/ObiMaterials/ObiUtils.cginc" + #include "../../Resources/ObiMaterials/Common/ObiEllipsoids.cginc" + #include "../../Resources/ObiMaterials/Common/ObiUtils.cginc" fixed4 _Color; @@ -42,6 +42,7 @@ float3 lightDir : TEXCOORD2; float3 a2 : TEXCOORD3; float3 a3 : TEXCOORD4; + //float3x3 P : TEXCOORD5; }; struct fout @@ -65,6 +66,7 @@ o.mapping = float4(v.corner.xy,1/length(eye),radius); // A[1] o.viewRay = mul((float3x3)UNITY_MATRIX_V,view); // A[0] o.color = v.color * _Color; + //o.P = float3x3(v.t0.xyz,v.t1.xyz,v.t2.xyz); BuildAuxiliaryNormalVectors(v.vertex,worldPos,view,P,IP,o.a2,o.a3); @@ -86,6 +88,19 @@ // clip space position: float4 pos = mul(UNITY_MATRIX_P,float4(p,1.0)); + // local space normal, use to calculate UVs + /*float3 ln = mul(mul((float3x3)i.P,UNITY_MATRIX_I_V) ,n); + + float2 uv = float2( + // atan returns a value between -pi and pi + // so we divide by pi * 2 to get -0.5 to 0.5 + atan2(ln.x, ln.y) / (3.1415 * 2.0), + // acos returns 0.0 at the top, pi at the bottom + // so we flip the y to align with Unity's OpenGL style + // texture UVs so 0.0 is at the bottom + acos(-ln.z) / 3.1415 + );*/ + // simple lighting: ambient float3 modelUp = mul (UNITY_MATRIX_IT_MV,float3(0,1,0)); float vecHemi = dot(n, modelUp) * 0.5f + 0.5f; diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiAmbientForceZone Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiAmbientForceZone Icon.png deleted file mode 100644 index 15f7dc06f..000000000 Binary files a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiAmbientForceZone Icon.png and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiAmbientForceZone Icon.png.meta b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiAmbientForceZone Icon.png.meta deleted file mode 100644 index 9764026ac..000000000 --- a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiAmbientForceZone Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -fileFormatVersion: 2 -guid: 092f06332c018434b8c8ea86164ef4fd -timeCreated: 1482503923 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: iPhone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Android - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiClothProxy Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiClothProxy Icon.png deleted file mode 100644 index 484acebfa..000000000 Binary files a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiClothProxy Icon.png and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiClothProxy Icon.png.meta b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiClothProxy Icon.png.meta deleted file mode 100644 index f7d2521b7..000000000 --- a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiClothProxy Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -fileFormatVersion: 2 -guid: 7b6e7fb3568d24300be305b5d1d7554d -timeCreated: 1454660299 -licenseType: Store -TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 1 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spritePixelsToUnits: 100 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: iPhone - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - - buildTarget: Android - maxTextureSize: 2048 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png new file mode 100644 index 000000000..4a6c6a697 Binary files /dev/null and b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png differ diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiUpdater Icon.png.meta b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta similarity index 75% rename from Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiUpdater Icon.png.meta rename to Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta index 777fbae73..9e9122967 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiUpdater Icon.png.meta +++ b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 -guid: 4e2c952f509ae40bdaf836136058d487 +guid: b7cec6e680e3a479ca03a89eccd4e052 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 5 + serializedVersion: 11 mipmaps: mipMapMode: 0 - enableMipMap: 0 + enableMipMap: 1 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 @@ -21,6 +21,10 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -29,12 +33,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -1 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -52,11 +56,15 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform maxTextureSize: 2048 resizeAlgorithm: 0 @@ -67,7 +75,8 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone maxTextureSize: 2048 resizeAlgorithm: 0 @@ -78,19 +87,9 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server maxTextureSize: 2048 resizeAlgorithm: 0 textureFormat: -1 @@ -100,6 +99,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -107,11 +107,16 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] + nameFileIdTable: {} spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiSphericalForceZone Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiForceZone Icon.png similarity index 100% rename from Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiSphericalForceZone Icon.png rename to Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiForceZone Icon.png diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiSphericalForceZone Icon.png.meta b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiForceZone Icon.png.meta similarity index 100% rename from Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiSphericalForceZone Icon.png.meta rename to Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiForceZone Icon.png.meta diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png new file mode 100644 index 000000000..939d32095 Binary files /dev/null and b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/ReflectionProbe-0.exr.meta b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta similarity index 74% rename from Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/ReflectionProbe-0.exr.meta rename to Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta index c398bb865..61b9afb8d 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/ReflectionProbe-0.exr.meta +++ b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 7b95b362b967e92428ba8e95033bb248 +guid: 8791eecf125744cbeadea65319c29d5a TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 13 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,27 +20,26 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 - flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 - ignoreMipmapLimit: 0 + ignoreMasterTextureLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 + cubemapConvolution: 0 + seamlessCubemap: 0 textureFormat: 1 maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 - aniso: 0 + filterMode: 1 + aniso: 1 mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: 1 - nPOTScale: 1 + wrapW: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 spriteMode: 0 @@ -52,10 +51,10 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 0 + alphaIsTransparency: 1 spriteTessellationDetail: -1 - textureType: 0 - textureShape: 2 + textureType: 2 + textureShape: 1 singleChannelComponent: 0 flipbookRows: 1 flipbookColumns: 1 @@ -64,23 +63,20 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 platformSettings: - - serializedVersion: 4 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform maxTextureSize: 2048 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 - compressionQuality: 100 + compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 + - serializedVersion: 3 buildTarget: Standalone maxTextureSize: 2048 resizeAlgorithm: 0 @@ -90,14 +86,24 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] outline: [] - customData: physicsShape: [] bones: [] spriteID: @@ -107,11 +113,10 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spriteCustomMetadata: - entries: [] nameFileIdTable: {} - mipmapLimitGroupName: + spritePackingTag: pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPinhole Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPinhole Icon.png new file mode 100644 index 000000000..da8dbd83b Binary files /dev/null and b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPinhole Icon.png differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/ReflectionProbe-0.exr.meta b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPinhole Icon.png.meta similarity index 74% rename from Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/ReflectionProbe-0.exr.meta rename to Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPinhole Icon.png.meta index 6090c076f..25f78f309 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/ReflectionProbe-0.exr.meta +++ b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiPinhole Icon.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 20f70f99a083e1c468c2673a12985dda +guid: 214df93f7c2ed4c1094bb6105c050575 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 13 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,27 +20,26 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 - flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 - ignoreMipmapLimit: 0 + ignoreMasterTextureLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 + cubemapConvolution: 0 + seamlessCubemap: 0 textureFormat: 1 maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 - aniso: 0 + filterMode: 1 + aniso: 1 mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: 1 - nPOTScale: 1 + wrapW: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 spriteMode: 0 @@ -52,10 +51,10 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 0 + alphaIsTransparency: 1 spriteTessellationDetail: -1 - textureType: 0 - textureShape: 2 + textureType: 2 + textureShape: 1 singleChannelComponent: 0 flipbookRows: 1 flipbookColumns: 1 @@ -64,23 +63,20 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 platformSettings: - - serializedVersion: 4 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform maxTextureSize: 2048 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 - compressionQuality: 100 + compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 + - serializedVersion: 3 buildTarget: Standalone maxTextureSize: 2048 resizeAlgorithm: 0 @@ -90,14 +86,24 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] outline: [] - customData: physicsShape: [] bones: [] spriteID: @@ -107,11 +113,10 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spriteCustomMetadata: - entries: [] nameFileIdTable: {} - mipmapLimitGroupName: + spritePackingTag: pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiRod Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiRod Icon.png index 61bdff8b7..b16bd502b 100644 Binary files a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiRod Icon.png and b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiRod Icon.png differ diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiUpdater Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiUpdater Icon.png deleted file mode 100644 index dc74d4fca..000000000 Binary files a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiUpdater Icon.png and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png new file mode 100644 index 000000000..595b09c88 Binary files /dev/null and b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/ReflectionProbe-0.exr.meta b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta similarity index 74% rename from Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/ReflectionProbe-0.exr.meta rename to Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta index 2ad41d1b6..083fee0f9 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/ReflectionProbe-0.exr.meta +++ b/Assets/ThirdParty/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 2ef24f175738cd34e8b2aaab2a2c8135 +guid: eac6271e2e50d4b2dbf2dfeff9b65604 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 13 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,27 +20,26 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 - flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 - ignoreMipmapLimit: 0 + ignoreMasterTextureLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 + cubemapConvolution: 0 + seamlessCubemap: 0 textureFormat: 1 maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 - aniso: 0 + filterMode: 1 + aniso: 1 mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: 1 - nPOTScale: 1 + wrapW: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 spriteMode: 0 @@ -52,10 +51,10 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 0 + alphaIsTransparency: 1 spriteTessellationDetail: -1 - textureType: 0 - textureShape: 2 + textureType: 2 + textureShape: 1 singleChannelComponent: 0 flipbookRows: 1 flipbookColumns: 1 @@ -64,23 +63,20 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 platformSettings: - - serializedVersion: 4 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform maxTextureSize: 2048 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 - compressionQuality: 100 + compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 + - serializedVersion: 3 buildTarget: Standalone maxTextureSize: 2048 resizeAlgorithm: 0 @@ -90,14 +86,24 @@ TextureImporter: crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] outline: [] - customData: physicsShape: [] bones: [] spriteID: @@ -107,11 +113,10 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spriteCustomMetadata: - entries: [] nameFileIdTable: {} - mipmapLimitGroupName: + spritePackingTag: pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Editor/Resources/PaddingMaterial.mat b/Assets/ThirdParty/Obi/Editor/Resources/PaddingMaterial.mat index c21c89675..2756d3f1c 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/PaddingMaterial.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/PaddingMaterial.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: PaddingMaterial m_Shader: {fileID: 4800000, guid: a915cd5b44e5b45509750bc8e231c325, type: 3} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 5 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -74,3 +78,4 @@ Material: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/Resources/PropertyGradientMaterial.mat b/Assets/ThirdParty/Obi/Editor/Resources/PropertyGradientMaterial.mat index 09b4b0178..6212a848a 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/PropertyGradientMaterial.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/PropertyGradientMaterial.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: PropertyGradientMaterial m_Shader: {fileID: 4800000, guid: 41dfefbc390fc41cc8e1b421c43e52f5, type: 3} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 5 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -73,3 +77,4 @@ Material: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/Resources/PropertyGradientMaterial.shader b/Assets/ThirdParty/Obi/Editor/Resources/PropertyGradientMaterial.shader index e3f56cf78..73c3cebd5 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/PropertyGradientMaterial.shader +++ b/Assets/ThirdParty/Obi/Editor/Resources/PropertyGradientMaterial.shader @@ -8,8 +8,8 @@ Pass { - Offset 0, -50 - Cull Back + Offset -0.5, -0.5 + Cull Back Fog { Mode Off } CGPROGRAM @@ -49,7 +49,7 @@ Pass { - Offset 0, -100 + Offset -1, -1 Cull Back ZWrite Off Blend SrcAlpha OneMinusSrcAlpha diff --git a/Assets/ThirdParty/Obi/Editor/Resources/TextureIcon.psd.meta b/Assets/ThirdParty/Obi/Editor/Resources/TextureIcon.psd.meta index 63fa7b668..0821ef678 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/TextureIcon.psd.meta +++ b/Assets/ThirdParty/Obi/Editor/Resources/TextureIcon.psd.meta @@ -1,17 +1,18 @@ fileFormatVersion: 2 guid: 931c48569a82e4dae84d4702bf6da199 -timeCreated: 1478802054 -licenseType: Store TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 2 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 + sRGBTexture: 1 linearTexture: 1 - correctGamma: 0 fadeOut: 0 borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 mipMapFadeDistanceStart: 1 mipMapFadeDistanceEnd: 3 bumpmap: @@ -20,40 +21,78 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 grayScaleToAlpha: 0 - generateCubemap: 0 + generateCubemap: 6 cubemapConvolution: 0 - cubemapConvolutionSteps: 7 - cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 2048 textureSettings: - filterMode: -1 + serializedVersion: 2 + filterMode: 1 aniso: 1 - mipBias: -1 - wrapMode: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 nPOTScale: 0 lightmap: 0 - rGBM: 0 compressionQuality: 50 - allowsAlphaSplitting: 0 spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 2 - buildTargetSettings: [] + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} spritePackingTag: + pSDRemoveMatte: 1 + pSDShowRemoveMatteOption: 1 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Editor/Resources/TopologyPreview.mat b/Assets/ThirdParty/Obi/Editor/Resources/TopologyPreview.mat index 40af4cb36..56d3d68c6 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/TopologyPreview.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/TopologyPreview.mat @@ -2,20 +2,25 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: TopologyPreview m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: _EMISSION + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -77,3 +82,4 @@ Material: - _Color: {r: 0.49803922, g: 0.49803922, b: 0.49803922, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/Resources/TopologyPreviewBorder.mat b/Assets/ThirdParty/Obi/Editor/Resources/TopologyPreviewBorder.mat index f7633859b..55b02f6e3 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/TopologyPreviewBorder.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/TopologyPreviewBorder.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: TopologyPreviewBorder m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 5 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -73,3 +77,4 @@ Material: - _Color: {r: 1, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/Resources/UVSpaceColorMaterial.mat b/Assets/ThirdParty/Obi/Editor/Resources/UVSpaceColorMaterial.mat index b6362eef3..5519f761d 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/UVSpaceColorMaterial.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/UVSpaceColorMaterial.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: UVSpaceColorMaterial m_Shader: {fileID: 4800000, guid: 459ae7c4c81724f20b6810647d2dbd3d, type: 3} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 5 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -73,3 +77,4 @@ Material: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/Resources/VoxelMaterial.mat b/Assets/ThirdParty/Obi/Editor/Resources/VoxelMaterial.mat index 6e13040a4..48145edff 100644 --- a/Assets/ThirdParty/Obi/Editor/Resources/VoxelMaterial.mat +++ b/Assets/ThirdParty/Obi/Editor/Resources/VoxelMaterial.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: VoxelMaterial m_Shader: {fileID: 4800000, guid: a5455d2f5ab50497d8642726d64b9cd5, type: 3} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 5 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -76,3 +80,4 @@ Material: - _InsideColor: {r: 0.8627451, g: 0.8627451, b: 0.8627451, a: 1} - _OutsideColor: {r: 0.3529412, g: 0.3529412, b: 0.3529412, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiBoneEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiBoneEditor.cs index adf371436..0aedd61e2 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiBoneEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiBoneEditor.cs @@ -33,6 +33,10 @@ namespace Obi SerializedProperty plasticYield; SerializedProperty plasticCreep; + SerializedProperty aerodynamicsEnabled; + SerializedProperty drag; + SerializedProperty lift; + SerializedProperty fixRoot; SerializedProperty stretchBones; SerializedProperty ignored; @@ -69,6 +73,9 @@ namespace Obi plasticYield = serializedObject.FindProperty("_plasticYield"); plasticCreep = serializedObject.FindProperty("_plasticCreep"); + aerodynamicsEnabled = serializedObject.FindProperty("_aerodynamicsEnabled"); + drag = serializedObject.FindProperty("_drag"); + lift = serializedObject.FindProperty("_lift"); } public void OnDisable() @@ -144,6 +151,12 @@ namespace Obi EditorGUILayout.PropertyField(plasticCreep, new GUIContent("Plastic creep")); }); + ObiEditorUtils.DoToggleablePropertyGroup(aerodynamicsEnabled, new GUIContent("Aerodynamics", Resources.Load("Icons/ObiAerodynamicConstraints Icon")), + () => { + EditorGUILayout.PropertyField(drag, new GUIContent("Drag")); + EditorGUILayout.PropertyField(lift, new GUIContent("Lift")); + }); + if (GUI.changed) serializedObject.ApplyModifiedProperties(); diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiPathEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiPathEditor.cs index df630acf4..7056a44e6 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiPathEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiPathEditor.cs @@ -2,12 +2,38 @@ using UnityEngine; using UnityEditor; using UnityEditor.EditorTools; using System; +using UnityEditor.Overlays; +using UnityEngine.UIElements; namespace Obi { [EditorTool("Obi Path Editor Tool",typeof(ObiRopeBase))] public class ObiPathEditor : EditorTool { + + [Overlay(typeof(SceneView), "Obi Path Editor", "Obi Path Editor", "Obi Path Editor", true)] + [Icon("Assets/Obi/Editor/Resources/EditCurves.psd")] + class PathEditorOverlay : Overlay, ITransientOverlay + { + public static ObiPathEditor editor; + + public override VisualElement CreatePanelContent() + { + var root = new VisualElement(); + root.Add(new IMGUIContainer(editor.DrawToolPanel)); + return root; + } + + // Use the visible property to hide or show this instance from within the class. + public bool visible + { + get + { + return ToolManager.activeToolType == typeof(ObiPathEditor); + } + } + } + enum PathEditorTool { TranslatePoints, @@ -64,6 +90,7 @@ namespace Obi { this.useOrientation = target is ObiRod; selectedStatus = new bool[0]; + PathEditorOverlay.editor = this; } public void ResizeCPArrays() @@ -71,7 +98,6 @@ namespace Obi Array.Resize(ref selectedStatus, path.ControlPointCount); } - int windowId; public override void OnToolGUI(EditorWindow window) { needsRepaint = false; @@ -82,11 +108,7 @@ namespace Obi ResizeCPArrays(); - HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); - - // get a window ID: - if (Event.current.type != EventType.Used) - windowId = GUIUtility.GetControlID(FocusType.Passive); + HandleUtility.AddDefaultControl(GUIUtility.GetControlID("PathEditor".GetHashCode(), FocusType.Passive)); Matrix4x4 prevMatrix = Handles.matrix; Handles.matrix = matrix; @@ -98,9 +120,6 @@ namespace Obi needsRepaint |= DrawControlPoint(i); } - // Control point selection handle: - needsRepaint |= ObiPathHandles.SplineCPSelector(path, selectedStatus); - // Count selected and calculate average position: selectionAverage = GetControlPointAverage(out lastSelected, out selectedCount); @@ -110,10 +129,8 @@ namespace Obi if (showThicknessHandles) needsRepaint |= DoThicknessHandles(thicknessScale); - // Sceneview GUI: - Handles.BeginGUI(); - GUILayout.Window(windowId, new Rect(10, 28, 0, 0), DrawUIWindow, "Path editor"); - Handles.EndGUI(); + // Control point selection handle: + needsRepaint |= ObiPathHandles.SplineCPSelector(path, selectedStatus); Handles.matrix = prevMatrix; @@ -545,7 +562,7 @@ namespace Obi return false; } - public void DrawUIWindow(int windowID) + public void DrawToolPanel() { DrawToolButtons(); @@ -1056,7 +1073,7 @@ namespace Obi } EditorGUI.BeginChangeCheck(); - color = EditorGUILayout.ColorField("Color", color, GUILayout.MinWidth(94)); + color = EditorGUILayout.ColorField(new GUIContent("Color"), color, true, true, true, GUILayout.MinWidth(94)); EditorGUI.showMixedValue = false; if (EditorGUI.EndChangeCheck()) { @@ -1153,7 +1170,7 @@ namespace Obi for (int index = 0; index < 4; ++index) { - int controlId = GUIUtility.GetControlID("ObiPathThicknessHandle".GetHashCode(), FocusType.Keyboard); + int controlId = GUIUtility.GetControlID("ObiPathThicknessHandle".GetHashCode(), FocusType.Passive); Vector3 position1 = position + radius * vector3Array[index]; bool changed = GUI.changed; GUI.changed = false; @@ -1197,7 +1214,7 @@ namespace Obi Vector2 currentPoint = HandleUtility.WorldToGUIPoint(path.m_Points.Evaluate(_p, p, p_, p__, i * step)); float mu; - float distance = Vector2.SqrMagnitude((Vector2)ObiUtils.ProjectPointLine(screenPoint, lastPoint, currentPoint, out mu) - screenPoint); + float distance = Vector2.SqrMagnitude((Vector2)ObiUtils.ProjectPointLine(lastPoint, currentPoint, screenPoint, out mu) - screenPoint); if (distance < minDistance) { diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiPathHandles.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiPathHandles.cs index 9e47ccaca..2a0bc1b67 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiPathHandles.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiPathHandles.cs @@ -28,27 +28,9 @@ namespace Obi // select vertex on mouse click: switch (Event.current.GetTypeForControl(controlID)) { - - case EventType.MouseDown: - { - - if ((Event.current.modifiers & EventModifiers.Control) == 0 && - (HandleUtility.nearestControl != controlID || Event.current.button != 0)) break; - - startPos = Event.current.mousePosition; - marquee.Set(0, 0, 0, 0); - - // If the user is pressing shift, accumulate selection. - if ((Event.current.modifiers & EventModifiers.Shift) == 0 && (Event.current.modifiers & EventModifiers.Alt) == 0) - { - for (int i = 0; i < selectionStatus.Length; i++) - selectionStatus[i] = false; - } - - // If the user is holding down control, dont allow selection of other objects and use marquee tool. - if ((Event.current.modifiers & EventModifiers.Control) != 0) - GUIUtility.hotControl = controlID; - + case EventType.Layout: + case EventType.MouseMove: + float minSqrDistance = System.Single.MaxValue; float sqrMinSelectionDistance = minSelectionDistance * minSelectionDistance; @@ -59,50 +41,94 @@ namespace Obi Vector2 pos = HandleUtility.WorldToGUIPoint(path.points[i].position); // get distance from mouse position to particle position: - float sqrDistance = Vector2.SqrMagnitude(startPos - pos); + float sqrDistance = Vector2.SqrMagnitude(Event.current.mousePosition - pos); // check if this control point is closer to the cursor that any previously considered point. if (sqrDistance < sqrMinSelectionDistance && sqrDistance < minSqrDistance) - { + { minSqrDistance = sqrDistance; - selectedCPIndex = i; } } + HandleUtility.AddControl(controlID, Mathf.Sqrt(minSqrDistance)); + + break; - if (selectedCPIndex >= 0) - { // toggle particle selection status. + case EventType.MouseDown: + + marquee.Set(0, 0, 0, 0); + startPos = Event.current.mousePosition; - selectionStatus[selectedCPIndex] = !selectionStatus[selectedCPIndex]; - selectionStatusChanged = true; + if (Event.current.button == 0) + { - // Prevent spline deselection if we have selected a particle: - GUIUtility.hotControl = controlID; - Event.current.Use(); + if (HandleUtility.nearestControl == controlID) + { + GUIUtility.hotControl = controlID; + // If the user is pressing shift or ctrl, accumulate selection. + if ((Event.current.modifiers & (EventModifiers.Shift | EventModifiers.Control)) == 0 && (Event.current.modifiers & EventModifiers.Alt) == 0) + { + for (int i = 0; i < selectionStatus.Length; i++) + selectionStatus[i] = false; + + selectionStatusChanged = true; + } + + minSqrDistance = System.Single.MaxValue; + sqrMinSelectionDistance = minSelectionDistance * minSelectionDistance; + + for (int i = 0; i < path.ControlPointCount; i++) + { + + // get particle position in gui space: + Vector2 pos = HandleUtility.WorldToGUIPoint(path.points[i].position); + + // get distance from mouse position to particle position: + float sqrDistance = Vector2.SqrMagnitude(startPos - pos); + + // check if this control point is closer to the cursor that any previously considered point. + if (sqrDistance < sqrMinSelectionDistance && sqrDistance < minSqrDistance) + { + minSqrDistance = sqrDistance; + selectedCPIndex = i; + } + + } + + if (selectedCPIndex >= 0) + { // toggle particle selection status. + + selectionStatus[selectedCPIndex] = !selectionStatus[selectedCPIndex]; + selectionStatusChanged = true; + + // Prevent spline deselection if we have selected a particle: + Event.current.Use(); + + } + } + else if ((Event.current.modifiers & (EventModifiers.Shift | EventModifiers.Control)) == 0 && (Event.current.modifiers & EventModifiers.Alt) == 0) + { + for (int i = 0; i < selectionStatus.Length; i++) + selectionStatus[i] = false; + + selectionStatusChanged = true; + } } - else if (Event.current.modifiers == EventModifiers.None) - { // deselect all particles: - for (int i = 0; i < selectionStatus.Length; i++) - selectionStatus[i] = false; - - selectionStatusChanged = true; - } - - } + break; case EventType.MouseDrag: - if (GUIUtility.hotControl == controlID) + if (Event.current.button == 0 && (Event.current.modifiers & EventModifiers.Alt) == 0) { - currentPos = Event.current.mousePosition; if (!dragging && Vector2.Distance(startPos, currentPos) > 5) { dragging = true; } - else + + if (dragging) { GUIUtility.hotControl = controlID; Event.current.Use(); @@ -161,34 +187,6 @@ namespace Obi break; - - case EventType.Layout: - { - - float minSqrDistance = System.Single.MaxValue; - float sqrMinSelectionDistance = minSelectionDistance * minSelectionDistance; - - for (int i = 0; i < path.ControlPointCount; i++) - { - - // get particle position in gui space: - Vector2 pos = HandleUtility.WorldToGUIPoint(path.points[i].position); - - // get distance from mouse position to particle position: - float sqrDistance = Vector2.SqrMagnitude(Event.current.mousePosition - pos); - - // check if this control point is closer to the cursor that any previously considered point. - if (sqrDistance < sqrMinSelectionDistance && sqrDistance < minSqrDistance) - { //magic number 900 = 30*30, where 30 is min distance in pixels to select a particle. - minSqrDistance = sqrDistance; - } - - } - - HandleUtility.AddControl(controlID, Mathf.Sqrt(minSqrDistance)); - } - break; - } return selectionStatusChanged; diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRodEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRodEditor.cs index dd519a094..cb807468f 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRodEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRodEditor.cs @@ -17,6 +17,8 @@ namespace Obi static void CreateObiRod(MenuCommand menuCommand) { GameObject go = new GameObject("Obi Rod", typeof(ObiRod), typeof(ObiRopeExtrudedRenderer)); + var renderer = go.GetComponent(); + renderer.material = ObiEditorUtils.GetDefaultMaterial(); ObiEditorUtils.PlaceActorRoot(go, menuCommand); } @@ -26,7 +28,8 @@ namespace Obi SerializedProperty collisionMaterial; SerializedProperty selfCollisions; - SerializedProperty surfaceCollisions; + SerializedProperty surfaceCollisions; + SerializedProperty massScale; SerializedProperty stretchShearConstraintsEnabled; SerializedProperty stretchCompliance; @@ -40,6 +43,10 @@ namespace Obi SerializedProperty plasticYield; SerializedProperty plasticCreep; + SerializedProperty aerodynamicsEnabled; + SerializedProperty drag; + SerializedProperty lift; + SerializedProperty chainConstraintsEnabled; SerializedProperty tightness; @@ -54,6 +61,7 @@ namespace Obi collisionMaterial = serializedObject.FindProperty("m_CollisionMaterial"); selfCollisions = serializedObject.FindProperty("m_SelfCollisions"); surfaceCollisions = serializedObject.FindProperty("m_SurfaceCollisions"); + massScale = serializedObject.FindProperty("m_MassScale"); stretchShearConstraintsEnabled = serializedObject.FindProperty("_stretchShearConstraintsEnabled"); stretchCompliance = serializedObject.FindProperty("_stretchCompliance"); @@ -67,6 +75,10 @@ namespace Obi plasticYield = serializedObject.FindProperty("_plasticYield"); plasticCreep = serializedObject.FindProperty("_plasticCreep"); + aerodynamicsEnabled = serializedObject.FindProperty("_aerodynamicsEnabled"); + drag = serializedObject.FindProperty("_drag"); + lift = serializedObject.FindProperty("_lift"); + chainConstraintsEnabled = serializedObject.FindProperty("_chainConstraintsEnabled"); tightness = serializedObject.FindProperty("_tightness"); } @@ -110,8 +122,30 @@ namespace Obi using (new EditorGUI.DisabledScope(ToolManager.activeToolType == typeof(ObiPathEditor))) { + GUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(rodBlueprint, new GUIContent("Blueprint")); + + if (actor.rodBlueprint == null) + { + if (GUILayout.Button("Create", EditorStyles.miniButton, GUILayout.MaxWidth(80))) + { + string path = EditorUtility.SaveFilePanel("Save blueprint", "Assets/", "RodBlueprint", "asset"); + if (!string.IsNullOrEmpty(path)) + { + path = FileUtil.GetProjectRelativePath(path); + ObiRodBlueprint asset = ScriptableObject.CreateInstance(); + + AssetDatabase.CreateAsset(asset, path); + AssetDatabase.SaveAssets(); + + actor.rodBlueprint = asset; + } + } + } + if (EditorGUI.EndChangeCheck()) { foreach (var t in targets) @@ -123,8 +157,12 @@ namespace Obi foreach (var t in targets) (t as ObiRod).AddToSolver(); } + + GUILayout.EndHorizontal(); } + EditorGUILayout.PropertyField(massScale, new GUIContent("m_MassScale")); + DoEditButton(); EditorGUILayout.Space(); @@ -150,6 +188,12 @@ namespace Obi EditorGUILayout.PropertyField(plasticCreep, new GUIContent("Plastic creep")); }); + ObiEditorUtils.DoToggleablePropertyGroup(aerodynamicsEnabled, new GUIContent("Aerodynamics", Resources.Load("Icons/ObiAerodynamicConstraints Icon")), + () => { + EditorGUILayout.PropertyField(drag, new GUIContent("Drag")); + EditorGUILayout.PropertyField(lift, new GUIContent("Lift")); + }); + ObiEditorUtils.DoToggleablePropertyGroup(chainConstraintsEnabled, new GUIContent("Chain Constraints", Resources.Load("Icons/ObiChainConstraints Icon")), () => { EditorGUILayout.PropertyField(tightness, new GUIContent("Tightness")); diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs index cace6a09d..76570ef57 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs @@ -15,8 +15,27 @@ namespace Obi{ public void OnEnable(){ renderer = (ObiRopeChainRenderer)target; } - - public override void OnInspectorGUI() { + + [MenuItem("CONTEXT/ObiRopeChainRenderer/Bake mesh")] + static void Bake(MenuCommand command) + { + ObiRopeChainRenderer renderer = (ObiRopeChainRenderer)command.context; + + if (renderer.actor.isLoaded) + { + var system = renderer.actor.solver.GetRenderSystem() as ObiChainRopeRenderSystem; + + if (system != null) + { + var mesh = new Mesh(); + system.BakeMesh(renderer, ref mesh, true); + ObiEditorUtils.SaveMesh(mesh, "Save chain mesh", "chain mesh"); + GameObject.DestroyImmediate(mesh); + } + } + } + + public override void OnInspectorGUI() { serializedObject.UpdateIfRequiredOrScript(); @@ -25,12 +44,7 @@ namespace Obi{ // Apply changes to the serializedProperty if (GUI.changed){ - serializedObject.ApplyModifiedProperties(); - - renderer.ClearChainLinkInstances(); - renderer.CreateChainLinkInstances(renderer.GetComponent()); - renderer.UpdateRenderer(renderer.GetComponent()); - + serializedObject.ApplyModifiedProperties(); } } diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs index 18d81009f..f902539de 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs @@ -65,17 +65,19 @@ namespace Obi private static void DrawGizmos(ObiRopeCursor cursor, GizmoType gizmoType) { var rope = cursor.GetComponent(); - if (rope.solver != null) + if (rope.isLoaded) { - Gizmos.color = new Color(1, 0.5f, 0, 0.75f); + Handles.matrix = rope.solver.transform.localToWorldMatrix; + Handles.color = new Color(1, 0.5f, 0.2f, 1); // draw source particle: int sourceIndex = cursor.sourceParticleIndex; if (sourceIndex >= 0 && rope.IsParticleActive(rope.solver.particleToActor[sourceIndex].indexInActor)) { - Vector3 pos = rope.GetParticlePosition(sourceIndex); - Gizmos.DrawWireSphere(pos, HandleUtility.GetHandleSize(pos) * 0.4f); + Vector3 pos = rope.solver.positions[sourceIndex]; + float size = HandleUtility.GetHandleSize(pos) * 0.15f; + Handles.SphereHandleCap(0, pos, Quaternion.identity, size, EventType.Repaint); } // draw cursor: @@ -83,13 +85,12 @@ namespace Obi if (element != null && element.particle1 != element.particle2) { - Vector3 pos = rope.GetParticlePosition(cursor.direction ? element.particle1 : element.particle2); - Vector3 pos2 = rope.GetParticlePosition(cursor.direction ? element.particle2 : element.particle1); + Vector3 pos = rope.solver.positions[cursor.direction ? element.particle1 : element.particle2]; + Vector3 pos2 = rope.solver.positions[cursor.direction ? element.particle2 : element.particle1]; Vector3 direction = pos2 - pos; - float size = HandleUtility.GetHandleSize(pos) * 0.4f; - Gizmos.matrix = Matrix4x4.TRS(pos, Quaternion.LookRotation(direction), Vector3.one * size); - DrawArrow(); + float size = HandleUtility.GetHandleSize(pos) * 0.25f; + Handles.ConeHandleCap(0, pos + Vector3.Normalize(direction)*size*0.5f, Quaternion.LookRotation(direction), size, EventType.Repaint); } } } diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeEditor.cs index 6dc04ad7f..9d18998bb 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeEditor.cs @@ -1,11 +1,6 @@ using UnityEditor; using UnityEditor.EditorTools; -using UnityEditorInternal; using UnityEngine; -using System; -using System.Collections.Generic; -using System.Linq; - namespace Obi { @@ -18,6 +13,8 @@ namespace Obi static void CreateObiRope(MenuCommand menuCommand) { GameObject go = new GameObject("Obi Rope", typeof(ObiRope), typeof(ObiRopeExtrudedRenderer)); + var renderer = go.GetComponent(); + renderer.material = ObiEditorUtils.GetDefaultMaterial(); ObiEditorUtils.PlaceActorRoot(go, menuCommand); } @@ -28,6 +25,7 @@ namespace Obi SerializedProperty collisionMaterial; SerializedProperty selfCollisions; SerializedProperty surfaceCollisions; + SerializedProperty massScale; SerializedProperty distanceConstraintsEnabled; SerializedProperty stretchingScale; @@ -40,6 +38,10 @@ namespace Obi SerializedProperty plasticYield; SerializedProperty plasticCreep; + SerializedProperty aerodynamicsEnabled; + SerializedProperty drag; + SerializedProperty lift; + SerializedProperty tearingEnabled; SerializedProperty tearResistanceMultiplier; SerializedProperty tearRate; @@ -55,6 +57,7 @@ namespace Obi collisionMaterial = serializedObject.FindProperty("m_CollisionMaterial"); selfCollisions = serializedObject.FindProperty("m_SelfCollisions"); surfaceCollisions = serializedObject.FindProperty("m_SurfaceCollisions"); + massScale = serializedObject.FindProperty("m_MassScale"); distanceConstraintsEnabled = serializedObject.FindProperty("_distanceConstraintsEnabled"); stretchingScale = serializedObject.FindProperty("_stretchingScale"); @@ -67,6 +70,10 @@ namespace Obi plasticYield = serializedObject.FindProperty("_plasticYield"); plasticCreep = serializedObject.FindProperty("_plasticCreep"); + aerodynamicsEnabled = serializedObject.FindProperty("_aerodynamicsEnabled"); + drag = serializedObject.FindProperty("_drag"); + lift = serializedObject.FindProperty("_lift"); + tearingEnabled = serializedObject.FindProperty("tearingEnabled"); tearResistanceMultiplier = serializedObject.FindProperty("tearResistanceMultiplier"); tearRate = serializedObject.FindProperty("tearRate"); @@ -112,8 +119,29 @@ namespace Obi using (new EditorGUI.DisabledScope(ToolManager.activeToolType == typeof(ObiPathEditor))) { + GUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(ropeBlueprint, new GUIContent("Blueprint")); + + if (actor.ropeBlueprint == null) + { + if (GUILayout.Button("Create", EditorStyles.miniButton, GUILayout.MaxWidth(80))) + { + string path = EditorUtility.SaveFilePanel("Save blueprint", "Assets/", "RopeBlueprint", "asset"); + if (!string.IsNullOrEmpty(path)) + { + path = FileUtil.GetProjectRelativePath(path); + ObiRopeBlueprint asset = ScriptableObject.CreateInstance(); + + AssetDatabase.CreateAsset(asset, path); + AssetDatabase.SaveAssets(); + + actor.ropeBlueprint = asset; + } + } + } + if (EditorGUI.EndChangeCheck()) { foreach (var t in targets) @@ -125,8 +153,14 @@ namespace Obi foreach (var t in targets) (t as ObiRope).AddToSolver(); } + + GUILayout.EndHorizontal(); } + GUI.enabled = !Application.isPlaying; + EditorGUILayout.PropertyField(massScale, new GUIContent("Mass scale")); + GUI.enabled = true; + DoEditButton(); EditorGUILayout.Space(); @@ -159,6 +193,11 @@ namespace Obi EditorGUILayout.PropertyField(plasticCreep, new GUIContent("Plastic creep")); }); + ObiEditorUtils.DoToggleablePropertyGroup(aerodynamicsEnabled, new GUIContent("Aerodynamics", Resources.Load("Icons/ObiAerodynamicConstraints Icon")), + () => { + EditorGUILayout.PropertyField(drag, new GUIContent("Drag")); + EditorGUILayout.PropertyField(lift, new GUIContent("Lift")); + }); if (GUI.changed) serializedObject.ApplyModifiedProperties(); diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs index de1b48fbc..02a4983f0 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs @@ -16,22 +16,28 @@ namespace Obi{ renderer = (ObiRopeExtrudedRenderer)target; } - private void BakeMesh() + [MenuItem("CONTEXT/ObiRopeExtrudedRenderer/Bake mesh")] + static void Bake(MenuCommand command) { - if (renderer != null && renderer.extrudedMesh != null) + ObiRopeExtrudedRenderer renderer = (ObiRopeExtrudedRenderer)command.context; + + if (renderer.actor.isLoaded) { - ObiEditorUtils.SaveMesh(renderer.extrudedMesh, "Save extruded mesh", "rope mesh"); + var system = renderer.actor.solver.GetRenderSystem() as ObiExtrudedRopeRenderSystem; + + if (system != null) + { + var mesh = new Mesh(); + system.BakeMesh(renderer, ref mesh, true); + ObiEditorUtils.SaveMesh(mesh, "Save rope mesh", "rope mesh"); + GameObject.DestroyImmediate(mesh); + } } } public override void OnInspectorGUI() { serializedObject.UpdateIfRequiredOrScript(); - - if (GUILayout.Button("BakeMesh")) - { - BakeMesh(); - } Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); @@ -40,8 +46,6 @@ namespace Obi{ serializedObject.ApplyModifiedProperties(); - renderer.UpdateRenderer(renderer.GetComponent()); - } } diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs index 4e21bf8ce..586d69b18 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs @@ -27,7 +27,7 @@ namespace Obi{ serializedObject.ApplyModifiedProperties(); - renderer.UpdateRenderer(null); + //renderer.UpdateRenderer(null); } diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs index 8263a50a6..2d110592d 100644 --- a/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs @@ -1,8 +1,5 @@ using UnityEditor; using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; namespace Obi{ @@ -11,28 +8,34 @@ namespace Obi{ { ObiRopeMeshRenderer renderer; - - public void OnEnable(){ - renderer = (ObiRopeMeshRenderer)target; - } - private void BakeMesh() + [MenuItem("CONTEXT/ObiRopeMeshRenderer/Bake mesh")] + static void Bake(MenuCommand command) { - if (renderer != null && renderer.deformedMesh != null) + ObiRopeMeshRenderer renderer = (ObiRopeMeshRenderer)command.context; + + if (renderer.actor.isLoaded) { - ObiEditorUtils.SaveMesh(renderer.deformedMesh, "Save deformed mesh", "rope mesh"); + var system = renderer.actor.solver.GetRenderSystem() as ObiMeshRopeRenderSystem; + + if (system != null) + { + var mesh = new Mesh(); + system.BakeMesh(renderer, ref mesh, true); + ObiEditorUtils.SaveMesh(mesh, "Save rope mesh", "rope mesh"); + GameObject.DestroyImmediate(mesh); + } } } + public void OnEnable(){ + renderer = (ObiRopeMeshRenderer)target; + } + public override void OnInspectorGUI() { serializedObject.UpdateIfRequiredOrScript(); - if (GUILayout.Button("BakeMesh")) - { - BakeMesh(); - } - Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); // Apply changes to the serializedProperty @@ -40,8 +43,6 @@ namespace Obi{ serializedObject.ApplyModifiedProperties(); - renderer.UpdateRenderer(renderer.GetComponent()); - } } diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents.meta b/Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils.meta similarity index 77% rename from Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents.meta rename to Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils.meta index 8bdbdc030..9115ebae6 100644 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents.meta +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b0f57a84cadd44090a54d60174a2e7e9 +guid: 72e3dd3ad91bf485099095b5e59ff81b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs b/Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs new file mode 100644 index 000000000..f2380581a --- /dev/null +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs @@ -0,0 +1,169 @@ +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + + +namespace Obi +{ + + [CustomEditor(typeof(ObiPinhole))] + public class ObiPinholeEditor : Editor + { + + SerializedProperty targetTransform; + SerializedProperty position; + SerializedProperty limitRange; + SerializedProperty range; + SerializedProperty compliance; + SerializedProperty friction; + SerializedProperty motorSpeed; + SerializedProperty motorForce; + SerializedProperty clamp; + SerializedProperty breakThreshold; + + ObiPinhole pinhole; + + public void OnEnable() + { + + pinhole = target as ObiPinhole; + targetTransform = serializedObject.FindProperty("m_Target"); + position = serializedObject.FindProperty("m_Position"); + limitRange = serializedObject.FindProperty("m_LimitRange"); + range = serializedObject.FindProperty("m_Range"); + friction = serializedObject.FindProperty("m_Friction"); + motorSpeed = serializedObject.FindProperty("m_MotorSpeed"); + motorForce = serializedObject.FindProperty("m_MotorForce"); + compliance = serializedObject.FindProperty("m_Compliance"); + clamp = serializedObject.FindProperty("m_ClampAtEnds"); + breakThreshold = serializedObject.FindProperty("breakThreshold"); + } + + public override void OnInspectorGUI() + { + + serializedObject.UpdateIfRequiredOrScript(); + + // warn about incorrect setups: + if (!targetTransform.hasMultipleDifferentValues) + { + var targetValue = targetTransform.objectReferenceValue as UnityEngine.Component; + if (targetValue != null) + { + var collider = targetValue.GetComponent(); + if (collider == null) + { + EditorGUILayout.HelpBox("Pinholes require the target object to have a ObiCollider component. Please add one.", MessageType.Warning); + } + } + } + + EditorGUI.BeginChangeCheck(); + Transform trget = EditorGUILayout.ObjectField("Target", pinhole.target, typeof(Transform), true) as Transform; + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(pinhole, "Set target"); + pinhole.target = trget; + PrefabUtility.RecordPrefabInstancePropertyModifications(pinhole); + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(position, new GUIContent("Position")); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + pinhole.CalculateMu(); + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(limitRange, new GUIContent("Limit Range")); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + pinhole.CalculateRange(); + } + + if (limitRange.boolValue) + { + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(range, new GUIContent("Range")); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + pinhole.CalculateRange(); + } + EditorGUI.indentLevel--; + } + EditorGUILayout.PropertyField(clamp, new GUIContent("Clamp at ends")); + EditorGUILayout.PropertyField(friction, new GUIContent("Friction")); + EditorGUILayout.PropertyField(motorSpeed, new GUIContent("Motor Target Speed")); + EditorGUILayout.PropertyField(motorForce, new GUIContent("Motor Max Force")); + EditorGUILayout.PropertyField(compliance, new GUIContent("Compliance")); + EditorGUILayout.PropertyField(breakThreshold, new GUIContent("Break threshold")); + + if (GUI.changed) + serializedObject.ApplyModifiedProperties(); + + } + + [DrawGizmo(GizmoType.Selected)] + private static void DrawGizmos(ObiPinhole pinhole, GizmoType gizmoType) + { + var rope = pinhole.GetComponent(); + + var ropeBlueprint = rope.sharedBlueprint as ObiRopeBlueprintBase; + if (rope.isLoaded && ropeBlueprint != null && ropeBlueprint.deformableEdges != null) + { + Handles.color = new Color(1, 0.5f, 0.2f, 1); + Handles.matrix = rope.solver.transform.localToWorldMatrix; + + // draw limits: + if (pinhole.limitRange) + { + for (int i = pinhole.firstEdge.edgeIndex; i <= pinhole.lastEdge.edgeIndex; ++i) + { + if (i >= 0 && i < ropeBlueprint.deformableEdges.Length) + { + int p1 = ropeBlueprint.deformableEdges[i * 2]; + int p2 = ropeBlueprint.deformableEdges[i * 2 + 1]; + var pos1 = rope.solver.positions[rope.solverIndices[p1]]; + var pos2 = rope.solver.positions[rope.solverIndices[p2]]; + + if (i == pinhole.firstEdge.edgeIndex) + { + pos1 = Vector4.Lerp(pos1, pos2, pinhole.firstEdge.coordinate); + Handles.DrawSolidDisc(pos1, pos2 - pos1, HandleUtility.GetHandleSize(pos1) * 0.05f); + } + if (i == pinhole.lastEdge.edgeIndex) + { + pos2 = Vector4.Lerp(pos1, pos2, pinhole.lastEdge.coordinate); + Handles.DrawSolidDisc(pos2, pos1 - pos2, HandleUtility.GetHandleSize(pos2) * 0.05f); + } + + Handles.DrawLine(pos1, pos2, 2); + } + } + } + + // draw source particle: + int edgeIndex = pinhole.edgeIndex; + + if (edgeIndex >= 0 && edgeIndex < ropeBlueprint.deformableEdges.Length) + { + int p1 = ropeBlueprint.deformableEdges[edgeIndex * 2]; + int p2 = ropeBlueprint.deformableEdges[edgeIndex * 2 + 1]; + var pos1 = rope.solver.positions[rope.solverIndices[p1]]; + var pos2 = rope.solver.positions[rope.solverIndices[p2]]; + Vector4 pos = Vector4.Lerp(pos1, pos2, pinhole.edgeCoordinate); + Handles.DrawWireDisc(pos, pos1 - pos2, HandleUtility.GetHandleSize(pos) * 0.1f, 2); + } + } + } + } + +} + + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/IBurstCollider.cs.meta b/Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs.meta similarity index 83% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/IBurstCollider.cs.meta rename to Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs.meta index 63ab565a5..97fc35243 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/IBurstCollider.cs.meta +++ b/Assets/ThirdParty/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 424c135125b644408aeda26a57bd6e40 +guid: f58defb5faddb428ea91cd06eecd8729 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ThirdParty/Obi/Plugins.meta b/Assets/ThirdParty/Obi/Plugins.meta deleted file mode 100644 index 536d60324..000000000 --- a/Assets/ThirdParty/Obi/Plugins.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8e4e86215c462421ab9ce3fb2940e67e -folderAsset: yes -timeCreated: 1453095262 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android.meta b/Assets/ThirdParty/Obi/Plugins/Android.meta deleted file mode 100644 index ef9a766ef..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bd54dd4041414433090806277fe28ec5 -folderAsset: yes -timeCreated: 1469612501 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libOni.so b/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libOni.so deleted file mode 100644 index dcd581275..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libOni.so and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libOni.so.meta b/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libOni.so.meta deleted file mode 100644 index fc75de83a..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libOni.so.meta +++ /dev/null @@ -1,102 +0,0 @@ -fileFormatVersion: 2 -guid: ec20d84f513be4ff68f6efc457203d9c -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARM64 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libc++_shared.so b/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libc++_shared.so deleted file mode 100644 index ecc95fabe..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libc++_shared.so and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libc++_shared.so.meta b/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libc++_shared.so.meta deleted file mode 100644 index 46671340c..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a/libc++_shared.so.meta +++ /dev/null @@ -1,102 +0,0 @@ -fileFormatVersion: 2 -guid: 2246ddc641dff4615884b65bd5612954 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARM64 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - iPhone: iOS - second: - enabled: 0 - settings: - AddToEmbeddedBinaries: false - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a.meta b/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a.meta deleted file mode 100644 index db7cbb8b7..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ef39573ee97374cefb6e9a4b7bd78901 -folderAsset: yes -timeCreated: 1469720436 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libOni.so b/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libOni.so deleted file mode 100644 index 705dc68ea..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libOni.so and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libOni.so.meta b/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libOni.so.meta deleted file mode 100644 index 4f5bc1551..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libOni.so.meta +++ /dev/null @@ -1,90 +0,0 @@ -fileFormatVersion: 2 -guid: 17ee7dcf8e257477b93c077d54c798fb -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - '': OSXIntel - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - '': OSXIntel64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libc++_shared.so b/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libc++_shared.so deleted file mode 100644 index d50142c3c..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libc++_shared.so and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libc++_shared.so.meta b/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libc++_shared.so.meta deleted file mode 100644 index 674acf2df..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android/armeabi-v7a/libc++_shared.so.meta +++ /dev/null @@ -1,90 +0,0 @@ -fileFormatVersion: 2 -guid: ba970f948815f4d80931d2e0de373138 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - '': OSXIntel - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - '': OSXIntel64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android/x86.meta b/Assets/ThirdParty/Obi/Plugins/Android/x86.meta deleted file mode 100644 index dcb60d9f5..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android/x86.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 4f17988a3533442abbe3f5731bcbee89 -folderAsset: yes -timeCreated: 1469720436 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android/x86/libOni.so b/Assets/ThirdParty/Obi/Plugins/Android/x86/libOni.so deleted file mode 100644 index 6e089dea7..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/Android/x86/libOni.so and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/Android/x86/libOni.so.meta b/Assets/ThirdParty/Obi/Plugins/Android/x86/libOni.so.meta deleted file mode 100644 index 5749e8927..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android/x86/libOni.so.meta +++ /dev/null @@ -1,90 +0,0 @@ -fileFormatVersion: 2 -guid: 6a8150ad1b7c140b98640eab40a1c2b0 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - '': OSXIntel - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - '': OSXIntel64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: x86 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/Android/x86/libc++_shared.so b/Assets/ThirdParty/Obi/Plugins/Android/x86/libc++_shared.so deleted file mode 100644 index 0cf61f3bb..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/Android/x86/libc++_shared.so and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/Android/x86/libc++_shared.so.meta b/Assets/ThirdParty/Obi/Plugins/Android/x86/libc++_shared.so.meta deleted file mode 100644 index a5052712b..000000000 --- a/Assets/ThirdParty/Obi/Plugins/Android/x86/libc++_shared.so.meta +++ /dev/null @@ -1,90 +0,0 @@ -fileFormatVersion: 2 -guid: a91ed7ff7ee034fc891e4b665a3dfbff -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - '': OSXIntel - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - '': OSXIntel64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Android: Android - second: - enabled: 1 - settings: - CPU: x86 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/iOS.meta b/Assets/ThirdParty/Obi/Plugins/iOS.meta deleted file mode 100644 index 83ba6e5b8..000000000 --- a/Assets/ThirdParty/Obi/Plugins/iOS.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ac2c20e2696d84b29a8bb41e98e72009 -folderAsset: yes -timeCreated: 1454285704 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/iOS/Oni.h b/Assets/ThirdParty/Obi/Plugins/iOS/Oni.h deleted file mode 100644 index 4927e7747..000000000 --- a/Assets/ThirdParty/Obi/Plugins/iOS/Oni.h +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Oni.h - * Oni - * - * Created by José María Méndez González on 21/9/15. - * Copyright (c) 2015 ArK. All rights reserved. - * - */ - -#ifndef Oni_ -#define Oni_ - -#include "Solver.h" -#include "HalfEdgeMesh.h" -#include "ParticleGrid.h" -#include "ColliderGrid.h" - -#if defined(__APPLE__) || defined(ANDROID) || defined(__linux__) - #define EXPORT __attribute__((visibility("default"))) -#else - #define EXPORT __declspec(dllexport) -#endif - -namespace Oni -{ - - struct ConstraintGroupParameters; - class ConstraintBatchBase; - struct Collider; - struct Rigidbody; - class TriangleSkinMap; - class DistanceField; - struct CollisionMaterial; - struct ProfileInfo; - struct DFNode; - struct TriangleMeshHeader; - struct EdgeMeshHeader; - struct BIHNode; - struct Triangle; - struct Edge; - - template - struct ObjHandle - { - std::shared_ptr ptr; - - ObjHandle(T* obj):ptr(std::shared_ptr(obj)){} - - ObjHandle(std::shared_ptr obj):ptr(obj){} - - std::shared_ptr operator->() const{ - return ptr; - } - }; - - extern "C" - { - - typedef ObjHandle ConstraintBatchHandle; - typedef ObjHandle ColliderHandle; - typedef ObjHandle RigidbodyHandle; - typedef ObjHandle CollisionMaterialHandle; - typedef ObjHandle DistanceFieldHandle; - typedef ObjHandle TaskHandle; - - // Colliders ********************: - EXPORT void UpdateColliderGrid(float dt); - - EXPORT void SetColliders(Collider* shapes, Bounds* bounds, Transform* transforms, int count); - - EXPORT void SetRigidbodies(Rigidbody* rigidbodies); - - EXPORT void SetCollisionMaterials(CollisionMaterial* materials); - - EXPORT void SetTriangleMeshData(TriangleMeshHeader* headers, BIHNode* nodes, Triangle* triangles, Eigen::Vector3f* vertices); - EXPORT void SetEdgeMeshData(EdgeMeshHeader* headers, BIHNode* nodes, Edge* edges, Eigen::Vector2f* vertices); - EXPORT void SetDistanceFieldData(DistanceFieldHeader* headers, DFNode* nodes); - EXPORT void SetHeightFieldData(HeightFieldHeader* hf_headers, float* hf_samples); - - // Distance fields ********************: - - EXPORT DistanceFieldHandle* CreateDistanceField(); - EXPORT void DestroyDistanceField(DistanceFieldHandle* df); - - EXPORT void StartBuildingDistanceField(DistanceFieldHandle* df,float max_error, - int max_depth, - Eigen::Vector3f* vertex_positions, - int* triangle_indices_, - int num_vertices, - int num_triangles); - - EXPORT bool ContinueBuildingDistanceField(DistanceFieldHandle* df); - - EXPORT float SampleDistanceField(DistanceFieldHandle* df, float x, float y, float z); - - EXPORT int GetDistanceFieldNodeCount(DistanceFieldHandle* df); - EXPORT void GetDistanceFieldNodes(DistanceFieldHandle* df, DFNode* nodes); - EXPORT void SetDistanceFieldNodes(DistanceFieldHandle* df, const DFNode* nodes, int num); - - // Collision materials *****************: - - EXPORT CollisionMaterialHandle* CreateCollisionMaterial(); - EXPORT void UpdateCollisionMaterial(CollisionMaterialHandle* material, const CollisionMaterial& adaptor); - EXPORT void DestroyCollisionMaterial(CollisionMaterialHandle* collider); - - // Solver ********************: - - EXPORT Solver* CreateSolver(int capacity); - EXPORT void DestroySolver(Solver* solver); - - EXPORT void SetCapacity(Solver* solver,int capacity); - EXPORT void InitializeFrame(Solver* solver,const Vector4fUnaligned& position, const Vector4fUnaligned& scale, const QuaternionfUnaligned& rotation); - EXPORT void UpdateFrame(Solver* solver,const Vector4fUnaligned& position, const Vector4fUnaligned& scale, const QuaternionfUnaligned& rotation, float dt); - EXPORT void ApplyFrame(Solver* solver, float linear_velocity_scale, float angular_velocity_scale, float linear_inertia_scale,float angular_inertia_scale, float dt); - - EXPORT void GetBounds(Solver* solver, Eigen::Vector3f& min, Eigen::Vector3f& max); - EXPORT int GetParticleGridSize(Solver* solver); - EXPORT void GetParticleGrid(Solver* solver, Bounds* cells); - - EXPORT void SetSolverParameters(Solver* solver, const SolverParameters* parameters); - EXPORT void GetSolverParameters(Solver* solver, SolverParameters* parameters); - - EXPORT TaskHandle* CollisionDetection(Solver* solver, float step_time); - EXPORT TaskHandle* Step(Solver* solver, float step_time, float substep_time, int substeps); - - EXPORT int SpatialQuery(Solver* solver, QueryShape* shapes, Transform* transforms, int shape_count); - EXPORT void GetQueryResults(Solver* solver, QueryResult* results, int num); - - EXPORT void ApplyPositionInterpolation(Solver* solver, - Eigen::Vector4f* start_positions, - Eigen::Quaternionf* start_orientations, - float step_time, - float unsimulated_time); - - EXPORT void UpdateSkeletalAnimation(Solver* solver); - - EXPORT void RecalculateInertiaTensors(Solver* solver); - - EXPORT void ResetForces(Solver* solver); - - EXPORT void SetRigidbodyLinearDeltas(Solver* solver, Eigen::Vector4f* linear_deltas); - EXPORT void SetRigidbodyAngularDeltas(Solver* solver, Eigen::Vector4f* angular_deltas); - - - EXPORT int GetConstraintCount(Solver* solver, const Solver::ConstraintType type); - - EXPORT int SetActiveParticles(Solver* solver, const int* active, int num); - - EXPORT void SetParticleCollisionMaterials(Solver* solver, int* material_indices); - - EXPORT void SetParticlePhases(Solver* solver, int* phases); - - EXPORT void SetParticleFilters(Solver* solver, int* filters); - - EXPORT void SetParticlePositions(Solver* solver, Eigen::Vector4f* positions); - - EXPORT void SetParticlePreviousPositions(Solver* solver, Eigen::Vector4f* prev_positions); - - EXPORT void SetParticleOrientations(Solver* solver,Eigen::Quaternionf* orientations); - - EXPORT void SetParticlePreviousOrientations(Solver* solver, Eigen::Quaternionf* prev_orientations); - - EXPORT void SetRenderableParticleOrientations(Solver* solver, Eigen::Quaternionf* orientations); - - EXPORT void SetRenderableParticlePositions(Solver* solver, Eigen::Vector4f* positions); - - EXPORT void SetParticleInverseMasses(Solver* solver, float* inv_masses); - - EXPORT void SetParticleInverseRotationalMasses(Solver* solver, float* inv_rot_masses); - - EXPORT void SetParticlePrincipalRadii(Solver* solver, Eigen::Vector4f* radii); - - EXPORT void SetParticleVelocities(Solver* solver, Eigen::Vector4f* velocities); - - EXPORT void SetParticleAngularVelocities(Solver* solver, Eigen::Vector4f* velocities); - - EXPORT void SetParticleExternalForces(Solver* solver, Eigen::Vector4f* forces); - - EXPORT void SetParticleExternalTorques(Solver* solver, Eigen::Vector4f* torques); - - EXPORT void SetParticleWinds(Solver* solver, Eigen::Vector4f* wind); - - EXPORT void SetParticlePositionDeltas(Solver* solver, Eigen::Vector4f* deltas); - - EXPORT void SetParticleOrientationDeltas(Solver* solver, Eigen::Quaternionf* deltas); - - EXPORT void SetParticlePositionConstraintCounts(Solver* solver, int* counts); - - EXPORT void SetParticleOrientationConstraintCounts(Solver* solver, int* counts); - - EXPORT void SetParticleNormals(Solver* solver, Eigen::Vector4f* normals); - - EXPORT void SetParticleInverseInertiaTensors(Solver* solver, Eigen::Vector4f* tensors); - - EXPORT int SetSimplices(Solver* solver, const int* simplices, int point_count, int edge_count, int triangle_count); - - - EXPORT int GetDeformableTriangleCount(Solver* solver); - - EXPORT void SetDeformableTriangles(Solver* solver, const int* indices, int num, int dest_offset); - - EXPORT int RemoveDeformableTriangles(Solver* solver, int num, int source_offset); - - - // Fluid ********************: - - EXPORT void SetParticleSmoothingRadii(Solver* solver,float* radii); - - EXPORT void SetParticleBuoyancy(Solver* solver,float* buoyancy); - - EXPORT void SetParticleRestDensities(Solver* solver,float* rest_densities); - - EXPORT void SetParticleViscosities(Solver* solver,float* viscosities); - - EXPORT void SetParticleSurfaceTension(Solver* solver,float* surf_tension); - - EXPORT void SetParticleVorticityConfinement(Solver* solver,float* vort_confinement); - - EXPORT void SetParticleAtmosphericDragPressure(Solver* solver,float* atmospheric_drag, float* atmospheric_pressure); - - EXPORT void SetParticleDiffusion(Solver* solver,float* diffusion); - - - EXPORT void SetParticleVorticities(Solver* solver, Eigen::Vector4f* vorticities); - - EXPORT void SetParticleFluidData(Solver* solver, Eigen::Vector4f* fluid_data); - - EXPORT void SetParticleUserData(Solver* solver, Eigen::Vector4f* user_data); - - EXPORT void SetParticleAnisotropies(Solver* solver, Eigen::Vector4f* anisotropies); - - - - EXPORT void SetConstraintGroupParameters(Solver* solver, const Solver::ConstraintType type, const ConstraintGroupParameters* parameters); - - EXPORT void GetConstraintGroupParameters(Solver* solver, const Solver::ConstraintType type, ConstraintGroupParameters* parameters); - - EXPORT void SetRestPositions(Solver* solver, Eigen::Vector4f* rest_positions); - - EXPORT void SetRestOrientations(Solver* solver, Eigen::Quaternionf* rest_orientations); - - - // Batches ********************: - - EXPORT ConstraintBatchHandle* CreateBatch(const Solver::ConstraintType type); - - EXPORT void DestroyBatch(ConstraintBatchHandle* batch); - - EXPORT void AddBatch(Solver* solver, ConstraintBatchHandle* batch); - - EXPORT void RemoveBatch(Solver* solver, ConstraintBatchHandle* batch); - - EXPORT void EnableBatch(ConstraintBatchHandle* batch, bool enabled); - - EXPORT int GetBatchConstraintForces(ConstraintBatchHandle* batch, float* forces, int num, int source_offset); - - // Constraints ********************: - - EXPORT void SetBatchConstraintCount(ConstraintBatchHandle* batch, int num); - - EXPORT int GetBatchConstraintCount(ConstraintBatchHandle* batch); - - EXPORT void SetDistanceConstraints(ConstraintBatchHandle* batch, - int* indices, - float* restLengths, - float* stiffnesses, - float* lambdas, - int num); - - EXPORT void SetBendingConstraints(ConstraintBatchHandle* batch, - int* indices, - float* rest_bends, - float* bending_stiffnesses, - float* plasticity, - float* lambdas, - int num); - - EXPORT void SetSkinConstraints(ConstraintBatchHandle* batch, - int* indices, - Eigen::Vector4f* skin_points, - Eigen::Vector4f* skin_normals, - float* radii_backstops, - float* stiffnesses, - float* lambdas, - int num); - - EXPORT void SetAerodynamicConstraints(ConstraintBatchHandle* batch, - int* triangle_indices, - float* aerodynamic_coeffs, - int num); - - EXPORT void SetVolumeConstraints(ConstraintBatchHandle* batch, - int* triangle_indices, - int* first_triangle, - int* num_triangles, - float* rest_volumes, - float* pressure_stiffnesses, - float* lambdas, - int num); - - EXPORT void SetShapeMatchingConstraints(ConstraintBatchHandle* batch, - int* shape_indices, - int* first_index, - int* num_indices, - int* explicit_group, - float* shape_material_parameters, - Eigen::Vector4f* rest_coms, - Eigen::Vector4f* coms, - Eigen::Quaternionf* orientations, - Eigen::Matrix4f* linear_transforms, - Eigen::Matrix4f* plastic_deformations, - int num); - - EXPORT void CalculateRestShapeMatching(Solver* solver, ConstraintBatchHandle* batch); - - EXPORT void SetStretchShearConstraints(ConstraintBatchHandle* batch, - int* particle_indices, - int* orientation_indices, - float* rest_lengths, - Eigen::Quaternionf* rest_orientations, - Eigen::Vector3f* stiffnesses, - Eigen::Vector3f* lambdas, - int num); - - EXPORT void SetBendTwistConstraints(ConstraintBatchHandle* batch, - int* orientation_indices, - Eigen::Quaternionf* rest_darboux, - Eigen::Vector3f* stiffnesses, - float* plasticity, - Eigen::Vector3f* lambdas, - int num); - - EXPORT void SetTetherConstraints(ConstraintBatchHandle* batch, - int* indices, - float* max_lenght_scales, - float* stiffnesses, - float* lambdas, - int num); - - EXPORT void SetPinConstraints(ConstraintBatchHandle* batch, - int* indices, - Vector4f* pin_offsets, - Quaternionf* rest_darboux, - int* colliders, - float* stiffnesses, - Eigen::Vector4f* lambdas, - int num); - - EXPORT void SetStitchConstraints(ConstraintBatchHandle* batch, - int* indices, - float* stiffnesses, - float* lambdas, - int num); - - EXPORT void SetChainConstraints(ConstraintBatchHandle* batch, - int* indices, - float* rest_lengths, - int* first_index, - int* num_indices, - int num); - - // Collision data ********************: - - EXPORT void GetCollisionContacts(Solver* solver,Contact* contacts, int num); - - EXPORT void GetParticleCollisionContacts(Solver* solver,Contact* contacts, int num); - - // Diffuse particles ********************: - - EXPORT void InterpolateDiffuseParticles(Solver* solver, - const Eigen::Vector4f* properties, - const Eigen::Vector4f* diffuse_positions, - Eigen::Vector4f* diffuse_properties, - int* neighbour_count, - int count); - - // Skin maps ********************: - - EXPORT TriangleSkinMap* CreateTriangleSkinMap(); - - EXPORT void DestroyTriangleSkinMap(TriangleSkinMap* map); - - EXPORT void Bind(TriangleSkinMap* map, Mesh* source, Mesh* target, - const unsigned int* source_master_flags, - const unsigned int* target_slave_flags); - - EXPORT int GetSkinnedVertexCount(TriangleSkinMap* map); - - EXPORT void GetSkinInfo(TriangleSkinMap* map, - int* skin_indices, - int* source_tri_indices, - Eigen::Vector3f* bary_pos, - Eigen::Vector3f* bary_nrm, - Eigen::Vector3f* bary_tan); - - EXPORT void SetSkinInfo(TriangleSkinMap* map, - const int* skin_indices, - const int* source_tri_indices, - const Eigen::Vector3f* bary_pos, - const Eigen::Vector3f* bary_nrm, - const Eigen::Vector3f* bary_tan, - int num); - - // Tasks ********************: - - EXPORT void CompleteAll(); - - EXPORT void Complete(TaskHandle* task); - - EXPORT TaskHandle* CreateEmpty(); - - EXPORT void Schedule(TaskHandle* task); - - EXPORT void AddChild(TaskHandle* task, TaskHandle* child); - - // Profiling ****************: - - EXPORT int GetMaxSystemConcurrency(); - - EXPORT void ClearProfiler(); - - EXPORT void EnableProfiler(bool enabled); - - EXPORT void BeginSample(const char* name, unsigned char type); - - EXPORT void EndSample(); - - EXPORT int GetProfilingInfoCount(); - - EXPORT void GetProfilingInfo(ProfileInfo* info, int count); - } - -} - -#endif diff --git a/Assets/ThirdParty/Obi/Plugins/iOS/Oni.h.meta b/Assets/ThirdParty/Obi/Plugins/iOS/Oni.h.meta deleted file mode 100644 index 9f03bca3f..000000000 --- a/Assets/ThirdParty/Obi/Plugins/iOS/Oni.h.meta +++ /dev/null @@ -1,90 +0,0 @@ -fileFormatVersion: 2 -guid: 03646faf401f74c9e8e73b6365c17f63 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - '': OSXIntel - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - '': OSXIntel64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 1 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/iOS/OniHelpers.h b/Assets/ThirdParty/Obi/Plugins/iOS/OniHelpers.h deleted file mode 100644 index 7b98e3ed4..000000000 --- a/Assets/ThirdParty/Obi/Plugins/iOS/OniHelpers.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * OniHelpers.h - * Oni - * - * Created by José María Méndez González on 21/9/15. - * Copyright (c) 2015 ArK. All rights reserved. - * - */ - -#ifndef OniHelpers_ -#define OniHelpers_ - -#include "Dense" -#include "HalfEdgeMesh.h" - -#if defined(__APPLE__) || defined(ANDROID) || defined(__linux__) - #define EXPORT __attribute__((visibility("default"))) -#else - #define EXPORT __declspec(dllexport) -#endif - -namespace Oni -{ - extern "C" - { - - EXPORT int MakePhase(int group, int flags); - EXPORT int GetGroupFromPhase(int phase); - - /** - * Calculates the rest bend factor for a bending constraint between 3 particles. - * @param coordinates an array of 9 floats: x,y,z of the first particle, x,y,z of the second particle, x,y,z of the third (central) particle. - */ - EXPORT float BendingConstraintRest(float* coordinates); - - EXPORT HalfEdgeMesh* CreateHalfEdgeMesh(); - - EXPORT void DestroyHalfEdgeMesh(HalfEdgeMesh* mesh); - EXPORT void GetHalfEdgeMeshInfo(HalfEdgeMesh* mesh, HalfEdgeMesh::MeshInformation* mesh_info); - - EXPORT void CalculatePrimitiveCounts(HalfEdgeMesh* mesh, - Eigen::Vector3f* vertices, - int* triangles, - int vertex_count, - int triangle_count); - - EXPORT void Generate(HalfEdgeMesh* mesh, - Eigen::Vector3f* vertices, - int* triangles, - int vertex_count, - int triangle_count, - float* scale); - - EXPORT void SetHalfEdges(HalfEdgeMesh* mesh,HalfEdgeMesh::HalfEdge* half_edges, int count); - EXPORT void SetVertices(HalfEdgeMesh* mesh,HalfEdgeMesh::Vertex* vertices, int count); - EXPORT void SetFaces(HalfEdgeMesh* mesh,HalfEdgeMesh::Face* faces, int count); - - EXPORT void SetNormals(HalfEdgeMesh* mesh,Eigen::Vector3f* normals); - EXPORT void SetTangents(HalfEdgeMesh* mesh,Vector4fUnaligned* tangents); - EXPORT void SetInverseOrientations(HalfEdgeMesh* mesh,QuaternionfUnaligned* orientations); - EXPORT void SetVisualMap(HalfEdgeMesh* mesh,int* map); - - EXPORT int GetHalfEdgeCount(HalfEdgeMesh* mesh); - EXPORT int GetVertexCount(HalfEdgeMesh* mesh); - EXPORT int GetFaceCount(HalfEdgeMesh* mesh); - - EXPORT void GetPointCloudAnisotropy(Eigen::Vector3f* points,int count,float max_anisotropy,float radius, const Eigen::Vector3f& hint_normal, Eigen::Vector3f& centroid, QuaternionfUnaligned& orientation,Eigen::Vector3f& principal_values); - } - -} - -#endif diff --git a/Assets/ThirdParty/Obi/Plugins/iOS/OniHelpers.h.meta b/Assets/ThirdParty/Obi/Plugins/iOS/OniHelpers.h.meta deleted file mode 100644 index 5675557e1..000000000 --- a/Assets/ThirdParty/Obi/Plugins/iOS/OniHelpers.h.meta +++ /dev/null @@ -1,90 +0,0 @@ -fileFormatVersion: 2 -guid: 4f88b733d928048638365465e86b8f3b -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - '': OSXIntel - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - '': OSXIntel64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 1 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/iOS/libOni.a b/Assets/ThirdParty/Obi/Plugins/iOS/libOni.a deleted file mode 100644 index bc6079fbd..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/iOS/libOni.a and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/iOS/libOni.a.meta b/Assets/ThirdParty/Obi/Plugins/iOS/libOni.a.meta deleted file mode 100644 index d532c806e..000000000 --- a/Assets/ThirdParty/Obi/Plugins/iOS/libOni.a.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: 480286a2338ca4cb6a36110dcd0614f4 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 0 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 1 - settings: - AddToEmbeddedBinaries: false - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle.meta deleted file mode 100644 index ba94bc967..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle.meta +++ /dev/null @@ -1,40 +0,0 @@ -fileFormatVersion: 2 -guid: 2882732abb8524a2dad5a38e94bea1fc -folderAsset: yes -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - - first: - '': OSXIntel - second: - enabled: 1 - settings: {} - - first: - '': OSXIntel64 - second: - enabled: 1 - settings: {} - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Standalone: OSXUniversal - second: - enabled: 1 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Info.plist b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Info.plist deleted file mode 100644 index cfc875948..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Info.plist +++ /dev/null @@ -1,50 +0,0 @@ - - - - - BuildMachineOSBuild - 19E266 - CFBundleDevelopmentRegion - en - CFBundleExecutable - Oni - CFBundleIdentifier - com.Ark.Oni - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Oni - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 12D4e - DTPlatformName - macosx - DTPlatformVersion - 11.1 - DTSDKBuild - 20C63 - DTSDKName - macosx11.1 - DTXcode - 1240 - DTXcodeBuild - 12D4e - LSMinimumSystemVersion - 10.11 - NSHumanReadableCopyright - Copyright © 2016 Ark. All rights reserved. - - diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS/Oni b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS/Oni deleted file mode 100644 index 86f77bea8..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS/Oni and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CMakeLists.txt b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CMakeLists.txt deleted file mode 100644 index 9eb502b79..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -include(RegexUtils) -test_escape_string_as_regex() - -file(GLOB Eigen_directory_files "*") - -escape_string_as_regex(ESCAPED_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") - -foreach(f ${Eigen_directory_files}) - if(NOT f MATCHES "\\.txt" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/[.].+" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/src") - list(APPEND Eigen_directory_files_to_install ${f}) - endif() -endforeach(f ${Eigen_directory_files}) - -install(FILES - ${Eigen_directory_files_to_install} - DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel - ) - -install(DIRECTORY src DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel FILES_MATCHING PATTERN "*.h") diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Cholesky b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Cholesky deleted file mode 100644 index 1332b540d..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Cholesky +++ /dev/null @@ -1,46 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_CHOLESKY_MODULE_H -#define EIGEN_CHOLESKY_MODULE_H - -#include "Core" -#include "Jacobi" - -#include "src/Core/util/DisableStupidWarnings.h" - -/** \defgroup Cholesky_Module Cholesky module - * - * - * - * This module provides two variants of the Cholesky decomposition for selfadjoint (hermitian) matrices. - * Those decompositions are also accessible via the following methods: - * - MatrixBase::llt() - * - MatrixBase::ldlt() - * - SelfAdjointView::llt() - * - SelfAdjointView::ldlt() - * - * \code - * #include - * \endcode - */ - -#include "src/Cholesky/LLT.h" -#include "src/Cholesky/LDLT.h" -#ifdef EIGEN_USE_LAPACKE -#ifdef EIGEN_USE_MKL -#include "mkl_lapacke.h" -#else -#include "src/misc/lapacke.h" -#endif -#include "src/Cholesky/LLT_LAPACKE.h" -#endif - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_CHOLESKY_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CholmodSupport b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CholmodSupport deleted file mode 100644 index bed8924d3..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CholmodSupport +++ /dev/null @@ -1,48 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_CHOLMODSUPPORT_MODULE_H -#define EIGEN_CHOLMODSUPPORT_MODULE_H - -#include "SparseCore" - -#include "src/Core/util/DisableStupidWarnings.h" - -extern "C" { - #include -} - -/** \ingroup Support_modules - * \defgroup CholmodSupport_Module CholmodSupport module - * - * This module provides an interface to the Cholmod library which is part of the suitesparse package. - * It provides the two following main factorization classes: - * - class CholmodSupernodalLLT: a supernodal LLT Cholesky factorization. - * - class CholmodDecomposiiton: a general L(D)LT Cholesky factorization with automatic or explicit runtime selection of the underlying factorization method (supernodal or simplicial). - * - * For the sake of completeness, this module also propose the two following classes: - * - class CholmodSimplicialLLT - * - class CholmodSimplicialLDLT - * Note that these classes does not bring any particular advantage compared to the built-in - * SimplicialLLT and SimplicialLDLT factorization classes. - * - * \code - * #include - * \endcode - * - * In order to use this module, the cholmod headers must be accessible from the include paths, and your binary must be linked to the cholmod library and its dependencies. - * The dependencies depend on how cholmod has been compiled. - * For a cmake based project, you can use our FindCholmod.cmake module to help you in this task. - * - */ - -#include "src/CholmodSupport/CholmodSupport.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_CHOLMODSUPPORT_MODULE_H - diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CholmodSupport.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CholmodSupport.meta deleted file mode 100644 index a4d664fb9..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CholmodSupport.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 39b02f03cbbe94f28b2d5714faf41f6f -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Core b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Core deleted file mode 100644 index b923b8c00..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Core +++ /dev/null @@ -1,537 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2008 Gael Guennebaud -// Copyright (C) 2007-2011 Benoit Jacob -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_CORE_H -#define EIGEN_CORE_H - -// first thing Eigen does: stop the compiler from committing suicide -#include "src/Core/util/DisableStupidWarnings.h" - -#if defined(__CUDACC__) && !defined(EIGEN_NO_CUDA) - #define EIGEN_CUDACC __CUDACC__ -#endif - -#if defined(__CUDA_ARCH__) && !defined(EIGEN_NO_CUDA) - #define EIGEN_CUDA_ARCH __CUDA_ARCH__ -#endif - -#if defined(__CUDACC_VER_MAJOR__) && (__CUDACC_VER_MAJOR__ >= 9) -#define EIGEN_CUDACC_VER ((__CUDACC_VER_MAJOR__ * 10000) + (__CUDACC_VER_MINOR__ * 100)) -#elif defined(__CUDACC_VER__) -#define EIGEN_CUDACC_VER __CUDACC_VER__ -#else -#define EIGEN_CUDACC_VER 0 -#endif - -// Handle NVCC/CUDA/SYCL -#if defined(__CUDACC__) || defined(__SYCL_DEVICE_ONLY__) - // Do not try asserts on CUDA and SYCL! - #ifndef EIGEN_NO_DEBUG - #define EIGEN_NO_DEBUG - #endif - - #ifdef EIGEN_INTERNAL_DEBUGGING - #undef EIGEN_INTERNAL_DEBUGGING - #endif - - #ifdef EIGEN_EXCEPTIONS - #undef EIGEN_EXCEPTIONS - #endif - - // All functions callable from CUDA code must be qualified with __device__ - #ifdef __CUDACC__ - // Do not try to vectorize on CUDA and SYCL! - #ifndef EIGEN_DONT_VECTORIZE - #define EIGEN_DONT_VECTORIZE - #endif - - #define EIGEN_DEVICE_FUNC __host__ __device__ - // We need cuda_runtime.h to ensure that that EIGEN_USING_STD_MATH macro - // works properly on the device side - #include - #else - #define EIGEN_DEVICE_FUNC - #endif - -#else - #define EIGEN_DEVICE_FUNC - -#endif - -// When compiling CUDA device code with NVCC, pull in math functions from the -// global namespace. In host mode, and when device doee with clang, use the -// std versions. -#if defined(__CUDA_ARCH__) && defined(__NVCC__) - #define EIGEN_USING_STD_MATH(FUNC) using ::FUNC; -#else - #define EIGEN_USING_STD_MATH(FUNC) using std::FUNC; -#endif - -#if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(__CUDA_ARCH__) && !defined(EIGEN_EXCEPTIONS) && !defined(EIGEN_USE_SYCL) - #define EIGEN_EXCEPTIONS -#endif - -#ifdef EIGEN_EXCEPTIONS - #include -#endif - -// then include this file where all our macros are defined. It's really important to do it first because -// it's where we do all the alignment settings (platform detection and honoring the user's will if he -// defined e.g. EIGEN_DONT_ALIGN) so it needs to be done before we do anything with vectorization. -#include "src/Core/util/Macros.h" - -// Disable the ipa-cp-clone optimization flag with MinGW 6.x or newer (enabled by default with -O3) -// See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=556 for details. -#if EIGEN_COMP_MINGW && EIGEN_GNUC_AT_LEAST(4,6) - #pragma GCC optimize ("-fno-ipa-cp-clone") -#endif - -#include - -// this include file manages BLAS and MKL related macros -// and inclusion of their respective header files -#include "src/Core/util/MKL_support.h" - -// if alignment is disabled, then disable vectorization. Note: EIGEN_MAX_ALIGN_BYTES is the proper check, it takes into -// account both the user's will (EIGEN_MAX_ALIGN_BYTES,EIGEN_DONT_ALIGN) and our own platform checks -#if EIGEN_MAX_ALIGN_BYTES==0 - #ifndef EIGEN_DONT_VECTORIZE - #define EIGEN_DONT_VECTORIZE - #endif -#endif - -#if EIGEN_COMP_MSVC - #include // for _aligned_malloc -- need it regardless of whether vectorization is enabled - #if (EIGEN_COMP_MSVC >= 1500) // 2008 or later - // Remember that usage of defined() in a #define is undefined by the standard. - // a user reported that in 64-bit mode, MSVC doesn't care to define _M_IX86_FP. - #if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || EIGEN_ARCH_x86_64 - #define EIGEN_SSE2_ON_MSVC_2008_OR_LATER - #endif - #endif -#else - // Remember that usage of defined() in a #define is undefined by the standard - #if (defined __SSE2__) && ( (!EIGEN_COMP_GNUC) || EIGEN_COMP_ICC || EIGEN_GNUC_AT_LEAST(4,2) ) - #define EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC - #endif -#endif - -#ifndef EIGEN_DONT_VECTORIZE - - #if defined (EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC) || defined(EIGEN_SSE2_ON_MSVC_2008_OR_LATER) - - // Defines symbols for compile-time detection of which instructions are - // used. - // EIGEN_VECTORIZE_YY is defined if and only if the instruction set YY is used - #define EIGEN_VECTORIZE - #define EIGEN_VECTORIZE_SSE - #define EIGEN_VECTORIZE_SSE2 - - // Detect sse3/ssse3/sse4: - // gcc and icc defines __SSE3__, ... - // there is no way to know about this on msvc. You can define EIGEN_VECTORIZE_SSE* if you - // want to force the use of those instructions with msvc. - #ifdef __SSE3__ - #define EIGEN_VECTORIZE_SSE3 - #endif - #ifdef __SSSE3__ - #define EIGEN_VECTORIZE_SSSE3 - #endif - #ifdef __SSE4_1__ - #define EIGEN_VECTORIZE_SSE4_1 - #endif - #ifdef __SSE4_2__ - #define EIGEN_VECTORIZE_SSE4_2 - #endif - #ifdef __AVX__ - #define EIGEN_VECTORIZE_AVX - #define EIGEN_VECTORIZE_SSE3 - #define EIGEN_VECTORIZE_SSSE3 - #define EIGEN_VECTORIZE_SSE4_1 - #define EIGEN_VECTORIZE_SSE4_2 - #endif - #ifdef __AVX2__ - #define EIGEN_VECTORIZE_AVX2 - #endif - #ifdef __FMA__ - #define EIGEN_VECTORIZE_FMA - #endif - #if defined(__AVX512F__) && defined(EIGEN_ENABLE_AVX512) - #define EIGEN_VECTORIZE_AVX512 - #define EIGEN_VECTORIZE_AVX2 - #define EIGEN_VECTORIZE_AVX - #define EIGEN_VECTORIZE_FMA - #ifdef __AVX512DQ__ - #define EIGEN_VECTORIZE_AVX512DQ - #endif - #ifdef __AVX512ER__ - #define EIGEN_VECTORIZE_AVX512ER - #endif - #endif - - // include files - - // This extern "C" works around a MINGW-w64 compilation issue - // https://sourceforge.net/tracker/index.php?func=detail&aid=3018394&group_id=202880&atid=983354 - // In essence, intrin.h is included by windows.h and also declares intrinsics (just as emmintrin.h etc. below do). - // However, intrin.h uses an extern "C" declaration, and g++ thus complains of duplicate declarations - // with conflicting linkage. The linkage for intrinsics doesn't matter, but at that stage the compiler doesn't know; - // so, to avoid compile errors when windows.h is included after Eigen/Core, ensure intrinsics are extern "C" here too. - // notice that since these are C headers, the extern "C" is theoretically needed anyways. - extern "C" { - // In theory we should only include immintrin.h and not the other *mmintrin.h header files directly. - // Doing so triggers some issues with ICC. However old gcc versions seems to not have this file, thus: - #if EIGEN_COMP_ICC >= 1110 - #include - #else - #include - #include - #include - #ifdef EIGEN_VECTORIZE_SSE3 - #include - #endif - #ifdef EIGEN_VECTORIZE_SSSE3 - #include - #endif - #ifdef EIGEN_VECTORIZE_SSE4_1 - #include - #endif - #ifdef EIGEN_VECTORIZE_SSE4_2 - #include - #endif - #if defined(EIGEN_VECTORIZE_AVX) || defined(EIGEN_VECTORIZE_AVX512) - #include - #endif - #endif - } // end extern "C" - #elif defined __VSX__ - #define EIGEN_VECTORIZE - #define EIGEN_VECTORIZE_VSX - #include - // We need to #undef all these ugly tokens defined in - // => use __vector instead of vector - #undef bool - #undef vector - #undef pixel - #elif defined __ALTIVEC__ - #define EIGEN_VECTORIZE - #define EIGEN_VECTORIZE_ALTIVEC - #include - // We need to #undef all these ugly tokens defined in - // => use __vector instead of vector - #undef bool - #undef vector - #undef pixel - #elif (defined __ARM_NEON) || (defined __ARM_NEON__) - #define EIGEN_VECTORIZE - #define EIGEN_VECTORIZE_NEON - #include - #elif (defined __s390x__ && defined __VEC__) - #define EIGEN_VECTORIZE - #define EIGEN_VECTORIZE_ZVECTOR - #include - #endif -#endif - -#if defined(__F16C__) && !defined(EIGEN_COMP_CLANG) - // We can use the optimized fp16 to float and float to fp16 conversion routines - #define EIGEN_HAS_FP16_C -#endif - -#if defined __CUDACC__ - #define EIGEN_VECTORIZE_CUDA - #include - #if EIGEN_CUDACC_VER >= 70500 - #define EIGEN_HAS_CUDA_FP16 - #endif -#endif - -#if defined EIGEN_HAS_CUDA_FP16 - #include - #include -#endif - -#if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE) - #define EIGEN_HAS_OPENMP -#endif - -#ifdef EIGEN_HAS_OPENMP -#include -#endif - -// MSVC for windows mobile does not have the errno.h file -#if !(EIGEN_COMP_MSVC && EIGEN_OS_WINCE) && !EIGEN_COMP_ARM -#define EIGEN_HAS_ERRNO -#endif - -#ifdef EIGEN_HAS_ERRNO -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // for CHAR_BIT -// for min/max: -#include - -// for std::is_nothrow_move_assignable -#ifdef EIGEN_INCLUDE_TYPE_TRAITS -#include -#endif - -// for outputting debug info -#ifdef EIGEN_DEBUG_ASSIGN -#include -#endif - -// required for __cpuid, needs to be included after cmath -#if EIGEN_COMP_MSVC && EIGEN_ARCH_i386_OR_x86_64 && !EIGEN_OS_WINCE - #include -#endif - -/** \brief Namespace containing all symbols from the %Eigen library. */ -namespace Eigen { - -inline static const char *SimdInstructionSetsInUse(void) { -#if defined(EIGEN_VECTORIZE_AVX512) - return "AVX512, FMA, AVX2, AVX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2"; -#elif defined(EIGEN_VECTORIZE_AVX) - return "AVX SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2"; -#elif defined(EIGEN_VECTORIZE_SSE4_2) - return "SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2"; -#elif defined(EIGEN_VECTORIZE_SSE4_1) - return "SSE, SSE2, SSE3, SSSE3, SSE4.1"; -#elif defined(EIGEN_VECTORIZE_SSSE3) - return "SSE, SSE2, SSE3, SSSE3"; -#elif defined(EIGEN_VECTORIZE_SSE3) - return "SSE, SSE2, SSE3"; -#elif defined(EIGEN_VECTORIZE_SSE2) - return "SSE, SSE2"; -#elif defined(EIGEN_VECTORIZE_ALTIVEC) - return "AltiVec"; -#elif defined(EIGEN_VECTORIZE_VSX) - return "VSX"; -#elif defined(EIGEN_VECTORIZE_NEON) - return "ARM NEON"; -#elif defined(EIGEN_VECTORIZE_ZVECTOR) - return "S390X ZVECTOR"; -#else - return "None"; -#endif -} - -} // end namespace Eigen - -#if defined EIGEN2_SUPPORT_STAGE40_FULL_EIGEN3_STRICTNESS || defined EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API || defined EIGEN2_SUPPORT_STAGE20_RESOLVE_API_CONFLICTS || defined EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API || defined EIGEN2_SUPPORT -// This will generate an error message: -#error Eigen2-support is only available up to version 3.2. Please go to "http://eigen.tuxfamily.org/index.php?title=Eigen2" for further information -#endif - -namespace Eigen { - -// we use size_t frequently and we'll never remember to prepend it with std:: everytime just to -// ensure QNX/QCC support -using std::size_t; -// gcc 4.6.0 wants std:: for ptrdiff_t -using std::ptrdiff_t; - -} - -/** \defgroup Core_Module Core module - * This is the main module of Eigen providing dense matrix and vector support - * (both fixed and dynamic size) with all the features corresponding to a BLAS library - * and much more... - * - * \code - * #include - * \endcode - */ - -#include "src/Core/util/Constants.h" -#include "src/Core/util/Meta.h" -#include "src/Core/util/ForwardDeclarations.h" -#include "src/Core/util/StaticAssert.h" -#include "src/Core/util/XprHelper.h" -#include "src/Core/util/Memory.h" - -#include "src/Core/NumTraits.h" -#include "src/Core/MathFunctions.h" -#include "src/Core/GenericPacketMath.h" -#include "src/Core/MathFunctionsImpl.h" -#include "src/Core/arch/Default/ConjHelper.h" - -#if defined EIGEN_VECTORIZE_AVX512 - #include "src/Core/arch/SSE/PacketMath.h" - #include "src/Core/arch/AVX/PacketMath.h" - #include "src/Core/arch/AVX512/PacketMath.h" - #include "src/Core/arch/AVX512/MathFunctions.h" -#elif defined EIGEN_VECTORIZE_AVX - // Use AVX for floats and doubles, SSE for integers - #include "src/Core/arch/SSE/PacketMath.h" - #include "src/Core/arch/SSE/Complex.h" - #include "src/Core/arch/SSE/MathFunctions.h" - #include "src/Core/arch/AVX/PacketMath.h" - #include "src/Core/arch/AVX/MathFunctions.h" - #include "src/Core/arch/AVX/Complex.h" - #include "src/Core/arch/AVX/TypeCasting.h" - #include "src/Core/arch/SSE/TypeCasting.h" -#elif defined EIGEN_VECTORIZE_SSE - #include "src/Core/arch/SSE/PacketMath.h" - #include "src/Core/arch/SSE/MathFunctions.h" - #include "src/Core/arch/SSE/Complex.h" - #include "src/Core/arch/SSE/TypeCasting.h" -#elif defined(EIGEN_VECTORIZE_ALTIVEC) || defined(EIGEN_VECTORIZE_VSX) - #include "src/Core/arch/AltiVec/PacketMath.h" - #include "src/Core/arch/AltiVec/MathFunctions.h" - #include "src/Core/arch/AltiVec/Complex.h" -#elif defined EIGEN_VECTORIZE_NEON - #include "src/Core/arch/NEON/PacketMath.h" - #include "src/Core/arch/NEON/MathFunctions.h" - #include "src/Core/arch/NEON/Complex.h" -#elif defined EIGEN_VECTORIZE_ZVECTOR - #include "src/Core/arch/ZVector/PacketMath.h" - #include "src/Core/arch/ZVector/MathFunctions.h" - #include "src/Core/arch/ZVector/Complex.h" -#endif - -// Half float support -#include "src/Core/arch/CUDA/Half.h" -#include "src/Core/arch/CUDA/PacketMathHalf.h" -#include "src/Core/arch/CUDA/TypeCasting.h" - -#if defined EIGEN_VECTORIZE_CUDA - #include "src/Core/arch/CUDA/PacketMath.h" - #include "src/Core/arch/CUDA/MathFunctions.h" -#endif - -#include "src/Core/arch/Default/Settings.h" - -#include "src/Core/functors/TernaryFunctors.h" -#include "src/Core/functors/BinaryFunctors.h" -#include "src/Core/functors/UnaryFunctors.h" -#include "src/Core/functors/NullaryFunctors.h" -#include "src/Core/functors/StlFunctors.h" -#include "src/Core/functors/AssignmentFunctors.h" - -// Specialized functors to enable the processing of complex numbers -// on CUDA devices -#include "src/Core/arch/CUDA/Complex.h" - -#include "src/Core/IO.h" -#include "src/Core/DenseCoeffsBase.h" -#include "src/Core/DenseBase.h" -#include "src/Core/MatrixBase.h" -#include "src/Core/EigenBase.h" - -#include "src/Core/Product.h" -#include "src/Core/CoreEvaluators.h" -#include "src/Core/AssignEvaluator.h" - -#ifndef EIGEN_PARSED_BY_DOXYGEN // work around Doxygen bug triggered by Assign.h r814874 - // at least confirmed with Doxygen 1.5.5 and 1.5.6 - #include "src/Core/Assign.h" -#endif - -#include "src/Core/ArrayBase.h" -#include "src/Core/util/BlasUtil.h" -#include "src/Core/DenseStorage.h" -#include "src/Core/NestByValue.h" - -// #include "src/Core/ForceAlignedAccess.h" - -#include "src/Core/ReturnByValue.h" -#include "src/Core/NoAlias.h" -#include "src/Core/PlainObjectBase.h" -#include "src/Core/Matrix.h" -#include "src/Core/Array.h" -#include "src/Core/CwiseTernaryOp.h" -#include "src/Core/CwiseBinaryOp.h" -#include "src/Core/CwiseUnaryOp.h" -#include "src/Core/CwiseNullaryOp.h" -#include "src/Core/CwiseUnaryView.h" -#include "src/Core/SelfCwiseBinaryOp.h" -#include "src/Core/Dot.h" -#include "src/Core/StableNorm.h" -#include "src/Core/Stride.h" -#include "src/Core/MapBase.h" -#include "src/Core/Map.h" -#include "src/Core/Ref.h" -#include "src/Core/Block.h" -#include "src/Core/VectorBlock.h" -#include "src/Core/Transpose.h" -#include "src/Core/DiagonalMatrix.h" -#include "src/Core/Diagonal.h" -#include "src/Core/DiagonalProduct.h" -#include "src/Core/Redux.h" -#include "src/Core/Visitor.h" -#include "src/Core/Fuzzy.h" -#include "src/Core/Swap.h" -#include "src/Core/CommaInitializer.h" -#include "src/Core/GeneralProduct.h" -#include "src/Core/Solve.h" -#include "src/Core/Inverse.h" -#include "src/Core/SolverBase.h" -#include "src/Core/PermutationMatrix.h" -#include "src/Core/Transpositions.h" -#include "src/Core/TriangularMatrix.h" -#include "src/Core/SelfAdjointView.h" -#include "src/Core/products/GeneralBlockPanelKernel.h" -#include "src/Core/products/Parallelizer.h" -#include "src/Core/ProductEvaluators.h" -#include "src/Core/products/GeneralMatrixVector.h" -#include "src/Core/products/GeneralMatrixMatrix.h" -#include "src/Core/SolveTriangular.h" -#include "src/Core/products/GeneralMatrixMatrixTriangular.h" -#include "src/Core/products/SelfadjointMatrixVector.h" -#include "src/Core/products/SelfadjointMatrixMatrix.h" -#include "src/Core/products/SelfadjointProduct.h" -#include "src/Core/products/SelfadjointRank2Update.h" -#include "src/Core/products/TriangularMatrixVector.h" -#include "src/Core/products/TriangularMatrixMatrix.h" -#include "src/Core/products/TriangularSolverMatrix.h" -#include "src/Core/products/TriangularSolverVector.h" -#include "src/Core/BandMatrix.h" -#include "src/Core/CoreIterators.h" -#include "src/Core/ConditionEstimator.h" - -#include "src/Core/BooleanRedux.h" -#include "src/Core/Select.h" -#include "src/Core/VectorwiseOp.h" -#include "src/Core/Random.h" -#include "src/Core/Replicate.h" -#include "src/Core/Reverse.h" -#include "src/Core/ArrayWrapper.h" - -#ifdef EIGEN_USE_BLAS -#include "src/Core/products/GeneralMatrixMatrix_BLAS.h" -#include "src/Core/products/GeneralMatrixVector_BLAS.h" -#include "src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h" -#include "src/Core/products/SelfadjointMatrixMatrix_BLAS.h" -#include "src/Core/products/SelfadjointMatrixVector_BLAS.h" -#include "src/Core/products/TriangularMatrixMatrix_BLAS.h" -#include "src/Core/products/TriangularMatrixVector_BLAS.h" -#include "src/Core/products/TriangularSolverMatrix_BLAS.h" -#endif // EIGEN_USE_BLAS - -#ifdef EIGEN_USE_MKL_VML -#include "src/Core/Assign_MKL.h" -#endif - -#include "src/Core/GlobalFunctions.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_CORE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Core.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Core.meta deleted file mode 100644 index 7e12001b4..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Core.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 87e700e53523f445d915907743187b4c -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Dense b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Dense deleted file mode 100644 index 5768910bd..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Dense +++ /dev/null @@ -1,7 +0,0 @@ -#include "Core" -#include "LU" -#include "Cholesky" -#include "QR" -#include "SVD" -#include "Geometry" -#include "Eigenvalues" diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Dense.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Dense.meta deleted file mode 100644 index d08b8dbb4..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Dense.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 877451a249ebe49889289776fe600e35 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigen b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigen deleted file mode 100644 index 654c8dc63..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigen +++ /dev/null @@ -1,2 +0,0 @@ -#include "Dense" -#include "Sparse" diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigen.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigen.meta deleted file mode 100644 index 04fa160b7..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigen.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 890da7acf069744df9389ed8f409d297 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigenvalues b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigenvalues deleted file mode 100644 index f3f661b07..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigenvalues +++ /dev/null @@ -1,61 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_EIGENVALUES_MODULE_H -#define EIGEN_EIGENVALUES_MODULE_H - -#include "Core" - -#include "src/Core/util/DisableStupidWarnings.h" - -#include "Cholesky" -#include "Jacobi" -#include "Householder" -#include "LU" -#include "Geometry" - -/** \defgroup Eigenvalues_Module Eigenvalues module - * - * - * - * This module mainly provides various eigenvalue solvers. - * This module also provides some MatrixBase methods, including: - * - MatrixBase::eigenvalues(), - * - MatrixBase::operatorNorm() - * - * \code - * #include - * \endcode - */ - -#include "src/misc/RealSvd2x2.h" -#include "src/Eigenvalues/Tridiagonalization.h" -#include "src/Eigenvalues/RealSchur.h" -#include "src/Eigenvalues/EigenSolver.h" -#include "src/Eigenvalues/SelfAdjointEigenSolver.h" -#include "src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h" -#include "src/Eigenvalues/HessenbergDecomposition.h" -#include "src/Eigenvalues/ComplexSchur.h" -#include "src/Eigenvalues/ComplexEigenSolver.h" -#include "src/Eigenvalues/RealQZ.h" -#include "src/Eigenvalues/GeneralizedEigenSolver.h" -#include "src/Eigenvalues/MatrixBaseEigenvalues.h" -#ifdef EIGEN_USE_LAPACKE -#ifdef EIGEN_USE_MKL -#include "mkl_lapacke.h" -#else -#include "src/misc/lapacke.h" -#endif -#include "src/Eigenvalues/RealSchur_LAPACKE.h" -#include "src/Eigenvalues/ComplexSchur_LAPACKE.h" -#include "src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h" -#endif - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_EIGENVALUES_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigenvalues.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigenvalues.meta deleted file mode 100644 index 85a2bb666..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Eigenvalues.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 3f44c4c1faaff461e97f40d2b1a2a988 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Geometry b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Geometry deleted file mode 100644 index 716d52952..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Geometry +++ /dev/null @@ -1,62 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_GEOMETRY_MODULE_H -#define EIGEN_GEOMETRY_MODULE_H - -#include "Core" - -#include "src/Core/util/DisableStupidWarnings.h" - -#include "SVD" -#include "LU" -#include - -/** \defgroup Geometry_Module Geometry module - * - * This module provides support for: - * - fixed-size homogeneous transformations - * - translation, scaling, 2D and 3D rotations - * - \link Quaternion quaternions \endlink - * - cross products (\ref MatrixBase::cross, \ref MatrixBase::cross3) - * - orthognal vector generation (\ref MatrixBase::unitOrthogonal) - * - some linear components: \link ParametrizedLine parametrized-lines \endlink and \link Hyperplane hyperplanes \endlink - * - \link AlignedBox axis aligned bounding boxes \endlink - * - \link umeyama least-square transformation fitting \endlink - * - * \code - * #include - * \endcode - */ - -#include "src/Geometry/OrthoMethods.h" -#include "src/Geometry/EulerAngles.h" - -#include "src/Geometry/Homogeneous.h" -#include "src/Geometry/RotationBase.h" -#include "src/Geometry/Rotation2D.h" -#include "src/Geometry/Quaternion.h" -#include "src/Geometry/AngleAxis.h" -#include "src/Geometry/Transform.h" -#include "src/Geometry/Translation.h" -#include "src/Geometry/Scaling.h" -#include "src/Geometry/Hyperplane.h" -#include "src/Geometry/ParametrizedLine.h" -#include "src/Geometry/AlignedBox.h" -#include "src/Geometry/Umeyama.h" - -// Use the SSE optimized version whenever possible. At the moment the -// SSE version doesn't compile when AVX is enabled -#if defined EIGEN_VECTORIZE_SSE && !defined EIGEN_VECTORIZE_AVX -#include "src/Geometry/arch/Geometry_SSE.h" -#endif - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_GEOMETRY_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ - diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Geometry.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Geometry.meta deleted file mode 100644 index ff77757bc..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Geometry.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6ce92dd52b0454b7082634b54d6ba52e -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Householder b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Householder deleted file mode 100644 index 89cd81b1a..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Householder +++ /dev/null @@ -1,30 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_HOUSEHOLDER_MODULE_H -#define EIGEN_HOUSEHOLDER_MODULE_H - -#include "Core" - -#include "src/Core/util/DisableStupidWarnings.h" - -/** \defgroup Householder_Module Householder module - * This module provides Householder transformations. - * - * \code - * #include - * \endcode - */ - -#include "src/Householder/Householder.h" -#include "src/Householder/HouseholderSequence.h" -#include "src/Householder/BlockHouseholder.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_HOUSEHOLDER_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Householder.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Householder.meta deleted file mode 100644 index e8a05636c..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Householder.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6b802cc8d96894fa5adffd48fb355207 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/IterativeLinearSolvers b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/IterativeLinearSolvers deleted file mode 100644 index 957d5750b..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/IterativeLinearSolvers +++ /dev/null @@ -1,48 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H -#define EIGEN_ITERATIVELINEARSOLVERS_MODULE_H - -#include "SparseCore" -#include "OrderingMethods" - -#include "src/Core/util/DisableStupidWarnings.h" - -/** - * \defgroup IterativeLinearSolvers_Module IterativeLinearSolvers module - * - * This module currently provides iterative methods to solve problems of the form \c A \c x = \c b, where \c A is a squared matrix, usually very large and sparse. - * Those solvers are accessible via the following classes: - * - ConjugateGradient for selfadjoint (hermitian) matrices, - * - LeastSquaresConjugateGradient for rectangular least-square problems, - * - BiCGSTAB for general square matrices. - * - * These iterative solvers are associated with some preconditioners: - * - IdentityPreconditioner - not really useful - * - DiagonalPreconditioner - also called Jacobi preconditioner, work very well on diagonal dominant matrices. - * - IncompleteLUT - incomplete LU factorization with dual thresholding - * - * Such problems can also be solved using the direct sparse decomposition modules: SparseCholesky, CholmodSupport, UmfPackSupport, SuperLUSupport. - * - \code - #include - \endcode - */ - -#include "src/IterativeLinearSolvers/SolveWithGuess.h" -#include "src/IterativeLinearSolvers/IterativeSolverBase.h" -#include "src/IterativeLinearSolvers/BasicPreconditioners.h" -#include "src/IterativeLinearSolvers/ConjugateGradient.h" -#include "src/IterativeLinearSolvers/LeastSquareConjugateGradient.h" -#include "src/IterativeLinearSolvers/BiCGSTAB.h" -#include "src/IterativeLinearSolvers/IncompleteLUT.h" -#include "src/IterativeLinearSolvers/IncompleteCholesky.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_ITERATIVELINEARSOLVERS_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/IterativeLinearSolvers.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/IterativeLinearSolvers.meta deleted file mode 100644 index a8fb62d0e..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/IterativeLinearSolvers.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 2ec6bf70f8a4c4726863321546dcea2d -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Jacobi b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Jacobi deleted file mode 100644 index 17c1d785a..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Jacobi +++ /dev/null @@ -1,33 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_JACOBI_MODULE_H -#define EIGEN_JACOBI_MODULE_H - -#include "Core" - -#include "src/Core/util/DisableStupidWarnings.h" - -/** \defgroup Jacobi_Module Jacobi module - * This module provides Jacobi and Givens rotations. - * - * \code - * #include - * \endcode - * - * In addition to listed classes, it defines the two following MatrixBase methods to apply a Jacobi or Givens rotation: - * - MatrixBase::applyOnTheLeft() - * - MatrixBase::applyOnTheRight(). - */ - -#include "src/Jacobi/Jacobi.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_JACOBI_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ - diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Jacobi.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Jacobi.meta deleted file mode 100644 index fe497a429..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Jacobi.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5d33816cbe0284e0884c71319c91616c -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/LU b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/LU deleted file mode 100644 index 6418a86e1..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/LU +++ /dev/null @@ -1,50 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_LU_MODULE_H -#define EIGEN_LU_MODULE_H - -#include "Core" - -#include "src/Core/util/DisableStupidWarnings.h" - -/** \defgroup LU_Module LU module - * This module includes %LU decomposition and related notions such as matrix inversion and determinant. - * This module defines the following MatrixBase methods: - * - MatrixBase::inverse() - * - MatrixBase::determinant() - * - * \code - * #include - * \endcode - */ - -#include "src/misc/Kernel.h" -#include "src/misc/Image.h" -#include "src/LU/FullPivLU.h" -#include "src/LU/PartialPivLU.h" -#ifdef EIGEN_USE_LAPACKE -#ifdef EIGEN_USE_MKL -#include "mkl_lapacke.h" -#else -#include "src/misc/lapacke.h" -#endif -#include "src/LU/PartialPivLU_LAPACKE.h" -#endif -#include "src/LU/Determinant.h" -#include "src/LU/InverseImpl.h" - -// Use the SSE optimized version whenever possible. At the moment the -// SSE version doesn't compile when AVX is enabled -#if defined EIGEN_VECTORIZE_SSE && !defined EIGEN_VECTORIZE_AVX - #include "src/LU/arch/Inverse_SSE.h" -#endif - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_LU_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/LU.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/LU.meta deleted file mode 100644 index 9a79b47c6..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/LU.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: acc92a7a3bec642008ef595fafece0f9 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/MetisSupport b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/MetisSupport deleted file mode 100644 index 85c41bf34..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/MetisSupport +++ /dev/null @@ -1,35 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_METISSUPPORT_MODULE_H -#define EIGEN_METISSUPPORT_MODULE_H - -#include "SparseCore" - -#include "src/Core/util/DisableStupidWarnings.h" - -extern "C" { -#include -} - - -/** \ingroup Support_modules - * \defgroup MetisSupport_Module MetisSupport module - * - * \code - * #include - * \endcode - * This module defines an interface to the METIS reordering package (http://glaros.dtc.umn.edu/gkhome/views/metis). - * It can be used just as any other built-in method as explained in \link OrderingMethods_Module here. \endlink - */ - - -#include "src/MetisSupport/MetisSupport.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_METISSUPPORT_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/MetisSupport.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/MetisSupport.meta deleted file mode 100644 index 5e02a964d..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/MetisSupport.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1a1099bd4f07a426d8ec360b47f71906 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/OrderingMethods b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/OrderingMethods deleted file mode 100644 index d8ea36193..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/OrderingMethods +++ /dev/null @@ -1,73 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_ORDERINGMETHODS_MODULE_H -#define EIGEN_ORDERINGMETHODS_MODULE_H - -#include "SparseCore" - -#include "src/Core/util/DisableStupidWarnings.h" - -/** - * \defgroup OrderingMethods_Module OrderingMethods module - * - * This module is currently for internal use only - * - * It defines various built-in and external ordering methods for sparse matrices. - * They are typically used to reduce the number of elements during - * the sparse matrix decomposition (LLT, LU, QR). - * Precisely, in a preprocessing step, a permutation matrix P is computed using - * those ordering methods and applied to the columns of the matrix. - * Using for instance the sparse Cholesky decomposition, it is expected that - * the nonzeros elements in LLT(A*P) will be much smaller than that in LLT(A). - * - * - * Usage : - * \code - * #include - * \endcode - * - * A simple usage is as a template parameter in the sparse decomposition classes : - * - * \code - * SparseLU > solver; - * \endcode - * - * \code - * SparseQR > solver; - * \endcode - * - * It is possible as well to call directly a particular ordering method for your own purpose, - * \code - * AMDOrdering ordering; - * PermutationMatrix perm; - * SparseMatrix A; - * //Fill the matrix ... - * - * ordering(A, perm); // Call AMD - * \endcode - * - * \note Some of these methods (like AMD or METIS), need the sparsity pattern - * of the input matrix to be symmetric. When the matrix is structurally unsymmetric, - * Eigen computes internally the pattern of \f$A^T*A\f$ before calling the method. - * If your matrix is already symmetric (at leat in structure), you can avoid that - * by calling the method with a SelfAdjointView type. - * - * \code - * // Call the ordering on the pattern of the lower triangular matrix A - * ordering(A.selfadjointView(), perm); - * \endcode - */ - -#ifndef EIGEN_MPL2_ONLY -#include "src/OrderingMethods/Amd.h" -#endif - -#include "src/OrderingMethods/Ordering.h" -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_ORDERINGMETHODS_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/OrderingMethods.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/OrderingMethods.meta deleted file mode 100644 index b00482375..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/OrderingMethods.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 8009dc85fdcf7466b91ead0af4b6492b -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PaStiXSupport b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PaStiXSupport deleted file mode 100644 index de3a63b4d..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PaStiXSupport +++ /dev/null @@ -1,48 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_PASTIXSUPPORT_MODULE_H -#define EIGEN_PASTIXSUPPORT_MODULE_H - -#include "SparseCore" - -#include "src/Core/util/DisableStupidWarnings.h" - -extern "C" { -#include -#include -} - -#ifdef complex -#undef complex -#endif - -/** \ingroup Support_modules - * \defgroup PaStiXSupport_Module PaStiXSupport module - * - * This module provides an interface to the PaSTiX library. - * PaSTiX is a general \b supernodal, \b parallel and \b opensource sparse solver. - * It provides the two following main factorization classes: - * - class PastixLLT : a supernodal, parallel LLt Cholesky factorization. - * - class PastixLDLT: a supernodal, parallel LDLt Cholesky factorization. - * - class PastixLU : a supernodal, parallel LU factorization (optimized for a symmetric pattern). - * - * \code - * #include - * \endcode - * - * In order to use this module, the PaSTiX headers must be accessible from the include paths, and your binary must be linked to the PaSTiX library and its dependencies. - * The dependencies depend on how PaSTiX has been compiled. - * For a cmake based project, you can use our FindPaSTiX.cmake module to help you in this task. - * - */ - -#include "src/PaStiXSupport/PaStiXSupport.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_PASTIXSUPPORT_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PaStiXSupport.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PaStiXSupport.meta deleted file mode 100644 index 03060f843..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PaStiXSupport.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 17da8c343c1c2421ba7cfaaf5922d402 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PardisoSupport b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PardisoSupport deleted file mode 100644 index 340edf51f..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PardisoSupport +++ /dev/null @@ -1,35 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_PARDISOSUPPORT_MODULE_H -#define EIGEN_PARDISOSUPPORT_MODULE_H - -#include "SparseCore" - -#include "src/Core/util/DisableStupidWarnings.h" - -#include - -/** \ingroup Support_modules - * \defgroup PardisoSupport_Module PardisoSupport module - * - * This module brings support for the Intel(R) MKL PARDISO direct sparse solvers. - * - * \code - * #include - * \endcode - * - * In order to use this module, the MKL headers must be accessible from the include paths, and your binary must be linked to the MKL library and its dependencies. - * See this \ref TopicUsingIntelMKL "page" for more information on MKL-Eigen integration. - * - */ - -#include "src/PardisoSupport/PardisoSupport.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_PARDISOSUPPORT_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PardisoSupport.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PardisoSupport.meta deleted file mode 100644 index 0a74c2522..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/PardisoSupport.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6546c23f0d0344220bf44b5c1e180695 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QR b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QR deleted file mode 100644 index c7e914469..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QR +++ /dev/null @@ -1,51 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_QR_MODULE_H -#define EIGEN_QR_MODULE_H - -#include "Core" - -#include "src/Core/util/DisableStupidWarnings.h" - -#include "Cholesky" -#include "Jacobi" -#include "Householder" - -/** \defgroup QR_Module QR module - * - * - * - * This module provides various QR decompositions - * This module also provides some MatrixBase methods, including: - * - MatrixBase::householderQr() - * - MatrixBase::colPivHouseholderQr() - * - MatrixBase::fullPivHouseholderQr() - * - * \code - * #include - * \endcode - */ - -#include "src/QR/HouseholderQR.h" -#include "src/QR/FullPivHouseholderQR.h" -#include "src/QR/ColPivHouseholderQR.h" -#include "src/QR/CompleteOrthogonalDecomposition.h" -#ifdef EIGEN_USE_LAPACKE -#ifdef EIGEN_USE_MKL -#include "mkl_lapacke.h" -#else -#include "src/misc/lapacke.h" -#endif -#include "src/QR/HouseholderQR_LAPACKE.h" -#include "src/QR/ColPivHouseholderQR_LAPACKE.h" -#endif - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_QR_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QR.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QR.meta deleted file mode 100644 index ca25d6617..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QR.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 16e7b647232f043b6b259ef7384a34bc -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QtAlignedMalloc b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QtAlignedMalloc deleted file mode 100644 index 4f07df02a..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QtAlignedMalloc +++ /dev/null @@ -1,40 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_QTMALLOC_MODULE_H -#define EIGEN_QTMALLOC_MODULE_H - -#include "Core" - -#if (!EIGEN_MALLOC_ALREADY_ALIGNED) - -#include "src/Core/util/DisableStupidWarnings.h" - -void *qMalloc(std::size_t size) -{ - return Eigen::internal::aligned_malloc(size); -} - -void qFree(void *ptr) -{ - Eigen::internal::aligned_free(ptr); -} - -void *qRealloc(void *ptr, std::size_t size) -{ - void* newPtr = Eigen::internal::aligned_malloc(size); - std::memcpy(newPtr, ptr, size); - Eigen::internal::aligned_free(ptr); - return newPtr; -} - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif - -#endif // EIGEN_QTMALLOC_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QtAlignedMalloc.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QtAlignedMalloc.meta deleted file mode 100644 index c60563cc5..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/QtAlignedMalloc.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6dbd9bbe4629749d6bf993d6e6ff3a7b -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SPQRSupport b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SPQRSupport deleted file mode 100644 index f70390c17..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SPQRSupport +++ /dev/null @@ -1,34 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_SPQRSUPPORT_MODULE_H -#define EIGEN_SPQRSUPPORT_MODULE_H - -#include "SparseCore" - -#include "src/Core/util/DisableStupidWarnings.h" - -#include "SuiteSparseQR.hpp" - -/** \ingroup Support_modules - * \defgroup SPQRSupport_Module SuiteSparseQR module - * - * This module provides an interface to the SPQR library, which is part of the suitesparse package. - * - * \code - * #include - * \endcode - * - * In order to use this module, the SPQR headers must be accessible from the include paths, and your binary must be linked to the SPQR library and its dependencies (Cholmod, AMD, COLAMD,...). - * For a cmake based project, you can use our FindSPQR.cmake and FindCholmod.Cmake modules - * - */ - -#include "src/CholmodSupport/CholmodSupport.h" -#include "src/SPQRSupport/SuiteSparseQRSupport.h" - -#endif diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SPQRSupport.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SPQRSupport.meta deleted file mode 100644 index 65c84de4c..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SPQRSupport.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a3d77682f170c487daa20e11d401ee45 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SVD b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SVD deleted file mode 100644 index 5d0e75f7f..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SVD +++ /dev/null @@ -1,51 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_SVD_MODULE_H -#define EIGEN_SVD_MODULE_H - -#include "QR" -#include "Householder" -#include "Jacobi" - -#include "src/Core/util/DisableStupidWarnings.h" - -/** \defgroup SVD_Module SVD module - * - * - * - * This module provides SVD decomposition for matrices (both real and complex). - * Two decomposition algorithms are provided: - * - JacobiSVD implementing two-sided Jacobi iterations is numerically very accurate, fast for small matrices, but very slow for larger ones. - * - BDCSVD implementing a recursive divide & conquer strategy on top of an upper-bidiagonalization which remains fast for large problems. - * These decompositions are accessible via the respective classes and following MatrixBase methods: - * - MatrixBase::jacobiSvd() - * - MatrixBase::bdcSvd() - * - * \code - * #include - * \endcode - */ - -#include "src/misc/RealSvd2x2.h" -#include "src/SVD/UpperBidiagonalization.h" -#include "src/SVD/SVDBase.h" -#include "src/SVD/JacobiSVD.h" -#include "src/SVD/BDCSVD.h" -#if defined(EIGEN_USE_LAPACKE) && !defined(EIGEN_USE_LAPACKE_STRICT) -#ifdef EIGEN_USE_MKL -#include "mkl_lapacke.h" -#else -#include "src/misc/lapacke.h" -#endif -#include "src/SVD/JacobiSVD_LAPACKE.h" -#endif - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_SVD_MODULE_H -/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SVD.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SVD.meta deleted file mode 100644 index cfc542c69..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SVD.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5a99a015a3be6450aaac93cc41874515 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Sparse b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Sparse deleted file mode 100644 index 136e681a1..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Sparse +++ /dev/null @@ -1,36 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_SPARSE_MODULE_H -#define EIGEN_SPARSE_MODULE_H - -/** \defgroup Sparse_Module Sparse meta-module - * - * Meta-module including all related modules: - * - \ref SparseCore_Module - * - \ref OrderingMethods_Module - * - \ref SparseCholesky_Module - * - \ref SparseLU_Module - * - \ref SparseQR_Module - * - \ref IterativeLinearSolvers_Module - * - \code - #include - \endcode - */ - -#include "SparseCore" -#include "OrderingMethods" -#ifndef EIGEN_MPL2_ONLY -#include "SparseCholesky" -#endif -#include "SparseLU" -#include "SparseQR" -#include "IterativeLinearSolvers" - -#endif // EIGEN_SPARSE_MODULE_H - diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Sparse.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Sparse.meta deleted file mode 100644 index 79e79254d..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Sparse.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ae1b52a3a9bef4b838d5edca580f8fe3 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCholesky b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCholesky deleted file mode 100644 index b6a320c40..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCholesky +++ /dev/null @@ -1,45 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2008-2013 Gael Guennebaud -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_SPARSECHOLESKY_MODULE_H -#define EIGEN_SPARSECHOLESKY_MODULE_H - -#include "SparseCore" -#include "OrderingMethods" - -#include "src/Core/util/DisableStupidWarnings.h" - -/** - * \defgroup SparseCholesky_Module SparseCholesky module - * - * This module currently provides two variants of the direct sparse Cholesky decomposition for selfadjoint (hermitian) matrices. - * Those decompositions are accessible via the following classes: - * - SimplicialLLt, - * - SimplicialLDLt - * - * Such problems can also be solved using the ConjugateGradient solver from the IterativeLinearSolvers module. - * - * \code - * #include - * \endcode - */ - -#ifdef EIGEN_MPL2_ONLY -#error The SparseCholesky module has nothing to offer in MPL2 only mode -#endif - -#include "src/SparseCholesky/SimplicialCholesky.h" - -#ifndef EIGEN_MPL2_ONLY -#include "src/SparseCholesky/SimplicialCholesky_impl.h" -#endif - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_SPARSECHOLESKY_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCholesky.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCholesky.meta deleted file mode 100644 index 26ac02c59..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCholesky.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a1547d4db42eb482e929628cc51c7463 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCore b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCore deleted file mode 100644 index 76966c4c4..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCore +++ /dev/null @@ -1,69 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_SPARSECORE_MODULE_H -#define EIGEN_SPARSECORE_MODULE_H - -#include "Core" - -#include "src/Core/util/DisableStupidWarnings.h" - -#include -#include -#include -#include -#include - -/** - * \defgroup SparseCore_Module SparseCore module - * - * This module provides a sparse matrix representation, and basic associated matrix manipulations - * and operations. - * - * See the \ref TutorialSparse "Sparse tutorial" - * - * \code - * #include - * \endcode - * - * This module depends on: Core. - */ - -#include "src/SparseCore/SparseUtil.h" -#include "src/SparseCore/SparseMatrixBase.h" -#include "src/SparseCore/SparseAssign.h" -#include "src/SparseCore/CompressedStorage.h" -#include "src/SparseCore/AmbiVector.h" -#include "src/SparseCore/SparseCompressedBase.h" -#include "src/SparseCore/SparseMatrix.h" -#include "src/SparseCore/SparseMap.h" -#include "src/SparseCore/MappedSparseMatrix.h" -#include "src/SparseCore/SparseVector.h" -#include "src/SparseCore/SparseRef.h" -#include "src/SparseCore/SparseCwiseUnaryOp.h" -#include "src/SparseCore/SparseCwiseBinaryOp.h" -#include "src/SparseCore/SparseTranspose.h" -#include "src/SparseCore/SparseBlock.h" -#include "src/SparseCore/SparseDot.h" -#include "src/SparseCore/SparseRedux.h" -#include "src/SparseCore/SparseView.h" -#include "src/SparseCore/SparseDiagonalProduct.h" -#include "src/SparseCore/ConservativeSparseSparseProduct.h" -#include "src/SparseCore/SparseSparseProductWithPruning.h" -#include "src/SparseCore/SparseProduct.h" -#include "src/SparseCore/SparseDenseProduct.h" -#include "src/SparseCore/SparseSelfAdjointView.h" -#include "src/SparseCore/SparseTriangularView.h" -#include "src/SparseCore/TriangularSolver.h" -#include "src/SparseCore/SparsePermutation.h" -#include "src/SparseCore/SparseFuzzy.h" -#include "src/SparseCore/SparseSolverBase.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_SPARSECORE_MODULE_H - diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCore.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCore.meta deleted file mode 100644 index c37c53a1f..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseCore.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 356b9c0d2ecc4471f8913a5ab3d1c0c8 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseLU b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseLU deleted file mode 100644 index 38b38b531..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseLU +++ /dev/null @@ -1,46 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2012 Désiré Nuentsa-Wakam -// Copyright (C) 2012 Gael Guennebaud -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_SPARSELU_MODULE_H -#define EIGEN_SPARSELU_MODULE_H - -#include "SparseCore" - -/** - * \defgroup SparseLU_Module SparseLU module - * This module defines a supernodal factorization of general sparse matrices. - * The code is fully optimized for supernode-panel updates with specialized kernels. - * Please, see the documentation of the SparseLU class for more details. - */ - -// Ordering interface -#include "OrderingMethods" - -#include "src/SparseLU/SparseLU_gemm_kernel.h" - -#include "src/SparseLU/SparseLU_Structs.h" -#include "src/SparseLU/SparseLU_SupernodalMatrix.h" -#include "src/SparseLU/SparseLUImpl.h" -#include "src/SparseCore/SparseColEtree.h" -#include "src/SparseLU/SparseLU_Memory.h" -#include "src/SparseLU/SparseLU_heap_relax_snode.h" -#include "src/SparseLU/SparseLU_relax_snode.h" -#include "src/SparseLU/SparseLU_pivotL.h" -#include "src/SparseLU/SparseLU_panel_dfs.h" -#include "src/SparseLU/SparseLU_kernel_bmod.h" -#include "src/SparseLU/SparseLU_panel_bmod.h" -#include "src/SparseLU/SparseLU_column_dfs.h" -#include "src/SparseLU/SparseLU_column_bmod.h" -#include "src/SparseLU/SparseLU_copy_to_ucol.h" -#include "src/SparseLU/SparseLU_pruneL.h" -#include "src/SparseLU/SparseLU_Utils.h" -#include "src/SparseLU/SparseLU.h" - -#endif // EIGEN_SPARSELU_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseLU.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseLU.meta deleted file mode 100644 index ce6826f14..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseLU.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ef963f2c9b0f54b94ad251b5c1a9a989 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseQR b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseQR deleted file mode 100644 index a6f3b7f7d..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseQR +++ /dev/null @@ -1,37 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_SPARSEQR_MODULE_H -#define EIGEN_SPARSEQR_MODULE_H - -#include "SparseCore" -#include "OrderingMethods" -#include "src/Core/util/DisableStupidWarnings.h" - -/** \defgroup SparseQR_Module SparseQR module - * \brief Provides QR decomposition for sparse matrices - * - * This module provides a simplicial version of the left-looking Sparse QR decomposition. - * The columns of the input matrix should be reordered to limit the fill-in during the - * decomposition. Built-in methods (COLAMD, AMD) or external methods (METIS) can be used to this end. - * See the \link OrderingMethods_Module OrderingMethods\endlink module for the list - * of built-in and external ordering methods. - * - * \code - * #include - * \endcode - * - * - */ - -#include "OrderingMethods" -#include "src/SparseCore/SparseColEtree.h" -#include "src/SparseQR/SparseQR.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseQR.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseQR.meta deleted file mode 100644 index 2a3ee4cf5..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SparseQR.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e7372fee2e51f464e843487249c24d56 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdDeque b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdDeque deleted file mode 100644 index bc68397be..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdDeque +++ /dev/null @@ -1,27 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2009 Gael Guennebaud -// Copyright (C) 2009 Hauke Heibel -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_STDDEQUE_MODULE_H -#define EIGEN_STDDEQUE_MODULE_H - -#include "Core" -#include - -#if EIGEN_COMP_MSVC && EIGEN_OS_WIN64 && (EIGEN_MAX_STATIC_ALIGN_BYTES<=16) /* MSVC auto aligns up to 16 bytes in 64 bit builds */ - -#define EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(...) - -#else - -#include "src/StlSupport/StdDeque.h" - -#endif - -#endif // EIGEN_STDDEQUE_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdDeque.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdDeque.meta deleted file mode 100644 index b00bdff95..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdDeque.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 6f85d5f4195464717858303ae20d1e21 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdList b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdList deleted file mode 100644 index 4c6262c08..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdList +++ /dev/null @@ -1,26 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2009 Hauke Heibel -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_STDLIST_MODULE_H -#define EIGEN_STDLIST_MODULE_H - -#include "Core" -#include - -#if EIGEN_COMP_MSVC && EIGEN_OS_WIN64 && (EIGEN_MAX_STATIC_ALIGN_BYTES<=16) /* MSVC auto aligns up to 16 bytes in 64 bit builds */ - -#define EIGEN_DEFINE_STL_LIST_SPECIALIZATION(...) - -#else - -#include "src/StlSupport/StdList.h" - -#endif - -#endif // EIGEN_STDLIST_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdList.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdList.meta deleted file mode 100644 index 08454e369..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdList.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: eaf3fbec34f9448cf8ad148f37b83ac7 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdVector b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdVector deleted file mode 100644 index 0c4697ad5..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdVector +++ /dev/null @@ -1,27 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2009 Gael Guennebaud -// Copyright (C) 2009 Hauke Heibel -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_STDVECTOR_MODULE_H -#define EIGEN_STDVECTOR_MODULE_H - -#include "Core" -#include - -#if EIGEN_COMP_MSVC && EIGEN_OS_WIN64 && (EIGEN_MAX_STATIC_ALIGN_BYTES<=16) /* MSVC auto aligns up to 16 bytes in 64 bit builds */ - -#define EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(...) - -#else - -#include "src/StlSupport/StdVector.h" - -#endif - -#endif // EIGEN_STDVECTOR_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdVector.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdVector.meta deleted file mode 100644 index c25274800..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/StdVector.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f72859458d444491385a4b4df1f4b2bf -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SuperLUSupport b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SuperLUSupport deleted file mode 100644 index 59312a82d..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SuperLUSupport +++ /dev/null @@ -1,64 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_SUPERLUSUPPORT_MODULE_H -#define EIGEN_SUPERLUSUPPORT_MODULE_H - -#include "SparseCore" - -#include "src/Core/util/DisableStupidWarnings.h" - -#ifdef EMPTY -#define EIGEN_EMPTY_WAS_ALREADY_DEFINED -#endif - -typedef int int_t; -#include -#include -#include - -// slu_util.h defines a preprocessor token named EMPTY which is really polluting, -// so we remove it in favor of a SUPERLU_EMPTY token. -// If EMPTY was already defined then we don't undef it. - -#if defined(EIGEN_EMPTY_WAS_ALREADY_DEFINED) -# undef EIGEN_EMPTY_WAS_ALREADY_DEFINED -#elif defined(EMPTY) -# undef EMPTY -#endif - -#define SUPERLU_EMPTY (-1) - -namespace Eigen { struct SluMatrix; } - -/** \ingroup Support_modules - * \defgroup SuperLUSupport_Module SuperLUSupport module - * - * This module provides an interface to the SuperLU library. - * It provides the following factorization class: - * - class SuperLU: a supernodal sequential LU factorization. - * - class SuperILU: a supernodal sequential incomplete LU factorization (to be used as a preconditioner for iterative methods). - * - * \warning This wrapper requires at least versions 4.0 of SuperLU. The 3.x versions are not supported. - * - * \warning When including this module, you have to use SUPERLU_EMPTY instead of EMPTY which is no longer defined because it is too polluting. - * - * \code - * #include - * \endcode - * - * In order to use this module, the superlu headers must be accessible from the include paths, and your binary must be linked to the superlu library and its dependencies. - * The dependencies depend on how superlu has been compiled. - * For a cmake based project, you can use our FindSuperLU.cmake module to help you in this task. - * - */ - -#include "src/SuperLUSupport/SuperLUSupport.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_SUPERLUSUPPORT_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SuperLUSupport.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SuperLUSupport.meta deleted file mode 100644 index f33f2cc9e..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/SuperLUSupport.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 413fb65a9375d40b098933ff0d99b031 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/UmfPackSupport b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/UmfPackSupport deleted file mode 100644 index 00eec8087..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/UmfPackSupport +++ /dev/null @@ -1,40 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_UMFPACKSUPPORT_MODULE_H -#define EIGEN_UMFPACKSUPPORT_MODULE_H - -#include "SparseCore" - -#include "src/Core/util/DisableStupidWarnings.h" - -extern "C" { -#include -} - -/** \ingroup Support_modules - * \defgroup UmfPackSupport_Module UmfPackSupport module - * - * This module provides an interface to the UmfPack library which is part of the suitesparse package. - * It provides the following factorization class: - * - class UmfPackLU: a multifrontal sequential LU factorization. - * - * \code - * #include - * \endcode - * - * In order to use this module, the umfpack headers must be accessible from the include paths, and your binary must be linked to the umfpack library and its dependencies. - * The dependencies depend on how umfpack has been compiled. - * For a cmake based project, you can use our FindUmfPack.cmake module to help you in this task. - * - */ - -#include "src/UmfPackSupport/UmfPackSupport.h" - -#include "src/Core/util/ReenableStupidWarnings.h" - -#endif // EIGEN_UMFPACKSUPPORT_MODULE_H diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/UmfPackSupport.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/UmfPackSupport.meta deleted file mode 100644 index 490f3421b..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/UmfPackSupport.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: f0e7fe4137c9241c08cbc745c4a34d31 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature.meta deleted file mode 100644 index 7a8ec8e65..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 41100ab29033f4c358fbfed418551bc0 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature/CodeResources b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature/CodeResources deleted file mode 100644 index 578027da5..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,567 +0,0 @@ - - - - - files - - Resources/CMakeLists.txt - - cOtLXxofm3lG1qCCrIvrwNXC1XA= - - Resources/Cholesky - - rbUhwzsxHGtY4Odila0J8dDsV7k= - - Resources/CholmodSupport - - JcYHIXmbeMaeHAwwYAmP0vUX5r0= - - Resources/Core - - 1e57zXoa4MfI2FfPzMoxe9qkZFM= - - Resources/Dense - - l6aicKxqX1+TG9mrHj2EXaWnn/I= - - Resources/Eigen - - T4sCLK+7QbphwVpDFbY6bkR8w24= - - Resources/Eigenvalues - - QxGMXYy3HLNE6th4DJ2CZNO5+Gg= - - Resources/Geometry - - 6bH+dsNAF2978gZVJzjyBQemqdw= - - Resources/Householder - - 9lmBF6j1KedsAiS56htztnuZTWw= - - Resources/IterativeLinearSolvers - - 605Q7NK74EEQXA5Z4zmB+EBlFk8= - - Resources/Jacobi - - Me3Qwr2J524HN3kmNL2jw6Oyrco= - - Resources/LU - - B2LyoXHxqVkjJiOGrnjWbagyjjs= - - Resources/MetisSupport - - N0SrA+L+jFsTerjHBpj1FQwUko0= - - Resources/OrderingMethods - - 13PUHtslb3Pl8BZZPML035HSo+s= - - Resources/PaStiXSupport - - f3z7K4pYDhKZF4jZ12qik6ViZNE= - - Resources/PardisoSupport - - u0iXf0ZsM2IbFXXzJgrB/ytE1Cg= - - Resources/QR - - QXKl7/7DIw2i7Apx3qN5GA3GuhY= - - Resources/QtAlignedMalloc - - rpLY5WInNGmI/WRfJUQPjO3wpxA= - - Resources/SPQRSupport - - PhbG0vB6FuoQqcTZcXTmaSvBA5s= - - Resources/SVD - - v/sdbqyMvo2FJojRWaYGrVNQfCY= - - Resources/Sparse - - HRDaPlp1w8nkb6ljJjDbZwK8CDg= - - Resources/SparseCholesky - - ekL4dP8xYzHzS4CgaMScIxwyqLc= - - Resources/SparseCore - - kxsvRhvb2pV54xnktT8W/qGgMSA= - - Resources/SparseLU - - lK/U4MqbwhmtHbKWdoE5YfxrPLI= - - Resources/SparseQR - - wcjlNfy9k2yMG1ItF6ig+6EJme0= - - Resources/StdDeque - - IoY/3GB4PujtiSHyQua86fal3B0= - - Resources/StdList - - MNRej3tS60Pw58N2+MRA59U9mFs= - - Resources/StdVector - - +ZDwOyhJ5VynkBV0pM3nEgn13Ho= - - Resources/SuperLUSupport - - RwjfZ7P3MquMRVRW2ETZptE1GUU= - - Resources/UmfPackSupport - - M8QOb2WmVgN/4pnOv9+urwokZUw= - - - files2 - - Resources/CMakeLists.txt - - hash - - cOtLXxofm3lG1qCCrIvrwNXC1XA= - - hash2 - - 6Z3rtsJEI2ZM9hDVP6sJLuqx7CMHa5Zkdt3+c68SAgI= - - - Resources/Cholesky - - hash - - rbUhwzsxHGtY4Odila0J8dDsV7k= - - hash2 - - ZiWSB5ItbHNVDzQN7dEjKix/S9k64PnC8ekY5ivWPiY= - - - Resources/CholmodSupport - - hash - - JcYHIXmbeMaeHAwwYAmP0vUX5r0= - - hash2 - - JvDRvQZ3eFOU8fTrLN33Y0I/cDwJQbPlg3PpVbATAyc= - - - Resources/Core - - hash - - 1e57zXoa4MfI2FfPzMoxe9qkZFM= - - hash2 - - XZUAlmhc6e7fCZqjpfARdPxo7EHD8MMBHig0y3kz+m0= - - - Resources/Dense - - hash - - l6aicKxqX1+TG9mrHj2EXaWnn/I= - - hash2 - - UyXJ1NaT5QTuASxSda1LELE1pwHL2HwURm0uoh6iLuU= - - - Resources/Eigen - - hash - - T4sCLK+7QbphwVpDFbY6bkR8w24= - - hash2 - - sEc7XXwM2TEdSpBUgWLozxYJBEdocff7dJ6WJOmz39E= - - - Resources/Eigenvalues - - hash - - QxGMXYy3HLNE6th4DJ2CZNO5+Gg= - - hash2 - - FK3msK6JiMFj0GpeJfpW6N3dEF0AdcjQc4vzPWfTN4w= - - - Resources/Geometry - - hash - - 6bH+dsNAF2978gZVJzjyBQemqdw= - - hash2 - - MelWZv7cjgpCH1wOIT0JFuroXKS0J1Eu4SSg1xdnGkk= - - - Resources/Householder - - hash - - 9lmBF6j1KedsAiS56htztnuZTWw= - - hash2 - - +uLEXDVHKaNzk09RBGAkWNuziztuYfWO9bFWt7q6t0k= - - - Resources/IterativeLinearSolvers - - hash - - 605Q7NK74EEQXA5Z4zmB+EBlFk8= - - hash2 - - hP+jisHvO+AFv/UAt4tSnB4WT8UGN4Nv+GSP6hJ7dPc= - - - Resources/Jacobi - - hash - - Me3Qwr2J524HN3kmNL2jw6Oyrco= - - hash2 - - xIpgdOLmWzZI3YZxV0p0zuJT2OK5SGb1QQ8SSlVYkjI= - - - Resources/LU - - hash - - B2LyoXHxqVkjJiOGrnjWbagyjjs= - - hash2 - - i4A6iQsITpNuynj68eNhunZpcYHS66XWgQ9gInPvlZU= - - - Resources/MetisSupport - - hash - - N0SrA+L+jFsTerjHBpj1FQwUko0= - - hash2 - - 5G1R0wZZYkCKQDSA8snK1OfWH7UJweSmlSdHUSdJaaI= - - - Resources/OrderingMethods - - hash - - 13PUHtslb3Pl8BZZPML035HSo+s= - - hash2 - - mimHU/G8AMZZHPPY+vIFOsmwyNNi5xuiE2UEyoy9jZ4= - - - Resources/PaStiXSupport - - hash - - f3z7K4pYDhKZF4jZ12qik6ViZNE= - - hash2 - - EUhTmIWLVP/BlcxR0xVD/GX+p5qM2QHvldpAXOeQ43A= - - - Resources/PardisoSupport - - hash - - u0iXf0ZsM2IbFXXzJgrB/ytE1Cg= - - hash2 - - UOxQA985n6v1GGIOIg9xxxf/OgOnIYuGUKl03DrQaxU= - - - Resources/QR - - hash - - QXKl7/7DIw2i7Apx3qN5GA3GuhY= - - hash2 - - STU0Hi8NgBNq1S6zT5VVYZC2Y93WOOZKqf/P6YrGXAM= - - - Resources/QtAlignedMalloc - - hash - - rpLY5WInNGmI/WRfJUQPjO3wpxA= - - hash2 - - m6XbWPwuNmqDPQpH5ljceOyJBE6gvFddQA131+KVZoM= - - - Resources/SPQRSupport - - hash - - PhbG0vB6FuoQqcTZcXTmaSvBA5s= - - hash2 - - T6LXO5mMB5RoLWPf+//3lb6kGn0YZlhAscNX5m/xyJ0= - - - Resources/SVD - - hash - - v/sdbqyMvo2FJojRWaYGrVNQfCY= - - hash2 - - gK7oqjJo1vSqYB1grNVgYk6Y7UfQtEDMGfNUzoaM3vY= - - - Resources/Sparse - - hash - - HRDaPlp1w8nkb6ljJjDbZwK8CDg= - - hash2 - - +5LkscC4XT6SktBksbFwC/HUiNSQXGSqI7nkD+2nVHg= - - - Resources/SparseCholesky - - hash - - ekL4dP8xYzHzS4CgaMScIxwyqLc= - - hash2 - - f+/W9qpxQFLRpn759ZjUe9+i4h8jfIIMTA430BO0kik= - - - Resources/SparseCore - - hash - - kxsvRhvb2pV54xnktT8W/qGgMSA= - - hash2 - - IyPB4xed/Gq/NIFht4wb9ezQyqj0UscMrKmhzf3Wpq4= - - - Resources/SparseLU - - hash - - lK/U4MqbwhmtHbKWdoE5YfxrPLI= - - hash2 - - z5KW+7PH1oMpAT/cdGTh1pbRrq6cd42eBtNw0Qj62aI= - - - Resources/SparseQR - - hash - - wcjlNfy9k2yMG1ItF6ig+6EJme0= - - hash2 - - l1a62EFnSRtE2ZkGE+ouiJhX7rVP/KUNWQQQhG9cZ9I= - - - Resources/StdDeque - - hash - - IoY/3GB4PujtiSHyQua86fal3B0= - - hash2 - - wYhRZ6RHglq3w1VzQiw++iPexi9bYwrDIv/mWODuUkI= - - - Resources/StdList - - hash - - MNRej3tS60Pw58N2+MRA59U9mFs= - - hash2 - - A1QOKXrpbtA+go2aQzu39aXpOqg8b1CmwnHHj5KD1mc= - - - Resources/StdVector - - hash - - +ZDwOyhJ5VynkBV0pM3nEgn13Ho= - - hash2 - - fosQYHV6EUApj/OQXfcO21mtEIP1BWgd8w3J3Jlj2Ks= - - - Resources/SuperLUSupport - - hash - - RwjfZ7P3MquMRVRW2ETZptE1GUU= - - hash2 - - iqYB8/oea/wDt5lma/OevELUSRel+yqqSJvq/WOQH3I= - - - Resources/UmfPackSupport - - hash - - M8QOb2WmVgN/4pnOv9+urwokZUw= - - hash2 - - AD1B+gjN5oscRphJn6m/nIA867J650hhWFFRn0LcVqw= - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature/CodeResources.meta b/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature/CodeResources.meta deleted file mode 100644 index 757cc71f1..000000000 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/_CodeSignature/CodeResources.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 416423fc28fa044b59038d4630bcd4be -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/x86.meta b/Assets/ThirdParty/Obi/Plugins/x86.meta deleted file mode 100644 index 80893acc7..000000000 --- a/Assets/ThirdParty/Obi/Plugins/x86.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 80456217692874029bfa8535cab5e715 -folderAsset: yes -timeCreated: 1453064755 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/x86/libOni.dll b/Assets/ThirdParty/Obi/Plugins/x86/libOni.dll deleted file mode 100644 index d719e3473..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/x86/libOni.dll and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/x86/libOni.dll.meta b/Assets/ThirdParty/Obi/Plugins/x86/libOni.dll.meta deleted file mode 100644 index ec348d700..000000000 --- a/Assets/ThirdParty/Obi/Plugins/x86/libOni.dll.meta +++ /dev/null @@ -1,107 +0,0 @@ -fileFormatVersion: 2 -guid: eb02e369b26e142719b77dde09868e40 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Linux - second: - enabled: 1 - settings: - CPU: x86 - - first: - : LinuxUniversal - second: - enabled: 0 - settings: - CPU: x86 - - first: - : OSXIntel - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - : OSXIntel64 - second: - enabled: 0 - settings: - CPU: None - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 0 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 1 - Exclude OSXUniversal: 1 - Exclude WebGL: 0 - Exclude Win: 0 - Exclude Win64: 1 - Exclude iOS: 1 - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86 - DefaultValueInitialized: true - OS: Windows - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - WebGL: WebGL - second: - enabled: 1 - settings: {} - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/x86/libOni.so b/Assets/ThirdParty/Obi/Plugins/x86/libOni.so deleted file mode 100644 index 13ec9d910..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/x86/libOni.so and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/x86/libOni.so.meta b/Assets/ThirdParty/Obi/Plugins/x86/libOni.so.meta deleted file mode 100644 index e3d3c5195..000000000 --- a/Assets/ThirdParty/Obi/Plugins/x86/libOni.so.meta +++ /dev/null @@ -1,138 +0,0 @@ -fileFormatVersion: 2 -guid: 88448b11249634f08b945b0d34e3844e -timeCreated: 1528194247 -licenseType: Store -PluginImporter: - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - data: - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 0 - Exclude Linux64: 1 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 1 - Exclude OSXIntel64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 0 - Exclude Win64: 0 - Exclude iOS: 1 - data: - first: - '': Editor - second: - enabled: 0 - settings: - CPU: x86 - OS: Linux - data: - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - data: - first: - Any: - second: - enabled: 0 - settings: {} - data: - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86 - DefaultValueInitialized: true - data: - first: - Facebook: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - data: - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: None - data: - first: - Standalone: Linux - second: - enabled: 1 - settings: - CPU: x86 - data: - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - data: - first: - Standalone: LinuxUniversal - second: - enabled: 1 - settings: - CPU: x86 - data: - first: - Standalone: OSXIntel - second: - enabled: 0 - settings: - CPU: None - data: - first: - Standalone: OSXIntel64 - second: - enabled: 0 - settings: - CPU: None - data: - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - data: - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: AnyCPU - data: - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: None - data: - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/x86_64.meta b/Assets/ThirdParty/Obi/Plugins/x86_64.meta deleted file mode 100644 index 7891529ea..000000000 --- a/Assets/ThirdParty/Obi/Plugins/x86_64.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 6f417b5d0f496433da26e1498dc0f91f -folderAsset: yes -timeCreated: 1453064763 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.dll b/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.dll deleted file mode 100644 index 3e7fb7754..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.dll and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.dll.meta b/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.dll.meta deleted file mode 100644 index 9652706b1..000000000 --- a/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.dll.meta +++ /dev/null @@ -1,124 +0,0 @@ -fileFormatVersion: 2 -guid: e2c2ebd4a8d9a4f9c962e342f097d0f2 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Linux - second: - enabled: 0 - settings: - CPU: None - - first: - '': LinuxUniversal - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - '': OSXIntel - second: - enabled: 0 - settings: - CPU: None - - first: - '': OSXIntel64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 1 - Exclude Linux64: 0 - Exclude LinuxUniversal: 1 - Exclude OSXIntel: 1 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 0 - Exclude iOS: 1 - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - - first: - Facebook: WebGL - second: - enabled: 0 - settings: {} - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Facebook: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Linux64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - WebGL: WebGL - second: - enabled: 0 - settings: {} - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.so b/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.so deleted file mode 100644 index 43b547979..000000000 Binary files a/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.so and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.so.meta b/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.so.meta deleted file mode 100644 index b537bd73e..000000000 --- a/Assets/ThirdParty/Obi/Plugins/x86_64/libOni.so.meta +++ /dev/null @@ -1,124 +0,0 @@ -fileFormatVersion: 2 -guid: bd7704a5aa9874f209b6e16cd06c6c63 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux: 1 - Exclude Linux64: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 1 - Exclude OSXIntel64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 0 - Exclude Win64: 0 - Exclude iOS: 1 - - first: - '': Editor - second: - enabled: 0 - settings: - CPU: x86_64 - OS: Linux - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Facebook: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Linux64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - Standalone: LinuxUniversal - second: - enabled: 1 - settings: - CPU: x86_64 - - first: - Standalone: OSXIntel - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXIntel64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: AnyCPU - - first: - iPhone: iOS - second: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/QuickstartGuide_rope.pdf b/Assets/ThirdParty/Obi/QuickstartGuide_rope.pdf index f20127ec4..d2071e966 100644 Binary files a/Assets/ThirdParty/Obi/QuickstartGuide_rope.pdf and b/Assets/ThirdParty/Obi/QuickstartGuide_rope.pdf differ diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources.meta b/Assets/ThirdParty/Obi/Resources/Compute.meta similarity index 77% rename from Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources.meta rename to Assets/ThirdParty/Obi/Resources/Compute.meta index 22b2f5c7b..054ac1346 100644 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources.meta +++ b/Assets/ThirdParty/Obi/Resources/Compute.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 99a8462e7396040d782ca6004afd63e8 +guid: 55c2294f77a2c4783b788be18cc01798 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Resources/Compute/AerodynamicConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/AerodynamicConstraints.compute new file mode 100644 index 000000000..d51c3c4b9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/AerodynamicConstraints.compute @@ -0,0 +1,61 @@ +#pragma kernel Project + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer aerodynamicCoeffs; + +StructuredBuffer positions; +StructuredBuffer normals; +StructuredBuffer wind; +StructuredBuffer invMasses; + +RWStructuredBuffer velocities; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p = particleIndices[i]; + + float area = aerodynamicCoeffs[i * 3]; + float dragCoeff = aerodynamicCoeffs[i * 3 + 1]; + float liftCoeff = aerodynamicCoeffs[i * 3 + 2]; + + if (invMasses[p] > 0) + { + float4 relVelocity = velocities[p] - wind[p]; + float rvSqrMag = dot(relVelocity, relVelocity); + + if (rvSqrMag < EPSILON) + return; + + float4 rvNorm = relVelocity / sqrt(rvSqrMag); + + // calculate surface normal (always facing wind) + float4 surfNormal = asfloat(normals[p]) * sign(dot(asfloat(normals[p]), rvNorm)); + + // aerodynamic_factor was originally multiplied by air_density. The density is now premultiplied in lift and drag. + float aerodynamicFactor = 0.5f * rvSqrMag * area; + float attackAngle = dot(surfNormal,rvNorm); + + float3 liftDirection = normalizesafe(cross(cross(surfNormal.xyz, rvNorm.xyz), rvNorm.xyz)); + + //drag: + velocities[p] += (-dragCoeff * rvNorm + + + // lift: + liftCoeff * float4(liftDirection.xyz,0)) * + + // scale + attackAngle * min(aerodynamicFactor * invMasses[p] * deltaTime, 1000); + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/AerodynamicConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/AerodynamicConstraints.compute.meta new file mode 100644 index 000000000..229e5ddcf --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/AerodynamicConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a819ec002d4434b5da29879a26e3211a +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/AtomicDeltas.cginc b/Assets/ThirdParty/Obi/Resources/Compute/AtomicDeltas.cginc new file mode 100644 index 000000000..8f8eaa66d --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/AtomicDeltas.cginc @@ -0,0 +1,90 @@ +#ifndef ATOMICDELTAS_INCLUDE +#define ATOMICDELTAS_INCLUDE + +#include "InterlockedUtils.cginc" + +RWStructuredBuffer deltasAsInt; +RWStructuredBuffer positionConstraintCounts; + +RWStructuredBuffer orientationDeltasAsInt; +RWStructuredBuffer orientationConstraintCounts; + +// atomic delta add: +void AtomicAddPositionDelta(in int index, in float4 delta) +{ + InterlockedAddFloat(deltasAsInt, index, 0, delta.x); + InterlockedAddFloat(deltasAsInt, index, 1, delta.y); + InterlockedAddFloat(deltasAsInt, index, 2, delta.z); + InterlockedAdd(positionConstraintCounts[index], 1); +} + +void AtomicAddOrientationDelta(in int index, in quaternion delta) +{ + InterlockedAddFloat(orientationDeltasAsInt, index, 0, delta.x); + InterlockedAddFloat(orientationDeltasAsInt, index, 1, delta.y); + InterlockedAddFloat(orientationDeltasAsInt, index, 2, delta.z); + InterlockedAddFloat(orientationDeltasAsInt, index, 3, delta.w); + InterlockedAdd(orientationConstraintCounts[index], 1); +} + +// non-atomic versions: +void AddPositionDelta(in int index, in float4 delta) +{ + deltasAsInt[index] = asuint(delta + asfloat(deltasAsInt[index])); + positionConstraintCounts[index]++; +} + +void AddOrientationDelta(in int index, in quaternion delta) +{ + orientationDeltasAsInt[index] = asuint(delta + asfloat(orientationDeltasAsInt[index])); + orientationConstraintCounts[index]++; +} + +// applying deltas: +void ApplyPositionDelta(RWStructuredBuffer positions, in int index, in float SOR) +{ + int count = positionConstraintCounts[index]; + if (count > 0) + { + positions[index].xyz += float3(asfloat(deltasAsInt[index].x), + asfloat(deltasAsInt[index].y), + asfloat(deltasAsInt[index].z)) * SOR / count; + + deltasAsInt[index] = uint4(0, 0, 0, 0); + positionConstraintCounts[index] = 0; + } +} + +void ApplyOrientationDelta(RWStructuredBuffer orientations, in int index, in float SOR) +{ + int count = orientationConstraintCounts[index]; + if (count > 0) + { + orientations[index] += quaternion(asfloat(orientationDeltasAsInt[index].x), + asfloat(orientationDeltasAsInt[index].y), + asfloat(orientationDeltasAsInt[index].z), + asfloat(orientationDeltasAsInt[index].w)) * SOR / count; + + orientations[index] = normalize(orientations[index]); + + orientationDeltasAsInt[index] = uint4(0, 0, 0, 0); + orientationConstraintCounts[index] = 0; + } +} + +void ApplyUserDataDelta(RWStructuredBuffer userData, in int index) +{ + int count = orientationConstraintCounts[index]; + if (count > 0) + { + userData[index] += float4(asfloat(orientationDeltasAsInt[index].x), + asfloat(orientationDeltasAsInt[index].y), + asfloat(orientationDeltasAsInt[index].z), + asfloat(orientationDeltasAsInt[index].w)); + + orientationDeltasAsInt[index] = uint4(0, 0, 0, 0); + orientationConstraintCounts[index] = 0; + } +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiLightingBuiltIn.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/AtomicDeltas.cginc.meta similarity index 80% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiLightingBuiltIn.cginc.meta rename to Assets/ThirdParty/Obi/Resources/Compute/AtomicDeltas.cginc.meta index 761c6bcb2..8f9c197c2 100644 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiLightingBuiltIn.cginc.meta +++ b/Assets/ThirdParty/Obi/Resources/Compute/AtomicDeltas.cginc.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 135872c7cdf2b43bf89b8c57d067d4de +guid: 1a767b30eef4240859cf6158473bd06a ShaderImporter: externalObjects: {} defaultTextures: [] diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BendConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/BendConstraints.compute new file mode 100644 index 000000000..5652e39c2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BendConstraints.compute @@ -0,0 +1,83 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer restBends; +StructuredBuffer stiffnesses; +RWStructuredBuffer lambdas; + +RWStructuredBuffer positions; +StructuredBuffer invMasses; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 3]; + int p2 = particleIndices[i * 3 + 1]; + int p3 = particleIndices[i * 3 + 2]; + + float w1 = invMasses[p1]; + float w2 = invMasses[p2]; + float w3 = invMasses[p3]; + + float wsum = w1 + w2 + 2 * w3; + if (wsum > 0) + { + float4 bendVector = positions[p3] - (positions[p1] + positions[p2] + positions[p3]) / 3.0f; + float bend = length(bendVector); + + if (bend > 0) + { + float constraint = 1.0f - (stiffnesses[i].x + restBends[i]) / bend; + + // remove this to force a certain curvature. + if (constraint >= 0) + { + // calculate time adjusted compliance + float compliance = stiffnesses[i].y / (deltaTime * deltaTime); + + // since the third particle moves twice the amount of the other 2, the modulus of its gradient is 2: + float dlambda = (-constraint - compliance * lambdas[i]) / (wsum + compliance + EPSILON); + float4 correction = dlambda * bendVector; + + lambdas[i] += dlambda; + + float4 delta1 = -correction * 2 * w1; + float4 delta2 = -correction * 2 * w2; + float4 delta3 = correction * 4 * w3; + + AddPositionDelta(p1, delta1); + AddPositionDelta(p2, delta2); + AddPositionDelta(p3, delta3); + } + } + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 3]; + int p2 = particleIndices[i * 3 + 1]; + int p3 = particleIndices[i * 3 + 2]; + + ApplyPositionDelta(positions, p1, sorFactor); + ApplyPositionDelta(positions, p2, sorFactor); + ApplyPositionDelta(positions, p3, sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BendConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/BendConstraints.compute.meta new file mode 100644 index 000000000..c253612ba --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BendConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92b982b3ba8824f1cb17f9313e0b11ac +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BendTwistConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/BendTwistConstraints.compute new file mode 100644 index 000000000..a35375778 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BendTwistConstraints.compute @@ -0,0 +1,78 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer orientationIndices; +StructuredBuffer stiffnesses; +StructuredBuffer plasticity; +RWStructuredBuffer restDarboux; +RWStructuredBuffer lambdas; + +RWStructuredBuffer orientations; +StructuredBuffer invRotationalMasses; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int q1 = orientationIndices[i * 2]; + int q2 = orientationIndices[i * 2 + 1]; + + float w1 = invRotationalMasses[q1]; + float w2 = invRotationalMasses[q2]; + + // calculate time adjusted compliance + float3 compliances = stiffnesses[i] / (deltaTime * deltaTime); + + // rest and current darboux vectors + quaternion rest = restDarboux[i]; + quaternion omega = qmul(q_conj(orientations[q1]), orientations[q2]); + + quaternion omega_plus; + omega_plus = omega + rest; //delta Omega with - omega_0 + omega -= rest; //delta Omega with + omega_0 + + if (dot(omega,omega) > dot(omega_plus,omega_plus)) + omega = omega_plus; + + // plasticity + if (dot(omega.xyz, omega.xyz) > plasticity[i].x * plasticity[i].x) + { + rest += omega * plasticity[i].y * deltaTime; + restDarboux[i] = rest; + } + + float3 dlambda = (omega.xyz - compliances * lambdas[i]) / (compliances + w1 + w2 + EPSILON); + + //discrete Darboux vector does not have vanishing scalar part + quaternion dlambdaQ = quaternion(dlambda[0], dlambda[1], dlambda[2],0); + + AddOrientationDelta(q1, qmul(orientations[q2], dlambdaQ) * w1); + AddOrientationDelta(q2,-qmul(orientations[q1], dlambdaQ) * w2); + + lambdas[i] += dlambda; +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int q1 = orientationIndices[i * 2]; + int q2 = orientationIndices[i * 2 + 1]; + + ApplyOrientationDelta(orientations, q1, sorFactor); + ApplyOrientationDelta(orientations, q2, sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BendTwistConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/BendTwistConstraints.compute.meta new file mode 100644 index 000000000..ab675e5e9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BendTwistConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e5ad8a2b8563941539b7551b0a93b911 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BitonicSort.compute b/Assets/ThirdParty/Obi/Resources/Compute/BitonicSort.compute new file mode 100644 index 000000000..1929395f7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BitonicSort.compute @@ -0,0 +1,39 @@ +#pragma kernel BitonicSort + +const uint numEntries; +const uint groupWidth; +const uint groupHeight; +const uint stepIndex; + +RWStructuredBuffer Keys; +RWStructuredBuffer Values; + +[numthreads(128,1,1)] +void BitonicSort(uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + uint hIndex = i & (groupWidth - 1); + uint indexLeft = hIndex + (groupHeight + 1) * (i / groupWidth); + uint rightStepSize = stepIndex == 0 ? groupHeight - 2 * hIndex : (groupHeight + 1) / 2; + uint indexRight = indexLeft + rightStepSize; + + // Exit if out of bounds (for non-power of 2 input sizes) + if (indexRight >= numEntries) return; + + float keyLeft = Keys[indexLeft]; + float keyRight = Keys[indexRight]; + + float valueLeft = Values[indexLeft]; + float valueRight = Values[indexRight]; + + // Swap entries if value is descending + if (valueLeft > valueRight) + { + Keys[indexLeft] = keyRight; + Keys[indexRight] = keyLeft; + + Values[indexLeft] = valueRight; + Values[indexRight] = valueLeft; + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BitonicSort.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/BitonicSort.compute.meta new file mode 100644 index 000000000..16cb0e090 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BitonicSort.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ceefe1197724d4a408783ad72b2c56ab +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Bounds.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Bounds.cginc new file mode 100644 index 000000000..2549b5187 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Bounds.cginc @@ -0,0 +1,127 @@ +#ifndef BOUNDS_INCLUDE +#define BOUNDS_INCLUDE + +#include "Transform.cginc" +#include "Matrix.cginc" + +struct aabb +{ + float4 min_; + float4 max_; + + void FromTriangle(float4 v1, float4 v2, float4 v3, float4 margin) + { + min_ = min(min(v1, v2), v3) - margin; + max_ = max(max(v1, v2), v3) + margin; + } + + void FromEdge(float4 v1, float4 v2, float4 radius) + { + min_ = min(v2 - radius, v1 - radius); + max_ = max(v2 + radius, v1 + radius); + } + + void FromParticle(float4 v1, float radius) + { + min_ = v1 - radius; + max_ = v1 + radius; + } + + bool IntersectsAabb(in aabb b, bool in2D = false) + { + if (in2D) + { + return (min_[0] <= b.max_[0] && max_[0] >= b.min_[0]) && + (min_[1] <= b.max_[1] && max_[1] >= b.min_[1]); + } + else + { + return (min_[0] <= b.max_[0] && max_[0] >= b.min_[0]) && + (min_[1] <= b.max_[1] && max_[1] >= b.min_[1]) && + (min_[2] <= b.max_[2] && max_[2] >= b.min_[2]); + } + } + + float AverageAxisLength() + { + float4 d = max_ - min_; + return (d.x + d.y + d.z) * 0.33f; + } + + float MaxAxisLength() + { + float4 d = max_ - min_; + return max(max(d.x,d.y),d.z); + } + + void EncapsulateParticle(in float4 position, float radius) + { + min_ = min(min(min_, position - radius), position - radius); + max_ = max(max(max_, position + radius), position + radius); + } + + void EncapsulateParticle(in float4 previousPosition, in float4 position, float radius) + { + min_ = min(min(min_, position - radius), previousPosition - radius); + max_ = max(max(max_, position + radius), previousPosition + radius); + } + + void EncapsulateBounds(in aabb bounds) + { + min_ = min(min_,bounds.min_); + max_ = max(max_,bounds.max_); + } + + void Expand(float4 amount) + { + min_ -= amount; + max_ += amount; + } + + void Sweep(float4 velocity) + { + min_ = min(min_, min_ + velocity); + max_ = max(max_, max_ + velocity); + } + + float4 Center() + { + return (min_ + (max_ - min_) * 0.5f); + } + + void Transform(in float4x4 transform) + { + float3 xa = transform._m00_m10_m20 * min_.x; + float3 xb = transform._m00_m10_m20 * max_.x; + + float3 ya = transform._m01_m11_m21 * min_.y; + float3 yb = transform._m01_m11_m21 * max_.y; + + float3 za = transform._m02_m12_m22 * min_.z; + float3 zb = transform._m02_m12_m22 * max_.z; + + min_ = float4(min(xa, xb) + min(ya, yb) + min(za, zb) + transform._m03_m13_m23, 0); + max_ = float4(max(xa, xb) + max(ya, yb) + max(za, zb) + transform._m03_m13_m23, 0); + } + + void Transform(in transform transform) + { + Transform(TRS(transform.translation.xyz, transform.rotation, transform.scale.xyz)); + } + + aabb Transformed(in float4x4 trfm) + { + aabb cpy = this; + cpy.Transform(trfm); + return cpy; + } + + aabb Transformed(in transform trfm) + { + aabb cpy = this; + cpy.Transform(trfm); + return cpy; + } +}; + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/SimpleParticleShaderURP.shader.meta b/Assets/ThirdParty/Obi/Resources/Compute/Bounds.cginc.meta similarity index 80% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/SimpleParticleShaderURP.shader.meta rename to Assets/ThirdParty/Obi/Resources/Compute/Bounds.cginc.meta index 72d99fd08..f3c0a8e7c 100644 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/SimpleParticleShaderURP.shader.meta +++ b/Assets/ThirdParty/Obi/Resources/Compute/Bounds.cginc.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a8c46db5ccc10489cba075e7a9172ca6 +guid: 52c09ed0a553243328693072f77d1465 ShaderImporter: externalObjects: {} defaultTextures: [] diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BoundsReduction.compute b/Assets/ThirdParty/Obi/Resources/Compute/BoundsReduction.compute new file mode 100644 index 000000000..7e11f4537 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BoundsReduction.compute @@ -0,0 +1,94 @@ +#pragma kernel RuntimeSimplexBounds SIMPLEX_BOUNDS=RuntimeSimplexBounds USE_COLLISION_MAT +#pragma kernel EditSimplexBounds SIMPLEX_BOUNDS=EditSimplexBounds +#pragma kernel Reduce + +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "CollisionMaterial.cginc" +#include "MathUtils.cginc" +#include "Integration.cginc" +#include "SolverParameters.cginc" + +StructuredBuffer simplices; +StructuredBuffer positions; +StructuredBuffer velocities; +StructuredBuffer principalRadii; +StructuredBuffer fluidMaterials; + +RWStructuredBuffer simplexBounds; +RWStructuredBuffer reducedBounds; + +float deltaTime; + +groupshared aabb sdata[128]; + +[numthreads(256, 1, 1)] +void SIMPLEX_BOUNDS (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= pointCount + edgeCount + triangleCount) + { + reducedBounds[i].min_ = float4(FLT_MAX,FLT_MAX,FLT_MAX,0); + reducedBounds[i].max_ = -float4(FLT_MAX,FLT_MAX,FLT_MAX,0); + return; + } + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(i, simplexSize); + + aabb sxBounds, soBounds; + sxBounds.min_ = soBounds.min_ = float4(FLT_MAX,FLT_MAX,FLT_MAX,0); + sxBounds.max_ = soBounds.max_ = float4(-FLT_MAX,-FLT_MAX,-FLT_MAX,0); + + for (int j = 0; j < simplexSize; ++j) + { + int p = simplices[simplexStart + j]; + + #if USE_COLLISION_MAT + int m = collisionMaterialIndices[p]; + float solidRadius = principalRadii[p].x + (m >= 0 ? collisionMaterials[m].stickDistance : 0); + #else + float solidRadius = principalRadii[p].x; + #endif + + // Expand simplex bounds, using both the particle's original position and its velocity. + // Add collision margin for both fluid neighborhood too (prevents explosions at high pressures due to neighborhood deficiency) + sxBounds.EncapsulateParticle(positions[p], + IntegrateLinear(positions[p], velocities[p], deltaTime * particleCCD), + max(solidRadius, fluidMaterials[p].x * 0.5f) + collisionMargin); + + soBounds.EncapsulateParticle(positions[p], + IntegrateLinear(positions[p], velocities[p], deltaTime), + solidRadius); + + } + + simplexBounds[i] = sxBounds; + reducedBounds[i] = soBounds; +} + +[numthreads( 256, 1, 1)] +void Reduce( uint3 threadIdx : SV_GroupThreadID, uint3 groupIdx : SV_GroupID) +{ + // each thread loads two elements from global to shared mem and combines them: + unsigned int tid = threadIdx.x; + unsigned int i = groupIdx.x * 256 + tid; + sdata[tid] = reducedBounds[i]; + sdata[tid].EncapsulateBounds(reducedBounds[i + 128]); + + GroupMemoryBarrierWithGroupSync(); + + // do reduction in shared mem + for (unsigned int s = 64; s > 0; s >>= 1) + { + if (tid < s) + { + sdata[tid].EncapsulateBounds(sdata[tid + s]); + } + GroupMemoryBarrierWithGroupSync(); + } + + // write result for this group to global mem + if (tid == 0) + reducedBounds[groupIdx.x] = sdata[0]; +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BoundsReduction.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/BoundsReduction.compute.meta new file mode 100644 index 000000000..5959ca43b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BoundsReduction.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4eaa80a9c435f42fa9837a3594766a1f +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BoxShape.compute b/Assets/ThirdParty/Obi/Resources/Compute/BoxShape.compute new file mode 100644 index 000000000..58f34504c --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BoxShape.compute @@ -0,0 +1,73 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "DistanceFunctions.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer velocities; + +StructuredBuffer simplices; + +StructuredBuffer transforms; +StructuredBuffer shapes; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer contacts; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; + + +[numthreads(128, 1, 1)] +void GenerateContacts (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4*BOX_SHAPE]) return; + + uint count = contacts.IncrementCounter(); + if (count < maxContacts) + { + int firstPair = contactOffsetsPerType[BOX_SHAPE]; + int simplexIndex = contactPairs[firstPair + i].x; + int colliderIndex = contactPairs[firstPair + i].y; + + contact c = (contact)0; + + Box boxShape; + boxShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + boxShape.s = shapes[colliderIndex]; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + SurfacePoint surfacePoint = Optimize(boxShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + c.pointB = surfacePoint.pos; + c.normal = surfacePoint.normal * boxShape.s.isInverted(); + c.pointA = simplexBary; + c.bodyA = simplexIndex; + c.bodyB = colliderIndex; + + contacts[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BoxShape.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/BoxShape.compute.meta new file mode 100644 index 000000000..6928e9b19 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BoxShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9df6755bffe0b4dc5a30f4715e8a503c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BoxShapeQuery.compute b/Assets/ThirdParty/Obi/Resources/Compute/BoxShapeQuery.compute new file mode 100644 index 000000000..034373c31 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BoxShapeQuery.compute @@ -0,0 +1,136 @@ +#include "ColliderDefinitions.cginc" +#include "QueryDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateResults + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer simplices; + +StructuredBuffer transforms; +StructuredBuffer shapes; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer results; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; + +struct Box : IDistanceFunction +{ + queryShape s; + transform colliderToSolver; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 center = s.center * colliderToSolver.scale; + float4 size = s.size * colliderToSolver.scale * 0.5f; + + // clamp the point to the surface of the box: + float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; + + // get minimum distance for each axis: + float4 distances = size - abs(pnt); + + if (distances.x >= 0 && distances.y >= 0 && distances.z >= 0) + { + projectedPoint.normal = float4(0,0,0,0); + projectedPoint.pos = pnt; + + // find minimum distance in all three axes and the axis index: + if (distances.y < distances.x && distances.y < distances.z) + { + projectedPoint.normal[1] = sign(pnt[1]); + projectedPoint.pos[1] = size[1] * projectedPoint.normal[1]; + } + else if (distances.z < distances.x && distances.z < distances.y) + { + projectedPoint.normal[2] = sign(pnt[2]); + projectedPoint.pos[2] = size[2] * projectedPoint.normal[2]; + } + else + { + projectedPoint.normal[0] = sign(pnt[0]); + projectedPoint.pos[0] = size[0] * projectedPoint.normal[0]; + } + } + else + { + projectedPoint.pos = clamp(pnt, -size, size); + projectedPoint.normal = normalizesafe(pnt - projectedPoint.pos); + } + + projectedPoint.pos = colliderToSolver.TransformPointUnscaled(projectedPoint.pos + center + projectedPoint.normal * s.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(projectedPoint.normal); + projectedPoint.bary = float4(1,0,0,0); + } +}; + +[numthreads(128, 1, 1)] +void GenerateResults (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4*BOX_QUERY]) return; + + int firstPair = contactOffsetsPerType[BOX_QUERY]; + int simplexIndex = contactPairs[firstPair + i].x; + int queryIndex = contactPairs[firstPair + i].y; + + queryResult c = (queryResult)0; + + Box boxShape; + boxShape.colliderToSolver = worldToSolver[0].Multiply(transforms[queryIndex]); + boxShape.s = shapes[queryIndex]; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + SurfacePoint surfacePoint = Optimize(boxShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + + float4 simplexPrevPosition = FLOAT4_ZERO; + float simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexPrevPosition += positions[particleIndex] * simplexBary[j]; + simplexRadius += EllipsoidRadius(surfacePoint.normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * simplexBary[j]; + } + + c.queryPoint = surfacePoint.pos; + c.normal = surfacePoint.normal; + c.simplexBary = simplexBary; + c.simplexIndex = simplexIndex; + c.queryIndex = queryIndex; + c.dist = dot(simplexPrevPosition - surfacePoint.pos,surfacePoint.normal) - simplexRadius; + + if (c.dist <= boxShape.s.maxDistance) + { + uint count = results.IncrementCounter(); + if (count < maxContacts) + { + results[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } + +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/BoxShapeQuery.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/BoxShapeQuery.compute.meta new file mode 100644 index 000000000..4b6e8ed46 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/BoxShapeQuery.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 409c5f7d65dd84df9853de82bd3fbf46 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/CapsuleShape.compute b/Assets/ThirdParty/Obi/Resources/Compute/CapsuleShape.compute new file mode 100644 index 000000000..0afb94a41 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/CapsuleShape.compute @@ -0,0 +1,72 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "DistanceFunctions.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer velocities; + +StructuredBuffer simplices; + +StructuredBuffer transforms; +StructuredBuffer shapes; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer contacts; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; + +[numthreads(128, 1, 1)] +void GenerateContacts (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4*CAPSULE_SHAPE]) return; + + uint count = contacts.IncrementCounter(); + if (count < maxContacts) + { + int firstPair = contactOffsetsPerType[CAPSULE_SHAPE]; + int simplexIndex = contactPairs[firstPair + i].x; + int colliderIndex = contactPairs[firstPair + i].y; + + contact c = (contact)0; + + Capsule capsuleShape; + capsuleShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + capsuleShape.s = shapes[colliderIndex]; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + SurfacePoint surfacePoint = Optimize(capsuleShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + c.pointB = surfacePoint.pos; + c.normal = surfacePoint.normal * capsuleShape.s.isInverted(); + c.pointA = simplexBary; + c.bodyA = simplexIndex; + c.bodyB = colliderIndex; + + contacts[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/CapsuleShape.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/CapsuleShape.compute.meta new file mode 100644 index 000000000..0295bcb28 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/CapsuleShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd92ed8a5b1bc404c9b114747495f080 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ChainConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/ChainConstraints.compute new file mode 100644 index 000000000..62c8c1a44 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ChainConstraints.compute @@ -0,0 +1,159 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer firstIndex; +StructuredBuffer numIndices; +StructuredBuffer restLengths; + +RWStructuredBuffer ni; // (ni:constraint gradient, di:desired lenght) +RWStructuredBuffer diagonals; // (subdiagonals), bi (diagonals) and ci (superdiagonals): + +RWStructuredBuffer positions; +StructuredBuffer invMasses; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int c = id.x; + + if (c >= activeConstraintCount) return; + + int numEdges = numIndices[c] - 1; + int first = firstIndex[c]; + float minLength = restLengths[c].x; + float maxLength = restLengths[c].y; + + int i; + for (i = 0; i < numEdges; ++i) + { + int edge = first + i; + + float4 p1 = positions[particleIndices[edge]]; + float4 p2 = positions[particleIndices[edge+1]]; + float4 diff = p1 - p2; + + float dist = length(diff); + ni[edge] = float4(diff/(dist + EPSILON)); + } + + // calculate ai, bi and ci + for (i = 0; i < numEdges; ++i) + { + int edge = first + i; + + float w_i_ = invMasses[particleIndices[edge]]; + float w__i = invMasses[particleIndices[edge+1]]; + + float4 ni__ = FLOAT4_ZERO; + if (i > 0) ni__ = ni[edge - 1]; + + float4 n__i = FLOAT4_ZERO; + if (i < numEdges - 1) n__i = ni[edge + 1]; + + diagonals[edge] = float3(-w_i_ * dot(ni[edge], ni__), // ai + w_i_ + w__i, // bi + -w__i * dot(ni[edge], n__i));// ci + } + + // solve step #1, forward sweep: + // reuse diagonals.xy to store sweep results ci_ and di_: + for (i = 0; i < numEdges; ++i) + { + int edge = first + i; + float4 p1 = positions[particleIndices[edge]]; + float4 p2 = positions[particleIndices[edge + 1]]; + + float cip_ = 0; + float dip_ = 0; + + if (i > 0) + { + cip_ = diagonals[edge - 1].x; + dip_ = diagonals[edge - 1].y; + } + + float3 d = diagonals[edge]; + float den = d.y - cip_ * d.x; + + if (abs(den) > EPSILON) + { + float dist = distance(p1, p2); + float correction = 0; + + if (dist >= maxLength) + correction = dist - maxLength; + else if (dist <= minLength) + correction = dist - minLength; + + d.xy = float2(d.z / den, (correction - dip_ * d.x) / den); + + } + else + d.xy = float2(0,0); + + diagonals[edge] = d; + } + + // solve step #2, backward sweep. reuse diagonals.z to store solution xi: + for (i = numEdges - 1; i >= 0; --i) + { + int edge = first + i; + + float xi_ = (i < numEdges - 1) ? diagonals[edge + 1].z : 0; + + float3 d = diagonals[edge]; + d.z = d.y - d.x * xi_; + diagonals[edge] = d; + } + + // calculate deltas: + for (i = 0; i < numIndices[c]; ++i) + { + int index = first + i; + + float4 ni__ = FLOAT4_ZERO; + float xi_ = 0; + + if (i > 0) + { + ni__ = ni[index - 1]; + xi_ = diagonals[index - 1].z; + } + + float4 n_i_ = FLOAT4_ZERO; + float nxi = 0; + + if (i < numIndices[c] - 1) + { + n_i_ = ni[index]; + nxi = diagonals[index].z; + } + + int p = particleIndices[index]; + + AddPositionDelta(p, invMasses[p] * (ni__ * xi_ - n_i_ * nxi)); + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int first = firstIndex[i]; + int last = first + numIndices[i]; + + for (int k = first; k < last; ++k) + ApplyPositionDelta(positions, particleIndices[k], sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ChainConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ChainConstraints.compute.meta new file mode 100644 index 000000000..561afa199 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ChainConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a5f3e8f1330846819f1abe7a6181c51 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ClothRendering.compute b/Assets/ThirdParty/Obi/Resources/Compute/ClothRendering.compute new file mode 100644 index 000000000..069c59904 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ClothRendering.compute @@ -0,0 +1,180 @@ +#pragma kernel UpdateSkinConstraints +#pragma kernel UpdateClothMesh + +#include "MathUtils.cginc" + +struct Influence +{ + int index; + float weight; +}; + +struct SkinmapData +{ + int firstInfluence; + int firstInfNumber; + int firstParticleBindPose; + + int firstSkinWeight; + int firstSkinWeightNumber; + int firstBoneBindPose; + + int bindPoseCount; +}; + +struct SkeletonData +{ + int firstBone; + int boneCount; +}; + +struct MeshData +{ + int firstVertex; + int vertexCount; + + int firstTriangle; + int triangleCount; +}; + +StructuredBuffer particleIndices; +StructuredBuffer rendererIndices; // for each vertex/particle, index of its renderer. + +StructuredBuffer renderablePositions; +StructuredBuffer renderableOrientations; +StructuredBuffer colors; + +StructuredBuffer restPositions; +StructuredBuffer restOrientations; + +StructuredBuffer skinConstraintOffsets; + +StructuredBuffer skinmapIndices; // for each renderer, index of its skinmap. +StructuredBuffer meshIndices; // for each renderer, index of its mesh. +StructuredBuffer skeletonIndices; // for each renderer, index of its skeleton. + +StructuredBuffer particleOffsets; // for each renderer, index of its first particle in the batch. +StructuredBuffer vertexOffsets; // for each renderer, index of its first vertex in the batch. + +StructuredBuffer skinData; +StructuredBuffer influences; +StructuredBuffer influenceOffsets; +StructuredBuffer particleBindMatrices; +StructuredBuffer boneBindMatrices; + +StructuredBuffer skeletonData; +StructuredBuffer bonePos; +StructuredBuffer boneRot; +StructuredBuffer boneScl; + +StructuredBuffer meshData; +StructuredBuffer positions; +StructuredBuffer normals; +StructuredBuffer tangents; + +RWStructuredBuffer skinConstraintPoints; +RWStructuredBuffer skinConstraintNormals; +RWByteAddressBuffer vertices; + +// Variables set from the CPU +uint vertexCount; +uint constraintCount; +float4x4 world2Solver; + +[numthreads(128, 1, 1)] +void UpdateSkinConstraints (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= constraintCount) return; + + int rendererIndex = rendererIndices[i]; + + // get skin map and mesh data: + SkinmapData skin = skinData[skinmapIndices[rendererIndex]]; + SkeletonData skel = skeletonData[skeletonIndices[rendererIndex]]; + + // invalid skeleton: + if (skel.boneCount <= 0) + return; + + // get index of this particle in its original actor: + int originalParticleIndex = i - particleOffsets[rendererIndex]; + + // get first influence and amount of influences for this particle: + int influenceStart = influenceOffsets[skin.firstSkinWeightNumber + originalParticleIndex]; + int influenceCount = influenceOffsets[skin.firstSkinWeightNumber + originalParticleIndex + 1] - influenceStart; + + float4 pos = FLOAT4_ZERO; + float4 norm = FLOAT4_ZERO; + + for (int k = influenceStart; k < influenceStart + influenceCount; ++k) + { + Influence inf = influences[skin.firstSkinWeight + k]; + + float4x4 bind = boneBindMatrices[skin.firstBoneBindPose + inf.index]; + + int boneIndex = skel.firstBone + inf.index; + float4x4 deform = TRS(bonePos[boneIndex], boneRot[boneIndex], boneScl[boneIndex]); + float4x4 trfm = mul(world2Solver, mul(deform, bind)); + + pos.xyz += mul(trfm, float4(restPositions[particleIndices[i]].xyz, 1)).xyz * inf.weight; + norm.xyz += mul(trfm, float4(rotate_vector(restOrientations[particleIndices[i]], float3(0, 0, 1)), 0)).xyz * inf.weight; + } + + int constraintIndex = skinConstraintOffsets[rendererIndex] + originalParticleIndex; + skinConstraintPoints[constraintIndex] = pos; + skinConstraintNormals[constraintIndex] = norm; + +} + +[numthreads(128, 1, 1)] +void UpdateClothMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= vertexCount) return; + + int rendererIndex = rendererIndices[i]; + + // get skin map and mesh data: + SkinmapData skin = skinData[skinmapIndices[rendererIndex]]; + MeshData mesh = meshData[meshIndices[rendererIndex]]; + + // get index of this vertex in its original mesh: + int originalVertexIndex = i - vertexOffsets[rendererIndex]; + + // get index of the vertex in the mesh batch: + int batchedVertexIndex = mesh.firstVertex + originalVertexIndex; + + // get first influence and amount of influences for this vertex: + int influenceStart = influenceOffsets[skin.firstInfNumber + originalVertexIndex]; + int influenceCount = influenceOffsets[skin.firstInfNumber + originalVertexIndex + 1] - influenceStart; + + float3 position = float3(0,0,0); + float3 normal = float3(0,0,0); + float4 tangent = FLOAT4_ZERO; + float4 color = FLOAT4_ZERO; + + for (int k = influenceStart; k < influenceStart + influenceCount; ++k) + { + Influence inf = influences[skin.firstInfluence + k]; + + int p = particleIndices[particleOffsets[rendererIndex] + inf.index]; + + float4x4 deform = mul(m_translate(FLOAT4X4_IDENTITY,renderablePositions[p].xyz), q_toMatrix(renderableOrientations[p])); + float4x4 trfm = mul(deform, particleBindMatrices[skin.firstParticleBindPose + inf.index]); + + // update vertex/normal/tangent: + position += mul(trfm, float4(positions[batchedVertexIndex], 1)).xyz * inf.weight; + normal += mul(trfm, float4(normals[batchedVertexIndex], 0)).xyz * inf.weight; + tangent += float4(mul(trfm, float4(tangents[batchedVertexIndex].xyz, 0)).xyz, tangents[batchedVertexIndex].w) * inf.weight; + color += colors[p] * inf.weight; + } + + int base = i * 14; + vertices.Store3( base<<2, asuint(position)); + vertices.Store3((base + 3)<<2, asuint(normal)); + vertices.Store4((base + 6)<<2, asuint(tangent)); + vertices.Store4((base + 10)<<2, asuint(color)); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ClothRendering.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ClothRendering.compute.meta new file mode 100644 index 000000000..5b2b24c93 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ClothRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7620e03e082f448828570f6659b73301 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ColliderCollisionConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/ColliderCollisionConstraints.compute new file mode 100644 index 000000000..9fd3f0c58 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ColliderCollisionConstraints.compute @@ -0,0 +1,219 @@ +#include "ContactHandling.cginc" +#include "ColliderDefinitions.cginc" +#include "Rigidbody.cginc" +#include "Simplex.cginc" +#include "CollisionMaterial.cginc" +#include "AtomicDeltas.cginc" + +#pragma kernel Clear +#pragma kernel Initialize +#pragma kernel Project +#pragma kernel Apply + +StructuredBuffer particleIndices; + +StructuredBuffer simplices; +StructuredBuffer invMasses; +StructuredBuffer invRotationalMasses; +StructuredBuffer prevPositions; +StructuredBuffer prevOrientations; +StructuredBuffer principalRadii; +StructuredBuffer velocities; + +StructuredBuffer transforms; +StructuredBuffer shapes; +RWStructuredBuffer RW_rigidbodies; + +RWStructuredBuffer positions; +RWStructuredBuffer orientations; +RWStructuredBuffer deltas; + +RWStructuredBuffer contacts; +RWStructuredBuffer effectiveMasses; +StructuredBuffer dispatchBuffer; + +StructuredBuffer inertialSolverFrame; + +// Variables set from the CPU +uint particleCount; +float maxDepenetration; +float substepTime; +float stepTime; +int steps; +float timeLeft; +float sorFactor; + +[numthreads(128, 1, 1)] +void Clear (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= dispatchBuffer[3]) return; + + int rigidbodyIndex = shapes[contacts[i].bodyB].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + int orig; + InterlockedExchange(RW_rigidbodies[rigidbodyIndex].constraintCount, 0, orig); + } +} + +[numthreads(128, 1, 1)] +void Initialize (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= dispatchBuffer[3]) return; + + int simplexSizeA; + int simplexStartA = GetSimplexStartAndSize(contacts[i].bodyA, simplexSizeA); + + // get the material from the first particle in the simplex: + int aMaterialIndex = collisionMaterialIndices[simplices[simplexStartA]]; + bool rollingContacts = aMaterialIndex >= 0 ? collisionMaterials[aMaterialIndex].rollingContacts > 0 : false; + + float4 relativeVelocity = FLOAT4_ZERO; + float4 simplexPrevPosition = FLOAT4_ZERO; + quaternion simplexPrevOrientation = quaternion(0, 0, 0, 0); + float simplexRadius = 0; + float simplexInvMass = 0; + float simplexInvRotationalMass = 0; + + for (int j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + relativeVelocity += velocities[particleIndex] * contacts[i].pointA[j]; + simplexPrevPosition += prevPositions[particleIndex] * contacts[i].pointA[j]; + simplexPrevOrientation += prevOrientations[particleIndex] * contacts[i].pointA[j]; + simplexInvMass += invMasses[particleIndex] * contacts[i].pointA[j]; + simplexInvRotationalMass += invRotationalMasses[particleIndex] * contacts[i].pointA[j]; + simplexRadius += EllipsoidRadius(contacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * contacts[i].pointA[j]; + } + + // if there's a rigidbody present, subtract its velocity from the relative velocity: + int rigidbodyIndex = shapes[contacts[i].bodyB].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + // Note: unlike rA, that is expressed in solver space, rB is expressed in world space. + relativeVelocity -= GetRigidbodyVelocityAtPoint(RW_rigidbodies[rigidbodyIndex], contacts[i].pointB, + asfloat(linearDeltasAsInt[rigidbodyIndex]), + asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); + + int bMaterialIndex = shapes[contacts[i].bodyB].materialIndex; + rollingContacts = rollingContacts | (bMaterialIndex >= 0 ? collisionMaterials[bMaterialIndex].rollingContacts > 0 : false); + } + + // update contact distance + contacts[i].dist = dot(simplexPrevPosition - contacts[i].pointB, contacts[i].normal) - simplexRadius; + + // calculate contact point in A's surface: + float4 contactPoint = contacts[i].pointB + contacts[i].normal * contacts[i].dist; + + // update contact basis: + CalculateBasis(relativeVelocity, contacts[i].normal, contacts[i].tangent); + + // calculate A's contact mass. + float4 invInertiaTensor = 1.0/(GetParticleInertiaTensor(simplexRadius, simplexInvRotationalMass) + FLOAT4_EPSILON); + CalculateContactMassesA(simplexInvMass, invInertiaTensor, simplexPrevPosition, simplexPrevOrientation, contactPoint, rollingContacts, contacts[i].normal, contacts[i].tangent, GetBitangent(contacts[i]), effectiveMasses[i].normalInvMassA, effectiveMasses[i].tangentInvMassA, effectiveMasses[i].bitangentInvMassA); + + // clear B's contact mass. + if (rigidbodyIndex >= 0) + { + CalculateContactMassesB(RW_rigidbodies[rigidbodyIndex], inertialSolverFrame[0].frame, contacts[i].pointB, contacts[i].normal, contacts[i].tangent, GetBitangent(contacts[i]), effectiveMasses[i].normalInvMassB, effectiveMasses[i].tangentInvMassB, effectiveMasses[i].bitangentInvMassB); + InterlockedAdd(RW_rigidbodies[rigidbodyIndex].constraintCount, 1); + } + else + { + ClearContactMasses(effectiveMasses[i].normalInvMassB, effectiveMasses[i].tangentInvMassB, effectiveMasses[i].bitangentInvMassB); + } +} + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= dispatchBuffer[3]) return; + + // Skip contacts involving triggers: + if (shapes[contacts[i].bodyB].isTrigger()) + return; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(contacts[i].bodyA, simplexSize); + int colliderIndex = contacts[i].bodyB; + + // Get the rigidbody index (might be < 0, in that case there's no rigidbody present) + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + float frameEnd = stepTime * steps; + float substepsToEnd = timeLeft / substepTime; + + // Combine collision materials (use material from first particle in simplex) + collisionMaterial material = CombineCollisionMaterials(collisionMaterialIndices[simplices[simplexStart]], shapes[colliderIndex].materialIndex); + + // Get relative velocity at contact point. + // As we do not consider true ellipses for collision detection, particle contact points are never off-axis. + // So particle angular velocity does not contribute to normal impulses, and we can skip it. + float4 simplexPosition = FLOAT4_ZERO; + float4 simplexPrevPosition = FLOAT4_ZERO; + float simplexRadius = 0; + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexPosition += positions[particleIndex] * contacts[i].pointA[j]; + simplexPrevPosition += prevPositions[particleIndex] * contacts[i].pointA[j]; + simplexRadius += EllipsoidRadius(contacts[i].normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * contacts[i].pointA[j]; + } + + // project position to the end of the full step: + float4 posA = lerp(simplexPrevPosition, simplexPosition, substepsToEnd); + posA += -contacts[i].normal * simplexRadius; + + float4 posB = contacts[i].pointB; + int rbContacts = 1; + if (rigidbodyIndex >= 0) + { + posB += GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex], contacts[i].pointB, + asfloat(linearDeltasAsInt[rigidbodyIndex]), + asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]) * frameEnd; + rbContacts = rigidbodies[rigidbodyIndex].constraintCount; + } + + float normalInvMass = effectiveMasses[i].normalInvMassA + effectiveMasses[i].normalInvMassB * rbContacts; + float lambda = SolveAdhesion(contacts[i], normalInvMass, posA, posB, material.stickDistance, material.stickiness, stepTime); + + lambda += SolvePenetration(contacts[i], normalInvMass, posA, posB, maxDepenetration * stepTime); + + if (abs(lambda) > EPSILON) + { + float4 delta = lambda * contacts[i].normal * BaryScale(contacts[i].pointA) / substepsToEnd; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + float4 delta1 = delta * invMasses[particleIndex] * contacts[i].pointA[j]; + + AtomicAddPositionDelta(particleIndex, delta1); + } + + if (rigidbodyIndex >= 0) + { + ApplyImpulse(rigidbodyIndex, -lambda / frameEnd * contacts[i].normal, contacts[i].pointB, inertialSolverFrame[0].frame); + } + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int threadIndex = id.x; + + if (threadIndex >= particleCount) return; + + int p = particleIndices[threadIndex]; + + ApplyPositionDelta(positions, p, sorFactor); +} + + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta new file mode 100644 index 000000000..c8cd80576 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff4c3e041ffef4a5c91cf275735a7ecc +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ColliderDefinitions.cginc b/Assets/ThirdParty/Obi/Resources/Compute/ColliderDefinitions.cginc new file mode 100644 index 000000000..3fb6ef96c --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ColliderDefinitions.cginc @@ -0,0 +1,81 @@ +#ifndef COLLIDERDEFS_INCLUDE +#define COLLIDERDEFS_INCLUDE + +#define SPHERE_SHAPE 0 +#define BOX_SHAPE 1 +#define CAPSULE_SHAPE 2 +#define HEIGHTMAP_SHAPE 3 +#define TRIANGLE_MESH_SHAPE 4 +#define EDGE_MESH_SHAPE 5 +#define SDF_SHAPE 6 + +#define FORCEMODE_FORCE 0 +#define FORCEMODE_ACCEL 1 +#define FORCEMODE_WIND 2 + +#define DAMPDIR_ALL 0 +#define DAMPDIR_FORCE 1 +#define DAMPDIR_SURFACE 2 + +#define ZONETYPE_DIRECTIONAL 0 +#define ZONETYPE_RADIAL 1 +#define ZONETYPE_VORTEX 2 +#define ZONETYPE_VOID 3 + +struct shape +{ + float4 center; + float4 size; /**< box: size of the box in each axis. + sphere: radius of sphere (x,y,z), + capsule: radius (x), height(y), direction (z, can be 0, 1 or 2). + heightmap: width (x axis), height (y axis) and depth (z axis) in world units.*/ + uint type; /**< Sphere = 0, + Box = 1, + Capsule = 2, + Heightmap = 3, + TriangleMesh = 4, + EdgeMesh = 5, + SignedDistanceField = 6*/ + + float contactOffset; + int dataIndex; + int rigidbodyIndex; // index of the associated rigidbody in the collision world. + int materialIndex; // index of the associated material in the collision world. + int forceZoneIndex; // index of the associated force zone in the collision world. + int phase; + int flags; // first bit whether the collider is 2D (1) or 3D (0), second bit whether it's a trigger (1) or regular collider (0). + // third bit determines whether shape is inverted or not. + + bool is2D() + { + return (flags & 1) != 0; + } + + bool isTrigger() + { + // TODO: using bools doesn't work... why? + int a = (flags & 1 << 1) != 0; + int b = forceZoneIndex >= 0; + return a || b; + } + + float isInverted() + { + return (flags & 1 << 2) != 0 ? -1 : 1; + } +}; + +struct forceZone +{ + float4 color; + uint type; + uint mode; + uint dampingDir; + float intensity; + float minDistance; + float maxDistance; + float falloffPower; + float damping; +}; + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ParticleShader.shader.meta b/Assets/ThirdParty/Obi/Resources/Compute/ColliderDefinitions.cginc.meta similarity index 56% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/ParticleShader.shader.meta rename to Assets/ThirdParty/Obi/Resources/Compute/ColliderDefinitions.cginc.meta index b7373631e..469484159 100644 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ParticleShader.shader.meta +++ b/Assets/ThirdParty/Obi/Resources/Compute/ColliderDefinitions.cginc.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 801733041f66b49e1b3c2101471db877 -timeCreated: 1438934781 -licenseType: Store +guid: fe486a46344cd4c299b4475a4e046796 ShaderImporter: + externalObjects: {} defaultTextures: [] + nonModifiableTextures: [] userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ColliderFrictionConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/ColliderFrictionConstraints.compute new file mode 100644 index 000000000..980908925 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ColliderFrictionConstraints.compute @@ -0,0 +1,193 @@ +#include "ContactHandling.cginc" +#include "ColliderDefinitions.cginc" +#include "Rigidbody.cginc" +#include "Simplex.cginc" +#include "CollisionMaterial.cginc" +#include "Integration.cginc" +#include "AtomicDeltas.cginc" +#include "FluidKernels.cginc" + +#pragma kernel Project +#pragma kernel Apply + +StructuredBuffer particleIndices; +StructuredBuffer simplices; +StructuredBuffer invMasses; +StructuredBuffer invRotationalMasses; +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer prevPositions; +StructuredBuffer prevOrientations; +StructuredBuffer principalRadii; + +StructuredBuffer transforms; +StructuredBuffer shapes; + +RWStructuredBuffer RW_positions; +RWStructuredBuffer RW_orientations; + +RWStructuredBuffer contacts; +RWStructuredBuffer effectiveMasses; +StructuredBuffer dispatchBuffer; + +StructuredBuffer solverToWorld; +StructuredBuffer inertialSolverFrame; + +// Variables set from the CPU +uint particleCount; +float substepTime; +float stepTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= dispatchBuffer[3]) return; + + // Skip contacts involving triggers: + if (shapes[contacts[i].bodyB].isTrigger()) + return; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(contacts[i].bodyA, simplexSize); + int colliderIndex = contacts[i].bodyB; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + // Combine collision materials (use material from first particle in simplex) + collisionMaterial material = CombineCollisionMaterials(collisionMaterialIndices[simplices[simplexStart]], shapes[colliderIndex].materialIndex); + + // Calculate relative velocity: + float4 rA = float4(0,0,0,0), rB = float4(0,0,0,0); + + float4 prevPositionA = float4(0,0,0,0); + float4 linearVelocityA = float4(0,0,0,0); + float4 angularVelocityA = float4(0,0,0,0); + float invRotationalMassA = 0; + quaternion orientationA = quaternion(0, 0, 0, 0); + float simplexRadiusA = 0; + + int j = 0; + for (j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + prevPositionA += prevPositions[particleIndex] * contacts[i].pointA[j]; + linearVelocityA += DifferentiateLinear(positions[particleIndex], prevPositions[particleIndex], substepTime) * contacts[i].pointA[j]; + angularVelocityA += DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * contacts[i].pointA[j]; + invRotationalMassA += invRotationalMasses[particleIndex] * contacts[i].pointA[j]; + orientationA += orientations[particleIndex] * contacts[i].pointA[j]; + simplexRadiusA += EllipsoidRadius(contacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * contacts[i].pointA[j]; + } + + float4 relativeVelocity = linearVelocityA; + + // Add particle angular velocity if rolling contacts are enabled: + if (material.rollingContacts > 0) + { + rA = -contacts[i].normal * simplexRadiusA; // for fluid particles: + relativeVelocity += float4(cross(angularVelocityA.xyz, rA.xyz), 0); //* (Poly6(contacts[i].dist,simplexRadiusA*6) / Poly6(0,simplexRadiusA*6)); + } + + // Subtract rigidbody velocity: + int rbContacts = 1; + if (rigidbodyIndex >= 0) + { + // Note: unlike rA, that is expressed in solver space, rB is expressed in world space. + rB = solverToWorld[0].TransformPoint(contacts[i].pointB) - rigidbodies[rigidbodyIndex].com; + + relativeVelocity -= GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex], contacts[i].pointB, + asfloat(linearDeltasAsInt[rigidbodyIndex]), + asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); + + rbContacts = rigidbodies[rigidbodyIndex].constraintCount; + } + + // Determine impulse magnitude: + float tangentMass = effectiveMasses[i].tangentInvMassA + effectiveMasses[i].tangentInvMassB * rbContacts; + float bitangentMass = effectiveMasses[i].bitangentInvMassA + effectiveMasses[i].bitangentInvMassB * rbContacts; + float2 impulses = SolveFriction(contacts[i], tangentMass, bitangentMass, relativeVelocity, material.staticFriction, material.dynamicFriction, stepTime); + + if (abs(impulses.x) > EPSILON || abs(impulses.y) > EPSILON) + { + float4 tangentImpulse = impulses.x * contacts[i].tangent; + float4 bitangentImpulse = impulses.y * GetBitangent(contacts[i]); + float4 totalImpulse = tangentImpulse + bitangentImpulse; + + float baryScale = BaryScale(contacts[i].pointA); + for (j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + float4 delta1 = (tangentImpulse * effectiveMasses[i].tangentInvMassA + bitangentImpulse * effectiveMasses[i].bitangentInvMassA) * substepTime * contacts[i].pointA[j] * baryScale; + AtomicAddPositionDelta(particleIndex, delta1); + } + + if (rigidbodyIndex >= 0) + { + ApplyImpulse(rigidbodyIndex, -totalImpulse, contacts[i].pointB, inertialSolverFrame[0].frame); + } + + // Rolling contacts: + if (material.rollingContacts > 0) + { + // Calculate angular velocity deltas due to friction impulse: + float4 invInertiaTensor = 1.0/(GetParticleInertiaTensor(simplexRadiusA, invRotationalMassA) + FLOAT4_EPSILON); + float4x4 solverInertiaA = TransformInertiaTensor(invInertiaTensor, orientationA); + + float4 angVelDeltaA = mul(solverInertiaA, float4(cross(rA.xyz, totalImpulse.xyz), 0)); + float4 angVelDeltaB = FLOAT4_ZERO; + + // Final angular velocities, after adding the deltas: + angularVelocityA += angVelDeltaA; + float4 angularVelocityB = FLOAT4_ZERO; + + // Calculate weights (inverse masses): + float invMassA = length(mul(solverInertiaA, normalizesafe(angularVelocityA))); + float invMassB = 0; + + if (rigidbodyIndex >= 0) + { + angVelDeltaB = mul(-rigidbodies[rigidbodyIndex].inverseInertiaTensor, float4(cross(rB.xyz, totalImpulse.xyz), 0)); + angularVelocityB = rigidbodies[rigidbodyIndex].angularVelocity + angVelDeltaB; + invMassB = length(mul(rigidbodies[rigidbodyIndex].inverseInertiaTensor, normalizesafe(angularVelocityB))) * rbContacts; + } + + // Calculate rolling axis and angular velocity deltas: + float4 rollAxis = FLOAT4_ZERO; + float rollingImpulse = SolveRollingFriction(contacts[i], angularVelocityA, angularVelocityB, material.rollingFriction, invMassA, invMassB, rollAxis); + angVelDeltaA += rollAxis * rollingImpulse * invMassA; + angVelDeltaB -= rollAxis * rollingImpulse * invMassB; + + // Apply orientation delta to particles: + quaternion orientationDelta = AngularVelocityToSpinQuaternion(orientationA, angVelDeltaA, substepTime); + + for (j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + AtomicAddOrientationDelta(particleIndex, orientationDelta); + } + + // Apply angular velocity delta to rigidbody: + if (rigidbodyIndex >= 0) + { + AtomicAddAngularDelta(rigidbodyIndex, angVelDeltaB); + } + } + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int threadIndex = id.x; + + if (threadIndex >= particleCount) return; + + int p = particleIndices[threadIndex]; + + ApplyPositionDelta(RW_positions, p, sorFactor); + ApplyOrientationDelta(RW_orientations, p, sorFactor); +} + + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta new file mode 100644 index 000000000..e3e3d701b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec52fd9d30c594294a7c2f0f50cc6096 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ColliderGrid.compute b/Assets/ThirdParty/Obi/Resources/Compute/ColliderGrid.compute new file mode 100644 index 000000000..1369769ac --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ColliderGrid.compute @@ -0,0 +1,478 @@ +#include "GridUtils.cginc" +#include "CollisionMaterial.cginc" +#include "ContactHandling.cginc" +#include "ColliderDefinitions.cginc" +#include "Rigidbody.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "AtomicDeltas.cginc" +#include "Phases.cginc" + +#define MAX_CONTACTS_PER_SIMPLEX 64 + +#pragma kernel Clear +#pragma kernel BuildUnsortedList +#pragma kernel FindPopulatedLevels +#pragma kernel SortList +#pragma kernel BuildContactList +#pragma kernel PrefixSumColliderCounts +#pragma kernel SortContactPairs +#pragma kernel ApplyForceZones +#pragma kernel WriteForceZoneResults + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer invMasses; +StructuredBuffer velocities; +RWStructuredBuffer externalForces; +RWStructuredBuffer wind; +RWStructuredBuffer colors; +RWStructuredBuffer life; + +StructuredBuffer activeParticles; +StructuredBuffer simplices; +StructuredBuffer filters; +RWStructuredBuffer simplexBounds; // bounding box of each simplex. + +StructuredBuffer aabbs; +StructuredBuffer transforms; +StructuredBuffer shapes; +StructuredBuffer forceZones; +RWStructuredBuffer sortedColliderIndices; + +RWStructuredBuffer colliderTypeCounts; +RWStructuredBuffer contactOffsetsPerType; +RWStructuredBuffer unsortedContactPairs; + +RWStructuredBuffer cellIndices; +RWStructuredBuffer cellOffsets; + +RWStructuredBuffer cellCounts; +RWStructuredBuffer offsetInCells; + +RWStructuredBuffer contacts; +RWStructuredBuffer contactPairs; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer solverToWorld; +StructuredBuffer worldToSolver; + +uint maxContacts; +uint colliderCount; // amount of colliders in the grid. +uint cellsPerCollider; // max amount of cells a collider can be inserted into. Typically this is 8. +int shapeTypeCount; // number of different collider shapes, ie: box, sphere, sdf, etc. +uint particleCount; +float deltaTime; + +[numthreads(128, 1, 1)] +void Clear (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i == 0) + { + for (int l = 0; l <= GRID_LEVELS; ++l) + levelPopulation[l] = 0; + } + + // clear all cell offsets to invalid, so that we can later use atomic minimum to calculate the offset. + if (i < maxCells) + { + cellOffsets[i] = INVALID; + cellCounts[i] = 0; + } + + // clear all cell indices to invalid. + if (i < colliderCount) + { + for (uint j = 0; j < cellsPerCollider; ++j) + cellIndices[i*cellsPerCollider+j] = INVALID; + } +} + +[numthreads(128, 1, 1)] +void BuildUnsortedList (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= colliderCount) return; + + aabb bounds = aabbs[i]; + int rb = shapes[i].rigidbodyIndex; + + // Expand bounds by rigidbody's linear velocity + // (check against out of bounds rigidbody access, can happen when a destroyed collider references a rigidbody that has just been destroyed too) + if (rb >= 0)// && rb < rigidbodies.Length) + bounds.Sweep(rigidbodies[rb].velocity * deltaTime); + + // Expand bounds by collision material's stick distance: + if (shapes[i].materialIndex >= 0) + bounds.Expand(collisionMaterials[shapes[i].materialIndex].stickDistance); + + // calculate bounds size, grid level and cell size: + float4 size = bounds.max_ - bounds.min_; + float maxSize = max(max (size.x, size.y), size.z); + int level = GridLevelForSize(maxSize); + float cellSize = CellSizeOfLevel(level); + + // calculate max and min cell coordinates (force 4th component to zero, might not be after expanding) + int4 minCell = floor(bounds.min_ / cellSize); + int4 maxCell = floor(bounds.max_ / cellSize); + minCell[3] = 0; + maxCell[3] = 0; + + // if the collider is 2D, project it to the z = 0 cells. + if (shapes[i].is2D()) + { + minCell[2] = 0; + maxCell[2] = 0; + } + + int4 cellSpan = maxCell - minCell; + + // insert collider in cells: + for (int x = 0; x <= cellSpan[0]; ++x) + { + for (int y = 0; y <= cellSpan[1]; ++y) + { + for (int z = 0; z <= cellSpan[2]; ++z) + { + int cellIndex = GridHash(minCell + int4(x, y, z, level)); + + // calculate flat index of this cell into arrays: + int k = x + y*2 + z*4 + i*cellsPerCollider; + + cellIndices[k] = cellIndex; + InterlockedAdd(cellCounts[cellIndex],1,offsetInCells[k]); + } + } + } + + // atomically increase this level's population by one: + InterlockedAdd(levelPopulation[1 + level],1); +} + +[numthreads(128, 1, 1)] +void SortList (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= colliderCount * cellsPerCollider) return; + + uint cellIndex = cellIndices[i]; + + if (cellIndex != INVALID) + { + // write collider to its sorted index: + uint sortedIndex = cellOffsets[cellIndex] + offsetInCells[i]; + sortedColliderIndices[sortedIndex] = i; + } +} + +[numthreads(128, 1, 1)] +void BuildContactList (uint3 id : SV_DispatchThreadID) +{ + unsigned int threadIndex = id.x; + + if (threadIndex >= pointCount + edgeCount + triangleCount) return; + + uint cellCount = colliderCount * cellsPerCollider; + int candidateCount = 0; + uint candidates[MAX_CONTACTS_PER_SIMPLEX]; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(threadIndex, simplexSize); + + aabb b = simplexBounds[threadIndex].Transformed(solverToWorld[0]); + + // max size of the particle bounds in cells: + int4 maxSize = int4(10,10,10,10); + + // build a list of candidate colliders: + for (uint m = 1; m <= levelPopulation[0]; ++m) + { + uint l = levelPopulation[m]; + float cellSize = CellSizeOfLevel(l); + + int4 minCell = floor(b.min_ / cellSize); + int4 maxCell = floor(b.max_ / cellSize); + maxCell = minCell + min(maxCell - minCell, maxSize); + + for (int x = minCell[0]; x <= maxCell[0]; ++x) + { + for (int y = minCell[1]; y <= maxCell[1]; ++y) + { + // for 2D mode, project each cell at z == 0 and check them too. This way we ensure 2D colliders + // (which are inserted in cells with z == 0) are accounted for in the broadphase. + if (mode == 1) + { + uint flatCellIndex = GridHash(int4(x,y,0,l)); + uint cellStart = cellOffsets[flatCellIndex]; + uint cellCount = cellCounts[flatCellIndex]; + + // iterate through colliders in the neighbour cell + for (uint n = cellStart; n < cellStart + cellCount; ++n) + { + // sorted insert into the candidates list: + if (candidateCount < MAX_CONTACTS_PER_SIMPLEX) + candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerCollider; + } + } + + for (int z = minCell[2]; z <= maxCell[2]; ++z) + { + uint flatCellIndex = GridHash(int4(x,y,z,l)); + uint cellStart = cellOffsets[flatCellIndex]; + uint cellCount = cellCounts[flatCellIndex]; + + // iterate through colliders in the neighbour cell + for (uint n = cellStart; n < cellStart + cellCount; ++n) + { + if (candidateCount < MAX_CONTACTS_PER_SIMPLEX) + candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerCollider; + } + + } + } + } + } + + //evaluate candidates and create contacts: + if (candidateCount > 0) + { + // insert sort: + for (int k = 1; k < candidateCount; ++k) + { + uint key = candidates[k]; + int j = k - 1; + + while (j >= 0 && candidates[j] > key) + candidates[j + 1] = candidates[j--]; + + candidates[j + 1] = key; + } + + // make sure each candidate only shows up once in the list: + int first = 0, contactCount = 0; + while(++first != candidateCount) + { + if (candidates[contactCount] != candidates[first]) + candidates[++contactCount] = candidates[first]; + } + contactCount++; + + // append contacts: + for (int i = 0; i < contactCount; i++) + { + int c = candidates[i]; + + aabb colliderBoundsWS = aabbs[c]; + int rb = shapes[c].rigidbodyIndex; + + // Expand bounds by rigidbody's linear velocity: + if (rb >= 0) + colliderBoundsWS.Sweep(rigidbodies[rb].velocity * deltaTime); + + // Expand bounds by collision material's stick distance: + if (shapes[c].materialIndex >= 0) + colliderBoundsWS.Expand(collisionMaterials[shapes[c].materialIndex].stickDistance); + + // check if any simplex particle and the collider should collide: + bool shouldCollide = false; + int colliderCategory = shapes[c].phase & CategoryMask; + int colliderMask = (shapes[c].phase & MaskMask) >> 16; + for (int j = 0; j < simplexSize; ++j) + { + int simplexCategory = filters[simplices[simplexStart + j]] & CategoryMask; + int simplexMask = (filters[simplices[simplexStart + j]] & MaskMask) >> 16; + shouldCollide = shouldCollide || ((simplexCategory & colliderMask) != 0 && (simplexMask & colliderCategory) != 0); + } + + if (shouldCollide && b.IntersectsAabb(colliderBoundsWS, mode == 1)) + { + uint count; + InterlockedAdd(dispatchBuffer[7], 1, count); + + // technically incorrect, as number of pairs != number of contacts but + // we will ignore either excess pairs or contacts. + if (count < maxContacts) + { + // increment the amount of contacts for this shape type: + InterlockedAdd(colliderTypeCounts[shapes[c].type],1); + + // enqueue a new contact pair: + unsortedContactPairs[count] = uint2(threadIndex,c); + + InterlockedMax(dispatchBuffer[4],(count + 1) / 128 + 1); + } + } + } + } +} + +[numthreads(1, 1, 1)] +void PrefixSumColliderCounts (uint3 id : SV_DispatchThreadID) +{ + contactOffsetsPerType[0] = 0; + int i; + + for (i = 0; i < shapeTypeCount; ++i) + { + contactOffsetsPerType[i+1] = contactOffsetsPerType[i] + colliderTypeCounts[i]; + + // write amount of pairs per collider type in the dispatch buffer: + dispatchBuffer[8 + i*4] = colliderTypeCounts[i] / 128 + 1; + dispatchBuffer[8 + i*4 + 3] = colliderTypeCounts[i]; + } +} + +[numthreads(128, 1, 1)] +void SortContactPairs (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= dispatchBuffer[7] || i >= maxContacts) return; + + uint2 pair = unsortedContactPairs[i]; + int shapeType = (int)shapes[pair.y].type; + + // decrement amount of pairs for the given collider type: + uint count; + InterlockedAdd(colliderTypeCounts[shapeType],-1, count); + + // write the pair directly at its position in the sorted array: + contactPairs[contactOffsetsPerType[shapeType] + count - 1] = pair; +} + +void AtomicAddExternalForceDelta(in int index, in float4 delta) +{ + InterlockedAddFloat(deltasAsInt, index, 0, delta.x); + InterlockedAddFloat(deltasAsInt, index, 1, delta.y); + InterlockedAddFloat(deltasAsInt, index, 2, delta.z); +} + +void AtomicAddWindDelta(in int index, in float4 delta) +{ + InterlockedAddFloat(orientationDeltasAsInt, index, 0, delta.x); + InterlockedAddFloat(orientationDeltasAsInt, index, 1, delta.y); + InterlockedAddFloat(orientationDeltasAsInt, index, 2, delta.z); +} + +void AtomicAddLifeDelta(in int index, in float delta) +{ + InterlockedAddFloat(deltasAsInt, index, 3, delta); +} + +[numthreads(128, 1, 1)] +void ApplyForceZones (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + int forceZoneIndex = shapes[contacts[i].bodyB].forceZoneIndex; + + if (forceZoneIndex >= 0) + { + int simplexSize; + int simplexStart = GetSimplexStartAndSize(contacts[i].bodyA, simplexSize); + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + + float dist = -dot(positions[particleIndex] - contacts[i].pointB, contacts[i].normal); + if (dist < 0) continue; + + float4 axis = worldToSolver[0].Multiply(transforms[contacts[i].bodyB]).TransformDirection(float4(0, 0, 1, 0)); + + // calculate falloff region based on min/max distances: + float falloff = 1; + float range = forceZones[forceZoneIndex].maxDistance - forceZones[forceZoneIndex].minDistance; + if (abs(range) > EPSILON) + falloff = pow(saturate((dist - forceZones[forceZoneIndex].minDistance) / range), forceZones[forceZoneIndex].falloffPower); + + float forceIntensity = forceZones[forceZoneIndex].intensity * falloff; + float dampIntensity = forceZones[forceZoneIndex].damping * falloff; + + // tint particles: + float mix = pow(1 - saturate(forceZones[forceZoneIndex].color.a * falloff),deltaTime); + colors[particleIndex] = lerp(forceZones[forceZoneIndex].color, colors[particleIndex], mix); + + // calculate force direction, depending on the type of the force field: + float4 result = FLOAT4_ZERO; + switch (forceZones[forceZoneIndex].type) + { + case ZONETYPE_RADIAL: + result = contacts[i].normal * forceIntensity; + break; + case ZONETYPE_VORTEX: + result = float4(cross(axis.xyz * forceIntensity, contacts[i].normal.xyz),0); + break; + case ZONETYPE_DIRECTIONAL: + result = axis * forceIntensity; + break; + default: + AtomicAddLifeDelta(particleIndex, -forceIntensity * deltaTime); + return; + } + + // calculate damping along force direction: + float4 dampingDir; + switch (forceZones[forceZoneIndex].dampingDir) + { + case DAMPDIR_FORCE: + { + float4 forceDir = normalizesafe(result); + result -= forceDir * dot(velocities[particleIndex], forceDir) * dampIntensity; + } + break; + case DAMPDIR_SURFACE: + result -= contacts[i].normal * dot(velocities[particleIndex], contacts[i].normal) * dampIntensity; + break; + default: + result -= velocities[particleIndex] * dampIntensity; + break; + } + + if (invMasses[particleIndex] > 0) + { + // here we reuse position and orientation delta buffers as velocity and wind buffers for atomic writes: + switch (forceZones[forceZoneIndex].mode) + { + case FORCEMODE_ACCEL: + AtomicAddExternalForceDelta(particleIndex, result / simplexSize / invMasses[particleIndex]); + break; + case FORCEMODE_FORCE: + AtomicAddExternalForceDelta(particleIndex, result / simplexSize); + break; + case FORCEMODE_WIND: + AtomicAddWindDelta(particleIndex, result / simplexSize); + break; + } + } + } + } +} + +[numthreads(128, 1, 1)] +void WriteForceZoneResults (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = activeParticles[i]; + + externalForces[p].xyz += float3(asfloat(deltasAsInt[p].x), + asfloat(deltasAsInt[p].y), + asfloat(deltasAsInt[p].z)); + + wind[p].xyz += float3(asfloat(orientationDeltasAsInt[p].x), + asfloat(orientationDeltasAsInt[p].y), + asfloat(orientationDeltasAsInt[p].z)); + + life[p] += asfloat(deltasAsInt[p].w); + + deltasAsInt[p] = uint4(0, 0, 0, 0); + orientationDeltasAsInt[p] = uint4(0, 0, 0, 0); +} + + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ColliderGrid.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ColliderGrid.compute.meta new file mode 100644 index 000000000..6dbc21852 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ColliderGrid.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df152b65921c34856a1ea566d782acc1 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/CollisionMaterial.cginc b/Assets/ThirdParty/Obi/Resources/Compute/CollisionMaterial.cginc new file mode 100644 index 000000000..5bfaa8564 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/CollisionMaterial.cginc @@ -0,0 +1,109 @@ +#ifndef COLLISIONMATERIAL_INCLUDE +#define COLLISIONMATERIAL_INCLUDE + +struct collisionMaterial +{ + float dynamicFriction; + float staticFriction; + float rollingFriction; + float stickiness; + float stickDistance; + int frictionCombine; + int stickinessCombine; + int rollingContacts; +}; + +StructuredBuffer collisionMaterialIndices; +StructuredBuffer collisionMaterials; + +collisionMaterial EmptyCollisionMaterial() +{ + collisionMaterial m; + m.dynamicFriction = 0; + m.staticFriction = 0; + m.rollingFriction = 0; + m.stickiness = 0; + m.stickDistance = 0; + m.frictionCombine = 0; + m.stickinessCombine = 0; + m.rollingContacts = 0; + return m; +} + +collisionMaterial CombineWith(collisionMaterial a, collisionMaterial b) +{ + collisionMaterial result; + int frictionCombineMode = max(a.frictionCombine, b.frictionCombine); + int stickCombineMode = max(a.stickinessCombine, b.stickinessCombine); + + switch (frictionCombineMode) + { + case 0: + default: + result.dynamicFriction = (a.dynamicFriction + b.dynamicFriction) * 0.5f; + result.staticFriction = (a.staticFriction + b.staticFriction) * 0.5f; + result.rollingFriction = (a.rollingFriction + b.rollingFriction) * 0.5f; + break; + + case 1: + result.dynamicFriction = min(a.dynamicFriction, b.dynamicFriction); + result.staticFriction = min(a.staticFriction, b.staticFriction); + result.rollingFriction = min(a.rollingFriction, b.rollingFriction); + break; + + case 2: + result.dynamicFriction = a.dynamicFriction * b.dynamicFriction; + result.staticFriction = a.staticFriction * b.staticFriction; + result.rollingFriction = a.rollingFriction * b.rollingFriction; + break; + + case 3: + result.dynamicFriction = max(a.dynamicFriction, b.dynamicFriction); + result.staticFriction = max(a.staticFriction, b.staticFriction); + result.rollingFriction = max(a.rollingFriction, b.rollingFriction); + break; + } + + switch (stickCombineMode) + { + case 0: + default: + result.stickiness = (a.stickiness + b.stickiness) * 0.5f; + break; + + case 1: + result.stickiness = min(a.stickiness, b.stickiness); + break; + + case 2: + result.stickiness = a.stickiness * b.stickiness; + break; + + case 3: + result.stickiness = max(a.stickiness, b.stickiness); + break; + } + + result.stickDistance = max(a.stickDistance, b.stickDistance); + result.rollingContacts = a.rollingContacts | b.rollingContacts; + return result; +} + +collisionMaterial CombineCollisionMaterials(int materialA, int materialB) +{ + // Combine collision materials: + collisionMaterial combined; + + if (materialA >= 0 && materialB >= 0) + combined = CombineWith(collisionMaterials[materialA], collisionMaterials[materialB]); + else if (materialA >= 0) + combined = collisionMaterials[materialA]; + else if (materialB >= 0) + combined = collisionMaterials[materialB]; + else + combined = EmptyCollisionMaterial(); + + return combined; +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/SimpleParticleShader.shader.meta b/Assets/ThirdParty/Obi/Resources/Compute/CollisionMaterial.cginc.meta similarity index 56% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/SimpleParticleShader.shader.meta rename to Assets/ThirdParty/Obi/Resources/Compute/CollisionMaterial.cginc.meta index d7b7965c7..adab542ae 100644 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/SimpleParticleShader.shader.meta +++ b/Assets/ThirdParty/Obi/Resources/Compute/CollisionMaterial.cginc.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 87908c483837f4df49e97fa1aa0dacda -timeCreated: 1489574725 -licenseType: Store +guid: 034a508161c9948969266fd0cbf21988 ShaderImporter: + externalObjects: {} defaultTextures: [] + nonModifiableTextures: [] userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ContactHandling.cginc b/Assets/ThirdParty/Obi/Resources/Compute/ContactHandling.cginc new file mode 100644 index 000000000..1ffbd7fbc --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ContactHandling.cginc @@ -0,0 +1,228 @@ +#ifndef CONTACTHANDLING_INCLUDE +#define CONTACTHANDLING_INCLUDE + +#include "MathUtils.cginc" +#include "Transform.cginc" + +struct contact // 96 bytes +{ + float4 pointA; // point A, expressed as simplex barycentric coords for simplices, as a solver-space position for colliders. + float4 pointB; // point B, expressed as simplex barycentric coords for simplices, as a solver-space position for colliders. + float4 normal; /**< Normal direction. */ + float4 tangent; /**< Tangent direction. */ + + float dist; /** distance between both colliding entities at the beginning of the timestep.*/ + + float normalLambda; + float tangentLambda; + float bitangentLambda; + float stickLambda; + float rollingFrictionImpulse; + + int bodyA; + int bodyB; +}; + +// 24 bytes +struct contactMasses +{ + float normalInvMassA; + float tangentInvMassA; + float bitangentInvMassA; + + float normalInvMassB; + float tangentInvMassB; + float bitangentInvMassB; +}; + +float4 GetBitangent(in contact c) +{ + return normalizesafe(float4(cross(c.normal.xyz,c.tangent.xyz),0)); +} + +void CalculateBasis(in float4 relativeVelocity, in float4 normal, out float4 tangent) +{ + tangent = normalizesafe(relativeVelocity - dot(relativeVelocity, normal) * normal); +} + +void CalculateContactMassesA(float invMass, + float4 inverseInertiaTensor, + float4 position, + quaternion orientation, + float4 contactPoint, + bool rollingContacts, + float4 normal, + float4 bitangent, + float4 tangent, + out float normalInvMassA, + out float tangentInvMassA, + out float bitangentInvMassA) +{ + // initialize inverse linear masses: + normalInvMassA = tangentInvMassA = bitangentInvMassA = invMass; + + if (rollingContacts) + { + float4 rA = contactPoint - position; + float4x4 solverInertiaA = TransformInertiaTensor(inverseInertiaTensor, orientation); + + normalInvMassA += RotationalInvMass(solverInertiaA, rA, normal); + tangentInvMassA += RotationalInvMass(solverInertiaA, rA, tangent); + bitangentInvMassA += RotationalInvMass(solverInertiaA, rA, bitangent); + } +} + +void CalculateContactMassesB(float invMass, + float4 inverseInertiaTensor, + float4 position, + quaternion orientation, + float4 contactPoint, + bool rollingContacts, + float4 normal, + float4 bitangent, + float4 tangent, + out float normalInvMassB, + out float tangentInvMassB, + out float bitangentInvMassB) +{ + // initialize inverse linear masses: + normalInvMassB = tangentInvMassB = bitangentInvMassB = invMass; + + if (rollingContacts) + { + float4 rB = contactPoint - position; + float4x4 solverInertiaB = TransformInertiaTensor(inverseInertiaTensor, orientation); + + normalInvMassB += RotationalInvMass(solverInertiaB, rB, normal); + tangentInvMassB += RotationalInvMass(solverInertiaB, rB, tangent); + bitangentInvMassB += RotationalInvMass(solverInertiaB, rB, bitangent); + } +} + +void ClearContactMasses(out float normalInvMass, + out float tangentInvMass, + out float bitangentInvMass) +{ + normalInvMass = tangentInvMass = bitangentInvMass = 0; +} + +float SolveAdhesion(inout contact c, float normalMass, float4 posA, float4 posB, float stickDistance, float stickiness, float dt) +{ + float lambdaChange = 0; + + if (normalMass > 0 && stickDistance > 0 && stickiness > 0 && dt > 0) + { + c.dist = dot(posA - posB, c.normal); + + // calculate stickiness position correction: + float constraint = stickiness * (1 - max(c.dist / stickDistance, 0)) * dt; + + // calculate lambda multiplier: + float dlambda = -constraint / normalMass; + + // accumulate lambda: + float newStickinessLambda = min(c.stickLambda + dlambda, 0); + + // calculate lambda change and update accumulated lambda: + lambdaChange = newStickinessLambda - c.stickLambda; + c.stickLambda = newStickinessLambda; + } + + return lambdaChange; +} + +float SolvePenetration(inout contact c, float normalMass, float4 posA, float4 posB, float maxDepenetrationDelta) +{ + float lambdaChange = 0; + + if (normalMass > 0) + { + //project position delta to normal vector: + c.dist = dot(posA - posB, c.normal); + + // calculate max projection distance based on depenetration velocity: + float maxProjection = max(-c.dist - maxDepenetrationDelta, 0); + + // calculate lambda multiplier: + float dlambda = -(c.dist + maxProjection) / normalMass; + + // accumulate lambda: + float newLambda = max(c.normalLambda + dlambda, 0); + + // calculate lambda change and update accumulated lambda: + lambdaChange = newLambda - c.normalLambda; + c.normalLambda = newLambda; + } + + return lambdaChange; +} + +float2 SolveFriction(inout contact c, float tangentMass, float bitangentMass, float4 relativeVelocity, float staticFriction, float dynamicFriction, float dt) +{ + float2 lambdaChange = float2(0,0); + + if (tangentMass > 0 && bitangentMass > 0 && + (dynamicFriction > 0 || staticFriction > 0) && (c.normalLambda > 0 /*|| stickLambda > 0*/)) + { + // calculate delta projection on both friction axis: + float tangentPosDelta = dot(relativeVelocity, c.tangent); + float bitangentPosDelta = dot(relativeVelocity, GetBitangent(c)); + + // calculate friction pyramid limit: + float dynamicFrictionCone = c.normalLambda / dt * dynamicFriction; + float staticFrictionCone = c.normalLambda / dt * staticFriction; + + // tangent impulse: + float tangentLambdaDelta = -tangentPosDelta / tangentMass; + float newTangentLambda = c.tangentLambda + tangentLambdaDelta; + + if (abs(newTangentLambda) > staticFrictionCone) + newTangentLambda = clamp(newTangentLambda, -dynamicFrictionCone, dynamicFrictionCone); + + lambdaChange[0] = newTangentLambda - c.tangentLambda; + c.tangentLambda = newTangentLambda; + + // bitangent impulse: + float bitangentLambdaDelta = -bitangentPosDelta / bitangentMass; + float newBitangentLambda = c.bitangentLambda + bitangentLambdaDelta; + + if (abs(newBitangentLambda) > staticFrictionCone) + newBitangentLambda = clamp(newBitangentLambda, -dynamicFrictionCone, dynamicFrictionCone); + + lambdaChange[1] = newBitangentLambda - c.bitangentLambda; + c.bitangentLambda = newBitangentLambda; + } + + return lambdaChange; +} + +float SolveRollingFriction(inout contact c, + float4 angularVelocityA, + float4 angularVelocityB, + float rollingFriction, + float invMassA, + float invMassB, + inout float4 rolling_axis) +{ + float rolling_impulse_change = 0; + float totalInvMass = invMassA + invMassB; + + if (totalInvMass > 0) + { + rolling_axis = normalizesafe(angularVelocityA - angularVelocityB); + + float vel1 = dot(angularVelocityA,rolling_axis); + float vel2 = dot(angularVelocityB,rolling_axis); + + float relativeVelocity = vel1 - vel2; + + float maxImpulse = c.normalLambda * rollingFriction; + float newRollingImpulse = clamp(c.rollingFrictionImpulse - relativeVelocity / totalInvMass, -maxImpulse, maxImpulse); + rolling_impulse_change = newRollingImpulse - c.rollingFrictionImpulse; + c.rollingFrictionImpulse = newRollingImpulse; + } + + return rolling_impulse_change; +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ContactHandling.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/ContactHandling.cginc.meta new file mode 100644 index 000000000..0cf2726cf --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ContactHandling.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 28492658e279e4adaab298f430af09a2 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DeformableTriangles.compute b/Assets/ThirdParty/Obi/Resources/Compute/DeformableTriangles.compute new file mode 100644 index 000000000..d26219066 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DeformableTriangles.compute @@ -0,0 +1,143 @@ +#pragma kernel ResetNormals +#pragma kernel UpdateNormals +#pragma kernel UpdateEdgeNormals +#pragma kernel OrientationFromNormals + +#include "InterlockedUtils.cginc" +#include "MathUtils.cginc" + +StructuredBuffer deformableTriangles; +StructuredBuffer deformableTriangleUVs; + +StructuredBuffer deformableEdges; + +StructuredBuffer renderablePositions; +StructuredBuffer velocities; +StructuredBuffer wind; +StructuredBuffer phases; + +RWStructuredBuffer normals; + +RWStructuredBuffer normalsInt; +RWStructuredBuffer tangentsInt; +RWStructuredBuffer renderableOrientations; + +// Variables set from the CPU +uint normalsCount; +uint triangleCount; +uint edgeCount; + +void AccumulateNormal(in int index, in float4 delta) +{ + InterlockedAddFloat(normalsInt, index, 0, delta.x); + InterlockedAddFloat(normalsInt, index, 1, delta.y); + InterlockedAddFloat(normalsInt, index, 2, delta.z); +} + +void AccumulateTangent(in int index, in float4 delta) +{ + InterlockedAddFloat(tangentsInt, index, 0, delta.x); + InterlockedAddFloat(tangentsInt, index, 1, delta.y); + InterlockedAddFloat(tangentsInt, index, 2, delta.z); + InterlockedAddFloat(tangentsInt, index, 3, delta.w); +} + +[numthreads(128, 1, 1)] +void ResetNormals (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= normalsCount) return; + + // leave fluid and softbody normalsInt intact. + if ((phases[i] & (int)PHASE_FLUID) == 0 && normals[i].w >= 0) + { + normals[i] = FLOAT4_ZERO; + tangentsInt[i] = asuint(FLOAT4_ZERO); + } +} + +[numthreads(128, 1, 1)] +void UpdateNormals (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= triangleCount) return; + + int p1 = deformableTriangles[i*3]; + int p2 = deformableTriangles[i*3 + 1]; + int p3 = deformableTriangles[i*3 + 2]; + + float2 w1 = deformableTriangleUVs[i*3]; + float2 w2 = deformableTriangleUVs[i*3 + 1]; + float2 w3 = deformableTriangleUVs[i*3 + 2]; + + float4 v1 = renderablePositions[p1]; + float4 v2 = renderablePositions[p2]; + float4 v3 = renderablePositions[p3]; + + float3 m1 = (v2 - v1).xyz; + float3 m2 = (v3 - v1).xyz; + + float2 s = w2 - w1; + float2 t = w3 - w1; + + float4 normal = float4(cross(m1, m2), 0); + float4 tangent = FLOAT4_ZERO; + + float area = s.x * t.y - t.x * s.y; + + if (abs(area) > EPSILON) + { + tangent = float4(t.y * m1.x - s.y * m2.x, + t.y * m1.y - s.y * m2.y, + t.y * m1.z - s.y * m2.z, 0) / area; + } + + AccumulateNormal(p1,normal); + AccumulateNormal(p2,normal); + AccumulateNormal(p3,normal); + + AccumulateTangent(p1,tangent); + AccumulateTangent(p2,tangent); + AccumulateTangent(p3,tangent); +} + +[numthreads(128, 1, 1)] +void UpdateEdgeNormals (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= edgeCount) return; + + int p1 = deformableEdges[i * 2]; + int p2 = deformableEdges[i * 2 + 1]; + + float4 edge = renderablePositions[p2] - renderablePositions[p1]; + float4 avgWind = (velocities[p1] + velocities[p2]) * 0.5f - (wind[p1] + wind[p2]) * 0.5f; + float denom = dot(edge, edge); + float4 normal = avgWind - (denom < EPSILON ? FLOAT4_ZERO : edge * dot(avgWind, edge) / denom); + + AccumulateNormal(p1,normal); + AccumulateNormal(p2,normal); +} + +[numthreads(128, 1, 1)] +void OrientationFromNormals (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= normalsCount) return; + + if ((phases[i] & (int)PHASE_FLUID) == 0 && normals[i].w >= 0) // not fluid or softbody (no SDF stored)) + { + float4 normal = normals[i]; + float4 tangent = asfloat(tangentsInt[i]); + + if (dot(normal, normal) > EPSILON && + dot(tangent, tangent) > EPSILON) + { + normals[i] = normalizesafe(normal); + tangentsInt[i] = asuint(normalizesafe(tangent)); + + // particle orientation from normal/tangent: + renderableOrientations[i] = q_look_at(normals[i].xyz, asfloat(tangentsInt[i]).xyz); + } + } +} diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DeformableTriangles.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/DeformableTriangles.compute.meta new file mode 100644 index 000000000..6175b9dae --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DeformableTriangles.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2444094f2fb2c43cfb9c90b5949f39ec +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DensityConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/DensityConstraints.compute new file mode 100644 index 000000000..cf39aa6a4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DensityConstraints.compute @@ -0,0 +1,430 @@ +#pragma kernel UpdateDensities +#pragma kernel Apply +#pragma kernel ApplyPositionDeltas + +#pragma kernel CalculateAtmosphere +#pragma kernel ApplyAtmosphere + +#pragma kernel AccumulateSmoothPositions +#pragma kernel AccumulateAnisotropy +#pragma kernel AverageAnisotropy + +#include "MathUtils.cginc" +#include "Quaternion.cginc" +#include "AtomicDeltas.cginc" +#include "FluidKernels.cginc" + +StructuredBuffer neighbors; +StructuredBuffer neighborCounts; + +StructuredBuffer sortedToOriginal; + +StructuredBuffer sortedPositions; +StructuredBuffer sortedPrevPositions; +StructuredBuffer sortedFluidMaterials; +StructuredBuffer sortedFluidInterface; +StructuredBuffer sortedPrincipalRadii; +StructuredBuffer sortedUserData; +StructuredBuffer sortedFluidData_RO; +RWStructuredBuffer sortedFluidData; + +StructuredBuffer prevOrientations; + +StructuredBuffer wind; + +StructuredBuffer fluidMaterials2; +RWStructuredBuffer fluidData; +RWStructuredBuffer positions; +RWStructuredBuffer prevPositions; +RWStructuredBuffer orientations; +RWStructuredBuffer velocities; +RWStructuredBuffer angularVelocities; +RWStructuredBuffer userData; +RWStructuredBuffer normals; + +RWStructuredBuffer massCenters; +RWStructuredBuffer prevMassCenters; + +RWStructuredBuffer vorticity; +RWStructuredBuffer vorticityAccelerations; +RWStructuredBuffer linearAccelerations; +RWStructuredBuffer linearFromAngular; +RWStructuredBuffer angularDiffusion; + +StructuredBuffer normals_RO; +StructuredBuffer fluidData_RO; +StructuredBuffer vorticity_RO; +StructuredBuffer velocities_RO; +StructuredBuffer angularVelocities_RO; +StructuredBuffer linearFromAngular_RO; + +RWStructuredBuffer renderablePositions; +RWStructuredBuffer renderableOrientations; +RWStructuredBuffer renderableRadii; +StructuredBuffer life; + +RWStructuredBuffer anisotropies; +StructuredBuffer dispatchBuffer; + +// Variables set from the CPU +uint maxNeighbors; +float deltaTime; + +[numthreads(128, 1, 1)] +void UpdateDensities (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + float4 positionA = sortedPositions[i]; + float4 fluidMaterialA = sortedFluidMaterials[i]; + + // self-contribution: + float avgKernel = Poly6(0,fluidMaterialA.x); + float restVolumeA = pow(abs(sortedPrincipalRadii[i].x * 2),3-mode); // in 2D, mode == 1 so amount of dimensions is 2. + float grad = restVolumeA * Spiky(0,fluidMaterialA.x); + + float4 fluidDataA = float4(avgKernel,0,grad,grad*grad); + float4 massCenterA = float4(positionA.xyz, 1) / positionA.w; + float4 prevMassCenterA = float4(sortedPrevPositions[i].xyz, 1) / positionA.w; + float4x4 anisotropyA = (multrnsp4(positionA, sortedPrevPositions[i]) + FLOAT4X4_IDENTITY * 0.001 * sortedPrincipalRadii[i].x * sortedPrincipalRadii[i].x) / positionA.w; + + float4 fluidMaterialB; + float4 positionB; + + // iterate over neighborhood, calculate density and gradient. + uint count = min(maxNeighbors, neighborCounts[i]); + for (uint j = 0; j < count; ++j) + { + int n = neighbors[maxNeighbors * i + j]; + + fluidMaterialB = sortedFluidMaterials[n]; + positionB = sortedPositions[n]; + float dist = length((positionA - positionB).xyz); + + float avgKernel = (Poly6(dist,fluidMaterialA.x) + Poly6(dist,fluidMaterialB.x)) * 0.5f; + + float restVolumeB = pow(abs(sortedPrincipalRadii[n].x * 2),3-mode); + float grad = restVolumeB * Spiky(dist,fluidMaterialA.x); + fluidDataA += float4(restVolumeB / restVolumeA * avgKernel,0,grad,grad*grad); + + // accumulate masses for COMs and moment matrices: + massCenterA += float4(positionB.xyz, 1) / positionB.w; + prevMassCenterA += float4(sortedPrevPositions[n].xyz, 1) / positionB.w; + anisotropyA += (multrnsp4(positionB, sortedPrevPositions[n]) + FLOAT4X4_IDENTITY * 0.001 * sortedPrincipalRadii[n].x * sortedPrincipalRadii[n].x) / positionB.w; + } + + // self particle contribution to density and gradient: + fluidDataA[3] += fluidDataA[2] * fluidDataA[2]; + + // usually, we'd weight density by mass (density contrast formulation) by dividing by invMass. Then, multiply by invMass when + // calculating the state equation (density / restDensity - 1, restDensity = mass / volume, so density * invMass * restVolume - 1 + // We end up with density / invMass * invMass * restVolume - 1, invMass cancels out. + float constraint = max(0, fluidDataA[0] * restVolumeA - 1) * fluidMaterialA.w; + + // calculate lambda: + fluidDataA[1] = -constraint / (positionA.w * fluidDataA[3] + EPSILON); + + // get total neighborhood mass: + float M = massCenterA[3]; + massCenterA /= massCenterA[3]; + prevMassCenterA /= prevMassCenterA[3]; + + // update moment: + anisotropyA -= M * multrnsp4(massCenterA, prevMassCenterA); + + // extract neighborhood orientation delta: + renderableOrientations[i] = ExtractRotation(anisotropyA, QUATERNION_IDENTITY, 5); + + sortedFluidData[i] = fluidDataA; + massCenters[i] = massCenterA; + prevMassCenters[i] = prevMassCenterA; +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + float restVolumeA = pow(abs(sortedPrincipalRadii[i].x * 2),3-mode); + float4 fluidMaterialA = sortedFluidMaterials[i]; + float4 positionA = sortedPositions[i]; + float4 prevPositionA = sortedPrevPositions[i]; + float4 massCenterA = massCenters[i]; + float lambdaA = sortedFluidData[i][1]; + + float4 fluidMaterialB; + float4 fluidInterfaceB; + float4 massCenterB; + float4 positionB; + + float4 pressureDelta = FLOAT4_ZERO; + float4 viscVortDelta = FLOAT4_ZERO; + + uint count = min(maxNeighbors, neighborCounts[i]); + for (uint j = 0; j < count; ++j) + { + int n = neighbors[maxNeighbors * i + j]; + + fluidMaterialB = sortedFluidMaterials[n]; + massCenterB = massCenters[n]; + positionB = sortedPositions[n]; + + float4 normal = float4((positionA - positionB).xyz,0); + float dist = length(normal); + + float restVolumeB = pow(abs(sortedPrincipalRadii[n].x * 2),3-mode); + + // calculate lambda correction due to polarity (cohesion): + float cAvg = (Cohesion(dist,fluidMaterialA.x * 1.4) + Cohesion(dist,fluidMaterialB.x * 1.4)) * 0.5; + float st = 0.2 * cAvg * (1 - saturate(abs(fluidMaterialA.y - fluidMaterialB.y))) * (fluidMaterialA.y + fluidMaterialB.y) * 0.5; + float scorrA = -st / (positionA.w * sortedFluidData[i][3] + EPSILON); + float scorrB = -st / (positionB.w * sortedFluidData[n][3] + EPSILON); + + float avgGradient = (Spiky(dist,fluidMaterialA.x) + Spiky(dist,fluidMaterialB.x)) * 0.5; + pressureDelta += normal / (dist + EPSILON) * avgGradient * ((lambdaA + scorrA) * restVolumeB + (sortedFluidData[n][1] + scorrB) * restVolumeA); + + // viscosity: + float4 viscGoal = float4(massCenterB.xyz + rotate_vector(renderableOrientations[n], (prevPositionA - prevMassCenters[n]).xyz), 0); + viscVortDelta += (viscGoal - positionA) * min(fluidMaterialB.z, fluidMaterialA.z); + } + + // viscosity: + float4 viscGoal = float4(massCenterA.xyz + rotate_vector(renderableOrientations[i], (prevPositionA - prevMassCenters[i]).xyz), 0); + viscVortDelta += (viscGoal - positionA) * fluidMaterialA.z; + + AddPositionDelta(sortedToOriginal[i], pressureDelta * positionA.w + viscVortDelta / (neighborCounts[i] + 1)); +} + +[numthreads(128, 1, 1)] +void ApplyPositionDeltas (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + int p = sortedToOriginal[i]; + ApplyPositionDelta(positions, p, 1); + + renderableOrientations[p] = FLOAT4_ZERO; + fluidData[p] = sortedFluidData[i]; +} + +[numthreads(128, 1, 1)] +void CalculateAtmosphere (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + int originalIndex = sortedToOriginal[i]; + + float4 normal = FLOAT4_ZERO; + float4 linearVel = FLOAT4_ZERO; + + float4 curl = FLOAT4_ZERO; + float4 angularCurl = FLOAT4_ZERO; + + float4 vorticityDiff = FLOAT4_ZERO; + float4 baroclinityDiff = FLOAT4_ZERO; + float velDiff = 0; + + float restVolumeA = pow(abs(sortedPrincipalRadii[i].x * 2),3 - mode); + float4 velocityA = velocities_RO[originalIndex]; + float4 angularVelocityA = angularVelocities_RO[originalIndex]; + float4 positionA = sortedPositions[i]; + float radiiA = sortedFluidMaterials[i].x; + float4 userDataA = sortedUserData[i]; + float invDensityA = positionA.w / sortedFluidData_RO[i].x; // density contrast * mass; + + float radiiB; + float4 positionB; + float4 velocityB; + float4 angularVelocityB; + + uint count = min(maxNeighbors, neighborCounts[i]); + for (uint j = 0; j < count; ++j) + { + int n = neighbors[maxNeighbors * i + j]; + + float restVolumeB = pow(abs(sortedPrincipalRadii[n].x * 2),3 - mode); + radiiB = sortedFluidMaterials[n].x; + positionB = sortedPositions[n]; + + // Can't sort velocities as these are calculated *after* constraint projection. + // maybe a pre-sort step before velocity postprocess? + angularVelocityB = angularVelocities_RO[sortedToOriginal[n]]; + velocityB = velocities_RO[sortedToOriginal[n]]; + + float3 relVort = vorticity_RO[originalIndex].xyz - vorticity_RO[sortedToOriginal[n]].xyz; + float3 relAng = angularVelocityA.xyz - angularVelocityB.xyz; + float3 relVel = velocityA.xyz - velocityB.xyz; + float4 d = float4((positionA - positionB).xyz,0); + float dist = length(d); + + float avgGradient = (Spiky(dist,radiiA) + Spiky(dist,radiiB)) * 0.5f; + float avgKernel = (Poly6(dist,radiiA) + Poly6(dist,radiiB)) * 0.5f; + float avgNorm = (Poly6(0,radiiA) + Poly6(0,radiiB)) * 0.5; + + // property diffusion: + float diffusionSpeed = (sortedFluidInterface[i].w + sortedFluidInterface[n].w) * avgKernel * deltaTime; + float4 userDelta = (sortedUserData[n] - userDataA) * diffusionMask * diffusionSpeed; + userDataA += restVolumeB / restVolumeA * userDelta; + + // calculate color field normal: + float radius = (radiiA + radiiB) * 0.5f; + float4 normGrad = d / (dist + EPSILON); + float4 vgrad = normGrad * avgGradient; + normal += vgrad * radius * restVolumeB; + + // measure relative velocity for foam generation: + float relVelMag = length(relVel) + EPSILON; + velDiff += relVelMag * (1 - dot(relVel / relVelMag, normGrad.xyz)) * (1 - min(1,dist/(radius + EPSILON))); + + // linear vel due to angular velocity: + linearVel += float4(cross(angularVelocityB.xyz, d.xyz) * avgKernel / avgNorm,0); + + // micropolar vorticity curls: + curl += float4(cross(relVel, vgrad.xyz) / positionB.w * invDensityA,0); + angularCurl += float4(cross(relVort, vgrad.xyz) / positionB.w * invDensityA,0); + + // baroclinity and vorticity diffusion: + baroclinityDiff += float4(relAng * avgKernel / positionB.w * invDensityA, 0); + vorticityDiff += float4(relVort * avgKernel / positionB.w * invDensityA, 0); + } + + linearAccelerations[originalIndex] = angularCurl; + vorticityAccelerations[originalIndex] = curl; + linearFromAngular[originalIndex] = linearVel; + + angularDiffusion[originalIndex]._m00_m10_m20_m30 = baroclinityDiff; + angularDiffusion[originalIndex]._m01_m11_m21_m31 = vorticityDiff; + + fluidData[originalIndex].z = velDiff; + normals[originalIndex] = normal; + userData[originalIndex] = userDataA; +} + +[numthreads(128, 1, 1)] +void ApplyAtmosphere (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + int originalIndex = sortedToOriginal[i]; + + float restVolume = pow(abs(sortedPrincipalRadii[i].x * 2),3 - mode); + + // particles near the surface should experience drag: + float4 velocityDiff = float4((velocities[originalIndex] - wind[originalIndex]).xyz,0); + velocities[originalIndex] -= sortedFluidInterface[i].x * velocityDiff * max(0, 1 - fluidData_RO[originalIndex].x * restVolume) * deltaTime; + + // external ambient pressure along normal: + velocities[originalIndex] += sortedFluidInterface[i].y * normals_RO[originalIndex] * deltaTime; + + // angular acceleration due to baroclinity: + angularVelocities[originalIndex] += float4(fluidMaterials2[originalIndex].z * cross(-normals_RO[originalIndex].xyz, -velocityDiff.xyz),0) * deltaTime; + angularVelocities[originalIndex] -= fluidMaterials2[originalIndex].w * angularDiffusion[originalIndex]._m00_m10_m20_m30; + + // micropolar vorticity: + velocities[originalIndex] += fluidMaterials2[originalIndex].x * linearAccelerations[originalIndex] * deltaTime; + vorticity[originalIndex] += fluidMaterials2[originalIndex].x * (vorticityAccelerations[originalIndex] * 0.5 - vorticity[originalIndex]) * deltaTime; + vorticity[originalIndex] -= fluidMaterials2[originalIndex].y * angularDiffusion[originalIndex]._m01_m11_m21_m31; + + linearAccelerations[originalIndex] = FLOAT4_ZERO; + vorticityAccelerations[originalIndex] = FLOAT4_ZERO; + angularDiffusion[originalIndex] = FLOAT4X4_ZERO; + + // we want to add together linear and angular velocity fields and use result to advect particles without modifying either field: + positions[originalIndex] += linearFromAngular_RO[originalIndex] * deltaTime; + prevPositions[originalIndex] += linearFromAngular_RO[originalIndex] * deltaTime; +} + +[numthreads(128, 1, 1)] +void AccumulateSmoothPositions (uint3 id : SV_DispatchThreadID) +{ + unsigned int p1 = id.x; + if (p1 >= dispatchBuffer[3]) return; + + anisotropies[p1] = FLOAT4X4_ZERO; + float4 renderablePositionA = renderablePositions[p1]; + float radiiA = sortedFluidMaterials[p1].x; + float4 avgPosition = float4(renderablePositionA.xyz, 1);//FLOAT4_ZERO; + + uint count = min(maxNeighbors, neighborCounts[p1]); + for (uint j = 0; j < count; ++j) + { + int p2 = neighbors[maxNeighbors * p1 + j]; + float4 renderablePositionB = renderablePositions[p2]; + + float dist = length((renderablePositionA - renderablePositionB).xyz); + + float avgKernel = (Poly6(dist,radiiA) + Poly6(dist,sortedFluidMaterials[p2].x)) * 0.5; + avgPosition += float4(renderablePositionB.xyz,1) * avgKernel; + } + + anisotropies[p1]._m03_m13_m23_m33 = avgPosition / avgPosition.w; +} + +[numthreads(128, 1, 1)] +void AccumulateAnisotropy (uint3 id : SV_DispatchThreadID) +{ + unsigned int p1 = id.x; + if (p1 >= dispatchBuffer[3]) return; + + float4x4 anisotropyA = anisotropies[p1]; + float4 renderablePositionA = renderablePositions[p1]; + float radiiA = sortedFluidMaterials[p1].x; + + uint count = min(maxNeighbors, neighborCounts[p1]); + for (uint j = 0; j < count; ++j) + { + int p2 = neighbors[maxNeighbors * p1 + j]; + float4 renderablePositionB = renderablePositions[p2]; + + float dist = length((renderablePositionA - renderablePositionB).xyz); + + float avgKernel = (Poly6(dist,radiiA) + Poly6(dist,sortedFluidMaterials[p2].x)) * 0.5; + + float4 r = (renderablePositionB - anisotropyA._m03_m13_m23_m33) * avgKernel; + anisotropyA += multrnsp4(r, r); + } + + anisotropies[p1] = anisotropyA; +} + +[numthreads(128, 1, 1)] +void AverageAnisotropy (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + int o = sortedToOriginal[i]; + + if (anisotropies[i]._m00 + anisotropies[i]._m11 + anisotropies[i]._m22 > 0.01f) + { + float3 singularValues; + float3x3 u; + EigenSolve((float3x3)anisotropies[i], singularValues, u); + + float maxVal = singularValues[0]; + float3 s = max(singularValues, maxVal / maxAnisotropy) / maxVal * sortedPrincipalRadii[i].x; + + renderableOrientations[o] = q_look_at(u._m02_m12_m22,u._m01_m11_m21); + renderableRadii[o] = float4(s.xyz,1); + } + else + { + float radius = sortedPrincipalRadii[i].x / maxAnisotropy; + renderableOrientations[o] = QUATERNION_IDENTITY; + renderableRadii[o] = float4(radius,radius,radius,1); + fluidData[o].x = 1 / pow(abs(radius * 2),3-mode); // normal volume of an isolated particle. + } + + renderablePositions[o] = lerp(renderablePositions[o],anisotropies[i]._m03_m13_m23_m33,min((maxAnisotropy - 1)/3.0f,1)); + + // inactive particles have radii.w == 0, set it right away for particles killed during this frame + // to keep them from being rendered during this frame instead of waiting for the CPU to do it at the start of next sim step: + float4 radii = renderableRadii[o]; + radii.w = life[o] <= 0 ? 0: radii.w; + renderableRadii[o] = radii; +} diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DensityConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/DensityConstraints.compute.meta new file mode 100644 index 000000000..d170b648b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DensityConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80856d7c741a940a7bbf0d7d4f472e1d +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DistanceConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/DistanceConstraints.compute new file mode 100644 index 000000000..bf507f613 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DistanceConstraints.compute @@ -0,0 +1,69 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer restLengths; +StructuredBuffer stiffnesses; +RWStructuredBuffer lambdas; + +RWStructuredBuffer positions; +StructuredBuffer invMasses; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 2 + 1]; + + float w1 = invMasses[p1]; + float w2 = invMasses[p2]; + + // calculate time adjusted compliance + float compliance = stiffnesses[i].x / (deltaTime * deltaTime); + + // calculate position and lambda deltas: + float4 dist = positions[p1] - positions[p2]; + float d = length(dist); + + // calculate constraint value: + float constraint = d - restLengths[i]; + constraint -= max(min(constraint, 0), -stiffnesses[i].y); + + // calculate lambda and position deltas: + float dlambda = (-constraint - compliance * lambdas[i]) / (w1 + w2 + compliance + EPSILON); + float4 delta = dlambda * dist / (d + EPSILON); + + lambdas[i] += dlambda; + + float4 delta1 = delta * w1; + float4 delta2 = -delta * w2; + + AddPositionDelta(p1, delta1); + AddPositionDelta(p2, delta2); +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 2 + 1]; + + ApplyPositionDelta(positions, p1, sorFactor); + ApplyPositionDelta(positions, p2, sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DistanceConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/DistanceConstraints.compute.meta new file mode 100644 index 000000000..8d55c47ce --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DistanceConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4883886c2cc7740e18f906dcf663c1f1 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DistanceFieldShape.compute b/Assets/ThirdParty/Obi/Resources/Compute/DistanceFieldShape.compute new file mode 100644 index 000000000..a101fb5e8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DistanceFieldShape.compute @@ -0,0 +1,101 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "DistanceFunctions.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer velocities; + +StructuredBuffer simplices; + +StructuredBuffer transforms; +StructuredBuffer shapes; + +// distance field data: +StructuredBuffer distanceFieldHeaders; +StructuredBuffer dfNodes; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer contacts; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; +float deltaTime; + +[numthreads(128, 1, 1)] +void GenerateContacts (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4 * SDF_SHAPE]) return; + + int firstPair = contactOffsetsPerType[SDF_SHAPE]; + int simplexIndex = contactPairs[firstPair + i].x; + int colliderIndex = contactPairs[firstPair + i].y; + shape s = shapes[colliderIndex]; + + if (s.dataIndex < 0) return; + + DistanceField dfShape; + dfShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + dfShape.s = s; + dfShape.distanceFieldHeaders = distanceFieldHeaders; + dfShape.dfNodes = dfNodes; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + SurfacePoint colliderPoint = Optimize(dfShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + float4 velocity = FLOAT4_ZERO; + float simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; + velocity += velocities[particleIndex] * simplexBary[j]; + } + + /*float4 rbVelocity = float4.zero; + if (rigidbodyIndex >= 0) + rbVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, colliderPoint.point, rigidbodies, solverToWorld);*/ + + //float dAB = dot(simplexPoint - colliderPoint.pos, colliderPoint.normal); + //float vel = dot(velocity /*- rbVelocity*/, colliderPoint.normal); + + //if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) + { + uint count = contacts.IncrementCounter(); + if (count < maxContacts) + { + contact c = (contact)0; + + c.pointB = colliderPoint.pos; + c.normal = colliderPoint.normal * dfShape.s.isInverted(); + c.pointA = simplexBary; + c.bodyA = simplexIndex; + c.bodyB = colliderIndex; + + contacts[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DistanceFieldShape.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/DistanceFieldShape.compute.meta new file mode 100644 index 000000000..0f2a1664c --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DistanceFieldShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2391a8c719b4c4193a8be38dcf83e8fd +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DistanceFunctions.cginc b/Assets/ThirdParty/Obi/Resources/Compute/DistanceFunctions.cginc new file mode 100644 index 000000000..e7835bc84 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DistanceFunctions.cginc @@ -0,0 +1,374 @@ +#ifndef DISTANCEFUNCTIONS_INCLUDE +#define DISTANCEFUNCTIONS_INCLUDE + +#include "SurfacePoint.cginc" +#include "Transform.cginc" +#include "Bounds.cginc" + +struct Sphere : IDistanceFunction +{ + shape s; + transform colliderToSolver; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 center = s.center * colliderToSolver.scale; + float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; + + if (s.is2D()) + pnt[2] = 0; + + float radius = s.size.x * cmax(colliderToSolver.scale.xyz); + float distanceToCenter = length(pnt); + + float4 normal = pnt / (distanceToCenter + EPSILON); + + projectedPoint.pos = colliderToSolver.TransformPointUnscaled(center + normal * (radius + s.contactOffset)); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + projectedPoint.bary = float4(1,0,0,0); + } +}; + +struct Box : IDistanceFunction +{ + shape s; + transform colliderToSolver; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 center = s.center * colliderToSolver.scale; + float4 size = s.size * colliderToSolver.scale * 0.5f; + + // clamp the point to the surface of the box: + float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; + + if (s.is2D()) + pnt[2] = 0; + + // get minimum distance for each axis: + float4 distances = size - abs(pnt); + + if (distances.x >= 0 && distances.y >= 0 && distances.z >= 0) + { + projectedPoint.normal = float4(0,0,0,0); + projectedPoint.pos = pnt; + + // find minimum distance in all three axes and the axis index: + if (distances.y < distances.x && distances.y < distances.z) + { + projectedPoint.normal[1] = sign(pnt[1]); + projectedPoint.pos[1] = size[1] * projectedPoint.normal[1]; + } + else if (distances.z < distances.x && distances.z < distances.y) + { + projectedPoint.normal[2] = sign(pnt[2]); + projectedPoint.pos[2] = size[2] * projectedPoint.normal[2]; + } + else + { + projectedPoint.normal[0] = sign(pnt[0]); + projectedPoint.pos[0] = size[0] * projectedPoint.normal[0]; + } + } + else + { + projectedPoint.pos = clamp(pnt, -size, size); + projectedPoint.normal = normalizesafe(pnt - projectedPoint.pos); + } + + projectedPoint.pos = colliderToSolver.TransformPointUnscaled(projectedPoint.pos + center + projectedPoint.normal * s.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(projectedPoint.normal); + projectedPoint.bary = float4(1,0,0,0); + } +}; + +struct Capsule : IDistanceFunction +{ + shape s; + transform colliderToSolver; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 center = s.center * colliderToSolver.scale; + float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; + + if (s.is2D()) + pnt[2] = 0; + + int direction = (int)s.size.z; + float height; + float radius; + float4 halfVector = float4(0,0,0,0); + + if (direction == 0) + { + radius = s.size.x * max(colliderToSolver.scale[1], colliderToSolver.scale[2]); + height = max(radius, s.size.y * 0.5f * colliderToSolver.scale[0]); + halfVector[0] = height - radius; + } + else if (direction == 1) + { + radius = s.size.x * max(colliderToSolver.scale[2], colliderToSolver.scale[0]); + height = max(radius, s.size.y * 0.5f * colliderToSolver.scale[1]); + halfVector[1] = height - radius; + } + else + { + radius = s.size.x * max(colliderToSolver.scale[0], colliderToSolver.scale[1]); + height = max(radius, s.size.y * 0.5f * colliderToSolver.scale[2]); + halfVector[2] = height - radius; + } + + float mu; + float4 centerLine = NearestPointOnEdge(-halfVector, halfVector, pnt, mu); + float4 centerToPoint = pnt - centerLine; + float distanceToCenter = length(centerToPoint); + + float4 normal = centerToPoint / (distanceToCenter + EPSILON); + + projectedPoint.pos = colliderToSolver.TransformPointUnscaled(center + centerLine + normal * (radius + s.contactOffset)); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + projectedPoint.bary = float4(1,0,0,0); + } +}; + +struct BIHNode +{ + int firstChild; /**< index of the first child node. The second one is right after the first.*/ + int start; /**< index of the first element in this node.*/ + int count; /**< amount of elements in this node.*/ + + int axis; /**< axis of the split plane (0,1,2 = x,y,z)*/ + float min_; /**< minimum split plane*/ + float max_; /**< maximum split plane*/ +}; + +struct TriangleMeshHeader +{ + int firstNode; + int nodeCount; + int firstTriangle; + int triangleCount; + int firstVertex; + int vertexCount; +}; + +struct Triangle +{ + int i1; + int i2; + int i3; + aabb b; +}; + +struct TriangleMesh : IDistanceFunction +{ + shape s; + transform colliderToSolver; + + CachedTri tri; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos); + + if (s.is2D()) + pnt[2] = 0; + + float4 bary = FLOAT4_ZERO; + float4 nearestPoint = NearestPointOnTri(tri, pnt, bary); + float4 normal = normalizesafe(pnt - nearestPoint); + + projectedPoint.pos = colliderToSolver.TransformPointUnscaled(nearestPoint + normal * s.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + projectedPoint.bary = float4(1,0,0,0); + } + +}; + +struct HeightFieldHeader +{ + int firstSample; + int sampleCount; +}; + +struct Heightfield : IDistanceFunction +{ + shape s; + transform colliderToSolver; + + CachedTri tri; + float4 triNormal; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 pnt = colliderToSolver.InverseTransformPoint(pos); + + float4 bary; + float4 nearestPoint = NearestPointOnTri(tri, pnt, bary); + float4 normal = normalizesafe(pnt - nearestPoint); + + // flip the contact normal if it points below ground: (doesn't work with holes) + //OneSidedNormal(triNormal, normal); + + projectedPoint.pos = colliderToSolver.TransformPoint(nearestPoint + normal * s.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + projectedPoint.bary = float4(1,0,0,0); + } + +}; + +struct DistanceFieldHeader +{ + int firstNode; + int nodeCount; +}; + +struct DFNode +{ + float4 distancesA; + float4 distancesB; + float4 center; + int firstChild; + + // add 12 bytes of padding to ensure correct memory alignment: + int pad0; + int pad1; + int pad2; + + float4 GetNormalizedPos(float4 position) + { + float4 corner = center - float4(center[3],center[3],center[3],center[3]); + return (position - corner) / (center[3] * 2); + } + + float4 SampleWithGradient(float4 position) + { + float4 nPos = GetNormalizedPos(position); + + // trilinear interpolation of distance: + float4 x = distancesA + (distancesB - distancesA) * nPos[0]; + float2 y = x.xy + (x.zw - x.xy) * nPos[1]; + float dist = y[0] + (y[1] - y[0]) * nPos[2]; + + // gradient estimation: + // x == 0 + float2 a = distancesA.xy + (distancesA.zw - distancesA.xy) * nPos[1]; + float x0 = a[0] + (a[1] - a[0]) * nPos[2]; + + // x == 1 + a = distancesB.xy + (distancesB.zw - distancesB.xy) * nPos[1]; + float x1 = a[0] + (a[1] - a[0]) * nPos[2]; + + // y == 0 + float y0 = x[0] + (x[1] - x[0]) * nPos[2]; + + // y == 1 + float y1 = x[2] + (x[3] - x[2]) * nPos[2]; + + return float4(x1 - x0, y1 - y0, y[1] - y[0], dist); + + } + + int GetOctant(float4 position) + { + int index = 0; + if (position[0] > center[0]) index |= 4; + if (position[1] > center[1]) index |= 2; + if (position[2] > center[2]) index |= 1; + return index; + } +}; + +struct DistanceField : IDistanceFunction +{ + shape s; + transform colliderToSolver; + + StructuredBuffer distanceFieldHeaders; + StructuredBuffer dfNodes; + + float4 DFTraverse(float4 particlePosition, + in DistanceFieldHeader header) + { + int stack[12]; + int stackTop = 0; + + stack[stackTop++] = 0; + + while (stackTop > 0) + { + // pop node index from the stack: + int nodeIndex = stack[--stackTop]; + DFNode node = dfNodes[header.firstNode + nodeIndex]; + + // if the child node exists, recurse down the df octree: + if (node.firstChild >= 0) + stack[stackTop++] = node.firstChild + node.GetOctant(particlePosition); + else + return node.SampleWithGradient(particlePosition); + } + return FLOAT4_ZERO; + } + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 pnt = colliderToSolver.InverseTransformPoint(pos); + + if (s.is2D()) + pnt[2] = 0; + + float4 sample = DFTraverse(pnt, distanceFieldHeaders[s.dataIndex]); + float4 normal = float4(normalize(sample.xyz), 0); + + projectedPoint.pos = colliderToSolver.TransformPoint(pnt - normal * (sample[3] - s.contactOffset)); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + projectedPoint.bary = float4(1,0,0,0); + } +}; + +struct EdgeMeshHeader +{ + int firstNode; + int nodeCount; + int firstEdge; + int edgeCount; + int firstVertex; + int vertexCount; +}; + +struct Edge +{ + int i1; + int i2; + aabb b; +}; + +struct EdgeMesh : IDistanceFunction +{ + shape s; + transform colliderToSolver; + int dataOffset; + + CachedEdge edge; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos); + + if (s.is2D()) + pnt[2] = 0; + + float mu = 0; + float4 nearestPoint = NearestPointOnEdge(edge, pnt, mu); + float4 normal = normalizesafe(pnt - nearestPoint); + + projectedPoint.pos = colliderToSolver.TransformPointUnscaled(nearestPoint + normal * s.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + projectedPoint.bary = float4(1,0,0,0); + } + +}; + + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/DistanceFunctions.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/DistanceFunctions.cginc.meta new file mode 100644 index 000000000..9159daa26 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/DistanceFunctions.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5b1df68bf523b4106a6b113980018d93 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/EdgeMeshShape.compute b/Assets/ThirdParty/Obi/Resources/Compute/EdgeMeshShape.compute new file mode 100644 index 000000000..da31d3464 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/EdgeMeshShape.compute @@ -0,0 +1,147 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "DistanceFunctions.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer velocities; + +StructuredBuffer simplices; +StructuredBuffer simplexBounds; // bounding box of each simplex. + +StructuredBuffer transforms; +StructuredBuffer shapes; + +// edge mesh data: +StructuredBuffer edgeMeshHeaders; +StructuredBuffer edgeBihNodes; +StructuredBuffer edges; +StructuredBuffer edgeVertices; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer contacts; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; +float deltaTime; + +[numthreads(128, 1, 1)] +void GenerateContacts (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4 * EDGE_MESH_SHAPE]) return; + + int firstPair = contactOffsetsPerType[EDGE_MESH_SHAPE]; + int simplexIndex = contactPairs[firstPair + i].x; + int colliderIndex = contactPairs[firstPair + i].y; + shape s = shapes[colliderIndex]; + + if (s.dataIndex < 0) return; + + EdgeMeshHeader header = edgeMeshHeaders[s.dataIndex]; + + EdgeMesh meshShape; + meshShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + meshShape.s = s; + + // invert a full matrix here to accurately represent collider bounds scale. + float4x4 solverToCollider = Inverse(TRS(meshShape.colliderToSolver.translation.xyz, meshShape.colliderToSolver.rotation, meshShape.colliderToSolver.scale.xyz)); + aabb simplexBound = simplexBounds[simplexIndex].Transformed(solverToCollider); + + float4 marginCS = float4((s.contactOffset + collisionMargin) / meshShape.colliderToSolver.scale.xyz, 0); + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + int stack[12]; + int stackTop = 0; + + stack[stackTop++] = 0; + + while (stackTop > 0) + { + // pop node index from the stack: + int nodeIndex = stack[--stackTop]; + BIHNode node = edgeBihNodes[header.firstNode + nodeIndex]; + + // leaf node: + if (node.firstChild < 0) + { + // check for contact against all triangles: + for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) + { + Edge t = edges[header.firstEdge + dataOffset]; + float4 v1 = float4(edgeVertices[header.firstVertex + t.i1],0,0) + s.center; + float4 v2 = float4(edgeVertices[header.firstVertex + t.i2],0,0) + s.center; + aabb edgeBounds; + edgeBounds.FromEdge(v1, v2, marginCS); + + if (edgeBounds.IntersectsAabb(simplexBound, s.is2D())) + { + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + meshShape.edge.Cache(v1 * meshShape.colliderToSolver.scale, v2 * meshShape.colliderToSolver.scale); + + SurfacePoint surfacePoint = Optimize(meshShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + float4 velocity = FLOAT4_ZERO; + float simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; + velocity += velocities[particleIndex] * simplexBary[j]; + } + + float dAB = dot(simplexPoint - surfacePoint.pos, surfacePoint.normal); + float vel = dot(velocity, surfacePoint.normal); + + if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) + { + uint count = contacts.IncrementCounter(); + if (count < maxContacts) + { + contact c = (contact)0; + + c.pointB = surfacePoint.pos; + c.normal = surfacePoint.normal * meshShape.s.isInverted(); + c.pointA = simplexBary; + c.bodyA = simplexIndex; + c.bodyB = colliderIndex; + + contacts[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } + } + } + } + else // check min and/or max children: + { + // visit min node: + if (simplexBound.min_[node.axis] <= node.min_) + stack[stackTop++] = node.firstChild; + + // visit max node: + if (simplexBound.max_[node.axis] >= node.max_) + stack[stackTop++] = node.firstChild + 1; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/EdgeMeshShape.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/EdgeMeshShape.compute.meta new file mode 100644 index 000000000..3f9c16b5b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/EdgeMeshShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 229868ae412914f11bbfa8c3ab9474c8 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidChunkDefs.cginc b/Assets/ThirdParty/Obi/Resources/Compute/FluidChunkDefs.cginc new file mode 100644 index 000000000..24d1528e7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidChunkDefs.cginc @@ -0,0 +1,33 @@ +#ifndef FLUIDCHUNKDEFS_INCLUDE +#define FLUIDCHUNKDEFS_INCLUDE + +#define chunkResolution 4u // amount of voxels in width/height/depth + +struct keyvalue +{ + uint key; + uint handle; +}; + +uint3 chunkGridResolution; // height/width/depth of chunk grid +float3 chunkGridOrigin; +float voxelSize; + +uint maxChunks; + +uint VoxelID(uint3 coords) +{ + return coords.x + coords.y * chunkGridResolution.x + coords.z * chunkGridResolution.x * chunkGridResolution.y; +} + +uint hash(uint k) +{ + k ^= k >> 16; + k *= 0x85ebca6b; + k ^= k >> 13; + k *= 0xc2b2ae35; + k ^= k >> 16; + return k % maxChunks; +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidChunkDefs.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/FluidChunkDefs.cginc.meta new file mode 100644 index 000000000..2f088fd35 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidChunkDefs.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bc0e240276e8a42a2ac5a11368e4f7fa +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidFoam.compute b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoam.compute new file mode 100644 index 000000000..c81a59b3f --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoam.compute @@ -0,0 +1,482 @@ +#pragma kernel SortFluidData + +#pragma kernel Emit +#pragma kernel EmitShape +#pragma kernel CopyAliveCount +#pragma kernel Update +#pragma kernel Integrate +#pragma kernel Copy + +#pragma kernel Sort +#pragma kernel ClearMesh +#pragma kernel BuildMesh + +#include "InterlockedUtils.cginc" +#include "MathUtils.cginc" +#include "GridUtils.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "FluidKernels.cginc" + +StructuredBuffer sortedToOriginal; +RWStructuredBuffer sortedPositions; +RWStructuredBuffer sortedVelocities; +RWStructuredBuffer sortedAngularVelocities; +RWStructuredBuffer sortedOrientations; +RWStructuredBuffer sortedRadii; + +StructuredBuffer cellOffsets; // start of each cell in the sorted item array. +StructuredBuffer cellCounts; // number of item in each cell. +StructuredBuffer gridHashToSortedIndex; +StructuredBuffer solverBounds; + +StructuredBuffer fluidSimplices; +StructuredBuffer activeParticles; +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer velocities; +RWStructuredBuffer angularVelocities; +StructuredBuffer principalRadii; +StructuredBuffer fluidMaterial; +StructuredBuffer fluidData; + +StructuredBuffer inputPositions; // w component is distance traveled inside volume (approximate volumetric lighting). +StructuredBuffer inputVelocities; // w component is buoyancy +StructuredBuffer inputColors; // rgba diffuse color +StructuredBuffer inputAttributes; // currentlifetime, maxlifetime, size, drag + +RWStructuredBuffer outputPositions; +RWStructuredBuffer outputVelocities; +RWStructuredBuffer outputColors; +RWStructuredBuffer outputAttributes; + +RWStructuredBuffer dispatch; +RWByteAddressBuffer vertices; +RWByteAddressBuffer indices; + +// Variables set from the CPU +uint activeParticleCount; +uint maxFoamParticles; +uint particlesToEmit; + +uint emitterShape; +float4 emitterPosition; +quaternion emitterRotation; +float4 emitterSize; + +uint minFluidNeighbors; +float2 vorticityRange; +float2 velocityRange; +float foamGenerationRate; +float potentialIncrease; +float potentialDiffusion; + +float advectionRadius; +float lifetime; +float lifetimeRandom; +float particleSize; +float buoyancy; +float drag; +float airDrag; +float sizeRandom; +float isosurface; +float airAging; +float3 agingOverPopulation; +float4 foamColor; +float4 sortAxis; + +const uint groupWidth; +const uint groupHeight; +const uint stepIndex; + +float deltaTime; +float randomSeed; + +static const int4 quadrantOffsets[] = +{ + int4(0, 0, 0, 1), + int4(1, 0, 0, 1), + int4(0, 1, 0, 1), + int4(1, 1, 0, 1), + int4(0, 0, 1, 1), + int4(1, 0, 1, 1), + int4(0, 1, 1, 1), + int4(1, 1, 1, 1) +}; + +void RandomInCylinder(float seed, float4 pos, float4 dir, float len, float radius, out float4 position, out float3 velocity) +{ + float3 rand = hash31(seed); + + float3 b1 = dir.xyz; + float3 b2 = normalizesafe(cross(b1, float3(1,0,0))); + float3 b3 = cross(b2, b1); + + float theta = rand.y * 2 * PI; + float2 disc = radius * sqrt(rand.x) * float2(cos(theta),sin(theta)); + + velocity = b2 * disc.x + b3 * disc.y; + position = float4(pos.xyz + b1 * len * rand.z + velocity,0); +} + +void RandomInBox(float seed, float4 center, float4 size, out float4 position, out float3 velocity) +{ + float3 rand = hash31(seed); + velocity = (rand - float3(0.5,0.5,0.5)) * size.xyz; + position = float4(center.xyz + velocity,0); +} + +[numthreads(128, 1, 1)] +void SortFluidData (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatch[3]) return; + + int original = sortedToOriginal[i]; + sortedPositions[i] = positions[original]; + sortedVelocities[i] = velocities[original]; + sortedAngularVelocities[i] = float4(angularVelocities[original].xyz,0); + sortedOrientations[i] = orientations[original]; + sortedRadii[i] = principalRadii[original]; +} + +[numthreads(128, 1, 1)] +void EmitShape (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= particlesToEmit) return; + + // atomically increment alive particle counter: + uint count; + InterlockedAdd(dispatch[3], 1, count); + + if (count < maxFoamParticles) + { + // initialize foam particle in a random position inside the cylinder spawned by fluid particle: + float3 radialVelocity = float3(0,0,0); + + if (emitterShape == 0) + RandomInCylinder(randomSeed + i, -float4(0,1,0,0)*emitterSize.y*0.5, float4(0,1,0,0), emitterSize.y, max(emitterSize.x, emitterSize.z) * 0.5, outputPositions[count], radialVelocity); + else + RandomInBox(randomSeed + i, FLOAT4_ZERO, emitterSize, outputPositions[count], radialVelocity); + + float2 random = hash21(randomSeed - i); + + // calculate initial life/size/color: + float initialLife = max(0, lifetime - lifetime * random.x * lifetimeRandom); + float initialSize = particleSize - particleSize * random.y * sizeRandom; + + outputPositions[count] = float4(emitterPosition.xyz + rotate_vector(emitterRotation, outputPositions[count].xyz),0); + outputVelocities[count] = float4(0,0,0, buoyancy); + outputColors[count] = foamColor; + outputAttributes[count] = float4(1, 1/initialLife,initialSize,PackFloatRGBA(float4(airAging / 50.0, airDrag, drag, isosurface))); + } +} + +[numthreads(128, 1, 1)] +void Emit (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= activeParticleCount) return; + + int p = activeParticles[i]; + + float4 angVel = angularVelocities[p]; + float2 potential = UnpackFloatRG(angVel.w); + + // calculate fluid potential for foam generation: + float vorticityPotential = Remap01(fluidData[p].z, vorticityRange.x, vorticityRange.y); + float velocityPotential = Remap01(length(velocities[p]), velocityRange.x, velocityRange.y); + float potentialDelta = velocityPotential * vorticityPotential * deltaTime * potentialIncrease; + + // update foam potential: + potential.y = saturate(potential.y * potentialDiffusion + potentialDelta); + + // calculate amount of emitted particles + potential.x += foamGenerationRate * potential.y * deltaTime; + int emitCount = (int)potential.x; + potential.x -= emitCount; + + for (int j = 0; j < emitCount; ++j) + { + // atomically increment alive particle counter: + uint count; + InterlockedAdd(dispatch[3], 1, count); + + if (count < maxFoamParticles) + { + // initialize foam particle in a random position inside the cylinder spawned by fluid particle: + float3 radialVelocity; + RandomInCylinder(randomSeed + p + j, positions[p], normalizesafe(velocities[p]), length(velocities[p]) * deltaTime, principalRadii[p].x, outputPositions[count], radialVelocity); + + // calculate initial life/size/color: + float2 random = hash21(randomSeed - p - j); + float initialLife = max(0, potential.y * (lifetime - lifetime * random.x * lifetimeRandom)); + float initialSize = particleSize - particleSize * random.y * sizeRandom; + + outputVelocities[count] = velocities[p] + float4(radialVelocity, buoyancy); + outputColors[count] = foamColor; + outputAttributes[count] = float4(1, 1/initialLife,initialSize,PackFloatRGBA(float4(airAging / 50.0, airDrag, drag, isosurface))); + } + } + + angVel.w = PackFloatRG(potential); + angularVelocities[p] = angVel; +} + +[numthreads(1, 1, 1)] +void CopyAliveCount (uint3 id : SV_DispatchThreadID) +{ + dispatch[0] = dispatch[3] / 128 + 1; + dispatch[8] = dispatch[3]; + dispatch[4] = dispatch[7] = 0; +} + +[numthreads(128, 1, 1)] +void Update (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= dispatch[8]) return; + + uint count; + InterlockedAdd(dispatch[3], -1, count); + count--; + + if (count < maxFoamParticles && inputAttributes[count].x > 0) + { + uint aliveCount; + InterlockedAdd(dispatch[7], 1, aliveCount); + InterlockedMax(dispatch[4],(aliveCount + 1) / 128 + 1); + + float4 attributes = inputAttributes[count]; + float4 packedData = UnpackFloatRGBA(attributes.w); + + int offsetCount = (mode == 1) ? 4 : 8; + float4 advectedVelocity = FLOAT4_ZERO; + float4 advectedAngVelocity = FLOAT4_ZERO; + float kernelSum = -packedData.w; + uint neighbourCount = 0; + + float4 diffusePos = inputPositions[count]; + + for (uint m = 1; m <= levelPopulation[0]; ++m) + { + uint l = levelPopulation[m]; + float radius = CellSizeOfLevel(l); + float interactionDist = radius * 0.5; + + float4 cellCoords = floor((diffusePos - solverBounds[0].min_) / radius); + + cellCoords[3] = 0; + if (mode == 1) + cellCoords[2] = 0; + + float4 posInCell = diffusePos - (solverBounds[0].min_ + cellCoords * radius + float4(interactionDist,interactionDist,interactionDist,0)); + int4 quadrant = (int4)sign(posInCell); + quadrant[3] = l; + + for (int j = 0; j < offsetCount; ++j) + { + int4 neighborCoord = (int4)cellCoords + quadrantOffsets[j] * quadrant; + int cellIndex = gridHashToSortedIndex[GridHash(neighborCoord)]; + uint n = cellOffsets[cellIndex]; + uint end = n + cellCounts[cellIndex]; + + for (;n < end; ++n) + { + uint p = fluidSimplices[n]; + + int4 particleCoord = int4(floor((positions[p].xyz - solverBounds[0].min_.xyz)/ radius).xyz,l); + if (any (particleCoord - neighborCoord)) + continue; + + float4 normal = diffusePos - positions[p]; + normal[3] = 0; + if (mode == 1) + normal[2] = 0; + + float d = length(normal); + if (d <= interactionDist) + { + float3 radii = fluidMaterial[p].x * (principalRadii[p].xyz / principalRadii[p].x); + + float4 angVel = float4(cross(angularVelocities[p].xyz, normal.xyz),0); + advectedAngVelocity += angVel * Poly6(d, radii.x) / Poly6(0, radii.x); + + normal.xyz = rotate_vector(q_conj(orientations[p]), normal.xyz) / radii; + d = length(normal.xyz) * radii.x; + + // scale by volume (* 1 / normalized density) + float w = Poly6(d, radii.x) / fluidData[p].x; + + kernelSum += w; + advectedVelocity += float4(velocities[p].xyz,0) * w; + neighbourCount++; + } + } + } + } + + float4 forces = FLOAT4_ZERO; + float velocityScale = 1; + float agingScale = 1 + Remap01(dispatch[8] / (float)maxFoamParticles,agingOverPopulation.x,agingOverPopulation.y) * (agingOverPopulation.z - 1); + + // foam/bubble particle: + if (kernelSum > EPSILON && neighbourCount >= minFluidNeighbors) + { + // advection: + forces = packedData.z / deltaTime * (advectedVelocity / (kernelSum + packedData.w) + advectedAngVelocity - inputVelocities[count]); + + // buoyancy: + forces -= float4(gravity,0) * inputVelocities[count].w * saturate(kernelSum); // TODO: larger particles should rise faster. + + } + else // spray: + { + // gravity: + forces += float4(gravity,0); + + // atmospheric drag/aging: + velocityScale = packedData.y; + agingScale *= packedData.x * 50; + } + + // don't change 4th component, as its used to store buoyancy control parameter. + forces[3] = 0; + + // update particle data: + attributes.x -= attributes.y * deltaTime * agingScale; + //attributes.z += (attributes.y * deltaTime * agingScale) * 0.02; // increase size with age. TODO: maybe do in render shader? + outputAttributes[aliveCount] = attributes; + outputColors[aliveCount] = inputColors[count]; + + // add forces to velocity: + outputPositions[aliveCount] = inputPositions[count]; + outputVelocities[aliveCount] = (inputVelocities[count] + forces * deltaTime) * velocityScale; + } +} + +[numthreads(128, 1, 1)] +void Integrate (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatch[3]) return; + + outputPositions[i].xyz += outputVelocities[i].xyz * deltaTime; +} + +[numthreads(128, 1, 1)] +void Copy (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + if (i == 0) + { + dispatch[0] = dispatch[4]; + dispatch[3] = dispatch[7]; + } + + if (i >= dispatch[7]) return; + + outputPositions[i] = inputPositions[i]; + outputVelocities[i] = inputVelocities[i]; + outputColors[i] = inputColors[i]; + outputAttributes[i] = inputAttributes[i]; +} + +[numthreads(128,1,1)] +void Sort(uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + uint hIndex = i & (groupWidth - 1); + uint indexLeft = hIndex + (groupHeight + 1) * (i / groupWidth); + uint rightStepSize = stepIndex == 0 ? groupHeight - 2 * hIndex : (groupHeight + 1) / 2; + uint indexRight = indexLeft + rightStepSize; + + // Exit if out of bounds + if (indexRight >= dispatch[3]) return; + + float4 posLeft = outputPositions[indexLeft]; + float4 posRight = outputPositions[indexRight]; + float4 velLeft = outputVelocities[indexLeft]; + float4 velRight = outputVelocities[indexRight]; + float4 colorLeft = outputColors[indexLeft]; + float4 colorRight = outputColors[indexRight]; + float4 attrLeft = outputAttributes[indexLeft]; + float4 attrRight = outputAttributes[indexRight]; + + // calculate distance to camera: + float distLeft = dot(posLeft.xyz, sortAxis.xyz); + float distRight = dot(posRight.xyz, sortAxis.xyz); + + // Swap entries if order is incorrect + if (distLeft < distRight) + { + outputPositions[indexLeft] = posRight; + outputPositions[indexRight] = posLeft; + outputVelocities[indexLeft] = velRight; + outputVelocities[indexRight] = velLeft; + outputColors[indexLeft] = colorRight; + outputColors[indexRight] = colorLeft; + outputAttributes[indexLeft] = attrRight; + outputAttributes[indexRight] = attrLeft; + } +} + +[numthreads(128, 1, 1)] +void ClearMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= maxFoamParticles) return; + + indices.Store((i*6)<<2, 0); + indices.Store((i*6+1)<<2, 0); + indices.Store((i*6+2)<<2, 0); + + indices.Store((i*6+3)<<2, 0); + indices.Store((i*6+4)<<2, 0); + indices.Store((i*6+5)<<2, 0); +} + +[numthreads(128, 1, 1)] +void BuildMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatch[3]) return; + + // <<2 = multiply by 4 to get byte address, since a float/int is 4 bytes in size. + + // particle data is the same for all 4 vertices: + for (uint v = i*4; v < i*4 + 4; ++v) + { + int base = v*19; + + // pos + vertices.Store4(base<<2, asuint(float4(inputPositions[i].xyz, 1))); + + // color: + vertices.Store4((base+7)<<2, asuint( inputColors[i] )); + + // velocity and attributes + vertices.Store4((base+11)<<2, asuint( float4(inputVelocities[i].xyz, inputPositions[i].w))); + vertices.Store4((base+15)<<2, asuint( inputAttributes[i] )); + } + + //different offset for each vertex: + int base = i*4; + vertices.Store3((base*19 + 4)<<2, asuint(float3(1,1,0))); + vertices.Store3(((base+1)*19 + 4)<<2, asuint(float3(-1,1,0))); + vertices.Store3(((base+2)*19 + 4)<<2, asuint(float3(-1,-1,0))); + vertices.Store3(((base+3)*19 + 4)<<2, asuint(float3(1,-1,0))); + + // indices: + indices.Store((i*6)<<2, asuint(i*4+2)); + indices.Store((i*6+1)<<2, asuint(i*4+1)); + indices.Store((i*6+2)<<2, asuint(i*4)); + + indices.Store((i*6+3)<<2, asuint(i*4+3)); + indices.Store((i*6+4)<<2, asuint(i*4+2)); + indices.Store((i*6+5)<<2, asuint(i*4)); +} diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidFoam.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoam.compute.meta new file mode 100644 index 000000000..2fcb5eafe --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoam.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8c6735ba651f4c808f068c3b99bca04 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamCollisions.compute b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamCollisions.compute new file mode 100644 index 000000000..b41a5773c --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamCollisions.compute @@ -0,0 +1,467 @@ +#pragma kernel SolveDiffuseContacts + +#include "GridUtils.cginc" +#include "CollisionMaterial.cginc" +#include "ContactHandling.cginc" +#include "ColliderDefinitions.cginc" +#include "Rigidbody.cginc" +#include "Simplex.cginc" +#include "MathUtils.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" +#include "DistanceFunctions.cginc" + +#define MAX_CONTACTS_PER_DIFFUSE 32 + +StructuredBuffer inputPositions; +StructuredBuffer inputAttributes; +RWStructuredBuffer inputVelocities; + +StructuredBuffer aabbs; +StructuredBuffer transforms; +StructuredBuffer shapes; + +StructuredBuffer sortedColliderIndices; +StructuredBuffer cellOffsets; +StructuredBuffer cellCounts; + +// triangle mesh data: +StructuredBuffer triangleMeshHeaders; +StructuredBuffer bihNodes; +StructuredBuffer triangles; +StructuredBuffer vertices; + +// edge mesh data: +StructuredBuffer edgeMeshHeaders; +StructuredBuffer edgeBihNodes; +StructuredBuffer edges; +StructuredBuffer edgeVertices; + +// heightfield data: +StructuredBuffer heightFieldHeaders; +StructuredBuffer heightFieldSamples; + +// distance field data: +StructuredBuffer distanceFieldHeaders; +StructuredBuffer dfNodes; + +StructuredBuffer solverToWorld; +StructuredBuffer worldToSolver; + +StructuredBuffer dispatch; + +float radiusScale; +uint colliderCount; // amount of colliders in the grid. +uint cellsPerCollider; // max amount of cells a collider can be inserted into. Typically this is 8. +int shapeTypeCount; // number of different collider shapes, ie: box, sphere, sdf, etc. +float deltaTime; + + +void CollideMesh(int colliderIndex, int threadIndex, aabb particleBounds, inout float4 pos, float radius) +{ + shape s = shapes[colliderIndex]; + if (s.dataIndex < 0) return; + + TriangleMeshHeader header = triangleMeshHeaders[s.dataIndex]; + + TriangleMesh meshShape; + meshShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + meshShape.s = shapes[colliderIndex]; + + // invert a full matrix here to accurately represent collider bounds scale. + float4x4 solverToCollider = Inverse(TRS(meshShape.colliderToSolver.translation.xyz, meshShape.colliderToSolver.rotation, meshShape.colliderToSolver.scale.xyz)); + aabb simplexBound = particleBounds.Transformed(solverToCollider); // TODO: this is wrong, passed bounds are in world space! + + float4 marginCS = float4((s.contactOffset + collisionMargin) / meshShape.colliderToSolver.scale.xyz, 0); + + int stack[12]; + int stackTop = 0; + + stack[stackTop++] = 0; + + while (stackTop > 0) + { + // pop node index from the stack: + int nodeIndex = stack[--stackTop]; + BIHNode node = bihNodes[header.firstNode + nodeIndex]; + + // leaf node: + if (node.firstChild < 0) + { + // check for contact against all triangles: + for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) + { + Triangle t = triangles[header.firstTriangle + dataOffset]; + float4 v1 = float4(vertices[header.firstVertex + t.i1], 0); + float4 v2 = float4(vertices[header.firstVertex + t.i2], 0); + float4 v3 = float4(vertices[header.firstVertex + t.i3], 0); + aabb triangleBounds; + triangleBounds.FromTriangle(v1, v2, v3, marginCS); + + if (triangleBounds.IntersectsAabb(simplexBound, s.is2D())) + { + meshShape.tri.Cache(v1 * meshShape.colliderToSolver.scale, v2 * meshShape.colliderToSolver.scale, v3 * meshShape.colliderToSolver.scale); + + SurfacePoint surf; + meshShape.Evaluate(pos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); + + float dist = dot(pos - surf.pos, surf.normal) - radius; + if (dist < 0) + pos = surf.pos + surf.normal * radius; + } + } + } + else // check min and/or max children: + { + // visit min node: + if (simplexBound.min_[node.axis] <= node.min_) + stack[stackTop++] = node.firstChild; + + // visit max node: + if (simplexBound.max_[node.axis] >= node.max_) + stack[stackTop++] = node.firstChild + 1; + } + } +} + +void CollideEdgeMesh(int colliderIndex, int threadIndex, aabb particleBounds, inout float4 pos, float radius) +{ + shape s = shapes[colliderIndex]; + if (s.dataIndex < 0) return; + + EdgeMeshHeader header = edgeMeshHeaders[s.dataIndex]; + + EdgeMesh meshShape; + meshShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + meshShape.s = shapes[colliderIndex]; + + // invert a full matrix here to accurately represent collider bounds scale. + float4x4 solverToCollider = Inverse(TRS(meshShape.colliderToSolver.translation.xyz, meshShape.colliderToSolver.rotation, meshShape.colliderToSolver.scale.xyz)); + aabb simplexBound = particleBounds.Transformed(solverToCollider); // TODO: this is wrong, passed bounds are in world space! + //simplexBound.Expand(0.02); + + float4 marginCS = float4((s.contactOffset + collisionMargin) / meshShape.colliderToSolver.scale.xyz, 0); + + int stack[12]; + int stackTop = 0; + + stack[stackTop++] = 0; + + while (stackTop > 0) + { + // pop node index from the stack: + int nodeIndex = stack[--stackTop]; + BIHNode node = edgeBihNodes[header.firstNode + nodeIndex]; + + // leaf node: + if (node.firstChild < 0) + { + // check for contact against all triangles: + for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) + { + Edge t = edges[header.firstEdge + dataOffset]; + float4 v1 = float4(edgeVertices[header.firstVertex + t.i1],0,0) + s.center; + float4 v2 = float4(edgeVertices[header.firstVertex + t.i2],0,0) + s.center; + aabb edgeBounds; + edgeBounds.FromEdge(v1, v2, marginCS); + + if (edgeBounds.IntersectsAabb(simplexBound, s.is2D())) + { + meshShape.edge.Cache(v1 * meshShape.colliderToSolver.scale, v2 * meshShape.colliderToSolver.scale); + + SurfacePoint surf; + meshShape.Evaluate(pos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); + + float dist = dot(pos - surf.pos, surf.normal) - radius; + if (dist < 0) + pos = surf.pos + surf.normal * radius; + } + } + } + else // check min and/or max children: + { + // visit min node: + if (simplexBound.min_[node.axis] <= node.min_) + stack[stackTop++] = node.firstChild; + + // visit max node: + if (simplexBound.max_[node.axis] >= node.max_) + stack[stackTop++] = node.firstChild + 1; + } + } +} + +void CollideHeightmap(int colliderIndex, int threadIndex, aabb particleBounds, inout float4 pos, float radius) +{ + shape s = shapes[colliderIndex]; + if (s.dataIndex < 0) return; + + HeightFieldHeader header = heightFieldHeaders[s.dataIndex]; + + Heightfield fieldShape; + fieldShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + fieldShape.s = s; + + // invert a full matrix here to accurately represent collider bounds scale. + float4x4 solverToCollider = Inverse(TRS(fieldShape.colliderToSolver.translation.xyz, fieldShape.colliderToSolver.rotation, fieldShape.colliderToSolver.scale.xyz)); + aabb simplexBound = particleBounds.Transformed(solverToCollider); + + int resolutionU = (int)s.center.x; + int resolutionV = (int)s.center.y; + + // calculate terrain cell size: + float cellWidth = s.size.x / (resolutionU - 1); + float cellHeight = s.size.z / (resolutionV - 1); + + // calculate particle bounds min/max cells: + int2 min_ = int2((int)floor(simplexBound.min_[0] / cellWidth), (int)floor(simplexBound.min_[2] / cellHeight)); + int2 max_ = int2((int)floor(simplexBound.max_[0] / cellWidth), (int)floor(simplexBound.max_[2] / cellHeight)); + + for (int su = min_[0]; su <= max_[0]; ++su) + { + if (su >= 0 && su < resolutionU - 1) + { + for (int sv = min_[1]; sv <= max_[1]; ++sv) + { + if (sv >= 0 && sv < resolutionV - 1) + { + // calculate neighbor sample indices: + int csu1 = clamp(su + 1, 0, resolutionU - 1); + int csv1 = clamp(sv + 1, 0, resolutionV - 1); + + // sample heights: + float h1 = heightFieldSamples[header.firstSample + sv * resolutionU + su] * s.size.y; + float h2 = heightFieldSamples[header.firstSample + sv * resolutionU + csu1] * s.size.y; + float h3 = heightFieldSamples[header.firstSample + csv1 * resolutionU + su] * s.size.y; + float h4 = heightFieldSamples[header.firstSample + csv1 * resolutionU + csu1] * s.size.y; + + if (h1 < 0) continue; + h1 = abs(h1); + h2 = abs(h2); + h3 = abs(h3); + h4 = abs(h4); + + float min_x = su * s.size.x / (resolutionU - 1); + float max_x = csu1 * s.size.x / (resolutionU - 1); + float min_z = sv * s.size.z / (resolutionV - 1); + float max_z = csv1 * s.size.z / (resolutionV - 1); + + // ------contact against the first triangle------: + float4 v1 = float4(min_x, h3, max_z, 0); + float4 v2 = float4(max_x, h4, max_z, 0); + float4 v3 = float4(min_x, h1, min_z, 0); + + fieldShape.tri.Cache(v1, v2, v3); + fieldShape.triNormal.xyz = normalizesafe(cross((v2 - v1).xyz, (v3 - v1).xyz)); + + SurfacePoint surf; + fieldShape.Evaluate(pos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); + + float dist = dot(pos - surf.pos, surf.normal) - radius; + if (dist < 0) + pos = surf.pos + surf.normal * radius; + + // ------contact against the second triangle------: + v1 = float4(min_x, h1, min_z, 0); + v2 = float4(max_x, h4, max_z, 0); + v3 = float4(max_x, h2, min_z, 0); + + fieldShape.tri.Cache(v1, v2, v3); + fieldShape.triNormal.xyz = normalizesafe(cross((v2 - v1).xyz, (v3 - v1).xyz)); + + fieldShape.Evaluate(pos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); + + dist = dot(pos - surf.pos, surf.normal) - radius; + if (dist < 0) + pos = surf.pos + surf.normal * radius; + } + } + } + } +} + +[numthreads(128, 1, 1)] +void SolveDiffuseContacts (uint3 id : SV_DispatchThreadID) +{ + unsigned int threadIndex = id.x; + if (threadIndex >= dispatch[3]) return; + + uint cellCount = colliderCount * cellsPerCollider; + int candidateCount = 0; + uint candidates[MAX_CONTACTS_PER_DIFFUSE]; + + float4 predPos = inputPositions[threadIndex] + inputVelocities[threadIndex] * deltaTime; + float radius = inputAttributes[threadIndex].z * radiusScale; + + // max size of the particle bounds in cells: + int4 maxSize = int4(3,3,3,3); + + aabb b; + b.FromEdge(inputPositions[threadIndex], predPos, radius); + b.Transform(solverToWorld[0]); + + // build a list of candidate colliders: + for (uint m = 1; m <= levelPopulation[0]; ++m) + { + uint l = levelPopulation[m]; + float cellSize = CellSizeOfLevel(l); + + int4 minCell = floor(b.min_ / cellSize); + int4 maxCell = floor(b.max_ / cellSize); + maxCell = minCell + min(maxCell - minCell, maxSize); + + for (int x = minCell[0]; x <= maxCell[0]; ++x) + { + for (int y = minCell[1]; y <= maxCell[1]; ++y) + { + // for 2D mode, project each cell at z == 0 and check them too. This way we ensure 2D colliders + // (which are inserted in cells with z == 0) are accounted for in the broadphase. + if (mode == 1) + { + uint flatCellIndex = GridHash(int4(x,y,0,l)); + uint cellStart = cellOffsets[flatCellIndex]; + uint cellCount = cellCounts[flatCellIndex]; + + // iterate through colliders in the neighbour cell + for (uint n = cellStart; n < cellStart + cellCount; ++n) + { + // sorted insert into the candidates list: + if (candidateCount < MAX_CONTACTS_PER_DIFFUSE) + candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerCollider; + } + } + + for (int z = minCell[2]; z <= maxCell[2]; ++z) + { + uint flatCellIndex = GridHash(int4(x,y,z,l)); + uint cellStart = cellOffsets[flatCellIndex]; + uint cellCount = cellCounts[flatCellIndex]; + + // iterate through colliders in the neighbour cell + for (uint n = cellStart; n < cellStart + cellCount; ++n) + { + if (candidateCount < MAX_CONTACTS_PER_DIFFUSE) + candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerCollider; + } + + } + } + } + } + + //evaluate candidates and create contacts: + if (candidateCount > 0) + { + + // insert sort: + for (int k = 1; k < candidateCount; ++k) + { + uint key = candidates[k]; + int j = k - 1; + + while (j >= 0 && candidates[j] > key) + candidates[j + 1] = candidates[j--]; + + candidates[j + 1] = key; + } + + // make sure each candidate only shows up once in the list: + int first = 0, contactCount = 0; + while(++first != candidateCount) + { + if (candidates[contactCount] != candidates[first]) + candidates[++contactCount] = candidates[first]; + } + contactCount++; + + // solve contacts: + for (int i = 0; i < contactCount; i++) + { + int c = candidates[i]; + + aabb colliderBoundsWS = aabbs[c]; + + if (b.IntersectsAabb(colliderBoundsWS, mode == 1)) + { + + switch(shapes[c].type) + { + case SPHERE_SHAPE: + { + SurfacePoint surf; + Sphere sphereShape; + sphereShape.colliderToSolver = worldToSolver[0].Multiply(transforms[c]); + sphereShape.s = shapes[c]; + sphereShape.Evaluate(predPos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); + + float dist = dot(predPos - surf.pos, surf.normal) - radius; + if (dist < 0) predPos = surf.pos + surf.normal * radius; + } + break; + + case BOX_SHAPE: + { + SurfacePoint surf; + Box boxShape; + boxShape.colliderToSolver = worldToSolver[0].Multiply(transforms[c]); + boxShape.s = shapes[c]; + boxShape.Evaluate(predPos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); + + float dist = dot(predPos - surf.pos, surf.normal) - radius; + if (dist < 0) predPos = surf.pos + surf.normal * radius; + } + break; + + case CAPSULE_SHAPE: + { + SurfacePoint surf; + Capsule capShape; + capShape.colliderToSolver = worldToSolver[0].Multiply(transforms[c]); + capShape.s = shapes[c]; + capShape.Evaluate(predPos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); + + float dist = dot(predPos - surf.pos, surf.normal) - radius; + if (dist < 0) predPos = surf.pos + surf.normal * radius; + } + break; + + case TRIANGLE_MESH_SHAPE: + { + CollideMesh(c, threadIndex, b, predPos, radius); + } + break; + + case EDGE_MESH_SHAPE: + { + CollideEdgeMesh(c, threadIndex, b, predPos, radius); + } + break; + + case HEIGHTMAP_SHAPE: + { + CollideHeightmap(c, threadIndex, b, predPos, radius); + } + break; + + case SDF_SHAPE: + { + SurfacePoint surf; + DistanceField dfShape; + dfShape.colliderToSolver = worldToSolver[0].Multiply(transforms[c]); + dfShape.s = shapes[c]; + dfShape.distanceFieldHeaders = distanceFieldHeaders; + dfShape.dfNodes = dfNodes; + dfShape.Evaluate(predPos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); + + float dist = dot(predPos - surf.pos, surf.normal) - radius; + if (dist < 0) predPos = surf.pos + surf.normal * radius; + } + break; + } + } + } + } + + inputVelocities[threadIndex].xyz = (predPos.xyz - inputPositions[threadIndex].xyz) / deltaTime; +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamCollisions.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamCollisions.compute.meta new file mode 100644 index 000000000..f67b3366a --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamCollisions.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62b650760f2294d0c9c68247f21c7009 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamDensity.compute b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamDensity.compute new file mode 100644 index 000000000..9ff41c337 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamDensity.compute @@ -0,0 +1,199 @@ +#pragma kernel Clear +#pragma kernel InsertInGrid +#pragma kernel SortByGrid +#pragma kernel ComputeDensity +#pragma kernel ApplyDensity + +#include "InterlockedUtils.cginc" +#include "MathUtils.cginc" +#include "GridUtils.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "FluidKernels.cginc" + +RWStructuredBuffer sortedToOriginal; + +RWStructuredBuffer offsetInCell; +RWStructuredBuffer cellStart; // start of each cell in the sorted item array. +RWStructuredBuffer cellCounts; // number of item in each cell. +StructuredBuffer solverBounds; + +RWStructuredBuffer inputPositions; +RWStructuredBuffer inputVelocities; +RWStructuredBuffer inputColors; +RWStructuredBuffer sortedPositions; +RWStructuredBuffer sortedVelocities; +RWStructuredBuffer fluidData; + +StructuredBuffer dispatch; + +// each emitter has its own global radius, not possible to have foam emitters interact with each other. +float particleRadius; +float smoothingRadius; +float surfaceTension; +float pressure; +float viscosity; +float4 volumeLightDirection; + +float deltaTime; + +[numthreads(128, 1, 1)] +void Clear (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= maxCells) return; + + // clear all cell counts to zero, and cell offsets to invalid. + cellStart[i] = INVALID; + cellCounts[i] = 0; +} + +[numthreads(128, 1, 1)] +void InsertInGrid (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatch[3]) return; + + uint cellIndex = GridHash(floor(inputPositions[i] / smoothingRadius).xyz); + InterlockedAdd(cellCounts[cellIndex],1,offsetInCell[i]); +} + +[numthreads(128, 1, 1)] +void SortByGrid (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatch[3]) return; + + uint cellIndex = GridHash(floor(inputPositions[i] / smoothingRadius).xyz); + + uint sortedIndex = cellStart[cellIndex] + offsetInCell[i]; + sortedPositions[sortedIndex] = inputPositions[i]; + sortedVelocities[sortedIndex] = inputVelocities[i]; + sortedToOriginal[sortedIndex] = i; +} + +[numthreads(128, 1, 1)] +void ComputeDensity (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatch[3]) return; + + float4 positionA = inputPositions[i]; + + int3 cellCoords = floor(inputPositions[i] / smoothingRadius).xyz; + + // self-contribution: + float avgKernel = Poly6(0,smoothingRadius); + float restVolume = pow(abs(particleRadius * 2),3-mode); + float grad = restVolume * Spiky(0,smoothingRadius); + + float4 fluidDataA = float4(avgKernel,0,grad,grad*grad); + + float4 positionB; + + // iterate over neighborhood, calculate density and gradient. + for (int k = 0; k < 27; ++k) + { + int3 neighborCoords = cellCoords + cellNeighborhood[k].xyz; + uint cellIndex = GridHash(neighborCoords); + uint start = cellStart[cellIndex]; + + for (uint j = 0; j < cellCounts[cellIndex]; ++j) + { + positionB = sortedPositions[start + j]; + float3 r = (positionA - positionB).xyz; + + if (mode == 1) + r[2] = 0; + + float dist = length(r); + + if (dist > smoothingRadius || any(neighborCoords - floor(positionB / smoothingRadius).xyz)) continue; + + float grad = restVolume * Spiky(dist,smoothingRadius); + fluidDataA += float4(Poly6(dist,smoothingRadius),0,grad,grad*grad); + } + } + + // self particle contribution to density and gradient: + fluidDataA[3] += fluidDataA[2] * fluidDataA[2]; + + // usually, we'd weight density by mass (density contrast formulation) by dividing by invMass. Then, multiply by invMass when + // calculating the state equation (density / restDensity - 1, restDensity = mass / volume, so density * invMass * restVolume - 1 + // We end up with density / invMass * invMass * restVolume - 1, invMass cancels out. + float constraint = max(0, fluidDataA[0] * restVolume - 1); + + // calculate lambda: + fluidDataA[1] = -constraint / (fluidDataA[3] + EPSILON); + + fluidData[i] = fluidDataA; +} + +[numthreads(128, 1, 1)] +void ApplyDensity (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatch[3]) return; + + int3 cellCoords = floor(inputPositions[i] / smoothingRadius).xyz; + + float restVolume = pow(abs(particleRadius * 2),3-mode); + float neighborhoodVolume = pow(abs(smoothingRadius * 2),3-mode); + float4 positionA = inputPositions[i]; + float4 velocityA = inputVelocities[i]; + float4 fluidDataA = fluidData[i]; + + float4 fluidDataB; + float4 positionB; + float4 velocityB; + + float4 pressureDelta = FLOAT4_ZERO; + float4 viscAccel = FLOAT4_ZERO; + float AO = 0; + + for (int k = 0; k < 27; ++k) + { + int3 neighborCoords = cellCoords + cellNeighborhood[k].xyz; + uint cellIndex = GridHash(neighborCoords); + uint start = cellStart[cellIndex]; + + for (uint j = 0; j < cellCounts[cellIndex]; ++j) + { + positionB = sortedPositions[start + j]; + velocityB = sortedVelocities[start + j]; + fluidDataB = fluidData[sortedToOriginal[start + j]]; + + float4 r = float4((positionA - positionB).xyz,0); + + if (mode == 1) + r[2] = 0; + + float dist = length(r); + + + if (dist > smoothingRadius || any(neighborCoords - floor(positionB / smoothingRadius).xyz)) continue; + + float kern = Poly6(dist,smoothingRadius); + float cAvg = Cohesion(dist,smoothingRadius); + + // XSPH viscosity: + float4 relVel = float4((velocityB - velocityA).xyz,0); + viscAccel += viscosity * relVel * kern * restVolume; + + float st = 0.2 * cAvg * surfaceTension; + float scorrA = - st / (fluidDataA[3] + EPSILON); + float scorrB = - st / (fluidDataB[3] + EPSILON); + pressureDelta += r / (dist + EPSILON) * Spiky(dist,smoothingRadius) * ((fluidDataA[1] + scorrA) + (fluidDataB[1] + scorrB)) * restVolume; + + float4 v = r / (dist + EPSILON); + AO += max(0, dot (volumeLightDirection.xyz, v.xyz) ) / (1 + dist) * restVolume; + } + } + + float4 delta = pressure * pressureDelta; + + // modify position and velocity: + inputPositions[i] = float4((positionA + delta).rgb, 2*PI * AO.x / neighborhoodVolume); + inputVelocities[i] += float4(delta.xyz / deltaTime + viscAccel.xyz,0); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamDensity.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamDensity.compute.meta new file mode 100644 index 000000000..247a584ac --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidFoamDensity.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2332ee3ce70e9447d8d13b5b67ac8e6c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidKernels.cginc b/Assets/ThirdParty/Obi/Resources/Compute/FluidKernels.cginc new file mode 100644 index 000000000..deac80421 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidKernels.cginc @@ -0,0 +1,40 @@ +#ifndef FLUIDKERNELS_INCLUDE +#define FLUIDKERNELS_INCLUDE + +#include "SolverParameters.cginc" + +float Poly6(float r, float h) +{ + float h2 = h * h; + float h4 = h2 * h2; + float h8 = h4 * h4; + + float rl = min(r, h); + float hr = h2 - rl * rl; + + if (mode) + return 4.0f / PI / h8 * hr * hr * hr; + else + return 315.0f / (64.0 * PI) / (h8 * h) * hr * hr * hr; +} + +float Spiky(float r, float h) +{ + float h2 = h * h; + float h4 = h2 * h2; + + float rl = min(r, h); + float hr = h - rl; + + if (mode) + return -30.0f / PI / (h4 * h) * hr * hr; + else + return -45.0f / PI / (h4 * h2) * hr * hr; +} + +float Cohesion(float r, float h) +{ + return cos(min(r, h) * 3 * PI / (2 * h)); +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidKernels.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/FluidKernels.cginc.meta new file mode 100644 index 000000000..5915645b0 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidKernels.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 53c4eeee7bd2141deb8d1179555a1920 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidMeshChunks.compute b/Assets/ThirdParty/Obi/Resources/Compute/FluidMeshChunks.compute new file mode 100644 index 000000000..da444b47b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidMeshChunks.compute @@ -0,0 +1,205 @@ +#pragma kernel ClearChunks +#pragma kernel ClearGrid +#pragma kernel InsertChunks +#pragma kernel SortParticles +#pragma kernel FindPopulatedLevels + +#include "MathUtils.cginc" +#include "Bounds.cginc" +#include "GridUtils.cginc" +#include "FluidChunkDefs.cginc" +#include "SolverParameters.cginc" + +// particle data: +StructuredBuffer particleIndices; +StructuredBuffer positions; +StructuredBuffer velocities; +StructuredBuffer angularVelocities; +StructuredBuffer principalRadii; +StructuredBuffer fluidMaterial; +StructuredBuffer fluidData; +StructuredBuffer orientations; +StructuredBuffer colors; +StructuredBuffer normals; + +RWStructuredBuffer sortedPositions; +RWStructuredBuffer sortedPrincipalRadii; +RWStructuredBuffer sortedVelocities; +RWStructuredBuffer sortedOrientations; +RWStructuredBuffer sortedColors; + +// particle grid data: +StructuredBuffer solverBounds; +StructuredBuffer gridHashToSortedIndex; +RWStructuredBuffer cellOffsets; // start of each cell in the sorted item array. +RWStructuredBuffer cellCounts; // number of item in each cell. +RWStructuredBuffer offsetInCell; // for each item, offset within its the cell. + +// voxel data: +RWStructuredBuffer chunkCoords; // for each chunk, spatial coordinates. +RWStructuredBuffer hashtable; // size: maxChunks entries. + +RWStructuredBuffer dispatchBuffer; + +uint firstParticle; +uint particleCount; +float isosurface; +float smoothing; + +uint AllocateChunk(uint3 coords) +{ + uint key = VoxelID(coords); + uint slot = hash(key); + + [allow_uav_condition] + for (uint i = 0; i < maxChunks; ++i) // at most, check the entire table. + { + uint prev; + InterlockedCompareExchange(hashtable[slot].key, INVALID, key, prev); + + // allocate new chunk: + if (prev == INVALID) + { + InterlockedAdd(dispatchBuffer[4],1,hashtable[slot].handle); + chunkCoords[hashtable[slot].handle] = coords; + return hashtable[slot].handle; + } + // could not allocate chunk, since it already exists. + else if (prev == key) + { + return INVALID; + } + // collision, try next slot. + else + slot = (slot + 1) % maxChunks; + } + return INVALID; // could not allocate chunk, not enough space. +} + +[numthreads(128, 1, 1)] +void ClearChunks (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= maxChunks) + return; + + // clear all chunks: + keyvalue k; + k.key = 0xffffffff; + k.handle = 0xffffffff; + hashtable[i] = k; +} + +[numthreads(128, 1, 1)] +void ClearGrid (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= maxCells) + return; + + if (i == 0) + { + for (int l = 0; l <= GRID_LEVELS; ++l) + levelPopulation[l] = 0; + } + + // clear all cell counts to zero, and cell offsets to invalid. + cellOffsets[i] = INVALID; + cellCounts[i] = 0; +} + +[numthreads(128, 1, 1)] +void InsertChunks (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = particleIndices[firstParticle + i]; + + // ignore inactive particles: + if (principalRadii[p].w <= 0.5f) + return; + + // calculate particle cell index: + int level = GridLevelForSize(fluidMaterial[p].x); + float cellSize = CellSizeOfLevel(level); + int4 cellCoord = int4(floor((positions[p].xyz - solverBounds[0].min_.xyz) / cellSize),level); + + // if the solver is 2D, project to the z = 0 cell. + if (mode == 1) cellCoord[2] = 0; + + // since cell hashes are morton-sorted during collision detection, here we also get sorted cells + // as long as particle cellCoords are reasonably similar + // (won't be the exact same since we use renderable positions instead of positions) + uint cellIndex = gridHashToSortedIndex[GridHash(cellCoord)]; + + // insert simplex in cell: + InterlockedAdd(cellCounts[cellIndex],1, offsetInCell[p]); + + // atomically increase this level's population by one: + InterlockedAdd(levelPopulation[1 + level],1); + + //in 3D, only particles near the surface should spawn chunks: + //if (mode == 0 && dot(normals[p],normals[p]) < 0.0001f) + //return; + + // expand aabb by voxel size, since boundary voxels (at a chunks' 0 X/Y/Z) can't be triangulated. + float radius = fluidMaterial[p].x + voxelSize; + + // calculate particle chunk span. + float chunkSize = chunkResolution * voxelSize; + uint3 minCell = floor((positions[p].xyz - radius - chunkGridOrigin) / chunkSize); + uint3 maxCell = floor((positions[p].xyz + radius - chunkGridOrigin) / chunkSize); + + if (mode == 1) + minCell[2] = maxCell[2] = 0; + + for (uint x = minCell[0]; x <= maxCell[0]; ++x) + { + for (uint y = minCell[1]; y <= maxCell[1]; ++y) + { + for (uint z = minCell[2]; z <= maxCell[2]; ++z) + { + AllocateChunk(uint3(x, y, z)); + } + } + } +} + +[numthreads(128, 1, 1)] +void SortParticles (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= particleCount) return; + + int p = particleIndices[firstParticle + i]; + + // ignore inactive particles: + if (principalRadii[p].w <= 0.5f) + return; + + // calculate particle cell index: + int level = GridLevelForSize(fluidMaterial[p].x); + float cellSize = CellSizeOfLevel(level); + int4 cellCoord = int4(floor((positions[p].xyz - solverBounds[0].min_.xyz) / cellSize),level); + + // if the solver is 2D, project to the z = 0 cell. + if (mode == 1) cellCoord[2] = 0; + + uint cellIndex = gridHashToSortedIndex[GridHash(cellCoord)]; + + // find final sorted index: + uint gridIndex = cellOffsets[cellIndex] + offsetInCell[p]; + + // write particle data in sorted order: + sortedPositions[gridIndex] = float4(positions[p].xyz, 1 / fluidData[p].x); + sortedPrincipalRadii[gridIndex] = fluidMaterial[p].x * (principalRadii[p] / principalRadii[p].x); + sortedVelocities[gridIndex] = float4(velocities[p].xyz, (asuint(angularVelocities[p].w) & 0x0000ffff) / 65535.0); + sortedOrientations[gridIndex] = orientations[p]; + sortedColors[gridIndex] = colors[p]; +} + + + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidMeshChunks.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/FluidMeshChunks.compute.meta new file mode 100644 index 000000000..e70344d36 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidMeshChunks.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 745eb95f8ca884ea6830b3ca14ee05a0 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute b/Assets/ThirdParty/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute new file mode 100644 index 000000000..d4e04809e --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute @@ -0,0 +1,604 @@ +#pragma kernel SampleSDF +#pragma kernel CalculateSurface +#pragma kernel Triangulate +#pragma kernel Smoothing + +#pragma kernel FixArgsBuffer +#pragma kernel FillIndirectDrawBuffer + +#include "MathUtils.cginc" +#include "Bounds.cginc" +#include "GridUtils.cginc" +#include "FluidChunkDefs.cginc" +#include "FluidKernels.cginc" +#include "SolverParameters.cginc" +#include "NormalCompression.cginc" + +/* + * y z + * ^ / + * | + * 6----7 + * /| /| + * 2----3 | + * | 4--|-5 + * |/ |/ + * 0----1 --> x + * + */ + + /* + * static Vector2Int[] cubeEdges = + * { + * new Vector2Int(7,3), 0 + * new Vector2Int(7,5), 1 + * new Vector2Int(7,6), 2 + * + * new Vector2Int(6,4), 3 // x + * new Vector2Int(4,5), 4 + * new Vector2Int(5,1), 5 + * + * new Vector2Int(1,3), 6 // y + * new Vector2Int(3,2), 7 + * new Vector2Int(2,6), 8 + * + * new Vector2Int(4,0), 9 // z + * new Vector2Int(2,0), 10 + * new Vector2Int(1,0) 11 + * }; + */ + +static const int4 faceNeighborEdges[] = +{ + int4(0,1,5,6), + int4(0,2,7,8), + int4(4,5,9,11), + int4(3,8,9,10), + int4(6,7,10,11), + int4(1,2,3,4) +}; + +static const float3 corners[] = +{ + float3(0, 0, 0), // 0 + float3(1, 0, 0), // 1 + float3(0, 1, 0), // 2 + float3(1, 1, 0), // 3 + float3(0, 0, 1), // 4 + float3(1, 0, 1), // 5 + float3(0, 1, 1), // 6 + float3(1, 1, 1) // 7 +}; + +static const int3 quadNeighborIndices[] = +{ + int3(1, 3, 2), // x + int3(4, 5, 1), // y + int3(2, 6, 4), // z +}; + +static const int oppositeFaces[] = +{ + 7, //0 + 6, //1 + 5, //2 + 4, //3 + 3, //4 + 2, //5 + 1 //6 +}; + +static const int3 quadWindingOrder[] = { + int3(0, 1 ,2), + int3(2, 1 ,0) +}; + +struct indirectDrawIndexedArgs +{ + uint indexCountPerInstance; + uint instanceCount; + uint startIndex; + uint baseVertexIndex; + uint startInstance; +}; + +// particle grid data: +StructuredBuffer solverBounds; +StructuredBuffer cellOffsets; // start of each cell in the sorted item array. +StructuredBuffer cellCounts; // number of item in each cell. +StructuredBuffer gridHashToSortedIndex; + +StructuredBuffer sortedPositions; +StructuredBuffer sortedVelocities; +StructuredBuffer sortedPrincipalRadii; +StructuredBuffer sortedColors; +StructuredBuffer sortedOrientations; + +// voxel data: +StructuredBuffer chunkCoords; // for each chunk, spatial coordinates. +StructuredBuffer hashtable; // size: maxChunks entries. +RWStructuredBuffer voxelToVertex; // for each voxel, index into the vertices array in case the voxel spawns a vertex, INVALID otherwise. +RWStructuredBuffer vertexAdjacency; // indices of adjacent face voxels for each voxel. +RWStructuredBuffer voxelVelocities; // for each voxel, fluid velocity value. We are reusing the same ComputeBuffer used for vertexAdjacency. + +// edge LUTs +StructuredBuffer edges; +StructuredBuffer edgeTable; + +// mesh data: +RWStructuredBuffer verts; +RWStructuredBuffer outputVerts; +RWStructuredBuffer colors; +RWStructuredBuffer velocities; +RWStructuredBuffer quads; + +RWStructuredBuffer dispatchBuffer; +RWStructuredBuffer dispatchBuffer2; +RWStructuredBuffer indirectBuffer; + +uint currentBatch; + +float isosurface; +uint descentIterations; +float descentIsosurface; +float descentSpeed; +float smoothing; +float bevel; +uint dispatchMultiplier; +uint countMultiplier; +uint instanceCount; + +uint voxelCoordToOffset(int3 coord) +{ + if (mode == 1) + return (int)EncodeMorton2((uint2)coord.xy); + else return (int)EncodeMorton3((uint3)coord.xyz); +} + +uint LookupChunk(int3 coords) +{ + uint key = VoxelID(coords); + uint slot = hash(key); + + for (uint i = 0; i < maxChunks; ++i) // at most, check the entire table. + { + if (hashtable[slot].key == key) + { + return hashtable[slot].handle; + } + if (hashtable[slot].key == INVALID) + { + return INVALID; + } + + slot = (slot + 1) % maxChunks; + } + return INVALID; +} + +uint GetVoxelIndex(int3 chunkCoords, int3 voxelCoords, int voxelsInChunk) +{ + int3 mask = voxelCoords < 0 ? -1 : voxelCoords / chunkResolution; + uint chunk = LookupChunk(chunkCoords + mask); + + return chunk == INVALID ? INVALID : chunk * voxelsInChunk + voxelCoordToOffset(nfmod(voxelCoords, chunkResolution)); +} + +[numthreads(128, 1, 1)] +void SampleSDF (uint3 id : SV_DispatchThreadID) // one thread per voxel, +{ + uint i = id.x; + if (i >= dispatchBuffer[3]) return; + + int voxelsInChunk = (int)pow(chunkResolution, 3 - mode); // 64 voxels in 3D, 16 in 2D. + + // calculate chunk index: + int chunkIndex = i / voxelsInChunk; + + // get offset of voxel within chunk: + int cornerOffset = i - chunkIndex * voxelsInChunk; + int3 voxelCoords; + + if (mode == 1) + voxelCoords = (int3)DecodeMorton2((uint)cornerOffset); + else + voxelCoords = (int3)DecodeMorton3((uint)cornerOffset); + + int3 cornerCoords= chunkCoords[chunkIndex] * chunkResolution + voxelCoords; + + // calculate sampling position: + float3 samplePos = chunkGridOrigin + cornerCoords * voxelSize; + + float dist = isosurface; + float4 color = FLOAT4_ZERO; + float4 velocity = FLOAT4_ZERO; + + for (uint m = 1; m <= levelPopulation[0]; ++m) + { + uint l = levelPopulation[m]; + float cellSize = CellSizeOfLevel(l); + + int3 cell = floor((samplePos - solverBounds[0].min_.xyz) / cellSize); // TODO: not necessary to subtract solverBounds? + int3 minCell = cell - 1; + int3 maxCell = cell + 1; + + if (mode == 1) + minCell[2] = maxCell[2] = 0; + + for (int x = minCell[0]; x <= maxCell[0]; ++x) + { + for (int y = minCell[1]; y <= maxCell[1]; ++y) + { + for (int z = minCell[2]; z <= maxCell[2]; ++z) + { + int4 neighborCoord = int4(x, y, z, l); + int cellIndex = gridHashToSortedIndex[GridHash(neighborCoord)]; + uint n = cellOffsets[cellIndex]; + uint end = n + cellCounts[cellIndex]; + + for (;n < end; ++n) + { + float3 radii = sortedPrincipalRadii[n].xyz; + + // due to hash collisions, two neighboring cells might map to the same + // hash bucket, and we'll add the same set of particles twice to the neighbors list. + // So we only consider particles that have the same spatial coordinates as the cell. + uint level = GridLevelForSize(radii.x); + float cellSize = CellSizeOfLevel(level); + int4 particleCoord = int4(floor((sortedPositions[n].xyz - solverBounds[0].min_.xyz)/ cellSize).xyz,level); + + if (any (particleCoord - neighborCoord)) + continue; + + float3 normal = samplePos - sortedPositions[n].xyz; + if (mode == 1) + normal[2] = 0; + + // only update distance if within anisotropic kernel radius: + float maxDistance = radii.x + voxelSize * 1.42f; + float r = dot(normal, normal); + if (r <= maxDistance * maxDistance) + { + normal = rotate_vector(q_conj(sortedOrientations[n]), normal.xyz) / radii; + float d = length(normal) * radii.x; + + // sortedPositions.w is volume (1/normalized density): + float w = sortedPositions[n].w * Poly6(d,radii.x); + + dist -= w; + + // tigther smoothing kernel for color and velocities: + float w2 = 1-saturate(r / (radii.x * radii.x)); + color += float4(sortedColors[n].xyz * w2, w2); + velocity += sortedVelocities[n] * w2; // 4th component is length(angularVel), vorticity intensity. + } + + } + } + } + } + } + + verts[i].x = dist; + verts[i].y = PackFloatRGBA(color/color.w); + + voxelVelocities[i] = velocity / color.w; +} + +float EvaluateSDF (float4 distancesA, float4 distancesB, in float3 nPos, out float3 normal) +{ + // trilinear interpolation of distance: + float4 x = distancesA + (distancesB - distancesA) * nPos[0]; + float2 y = x.xy + (x.zw - x.xy) * nPos[1]; + + // gradient estimation: + // x == 0 + float2 a = distancesA.xy + (distancesA.zw - distancesA.xy) * nPos[1]; + float x0 = a[0] + (a[1] - a[0]) * nPos[2]; + + // x == 1 + a = distancesB.xy + (distancesB.zw - distancesB.xy) * nPos[1]; + float x1 = a[0] + (a[1] - a[0]) * nPos[2]; + + // y == 0 + float y0 = x[0] + (x[1] - x[0]) * nPos[2]; + + // y == 1 + float y1 = x[2] + (x[3] - x[2]) * nPos[2]; + + normal = normalize(float3(x1 - x0, y1 - y0, y[1] - y[0])); + return y[0] + (y[1] - y[0]) * nPos[2]; +} + +[numthreads(128, 1, 1)] +void CalculateSurface (uint3 id : SV_DispatchThreadID) // once per voxel. +{ + uint i = id.x; + if (i >= dispatchBuffer[3]) return; + + int voxelsInChunk = (int)pow(chunkResolution, 3 - mode); // 64 voxels in 3D, 16 in 2D. + int verticesPerVoxel = mode == 1 ? 4 : 8; // 8 vertices in 3D, 4 in 2D. + float3 dimensionMask = mode == 1 ? float3(1, 1, 0) : float3(1, 1, 1); + int edgeCount = mode == 1 ? 4 : 12; + + // initialize voxel with invalid vertex: + voxelToVertex[i] = INVALID; + + // calculate chunk index: + int chunkIndex = i / voxelsInChunk; + + // get offset of voxel within chunk: + int voxelOffset = i - chunkIndex * voxelsInChunk; + int3 voxelCoords; + + if (mode == 1) + voxelCoords = (int3)DecodeMorton2((uint)voxelOffset); + else + voxelCoords = (int3)DecodeMorton3((uint)voxelOffset); + + // get samples at voxel corners: + float samples[8]; + float4 vcolor[8]; + float4 vvelo[8]; + uint cornerMask = 0; + + // initialize all samples to zero (last 4 samples aren't written to in 2D). + int j = 0; + for (j = 0; j < 8; ++j) + samples[j] = 0; + + for (j = 0; j < verticesPerVoxel; ++j) + { + uint v = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + corners[j], voxelsInChunk); + + if (v == INVALID) + return; + else + { + samples[j] = verts[v].x; + vcolor[j] = UnpackFloatRGBA(verts[v].y); + vvelo[j] = voxelVelocities[v]; + cornerMask |= samples[j] >= 0 ? (1 << j) : 0; + } + } + + // store cornerMask: + verts[i].z = asfloat(cornerMask); + + int edgeMask = edgeTable[cornerMask]; + + // if the voxel does not intersect the surface, return: + if ((mode == 1 && cornerMask == 0xf) || + (mode == 0 && edgeMask == 0)) + return; + + // calculate vertex position using edge crossings: + float3 normalizedPos = float3(0,0,0); + float4 velocity = FLOAT4_ZERO; + float4 color = FLOAT4_ZERO; + int intersections = 0; + + for (j = 0; j < edgeCount; ++j) + { + if((edgeMask & (1 << j)) == 0) + continue; + + int2 e = edges[j]; + float t = -samples[e.x] / (samples[e.y] - samples[e.x]); + + normalizedPos += lerp(corners[e.x],corners[e.y],t); + color += lerp(vcolor[e.x], vcolor[e.y], t); + velocity += lerp(vvelo[e.x], vvelo[e.y], t); + intersections++; + } + + // intersections will always be > 0 in 3D: + if (intersections > 0) + { + normalizedPos /= intersections; + color /= intersections; + velocity /= intersections; + } + else + { + normalizedPos = float3(0.5f, 0.5f, -bevel); + color = (vcolor[0] + vcolor[1] + vcolor[2] + vcolor[3]) * 0.25f; + velocity = (vvelo[0] + vvelo[1] + vvelo[2] + vvelo[3]) * 0.25f; + } + + float4 distancesA = float4(samples[0], samples[4], samples[2], samples[6]); + float4 distancesB = float4(samples[1], samples[5], samples[3], samples[7]); + + // gradient descent: + float3 normal; + for(uint k = 0; k < descentIterations; ++k) + { + float d = EvaluateSDF(distancesA, distancesB, normalizedPos, normal); + normalizedPos -= descentSpeed * normal * (d + isosurface + descentIsosurface); + } + + // final normal evaluation: + EvaluateSDF(distancesA, distancesB, normalizedPos, normal); + + // modify normal in 2D mode: + if (mode) + normal = lerp(float3(0,0,-1),float3(normal.xy,-normal.z),bevel); // no bevel, flat normals + + // Append vertex: + InterlockedAdd(dispatchBuffer[4],1,voxelToVertex[i]); + verts[voxelToVertex[i]].w = i; + + float3 voxelCorner = chunkGridOrigin + (float3)(chunkCoords[chunkIndex] * chunkResolution + voxelCoords) * voxelSize; + outputVerts[voxelToVertex[i]] = float4(voxelCorner * dimensionMask + normalizedPos * voxelSize, encode(normal)); + colors[voxelToVertex[i]] = color; + velocities[voxelToVertex[i]] = velocity; +} + +[numthreads(128, 1, 1)] +void Triangulate (uint3 id : SV_DispatchThreadID) +{ + uint v0 = id.x; + if (v0 >= dispatchBuffer[3]) return; + + int voxelsInChunk = (int)pow(chunkResolution, 3 - mode); // 64 voxels in 3D, 16 in 2D. + int quadCount = 3 - mode * 2; // 3 quads in 3D, 1 in 2D. + int adjacentCount = 6 - mode * 2; // 6 adjacent voxels in 3D, 4 in 2D. + + // get index of the voxel that spawned this vertex: + uint i = verts[v0].w; + + // calculate chunk index and look up coordinates: + int chunkIndex = i / voxelsInChunk; + + // get offset of voxel within chunk: + int voxelOffset = i - chunkIndex * voxelsInChunk; + int3 voxelCoords; + + if (mode == 1) + voxelCoords = (int3)DecodeMorton2((uint)voxelOffset); + else + voxelCoords = (int3)DecodeMorton3((uint)voxelOffset); + + uint cornerMask = asuint(verts[i].z); + int edgeMask = edgeTable[cornerMask]; + + // get winding order using last bit of cornermask, which indicates corner sign: + // in 2D, cornerMask >> 7 is always 0, so we get the second winding order. + int3 windingOrder = (cornerMask >> 7) ? quadWindingOrder[0] : quadWindingOrder[1]; + + // Retrieve adjacent voxels: + int j; + uint adjacent[6]; + for (j = 0; j < adjacentCount; ++j) + adjacent[j] = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + corners[j + 1], voxelsInChunk); + + // Iterate over all potential quads, append those needed: + for (j = 0; j < quadCount; ++j) + { + // if the edge is not crossing the surface, skip it (3D only) + if (mode == 0 && (edgeMask & (1 << j)) == 0) + continue; + + // calculate final neighbor indices: + uint3 neighbors = uint3(quadNeighborIndices[j][windingOrder[0]]-1, + quadNeighborIndices[j][windingOrder[1]]-1, + quadNeighborIndices[j][windingOrder[2]]-1); + + // get vertex indices for all voxels involved: + uint v1 = voxelToVertex[adjacent[neighbors[0]]]; + uint v2 = voxelToVertex[adjacent[neighbors[1]]]; + uint v3 = voxelToVertex[adjacent[neighbors[2]]]; + + // if any of the vertices is invalid, skip the quad: + if (v1 == INVALID || v2 == INVALID || v3 == INVALID) + continue; + + // append a new quad: + uint baseIndex; + InterlockedAdd(dispatchBuffer2[4],1,baseIndex); + baseIndex *= 6; + + // flip edge if necessary, to always use the shortest diagonal: + float3 diag1 = outputVerts[v0].xyz - outputVerts[v2].xyz; + float3 diag2 = outputVerts[v1].xyz - outputVerts[v3].xyz; + if (dot(diag1,diag1) > dot(diag2,diag2) * 1.1) + { + quads[baseIndex] = v1; + quads[baseIndex+1] = v2; + quads[baseIndex+2] = v3; + + quads[baseIndex+3] = v0; + quads[baseIndex+4] = v1; + quads[baseIndex+5] = v3; + } + else + { + quads[baseIndex] = v0; + quads[baseIndex+1] = v1; + quads[baseIndex+2] = v2; + + quads[baseIndex+3] = v3; + quads[baseIndex+4] = v0; + quads[baseIndex+5] = v2; + } + } + + // Move adjacent voxel in Z axis to last position, so that 2D adjacent voxels are the first 4. + adjacent[5] = adjacent[3]; + adjacent[2] = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + int3(0, -1, 0), voxelsInChunk); + adjacent[3] = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + int3(-1, 0, 0), voxelsInChunk); + adjacent[4] = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + int3(0, 0, -1), voxelsInChunk); + + // initialize vertex adjacency to INVALID. + for (j = 0; j < 6; ++j) + vertexAdjacency[v0*6 + j] = INVALID; + + // Determine adjacent surface voxels for smoothing: + bool isAdjacent; + for (j = 0; j < adjacentCount; ++j) + { + if (adjacent[j] != INVALID) + { + // adjacent if this does not intersect the surface or both intersect the surface. + isAdjacent = (edgeMask == 0 || edgeTable[asuint(verts[adjacent[j]].z)] != 0) && + + // in 3D mode, it should also intersect any of the face edges to be considered adjacent: + (mode == 1 || any(edgeMask & (1 << faceNeighborEdges[j]))); + + vertexAdjacency[v0 * 6 + j] = isAdjacent ? voxelToVertex[adjacent[j]] : INVALID; + } + } +} + +[numthreads(128, 1, 1)] +void Smoothing (uint3 id : SV_DispatchThreadID) +{ + uint thread = id.x; + if (thread >= dispatchBuffer[3]) return; + + float3 n = decode(verts[thread].w); + + float4 coord = float4(verts[thread].xyz,1); + float4 norm = float4(n,1); + + for (int j = 0; j < 6; ++j) + { + uint v = vertexAdjacency[thread*6 + j]; + if (v != INVALID) + { + coord += float4(verts[v].xyz,1); + norm += float4(decode(verts[v].w),1); + } + } + + coord.xyz /= coord.w; + norm.xyz /= norm.w; + + float3 v = lerp(verts[thread].xyz, coord.xyz, smoothing); + n = normalize(lerp(n,norm.xyz, smoothing)); + + outputVerts[thread] = float4(v, encode(n)); + +} + +[numthreads(1, 1, 1)] +void FixArgsBuffer (uint3 id : SV_DispatchThreadID) +{ + dispatchBuffer[3] = dispatchBuffer[4] * dispatchMultiplier; + dispatchBuffer[0] = dispatchBuffer[3] / 128 + 1; + dispatchBuffer[4] *= countMultiplier; // used to zero out fourth component if needed. +} + +[numthreads(1, 1, 1)] +void FillIndirectDrawBuffer (uint3 id : SV_DispatchThreadID) +{ + indirectDrawIndexedArgs a; + + a.indexCountPerInstance = dispatchBuffer[3] * 6; // number of quads * 6 + a.instanceCount = instanceCount; + a.startIndex = 0; + a.baseVertexIndex = 0; + a.startInstance = 0; + indirectBuffer[0] = a; +} + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta new file mode 100644 index 000000000..67121ca85 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 676e30b71ac3147969895b3f0ad6d2ec +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/GridUtils.cginc b/Assets/ThirdParty/Obi/Resources/Compute/GridUtils.cginc new file mode 100644 index 000000000..c3ce3b12a --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/GridUtils.cginc @@ -0,0 +1,166 @@ +#ifndef GRIDUTILS_INCLUDE +#define GRIDUTILS_INCLUDE + +#define INVALID 0xFFFFFFFF +#define MIN_GRID_LEVEL -8 //-6 // minimum cell size is 0.004 meters, enough for very small colliders / particles (log(0.004) / log(2)) +#define MAX_GRID_LEVEL 15 // maximum cell size is 32768 meters, enough for gargantuan objects. +#define GRID_LEVELS (MAX_GRID_LEVEL - MIN_GRID_LEVEL + 1) + +RWStructuredBuffer levelPopulation; +uint maxCells; // maximum number of unique cells in the grid. + +static const float4 cellNeighborhood[27] = { +float4(-1,-1,-1, 0), +float4(-1,-1, 0, 0), +float4(-1,-1, 1, 0), +float4(-1, 0,-1, 0), +float4(-1, 0, 0, 0), +float4(-1, 0, 1, 0), +float4(-1, 1,-1, 0), +float4(-1, 1, 0, 0), +float4(-1, 1, 1, 0), +float4( 0,-1,-1, 0), +float4( 0,-1, 0, 0), +float4( 0,-1, 1, 0), +float4( 0, 0,-1, 0), +float4( 0, 0, 0, 0), +float4( 0, 0, 1, 0), +float4( 0, 1,-1, 0), +float4( 0, 1, 0, 0), +float4( 0, 1, 1, 0), +float4( 1,-1,-1, 0), +float4( 1,-1, 0, 0), +float4( 1,-1, 1, 0), +float4( 1, 0,-1, 0), +float4( 1, 0, 0, 0), +float4( 1, 0, 1, 0), +float4( 1, 1,-1, 0), +float4( 1, 1, 0, 0), +float4( 1, 1, 1, 0), +}; + +static const float4 aheadCellNeighborhood[13] = { +float4(1,0,0,0), // + , 0 , 0 ( 1) +float4(0,1,0,0), // 0 , + , 0 ( 3) +float4(1,1,0,0), // + , + , 0 ( 4) +float4(0,0,1,0), // 0 , 0 , + ( 9) +float4(1,0,1,0), // + , 0 , + (10) +float4(0,1,1,0), // 0 , + , + (12) +float4(1,1,1,0), // + , + , + (13) + +float4(-1,1,0,0), // - , + , 0 ( 2) +float4(-1,-1,1,0), // - , - , + ( 5) +float4(0,-1,1,0), // 0 , - , + ( 6) +float4(1,-1,1,0), // + , - , + ( 7) +float4(-1,0,1,0), // - , 0 , + ( 8) +float4(-1,1,1,0), // - , + , + (11) +}; + +[numthreads(1,1,1)] +void FindPopulatedLevels (uint3 id : SV_DispatchThreadID) +{ + for (int l = 1; l <= GRID_LEVELS; ++l) + { + if (levelPopulation[l] > 0) + levelPopulation[1 + levelPopulation[0]++] = l - 1; + } +} + +inline int GridLevelForSize(float size) +{ + // the magic number is 1/log(2), used because log_a(x) = log_b(x) / log_b(a) + // level is clamped between MIN_LEVEL and MAX_LEVEL, then remapped to (0, MAX_LEVEL - MIN_LEVEL) + // this allows us to avoid InterlockedMax issues on GPU, since it doesn't work on negative numbers on some APIs. + return clamp((int)ceil(log(size) * 1.44269504089), MIN_GRID_LEVEL, MAX_GRID_LEVEL) - MIN_GRID_LEVEL; +} + +inline float CellSizeOfLevel(int level) +{ + return exp2(level + MIN_GRID_LEVEL); +} + +inline int4 GetParentCellCoords(int4 cellCoords, uint level) +{ + float decimation = exp2(level - cellCoords[3]); + int4 cell = (int4)floor((float4)cellCoords / decimation); + cell[3] = level; + return cell; +} + +uint Part1By1(uint x) +{ + x &= 0x0000ffff; // x = ---- ---- ---- ---- fedc ba98 7654 3210 + x = (x ^ (x << 8)) & 0x00ff00ff; // x = ---- ---- fedc ba98 ---- ---- 7654 3210 + x = (x ^ (x << 4)) & 0x0f0f0f0f; // x = ---- fedc ---- ba98 ---- 7654 ---- 3210 + x = (x ^ (x << 2)) & 0x33333333; // x = --fe --dc --ba --98 --76 --54 --32 --10 + x = (x ^ (x << 1)) & 0x55555555; // x = -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 + return x; +} + +// "Insert" two 0 bits after each of the 10 low bits of x +uint Part1By2(uint x) +{ + x &= 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210 + x = (x ^ (x << 16)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210 + x = (x ^ (x << 8)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210 + x = (x ^ (x << 4)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10 + x = (x ^ (x << 2)) & 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 + return x; +} + +uint Compact1By1(uint x) +{ + x &= 0x55555555; // x = -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 + x = (x ^ (x >> 1)) & 0x33333333; // x = --fe --dc --ba --98 --76 --54 --32 --10 + x = (x ^ (x >> 2)) & 0x0f0f0f0f; // x = ---- fedc ---- ba98 ---- 7654 ---- 3210 + x = (x ^ (x >> 4)) & 0x00ff00ff; // x = ---- ---- fedc ba98 ---- ---- 7654 3210 + x = (x ^ (x >> 8)) & 0x0000ffff; // x = ---- ---- ---- ---- fedc ba98 7654 3210 + return x; +} + +uint Compact1By2(uint x) +{ + x &= 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 + x = (x ^ (x >> 2)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10 + x = (x ^ (x >> 4)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210 + x = (x ^ (x >> 8)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210 + x = (x ^ (x >> 16)) & 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210 + return x; +} + +inline uint EncodeMorton2(uint2 coords) +{ + return (Part1By1(coords.y) << 1) + Part1By1(coords.x); +} + +inline uint EncodeMorton3(uint3 coords) +{ + return (Part1By2(coords.z) << 2) + (Part1By2(coords.y) << 1) + Part1By2(coords.x); +} + +inline uint3 DecodeMorton2(uint code) +{ + return uint3(Compact1By1(code >> 0), Compact1By1(code >> 1), 0); +} + +inline uint3 DecodeMorton3(uint code) +{ + return uint3(Compact1By2(code >> 0), Compact1By2(code >> 1), Compact1By2(code >> 2)); +} + +inline uint GridHash(in int4 cellIndex) +{ + return (73856093*cellIndex.x ^ + 19349663*cellIndex.y ^ + 83492791*cellIndex.z ^ + 10380569*cellIndex.w) % maxCells; +} + +inline uint GridHash(in int3 cellIndex) +{ + return (73856093*cellIndex.x ^ + 19349663*cellIndex.y ^ + 83492791*cellIndex.z) % maxCells; +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/GridUtils.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/GridUtils.cginc.meta new file mode 100644 index 000000000..be067e289 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/GridUtils.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b4dbf43981a3b419fbc2eaf5f2c05a6c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/HeightfieldShape.compute b/Assets/ThirdParty/Obi/Resources/Compute/HeightfieldShape.compute new file mode 100644 index 000000000..6b34be7b7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/HeightfieldShape.compute @@ -0,0 +1,198 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "DistanceFunctions.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer velocities; + +StructuredBuffer simplices; +StructuredBuffer simplexBounds; // bounding box of each simplex. + +StructuredBuffer transforms; +StructuredBuffer shapes; + +// heightfield data: +StructuredBuffer heightFieldHeaders; +StructuredBuffer heightFieldSamples; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer contacts; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; +float deltaTime; + +[numthreads(128, 1, 1)] +void GenerateContacts (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4 * HEIGHTMAP_SHAPE]) return; + + int firstPair = contactOffsetsPerType[HEIGHTMAP_SHAPE]; + int simplexIndex = contactPairs[firstPair + i].x; + int colliderIndex = contactPairs[firstPair + i].y; + shape s = shapes[colliderIndex]; + + if (s.dataIndex < 0) return; + + HeightFieldHeader header = heightFieldHeaders[s.dataIndex]; + + Heightfield fieldShape; + fieldShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + fieldShape.s = s; + + // invert a full matrix here to accurately represent collider bounds scale. + float4x4 solverToCollider = Inverse(TRS(fieldShape.colliderToSolver.translation.xyz, fieldShape.colliderToSolver.rotation, fieldShape.colliderToSolver.scale.xyz)); + aabb simplexBound = simplexBounds[simplexIndex].Transformed(solverToCollider); + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + int resolutionU = (int)s.center.x; + int resolutionV = (int)s.center.y; + + // calculate terrain cell size: + float cellWidth = s.size.x / (resolutionU - 1); + float cellHeight = s.size.z / (resolutionV - 1); + + // calculate particle bounds min/max cells: + int2 min_ = int2((int)floor(simplexBound.min_[0] / cellWidth), (int)floor(simplexBound.min_[2] / cellHeight)); + int2 max_ = int2((int)floor(simplexBound.max_[0] / cellWidth), (int)floor(simplexBound.max_[2] / cellHeight)); + + for (int su = min_[0]; su <= max_[0]; ++su) + { + if (su >= 0 && su < resolutionU - 1) + { + for (int sv = min_[1]; sv <= max_[1]; ++sv) + { + if (sv >= 0 && sv < resolutionV - 1) + { + // calculate neighbor sample indices: + int csu1 = clamp(su + 1, 0, resolutionU - 1); + int csv1 = clamp(sv + 1, 0, resolutionV - 1); + + // sample heights: + float h1 = heightFieldSamples[header.firstSample + sv * resolutionU + su] * s.size.y; + float h2 = heightFieldSamples[header.firstSample + sv * resolutionU + csu1] * s.size.y; + float h3 = heightFieldSamples[header.firstSample + csv1 * resolutionU + su] * s.size.y; + float h4 = heightFieldSamples[header.firstSample + csv1 * resolutionU + csu1] * s.size.y; + + if (h1 < 0) continue; + h1 = abs(h1); + h2 = abs(h2); + h3 = abs(h3); + h4 = abs(h4); + + float min_x = su * s.size.x / (resolutionU - 1); + float max_x = csu1 * s.size.x / (resolutionU - 1); + float min_z = sv * s.size.z / (resolutionV - 1); + float max_z = csv1 * s.size.z / (resolutionV - 1); + + float4 convexPoint; + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + + // ------contact against the first triangle------: + float4 v1 = float4(min_x, h3, max_z, 0); + float4 v2 = float4(max_x, h4, max_z, 0); + float4 v3 = float4(min_x, h1, min_z, 0); + + fieldShape.tri.Cache(v1, v2, v3); + fieldShape.triNormal.xyz = normalizesafe(cross((v2 - v1).xyz, (v3 - v1).xyz)); + + SurfacePoint colliderPoint = Optimize(fieldShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, convexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + float4 velocity = FLOAT4_ZERO; + float simplexRadius = 0; + int j; + for (j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; + velocity += velocities[particleIndex] * simplexBary[j]; + } + + float dAB = dot(convexPoint - colliderPoint.pos, colliderPoint.normal); + float vel = dot(velocity, colliderPoint.normal); + + if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) + { + uint count = contacts.IncrementCounter(); + if (count < maxContacts) + { + contact c = (contact)0; + + c.pointB = colliderPoint.pos; + c.normal = colliderPoint.normal * fieldShape.s.isInverted(); + c.pointA = simplexBary; + c.bodyA = simplexIndex; + c.bodyB = colliderIndex; + + contacts[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } + + // ------contact against the second triangle------: + v1 = float4(min_x, h1, min_z, 0); + v2 = float4(max_x, h4, max_z, 0); + v3 = float4(max_x, h2, min_z, 0); + + fieldShape.tri.Cache(v1, v2, v3); + fieldShape.triNormal.xyz = normalizesafe(cross((v2 - v1).xyz, (v3 - v1).xyz)); + + colliderPoint = Optimize(fieldShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, convexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + velocity = FLOAT4_ZERO; + simplexRadius = 0; + for (j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; + velocity += velocities[particleIndex] * simplexBary[j]; + } + + dAB = dot(convexPoint - colliderPoint.pos, colliderPoint.normal); + vel = dot(velocity, colliderPoint.normal); + + if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) + { + uint count = contacts.IncrementCounter(); + if (count < maxContacts) + { + contact c = (contact)0; + + c.pointB = colliderPoint.pos; + c.normal = colliderPoint.normal * fieldShape.s.isInverted(); + c.pointA = simplexBary; + c.bodyA = simplexIndex; + c.bodyB = colliderIndex; + + contacts[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/HeightfieldShape.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/HeightfieldShape.compute.meta new file mode 100644 index 000000000..a04ea6262 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/HeightfieldShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9efd384bb82b4ec0b0adf1fc349a89b +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/InertialFrame.cginc b/Assets/ThirdParty/Obi/Resources/Compute/InertialFrame.cginc new file mode 100644 index 000000000..fe1da60c9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/InertialFrame.cginc @@ -0,0 +1,23 @@ +#ifndef INERTIALFRAME_INCLUDE +#define INERTIALFRAME_INCLUDE + +#include "Transform.cginc" + +struct inertialFrame +{ + transform frame; + transform prevFrame; + + float4 velocity; + float4 angularVelocity; + + float4 acceleration; + float4 angularAcceleration; + + float4 velocityAtPoint(float4 pnt) + { + return velocity + float4(cross(angularVelocity.xyz, (pnt - prevFrame.translation).xyz), 0); + } +}; + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/InertialFrame.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/InertialFrame.cginc.meta new file mode 100644 index 000000000..ed4916d3e --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/InertialFrame.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2d21eb1b3353a439eb5f6f6df05dd6d0 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/InstancedParticleRendering.compute b/Assets/ThirdParty/Obi/Resources/Compute/InstancedParticleRendering.compute new file mode 100644 index 000000000..b07c7bc89 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/InstancedParticleRendering.compute @@ -0,0 +1,44 @@ +#pragma kernel UpdateParticleInstances + +#include "PathFrame.cginc" + +struct RendererData +{ + float4 color; + float radiusScale; +}; + +StructuredBuffer activeParticles; +StructuredBuffer rendererData; +StructuredBuffer rendererIndex; + +StructuredBuffer renderablePositions; +StructuredBuffer renderableOrientations; +StructuredBuffer renderableRadii; +StructuredBuffer colors; +float4x4 solverToWorld; + +RWStructuredBuffer instanceTransforms; +RWStructuredBuffer invInstanceTransforms; +RWStructuredBuffer instanceColors; + +uint particleCount; + +[numthreads(128, 1, 1)] +void UpdateParticleInstances (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = activeParticles[i]; + + float4x4 tfrm = TRS(renderablePositions[p].xyz, + renderableOrientations[p], + renderableRadii[p].xyz * renderableRadii[p][3] * rendererData[rendererIndex[i]].radiusScale); + + instanceTransforms[i] = mul(solverToWorld, tfrm); + + instanceColors[i] = colors[p] * rendererData[rendererIndex[i]].color; + + invInstanceTransforms[i] = Inverse(instanceTransforms[i]); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/InstancedParticleRendering.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/InstancedParticleRendering.compute.meta new file mode 100644 index 000000000..a82b45e18 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/InstancedParticleRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d2b27c5c6c8154b6694d7e017468ccc0 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Integration.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Integration.cginc new file mode 100644 index 000000000..fc9edd611 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Integration.cginc @@ -0,0 +1,38 @@ +#ifndef INTEGRATION_INCLUDE +#define INTEGRATION_INCLUDE + +#include "Quaternion.cginc" + +float4 IntegrateLinear(float4 position, float4 velocity, float dt) +{ + return position + velocity * dt; +} + +float4 DifferentiateLinear(float4 position, float4 prevPosition, float dt) +{ + return (position - prevPosition) / dt; +} + +quaternion AngularVelocityToSpinQuaternion(quaternion rotation, float4 angularVelocity, float dt) +{ + quaternion delta = quaternion(angularVelocity.x, + angularVelocity.y, + angularVelocity.z, 0); + + return quaternion(0.5f * qmul(delta,rotation) * dt); +} + +quaternion IntegrateAngular(quaternion rotation, float4 angularVelocity, float dt) +{ + rotation += AngularVelocityToSpinQuaternion(rotation,angularVelocity, dt); + return normalize(rotation); +} + +float4 DifferentiateAngular(quaternion rotation, quaternion prevRotation, float dt) +{ + quaternion deltaq = qmul(rotation, q_conj(prevRotation)); + float s = deltaq.w >= 0 ? 1 : -1; + return float4(s * deltaq.xyz * 2.0f / dt, 0); +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Integration.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/Integration.cginc.meta new file mode 100644 index 000000000..7940d0152 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Integration.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d436b0155e8f943d59a26290140664cd +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/InterlockedUtils.cginc b/Assets/ThirdParty/Obi/Resources/Compute/InterlockedUtils.cginc new file mode 100644 index 000000000..06f227295 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/InterlockedUtils.cginc @@ -0,0 +1,46 @@ +#ifndef INTERLOCKEDUTILS_INCLUDE +#define INTERLOCKEDUTILS_INCLUDE + +void InterlockedAddFloat(RWStructuredBuffer buffer, int index, int axis, float value) +{ + uint i_val = asuint(value); + uint tmp0 = 0; + uint tmp1; + + [allow_uav_condition] + while (true) + { + InterlockedCompareExchange(buffer[index][axis], tmp0, i_val, tmp1); + + if (tmp1 == tmp0) + break; + + tmp0 = tmp1; + i_val = asuint(value + asfloat(tmp1)); + } + + return; +} + +void InterlockedAddFloat(RWStructuredBuffer buffer, int index, float value) +{ + uint i_val = asuint(value); + uint tmp0 = 0; + uint tmp1; + + [allow_uav_condition] + while (true) + { + InterlockedCompareExchange(buffer[index], tmp0, i_val, tmp1); + + if (tmp1 == tmp0) + break; + + tmp0 = tmp1; + i_val = asuint(value + asfloat(tmp1)); + } + + return; +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/InterlockedUtils.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/InterlockedUtils.cginc.meta new file mode 100644 index 000000000..c09fa844e --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/InterlockedUtils.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bb532ce1395da4d13b47a4da3e1b4033 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/MathUtils.cginc b/Assets/ThirdParty/Obi/Resources/Compute/MathUtils.cginc new file mode 100644 index 000000000..fd60de55d --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/MathUtils.cginc @@ -0,0 +1,648 @@ +#ifndef MATHUTILS_INCLUDE +#define MATHUTILS_INCLUDE + +#define PI 3.14159265359f +#define SQRT2 1.41421356237f +#define SQRT3 1.73205080757f +#define EPSILON 0.0000001f +#define FLT_MAX 3.402823466e+38 +#define FLT_MIN 1.175494351e-38 + +#define FLOAT4_ZERO float4(0, 0, 0, 0) +#define FLOAT4_EPSILON float4(EPSILON, EPSILON, EPSILON, EPSILON) + +#define zero 0 +#define one 1 + +#define PHASE_SELFCOLLIDE (1 << 24) +#define PHASE_FLUID (1 << 25) +#define PHASE_ONESIDED (1 << 26) +#define PHASE_ISOLATED (1 << 27) // particles that are not part of persistent constraints and can be deleted without ill effects: fluids and granulars + +#include "Quaternion.cginc" +#include "Matrix.cginc" + +// Based on Kubelka-Munk theory: https://vanity-ibex.xyz/blog/kubelka_munk_colormixing/ +float4 RGBToAbsorption(float4 rgb) +{ + // S (scattering) is assumed to be 1 for all channels + float4 k; + k.r = pow(1 - rgb.r, 2) / (2 * rgb.r + EPSILON); + k.g = pow(1 - rgb.g, 2) / (2 * rgb.g + EPSILON); + k.b = pow(1 - rgb.b, 2) / (2 * rgb.b + EPSILON); + k.a = rgb.a; + return k; +} + +// Based on Kubelka-Munk theory: https://vanity-ibex.xyz/blog/kubelka_munk_colormixing/ +float4 AbsorptionToRGB(float4 k) +{ + // Assuming S=1 for all channels + float4 rgb; + rgb.r = 1 + k.r - sqrt(k.r * (k.r + 2)); + rgb.g = 1 + k.g - sqrt(k.g * (k.g + 2)); + rgb.b = 1 + k.b - sqrt(k.b * (k.b + 2)); + rgb.a = k.a; + return rgb; +} + +//https://www.shadertoy.com/view/4djSRW +float3 hash33(float3 p3) +{ + p3 = frac(p3 * float3(.1031, .1030, .0973)); + p3 += dot(p3, p3.yxz+33.33); + return frac((p3.xxy + p3.yxx)*p3.zyx); +} + +float hash13(float3 p3) +{ + p3 = frac(p3 * .1031); + p3 += dot(p3, p3.zyx + 31.32); + return frac((p3.x + p3.y) * p3.z); +} + +float2 hash21(float p) +{ + float3 p3 = frac(float3(p,p,p) * float3(.1031, .1030, .0973)); + p3 += dot(p3, p3.yzx + 33.33); + return frac((p3.xx+p3.yz)*p3.zy); +} + +float3 hash31(float p) +{ + float3 p3 = frac(float3(p,p,p) * float3(.1031f, .1030f, .0973f)); + p3 += dot(p3, p3.yzx + 33.33f); + return frac((p3.xxy + p3.yzz) * p3.zyx); +} + +float4 normalizesafe(in float4 v, float4 def = float4(0,0,0,0)) +{ + float len = length(v); + return (len < EPSILON) ? def : v/len; +} + +float3 normalizesafe(in float3 v, float3 def = float3(0,0,0)) +{ + float len = length(v); + return (len < EPSILON) ? def : v/len; +} + +inline float cmax( in float3 v) +{ + return max(max(v.x,v.y),v.z); +} + +inline float3 nfmod(float3 a, float3 b) +{ + return a - b * floor(a / b); +} + +inline float BaryScale(float4 coords) +{ + return 1.0 / dot(coords, coords); +} + +float Remap01(float value, float min_, float max_) +{ + return (min(value, max_) - min(value, min_)) / (max_ - min_); +} + +float Remap(float value, float min_, float max_, float newmin_, float newmax_) +{ + return newmin_ + (value - min_) * (newmax_ - newmin_) / (max_ - min_); +} + +float EllipsoidRadius(float4 normSolverDirection, quaternion orientation, float3 radii) +{ + float3 localDir = rotate_vector(q_conj(orientation), normSolverDirection.xyz) / radii; + float sqrNorm = dot(localDir, localDir); + return sqrNorm > EPSILON ? sqrt(1 / sqrNorm) : radii.x; +} + +float4 Project(float4 v, float4 onto) +{ + float len = dot(onto,onto); + if (len < EPSILON) + return FLOAT4_ZERO; + return dot(onto, v) * onto / len; +} + +float3 Project(float3 v, float3 onto) +{ + float len = dot(onto,onto); + if (len < EPSILON) + return float3(0,0,0); + return dot(onto, v) * onto / len; +} + +inline void OneSidedNormal(float4 forward, inout float4 normal) +{ + float d = dot(normal.xyz, forward.xyz); + if (d < 0) normal -= 2 * d * forward; +} + +quaternion ExtractRotation(float3x3 m, quaternion rotation, int iterations) +{ + float4x4 R; + for (int i = 0; i < iterations; ++i) + { + R = q_toMatrix(rotation); + float3 omega = (cross(R._m00_m10_m20, m._m00_m10_m20) + cross(R._m01_m11_m21, m._m01_m11_m21) + cross(R._m02_m12_m22, m._m02_m12_m22)) / + (abs(dot(R._m00_m10_m20, m._m00_m10_m20) + dot(R._m01_m11_m21, m._m01_m11_m21) + dot(R._m02_m12_m22, m._m02_m12_m22)) + EPSILON); + + float w = length(omega); + if (w < EPSILON) + break; + + rotation = normalize(qmul(axis_angle((1.0f / w) * omega, w), rotation)); + } + return rotation; +} + +quaternion ExtractRotation(float4x4 m, quaternion rotation, int iterations) +{ + return ExtractRotation((float3x3) m, rotation, iterations); +} + +float4 GetParticleInertiaTensor(in float4 principalRadii, in float invRotationalMass) +{ + float4 sqrRadii = principalRadii * principalRadii; + return 0.2f / (invRotationalMass + EPSILON) * float4(sqrRadii[1] + sqrRadii[2], + sqrRadii[0] + sqrRadii[2], + sqrRadii[0] + sqrRadii[1], 0); +} + +float4x4 TransformInertiaTensor(float4 tensor, quaternion rotation) +{ + float4x4 rotMatrix = q_toMatrix(rotation); + return mul(rotMatrix, mul(AsDiagonal(tensor), transpose(rotMatrix))); +} + +float RotationalInvMass(float4x4 inverseInertiaTensor, float4 pos, float4 direction) +{ + float4 cr = mul(inverseInertiaTensor, float4(cross(pos.xyz, direction.xyz), 0)); + return dot(cross(cr.xyz, pos.xyz), direction.xyz); +} + +float RaySphereIntersection(float3 rayOrigin, float3 rayDirection, float3 center, float radius) +{ + float3 oc = rayOrigin - center; + + float a = dot(rayDirection, rayDirection); + float b = 2.0 * dot(oc, rayDirection); + float c = dot(oc, oc) - radius * radius; + float discriminant = b * b - 4 * a * c; + if (discriminant < 0){ + return -1.0f; + } + else{ + return (-b - sqrt(discriminant)) / (2.0f * a); + } +} + +struct CachedEdge +{ + float4 vertex; + float4 edge0; + float data; + + void Cache(in float4 v1, + in float4 v2) + { + vertex = v1; + vertex.w = 0; + edge0 = v2 - v1; + edge0.w = 0; + data = dot(edge0, edge0); + } +}; + +float4 NearestPointOnEdge(CachedEdge edge, float4 p, out float mu, bool clampToSegment = true) +{ + float4 ap = p - edge.vertex; + ap.w = 0; + + mu = dot(ap, edge.edge0) / (edge.data + EPSILON); + + if (clampToSegment) + mu = saturate(mu); + + float4 result = edge.vertex + edge.edge0 * mu; + result.w = 0; + return result; +} + +float4 NearestPointOnEdge(float4 a, float4 b, float4 p, out float mu, bool clampToSegment = true) +{ + float4 ap = p - a; + float4 ab = b - a; + ap.w = 0; + ab.w = 0; + + mu = dot(ap, ab) / (dot(ab, ab) + EPSILON); + + if (clampToSegment) + mu = saturate(mu); + + float4 result = a + ab * mu; + result.w = 0; + return result; +} + +float3 NearestPointOnEdge(float3 a, float3 b, float3 p, out float mu, bool clampToSegment = true) +{ + float3 ap = p - a; + float3 ab = b - a; + + mu = dot(ap, ab) / (dot(ab, ab) + EPSILON); + + if (clampToSegment) + mu = saturate(mu); + + float3 result = a + ab * mu; + return result; +} + +struct CachedTri +{ + float4 vertex; + float4 edge0; + float4 edge1; + float4 data; + + void Cache(in float4 v1, + in float4 v2, + in float4 v3) + { + vertex = v1; + edge0 = v2 - v1; + edge1 = v3 - v1; + data = float4(0,0,0,0); + data[0] = dot(edge0, edge0); + data[1] = dot(edge0, edge1); + data[2] = dot(edge1, edge1); + data[3] = data[0] * data[2] - data[1] * data[1]; + } +}; + +float4 NearestPointOnTri(in CachedTri tri, + in float4 p, + out float4 bary) +{ + float4 v0 = tri.vertex - p; + float b0 = dot(tri.edge0, v0); + float b1 = dot(tri.edge1, v0); + float t0 = tri.data[1] * b1 - tri.data[2] * b0; + float t1 = tri.data[1] * b0 - tri.data[0] * b1; + + if (t0 + t1 <= tri.data[3]) + { + if (t0 < zero) + { + if (t1 < zero) // region 4 + { + if (b0 < zero) + { + t1 = zero; + if (-b0 >= tri.data[0]) // V0 + t0 = one; + else // E01 + t0 = -b0 / tri.data[0]; + } + else + { + t0 = zero; + if (b1 >= zero) // V0 + t1 = zero; + else if (-b1 >= tri.data[2]) // V2 + t1 = one; + else // E20 + t1 = -b1 / tri.data[2]; + } + } + else // region 3 + { + t0 = zero; + if (b1 >= zero) // V0 + t1 = zero; + else if (-b1 >= tri.data[2]) // V2 + t1 = one; + else // E20 + t1 = -b1 / tri.data[2]; + } + } + else if (t1 < zero) // region 5 + { + t1 = zero; + if (b0 >= zero) // V0 + t0 = zero; + else if (-b0 >= tri.data[0]) // V1 + t0 = one; + else // E01 + t0 = -b0 / tri.data[0]; + } + else // region 0, interior + { + float invDet = one / tri.data[3]; + t0 *= invDet; + t1 *= invDet; + } + } + else + { + float tmp0, tmp1, numer, denom; + + if (t0 < zero) // region 2 + { + tmp0 = tri.data[1] + b0; + tmp1 = tri.data[2] + b1; + if (tmp1 > tmp0) + { + numer = tmp1 - tmp0; + denom = tri.data[0] - 2 * tri.data[1] + tri.data[2]; + if (numer >= denom) // V1 + { + t0 = one; + t1 = zero; + } + else // E12 + { + t0 = numer / denom; + t1 = one - t0; + } + } + else + { + t0 = zero; + if (tmp1 <= zero) // V2 + t1 = one; + else if (b1 >= zero) // V0 + t1 = zero; + else // E20 + t1 = -b1 / tri.data[2]; + } + } + else if (t1 < zero) // region 6 + { + tmp0 = tri.data[1] + b1; + tmp1 = tri.data[0] + b0; + if (tmp1 > tmp0) + { + numer = tmp1 - tmp0; + denom = tri.data[0] - 2 * tri.data[1] + tri.data[2]; + if (numer >= denom) // V2 + { + t1 = one; + t0 = zero; + } + else // E12 + { + t1 = numer / denom; + t0 = one - t1; + } + } + else + { + t1 = zero; + if (tmp1 <= zero) // V1 + t0 = one; + else if (b0 >= zero) // V0 + t0 = zero; + else // E01 + t0 = -b0 / tri.data[0]; + } + } + else // region 1 + { + numer = tri.data[2] + b1 - tri.data[1] - b0; + if (numer <= zero) // V2 + { + t0 = zero; + t1 = one; + } + else + { + denom = tri.data[0] - 2 * tri.data[1] + tri.data[2]; + if (numer >= denom) // V1 + { + t0 = one; + t1 = zero; + } + else // 12 + { + t0 = numer / denom; + t1 = one - t0; + } + } + } + } + + bary = float4(1 - (t0 + t1), t0, t1,0); + return tri.vertex + t0 * tri.edge0 + t1 * tri.edge1; +} + +float3 unitOrthogonal(float3 input) +{ + // Find a vector to cross() the input with. + if (!(input.x < input.z * EPSILON) + || !(input.y < input.z * EPSILON)) + { + float invnm = 1 / length(input.xy); + return float3(-input.y * invnm, input.x * invnm, 0); + } + else + { + float invnm = 1 / length(input.yz); + return float3(0, -input.z * invnm, input.y * invnm); + } +} + +// D is symmetric, S is an eigen value +float3 EigenVector(float3x3 D, float S) +{ + // Compute a cofactor matrix of D - sI. + float3 c0 = D._m00_m10_m20; c0[0] -= S; + float3 c1 = D._m01_m11_m21; c1[1] -= S; + float3 c2 = D._m02_m12_m22; c2[2] -= S; + + // Upper triangular matrix + float3 c0p = float3(c1[1] * c2[2] - c2[1] * c2[1], 0, 0); + float3 c1p = float3(c2[1] * c2[0] - c1[0] * c2[2], c0[0] * c2[2] - c2[0] * c2[0], 0); + float3 c2p = float3(c1[0] * c2[1] - c1[1] * c2[0], c1[0] * c2[0] - c0[0] * c2[1], c0[0] * c1[1] - c1[0] * c1[0]); + + // Get a column vector with a largest norm (non-zero). + float C01s = c1p[0] * c1p[0]; + float C02s = c2p[0] * c2p[0]; + float C12s = c2p[1] * c2p[1]; + float3 norm = float3(c0p[0] * c0p[0] + C01s + C02s, + C01s + c1p[1] * c1p[1] + C12s, + C02s + C12s + c2p[2] * c2p[2]); + + // index of largest: + int index = 0; + if (norm[0] > norm[1] && norm[0] > norm[2]) + index = 0; + else if (norm[1] > norm[0] && norm[1] > norm[2]) + index = 1; + else + index = 2; + + float3 V = float3(0,0,0); + + // special case + if (norm[index] < EPSILON) + { + V[0] = 1; return V; + } + else if (index == 0) + { + V[0] = c0p[0]; V[1] = c1p[0]; V[2] = c2p[0]; + return normalize(V); + } + else if (index == 1) + { + V[0] = c1p[0]; V[1] = c1p[1]; V[2] = c2p[1]; + return normalize(V); + } + else + { + V = c2p; + return normalize(V); + } +} + +static float3 EigenValues(float3x3 D) +{ + float one_third = 1 / 3.0f; + float one_sixth = 1 / 6.0f; + float three_sqrt = sqrt(3.0f); + + float3 c0 = D._m00_m10_m20; + float3 c1 = D._m01_m11_m21; + float3 c2 = D._m02_m12_m22; + + float m = one_third * (c0[0] + c1[1] + c2[2]); + + // K is D - I*diag(S) + float K00 = c0[0] - m; + float K11 = c1[1] - m; + float K22 = c2[2] - m; + + float K01s = c1[0] * c1[0]; + float K02s = c2[0] * c2[0]; + float K12s = c2[1] * c2[1]; + + float q = 0.5f * (K00 * (K11 * K22 - K12s) - K22 * K01s - K11 * K02s) + c1[0] * c2[1] * c0[2]; + float p = one_sixth * (K00 * K00 + K11 * K11 + K22 * K22 + 2 * (K01s + K02s + K12s)); + + float p_sqrt = sqrt(p); + + float tmp = p * p * p - q * q; + float phi = one_third * atan2(sqrt(max(0, tmp)), q); + float phi_c = cos(phi); + float phi_s = sin(phi); + float sqrt_p_c_phi = p_sqrt * phi_c; + float sqrt_p_3_s_phi = p_sqrt * three_sqrt * phi_s; + + float e0 = m + 2 * sqrt_p_c_phi; + float e1 = m - sqrt_p_c_phi - sqrt_p_3_s_phi; + float e2 = m - sqrt_p_c_phi + sqrt_p_3_s_phi; + + float aux; + if (e0 > e1) + { + aux = e0; + e0 = e1; + e1 = aux; + } + if (e0 > e2) + { + aux = e0; + e0 = e2; + e2 = aux; + } + if (e1 > e2) + { + aux = e1; + e1 = e2; + e2 = aux; + } + + return float3(e2, e1, e0); +} + +void EigenSolve(float3x3 D, out float3 S, out float3x3 V) +{ + // D is symmetric + // S is a vector whose elements are eigenvalues + // V is a matrix whose columns are eigenvectors + S = EigenValues(D); + float3 V0, V1, V2; + + if (S[0] - S[1] > S[1] - S[2]) + { + V0 = EigenVector(D, S[0]); + if (S[1] - S[2] < EPSILON) + { + V2 = unitOrthogonal(V0); + } + else + { + V2 = EigenVector(D, S[2]); V2 -= V0 * dot(V0, V2); V2 = normalize(V2); + } + V1 = cross(V2, V0); + } + else + { + V2 = EigenVector(D, S[2]); + if (S[0] - S[1] < EPSILON) + { + V1 = unitOrthogonal(V2); + } + else + { + V1 = EigenVector(D, S[1]); V1 -= V2 * dot(V2, V1); V1 = normalize(V1); + } + V0 = cross(V1, V2); + } + + V._m00_m10_m20 = V0; + V._m01_m11_m21 = V1; + V._m02_m12_m22 = V2; +} + +float4 UnpackFloatRGBA(float v) +{ + uint rgba = asuint(v); + float r = ((rgba & 0xff000000) >> 24) / 255.0; + float g = ((rgba & 0x00ff0000) >> 16) / 255.0; + float b = ((rgba & 0x0000ff00) >> 8) / 255.0; + float a = (rgba & 0x000000ff) / 255.0; + return float4(r, g, b, a); +} + +float PackFloatRGBA(float4 enc) +{ + uint rgba = ((uint)(enc.x * 255.0) << 24) + + ((uint)(enc.y * 255.0) << 16) + + ((uint)(enc.z * 255.0) << 8) + + (uint)(enc.w * 255.0); + return asfloat(rgba); +} + +float2 UnpackFloatRG(float v) +{ + uint rgba = asuint(v); + float r = ((rgba & 0xffff0000) >> 16) / 65535.0; + float g = (rgba & 0x0000ffff) / 65535.0; + return float2(r, g); +} + +float PackFloatRG(float2 enc) +{ + uint rgba = ((uint)(enc.x * 65535.0) << 16) + + (uint)(enc.y * 65535.0); + return asfloat(rgba); +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/MathUtils.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/MathUtils.cginc.meta new file mode 100644 index 000000000..43b30e62e --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/MathUtils.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 729e4f240dd344abfa1b0972b2ceb0ea +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Matrix.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Matrix.cginc new file mode 100644 index 000000000..5a1bf98e0 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Matrix.cginc @@ -0,0 +1,108 @@ +#ifndef MATRIX_INCLUDE +#define MATRIX_INCLUDE + +#define FLOAT4X4_IDENTITY float4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) +#define FLOAT3X3_IDENTITY float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) +#define FLOAT4X4_ZERO float4x4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +#define FLOAT3X3_ZERO float3x3(0, 0, 0, 0, 0, 0, 0, 0, 0) + +#include "Quaternion.cginc" + +float4x4 Inverse(float4x4 m) +{ + float n11 = m[0][0], n12 = m[1][0], n13 = m[2][0], n14 = m[3][0]; + float n21 = m[0][1], n22 = m[1][1], n23 = m[2][1], n24 = m[3][1]; + float n31 = m[0][2], n32 = m[1][2], n33 = m[2][2], n34 = m[3][2]; + float n41 = m[0][3], n42 = m[1][3], n43 = m[2][3], n44 = m[3][3]; + + float t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44; + float t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44; + float t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44; + float t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + + float det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + float idet = 1.0f / det; + + float4x4 ret; + + ret[0][0] = t11 * idet; + ret[0][1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet; + ret[0][2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet; + ret[0][3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet; + + ret[1][0] = t12 * idet; + ret[1][1] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet; + ret[1][2] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet; + ret[1][3] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet; + + ret[2][0] = t13 * idet; + ret[2][1] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet; + ret[2][2] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet; + ret[2][3] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet; + + ret[3][0] = t14 * idet; + ret[3][1] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet; + ret[3][2] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet; + ret[3][3] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet; + + return ret; +} + +float4x4 m_scale(float4x4 m, float3 v) +{ + float x = v.x, y = v.y, z = v.z; + + m[0][0] *= x; m[1][0] *= y; m[2][0] *= z; + m[0][1] *= x; m[1][1] *= y; m[2][1] *= z; + m[0][2] *= x; m[1][2] *= y; m[2][2] *= z; + m[0][3] *= x; m[1][3] *= y; m[2][3] *= z; + + return m; +} + +float4x4 m_translate(float4x4 m, float3 v) +{ + float x = v.x, y = v.y, z = v.z; + m[0][3] = x; + m[1][3] = y; + m[2][3] = z; + return m; +} + +float4x4 TRS(float3 position, float4 quat, float3 scale) +{ + float4x4 m = q_toMatrix(quat); + return float4x4(m[0][0] * scale.x, m[0][1] * scale.y, m[0][2] * scale.z, position.x, + m[1][0] * scale.x, m[1][1] * scale.y, m[1][2] * scale.z, position.y, + m[2][0] * scale.x, m[2][1] * scale.y, m[2][2] * scale.z, position.z, + 0, 0, 0, 1); +} + +float4x4 AsDiagonal(in float4 v) +{ + return float4x4(v.x, 0, 0, 0, + 0, v.y, 0, 0, + 0, 0, v.z, 0, + 0, 0, 0, v.w); +} + +float3x3 multrnsp(in float4 column, in float4 row) +{ + return float3x3(row.xyz * column[0],row.xyz * column[1],row.xyz * column[2]); +} + +float4x4 multrnsp4(in float4 column, float4 row) +{ + row[3] = 0; + return float4x4(row * column[0],row * column[1],row * column[2], float4(0,0,0,0)); +} + +float FrobeniusNorm(in float4x4 m) +{ + return sqrt(dot(m._m00_m10_m20_m30,m._m00_m10_m20_m30) + + dot(m._m01_m11_m21_m31,m._m01_m11_m21_m31) + + dot(m._m02_m12_m22_m32,m._m02_m12_m22_m32) + + dot(m._m03_m13_m23_m33,m._m03_m13_m23_m33)); +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Matrix.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/Matrix.cginc.meta new file mode 100644 index 000000000..d6fefdd94 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Matrix.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 80cddbfae548f433a93a4e6e7a10b089 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/NormalCompression.cginc b/Assets/ThirdParty/Obi/Resources/Compute/NormalCompression.cginc new file mode 100644 index 000000000..4fcc93d03 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/NormalCompression.cginc @@ -0,0 +1,32 @@ +#ifndef NORMALCOMPRESSION_INCLUDE +#define NORMALCOMPRESSION_INCLUDE + +float2 octWrap( float2 v ) +{ + return ( 1.0 - abs( v.yx ) ) * ( v.xy >= 0.0 ? 1.0 : -1.0 ); +} + +// use octahedral encoding to reduce to 2 coords, then pack them as two 16 bit values in a 32 bit float. +float encode( float3 n ) +{ + n /= ( abs( n.x ) + abs( n.y ) + abs( n.z ) ); + n.xy = n.z >= 0.0 ? n.xy : octWrap( n.xy ); + n.xy = n.xy * 0.5 + 0.5; + uint nx = (uint)(n.x * 0xffff); + uint ny = (uint)(n.y * 0xffff); + return asfloat((nx << 16) | (ny & 0xffff)); +} + +// unpack 32 bit float into two 16 bit ones, then use octahedral decoding. +float3 decode( float k ) +{ + uint d = asuint(k); + float2 f = float2((d >> 16) / 65535.0, (d & 0xffff) / 65535.0) * 2.0 - 1.0; + + float3 n = float3( f.x, f.y, 1.0 - abs( f.x ) - abs( f.y ) ); + float t = saturate( -n.z ); + n.xy += n.xy >= 0.0 ? -t : t; + return normalize( n ); +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/NormalCompression.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/NormalCompression.cginc.meta new file mode 100644 index 000000000..d98da8185 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/NormalCompression.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d05e07f20b7784bac93ad5818826c787 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Optimization.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Optimization.cginc new file mode 100644 index 000000000..dbc54cd9d --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Optimization.cginc @@ -0,0 +1,126 @@ +#ifndef OPTIMIZATION_INCLUDE +#define OPTIMIZATION_INCLUDE + +#include "MathUtils.cginc" +#include "SurfacePoint.cginc" + +void GetInterpolatedSimplexData(in int simplexStart, + in int simplexSize, + StructuredBuffer simplices, + StructuredBuffer positions, + StructuredBuffer orientations, + StructuredBuffer radii, + float4 convexBary, + inout float4 convexPoint, + inout float4 convexRadii, + inout float4 convexOrientation) +{ + convexPoint = FLOAT4_ZERO; + convexRadii = FLOAT4_ZERO; + convexOrientation = quaternion(0, 0, 0, 0); + for (int j = 0; j < simplexSize; ++j) + { + int particle = simplices[simplexStart + j]; + convexPoint += positions[particle] * convexBary[j]; + convexRadii += radii[particle] * convexBary[j]; + convexOrientation += orientations[particle] * convexBary[j]; + } + convexPoint.w = 0; +} + +// Frank-Wolfe convex optimization algorithm. Returns closest point to a simplex in a signed distance function. +void FrankWolfe(in IDistanceFunction f, + in int simplexStart, + in int simplexSize, + StructuredBuffer positions, + StructuredBuffer orientations, + StructuredBuffer radii, + StructuredBuffer simplices, + inout float4 convexPoint, + inout float4 convexThickness, + inout quaternion convexOrientation, + inout float4 convexBary, + inout SurfacePoint pointInFunction, + int maxIterations, + float tolerance) +{ + for (int i = 0; i < maxIterations; ++i) + { + // sample target function: + f.Evaluate(convexPoint, convexThickness, convexOrientation, pointInFunction); + + // find descent direction: + int descent = 0; + float gap = FLT_MIN; + for (int j = 0; j < simplexSize; ++j) + { + int particle = simplices[simplexStart + j]; + float4 candidate = positions[particle] - convexPoint; + candidate.w = 0; + + // here, we adjust the candidate by projecting it to the engrosed simplex's surface: + candidate -= pointInFunction.normal * (radii[particle].x - convexThickness.x); + + float corr = dot(-pointInFunction.normal, candidate); + if (corr > gap) + { + descent = j; + gap = corr; + } + } + + // if the duality gap is below tolerance threshold, stop iterating. + if (gap < tolerance) + break; + + // update the barycentric coords using 2/(i+2) as the step factor + float stp = 0.3f * 2.0f / (i + 2); + convexBary *= 1 - stp; + switch(descent) + { + case 0: convexBary[0] += stp;break; + case 1: convexBary[1] += stp;break; + case 2: convexBary[2] += stp;break; + case 3: convexBary[3] += stp;break; + } + + // get cartesian coordinates of current solution: + GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, convexBary, convexPoint, convexThickness, convexOrientation); + } +} + +SurfacePoint Optimize(in IDistanceFunction f, + StructuredBuffer positions, + StructuredBuffer orientations, + StructuredBuffer radii, + StructuredBuffer simplices, + in int simplexStart, + in int simplexSize, + inout float4 convexBary, + out float4 convexPoint, + in int maxIterations = 16, + in float tolerance = 0.004f) +{ + SurfacePoint pointInFunction; + + // get cartesian coordinates of the initial guess: + float4 convexThickness; + quaternion convexOrientation; + GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, convexBary, convexPoint, convexThickness, convexOrientation); + + // for a 0-simplex (point), perform a single evaluation: + if (simplexSize == 1 || maxIterations < 1) + f.Evaluate(convexPoint, convexThickness, convexOrientation, pointInFunction); + + // for a 1-simplex (edge), perform golden ratio search: + //else if (simplexSize == 2) + // GoldenSearch(ref function, simplexStart, simplexSize, positions, orientations, radii, simplices, ref convexPoint, ref convexThickness, ref convexOrientation, ref convexBary, ref pointInFunction, maxIterations, tolerance * 10); + + // for higher-order simplices, use general Frank-Wolfe convex optimization: + else + FrankWolfe(f, simplexStart, simplexSize, positions, orientations, radii, simplices, convexPoint, convexThickness, convexOrientation, convexBary, pointInFunction, maxIterations, tolerance); + + return pointInFunction; +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Optimization.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/Optimization.cginc.meta new file mode 100644 index 000000000..fe513de18 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Optimization.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e10fb000e4ce24365adc488a45bbe664 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ParticleCollisionConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/ParticleCollisionConstraints.compute new file mode 100644 index 000000000..64a99c0c2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ParticleCollisionConstraints.compute @@ -0,0 +1,214 @@ +#pragma kernel Initialize +#pragma kernel Project +#pragma kernel Apply + +#include "SolverParameters.cginc" +#include "ContactHandling.cginc" +#include "ColliderDefinitions.cginc" +#include "CollisionMaterial.cginc" +#include "Simplex.cginc" +#include "AtomicDeltas.cginc" + + +StructuredBuffer particleIndices; + +StructuredBuffer simplices; +StructuredBuffer invMasses; +StructuredBuffer invRotationalMasses; +StructuredBuffer principalRadii; +StructuredBuffer velocities; +StructuredBuffer prevPositions; +StructuredBuffer fluidInterface; +StructuredBuffer prevOrientations; +StructuredBuffer orientations; + +RWStructuredBuffer positions; +RWStructuredBuffer deltas; +RWStructuredBuffer userData; + +// Vulkan workaround: don't declare a RW array after a counter/append one (particleContacts) since the counter overlaps the first entry in the next array. +RWStructuredBuffer effectiveMasses; +RWStructuredBuffer particleContacts; +StructuredBuffer dispatchBuffer; + +// Variables set from the CPU +uint particleCount; +float substepTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Initialize (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= dispatchBuffer[3]) return; + + int simplexSizeA; + int simplexSizeB; + int simplexStartA = GetSimplexStartAndSize(particleContacts[i].bodyA, simplexSizeA); + int simplexStartB = GetSimplexStartAndSize(particleContacts[i].bodyB, simplexSizeB); + + float4 simplexVelocityA = float4(0,0,0,0); + float4 simplexPrevPositionA = float4(0,0,0,0); + quaternion simplexPrevOrientationA = quaternion(0, 0, 0, 0); + float simplexRadiusA = 0; + float simplexInvMassA = 0; + float simplexInvRotationalMassA = 0; + + float4 simplexVelocityB = float4(0,0,0,0); + float4 simplexPrevPositionB = float4(0,0,0,0); + quaternion simplexPrevOrientationB = quaternion(0, 0, 0, 0); + float simplexRadiusB = 0; + float simplexInvMassB = 0; + float simplexInvRotationalMassB = 0; + + int j = 0; + for (j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + simplexVelocityA += velocities[particleIndex] * particleContacts[i].pointA[j]; + simplexPrevPositionA += prevPositions[particleIndex] * particleContacts[i].pointA[j]; + simplexPrevOrientationA += prevOrientations[particleIndex] * particleContacts[i].pointA[j]; + simplexInvMassA += invMasses[particleIndex] * particleContacts[i].pointA[j]; + simplexInvRotationalMassA += invRotationalMasses[particleIndex] * particleContacts[i].pointA[j]; + simplexRadiusA += EllipsoidRadius(particleContacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointA[j]; + } + + for (j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + simplexVelocityB += velocities[particleIndex] * particleContacts[i].pointB[j]; + simplexPrevPositionB += prevPositions[particleIndex] * particleContacts[i].pointB[j]; + simplexPrevOrientationB += prevOrientations[particleIndex] * particleContacts[i].pointB[j]; + simplexInvMassB += invMasses[particleIndex] * particleContacts[i].pointB[j]; + simplexInvRotationalMassB += invRotationalMasses[particleIndex] * particleContacts[i].pointB[j]; + simplexRadiusB += EllipsoidRadius(particleContacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointB[j]; + } + + simplexPrevPositionA.w = 0; + simplexPrevPositionB.w = 0; + + // update contact distance + float4 contactPointA = simplexPrevPositionA - particleContacts[i].normal * simplexRadiusA; + float4 contactPointB = simplexPrevPositionB + particleContacts[i].normal * simplexRadiusB; + + particleContacts[i].dist = dot(contactPointA - contactPointB, particleContacts[i].normal); + + // update contact basis: + CalculateBasis(simplexVelocityA - simplexVelocityB, particleContacts[i].normal,particleContacts[i].tangent); + + // update contact masses: + int aMaterialIndex = collisionMaterialIndices[simplices[simplexStartA]]; + int bMaterialIndex = collisionMaterialIndices[simplices[simplexStartB]]; + bool rollingContacts = (aMaterialIndex >= 0 ? collisionMaterials[aMaterialIndex].rollingContacts > 0 : false) | + (bMaterialIndex >= 0 ? collisionMaterials[bMaterialIndex].rollingContacts > 0 : false); + + float4 invInertiaTensorA = 1.0/(GetParticleInertiaTensor(simplexRadiusA, simplexInvRotationalMassA) + FLOAT4_EPSILON); + float4 invInertiaTensorB = 1.0/(GetParticleInertiaTensor(simplexRadiusB, simplexInvRotationalMassB) + FLOAT4_EPSILON); + + float4 bitangent = GetBitangent(particleContacts[i]); + CalculateContactMassesA(simplexInvMassA, invInertiaTensorA, simplexPrevPositionA, simplexPrevOrientationA, contactPointA, rollingContacts, particleContacts[i].normal,particleContacts[i].tangent,bitangent, effectiveMasses[i].normalInvMassA, effectiveMasses[i].tangentInvMassA, effectiveMasses[i].bitangentInvMassA); + CalculateContactMassesB(simplexInvMassB, invInertiaTensorB, simplexPrevPositionB, simplexPrevOrientationB, contactPointB, rollingContacts, particleContacts[i].normal,particleContacts[i].tangent,bitangent, effectiveMasses[i].normalInvMassB, effectiveMasses[i].tangentInvMassB, effectiveMasses[i].bitangentInvMassB); +} + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= dispatchBuffer[3]) return; + + int simplexSizeA; + int simplexSizeB; + int simplexStartA = GetSimplexStartAndSize(particleContacts[i].bodyA, simplexSizeA); + int simplexStartB = GetSimplexStartAndSize(particleContacts[i].bodyB, simplexSizeB); + + // Combine collision materials (use material from first particle in simplex) + collisionMaterial material = CombineCollisionMaterials(collisionMaterialIndices[simplices[simplexStartA]], collisionMaterialIndices[simplices[simplexStartB]]); + + float4 simplexPositionA = FLOAT4_ZERO, simplexPositionB = FLOAT4_ZERO; + float simplexRadiusA = 0, simplexRadiusB = 0; + float4 simplexUserDataA = FLOAT4_ZERO, simplexUserDataB = FLOAT4_ZERO; + float miscibility = 0; + + int j = 0; + for (j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + simplexPositionA += positions[particleIndex] * particleContacts[i].pointA[j]; + simplexRadiusA += EllipsoidRadius(particleContacts[i].normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointA[j]; + simplexUserDataA += userData[particleIndex] * particleContacts[i].pointA[j]; + miscibility += fluidInterface[particleIndex].w * particleContacts[i].pointA[j]; + } + for (j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + simplexPositionB += positions[particleIndex] * particleContacts[i].pointB[j]; + simplexRadiusB += EllipsoidRadius(particleContacts[i].normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointA[j]; + simplexUserDataB += userData[particleIndex] * particleContacts[i].pointB[j]; + miscibility += fluidInterface[particleIndex].w * particleContacts[i].pointB[j]; + } + + simplexPositionA.w = 0; + simplexPositionB.w = 0; + + float4 posA = simplexPositionA - particleContacts[i].normal * simplexRadiusA; + float4 posB = simplexPositionB + particleContacts[i].normal * simplexRadiusB; + + float normalInvMass = effectiveMasses[i].normalInvMassA + effectiveMasses[i].normalInvMassB; + + // adhesion: + float lambda = SolveAdhesion(particleContacts[i], normalInvMass, posA, posB, material.stickDistance, material.stickiness, substepTime); + + lambda += SolvePenetration(particleContacts[i], normalInvMass, posA, posB, maxDepenetration * substepTime); + + if (abs(lambda) > EPSILON) + { + float shock = shockPropagation * dot(particleContacts[i].normal.xyz, normalizesafe(gravity)); + float4 delta = lambda * particleContacts[i].normal; + + float baryScale = BaryScale(particleContacts[i].pointA); + for (j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + float4 delta1 = delta * invMasses[particleIndex] * particleContacts[i].pointA[j] * baryScale * (1 - shock); + AtomicAddPositionDelta(particleIndex, delta1); + } + + baryScale = BaryScale(particleContacts[i].pointB); + for (j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + float4 delta2 = -delta * invMasses[particleIndex] * particleContacts[i].pointB[j] * baryScale * (1 + shock); + AtomicAddPositionDelta(particleIndex, delta2); + } + } + + // property diffusion: + if (particleContacts[i].dist < collisionMargin) + { + float diffusionSpeed = miscibility * 0.5 * substepTime; + float4 userDelta = (simplexUserDataB - simplexUserDataA) * diffusionMask * diffusionSpeed; + + for (j = 0; j < simplexSizeA; ++j) + AtomicAddOrientationDelta(simplices[simplexStartA + j], userDelta * particleContacts[i].pointA[j]); + + for (j = 0; j < simplexSizeB; ++j) + AtomicAddOrientationDelta(simplices[simplexStartB + j], -userDelta * particleContacts[i].pointB[j]); + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int threadIndex = id.x; + + if (threadIndex >= particleCount) return; + + int p = particleIndices[threadIndex]; + + ApplyPositionDelta(positions, p, sorFactor); + ApplyUserDataDelta(userData, p); +} + + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta new file mode 100644 index 000000000..e53cfc746 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 770004596b21f49118a60c5ad181940c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ParticleFrictionConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/ParticleFrictionConstraints.compute new file mode 100644 index 000000000..13c92607f --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ParticleFrictionConstraints.compute @@ -0,0 +1,187 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "ContactHandling.cginc" +#include "Integration.cginc" +#include "CollisionMaterial.cginc" +#include "Simplex.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer simplices; +StructuredBuffer prevPositions; +StructuredBuffer prevOrientations; +StructuredBuffer invMasses; +StructuredBuffer invRotationalMasses; +StructuredBuffer principalRadii; + +RWStructuredBuffer positions; +RWStructuredBuffer orientations; +RWStructuredBuffer deltas; + +RWStructuredBuffer particleContacts; +RWStructuredBuffer effectiveMasses; +StructuredBuffer dispatchBuffer; + +// Variables set from the CPU +uint particleCount; +float substepTime; +float stepTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= dispatchBuffer[3]) return; + + int simplexSizeA; + int simplexSizeB; + int simplexStartA = GetSimplexStartAndSize(particleContacts[i].bodyA, simplexSizeA); + int simplexStartB = GetSimplexStartAndSize(particleContacts[i].bodyB, simplexSizeB); + + // Combine collision materials (use material from first particle in simplex) + collisionMaterial material = CombineCollisionMaterials(collisionMaterialIndices[simplices[simplexStartA]], + collisionMaterialIndices[simplices[simplexStartB]]); + + float4 prevPositionA = float4(0,0,0,0); + float4 linearVelocityA = float4(0,0,0,0); + float4 angularVelocityA = float4(0,0,0,0); + float invRotationalMassA = 0; + quaternion orientationA = quaternion(0, 0, 0, 0); + float simplexRadiusA = 0; + + float4 prevPositionB = float4(0,0,0,0); + float4 linearVelocityB = float4(0,0,0,0); + float4 angularVelocityB = float4(0,0,0,0); + float invRotationalMassB = 0; + quaternion orientationB = quaternion(0, 0, 0, 0); + float simplexRadiusB = 0; + + int j = 0; + for (j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + prevPositionA += prevPositions[particleIndex] * particleContacts[i].pointA[j]; + linearVelocityA += DifferentiateLinear(positions[particleIndex], prevPositions[particleIndex], substepTime) * particleContacts[i].pointA[j]; + angularVelocityA += DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * particleContacts[i].pointA[j]; + invRotationalMassA += invRotationalMasses[particleIndex] * particleContacts[i].pointA[j]; + orientationA += orientations[particleIndex] * particleContacts[i].pointA[j]; + simplexRadiusA += EllipsoidRadius(particleContacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointA[j]; + } + + for (j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + prevPositionB += prevPositions[particleIndex] * particleContacts[i].pointB[j]; + linearVelocityB += DifferentiateLinear(positions[particleIndex], prevPositions[particleIndex], substepTime) * particleContacts[i].pointB[j]; + angularVelocityB += DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * particleContacts[i].pointB[j]; + invRotationalMassB += invRotationalMasses[particleIndex] * particleContacts[i].pointB[j]; + orientationB += orientations[particleIndex] * particleContacts[i].pointB[j]; + simplexRadiusB += EllipsoidRadius(particleContacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointB[j]; + } + + float4 rA = FLOAT4_ZERO; + float4 rB = FLOAT4_ZERO; + + // Consider angular velocities if rolling contacts are enabled: + if (material.rollingContacts > 0) + { + rA = -particleContacts[i].normal * simplexRadiusA; + rB = particleContacts[i].normal * simplexRadiusB; + + linearVelocityA += float4(cross(angularVelocityA.xyz, rA.xyz), 0); + linearVelocityB += float4(cross(angularVelocityB.xyz, rB.xyz), 0); + } + + // Calculate relative velocity: + float4 relativeVelocity = linearVelocityA - linearVelocityB; + + // Determine impulse magnitude: + float tangentMass = effectiveMasses[i].tangentInvMassA + effectiveMasses[i].tangentInvMassB; + float bitangentMass = effectiveMasses[i].bitangentInvMassA + effectiveMasses[i].bitangentInvMassB; + float2 impulses = SolveFriction(particleContacts[i],tangentMass,bitangentMass,relativeVelocity, material.staticFriction, material.dynamicFriction, stepTime); + + if (abs(impulses.x) > EPSILON || abs(impulses.y) > EPSILON) + { + float4 tangentImpulse = impulses.x * particleContacts[i].tangent; + float4 bitangentImpulse = impulses.y * GetBitangent(particleContacts[i]); + float4 totalImpulse = tangentImpulse + bitangentImpulse; + + float baryScale = BaryScale(particleContacts[i].pointA); + for (j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + float4 delta1 = (tangentImpulse * effectiveMasses[i].tangentInvMassA + bitangentImpulse * effectiveMasses[i].bitangentInvMassA) * substepTime * particleContacts[i].pointA[j] * baryScale; + AtomicAddPositionDelta(particleIndex, delta1); + } + + baryScale = BaryScale(particleContacts[i].pointB); + for (j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + float4 delta2 = -(tangentImpulse * effectiveMasses[i].tangentInvMassB + bitangentImpulse * effectiveMasses[i].bitangentInvMassB) * substepTime * particleContacts[i].pointB[j] * baryScale; + AtomicAddPositionDelta(particleIndex, delta2); + } + + // Rolling contacts: + if (material.rollingContacts > 0) + { + float4 invInertiaTensorA = 1.0/(GetParticleInertiaTensor(simplexRadiusA, invRotationalMassA) + FLOAT4_EPSILON); + float4 invInertiaTensorB = 1.0/(GetParticleInertiaTensor(simplexRadiusB, invRotationalMassB) + FLOAT4_EPSILON); + + // Calculate angular velocity deltas due to friction impulse: + float4x4 solverInertiaA = TransformInertiaTensor(invInertiaTensorA, orientationA); + float4x4 solverInertiaB = TransformInertiaTensor(invInertiaTensorB, orientationB); + + float4 angVelDeltaA = mul(solverInertiaA, float4(cross(rA.xyz, totalImpulse.xyz), 0)); + float4 angVelDeltaB = -mul(solverInertiaB, float4(cross(rB.xyz, totalImpulse.xyz), 0)); + + // Final angular velocities, after adding the deltas: + angularVelocityA += angVelDeltaA; + angularVelocityB += angVelDeltaB; + + // Calculate weights (inverse masses): + float invMassA = length(mul(solverInertiaA, normalizesafe(angularVelocityA))); + float invMassB = length(mul(solverInertiaB, normalizesafe(angularVelocityB))); + + // Calculate rolling axis and angular velocity deltas: + float4 rollAxis = FLOAT4_ZERO; + float rollingImpulse = SolveRollingFriction(particleContacts[i],angularVelocityA, angularVelocityB, material.rollingFriction, invMassA, invMassB, rollAxis); + angVelDeltaA += rollAxis * rollingImpulse * invMassA; + angVelDeltaB -= rollAxis * rollingImpulse * invMassB; + + // Apply orientation deltas to particles: + quaternion orientationDeltaA = AngularVelocityToSpinQuaternion(orientationA, angVelDeltaA, substepTime); + quaternion orientationDeltaB = AngularVelocityToSpinQuaternion(orientationB, angVelDeltaB, substepTime); + + for (j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + AtomicAddOrientationDelta(particleIndex, orientationDeltaA); + } + + for (j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + AtomicAddOrientationDelta(particleIndex, orientationDeltaB); + } + } + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int threadIndex = id.x; + + if (threadIndex >= particleCount) return; + + int p = particleIndices[threadIndex]; + + ApplyPositionDelta(positions, p, sorFactor); + ApplyOrientationDelta(orientations, p, sorFactor); +} + + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta new file mode 100644 index 000000000..48a2a4d33 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd14011b19e9c47d1964f351a7ed4df7 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ParticleGrid.compute b/Assets/ThirdParty/Obi/Resources/Compute/ParticleGrid.compute new file mode 100644 index 000000000..a2cc43eb2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ParticleGrid.compute @@ -0,0 +1,626 @@ +#include "GridUtils.cginc" +#include "CollisionMaterial.cginc" +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "SolverParameters.cginc" +#include "Simplex.cginc" +#include "Phases.cginc" +#include "Bounds.cginc" +#include "Simplex.cginc" + +#pragma kernel Clear +#pragma kernel InsertSimplices +#pragma kernel FindPopulatedLevels +#pragma kernel SortSimplices +#pragma kernel BuildFluidDispatch +#pragma kernel SortFluidSimplices +#pragma kernel BuildMortonIndices +#pragma kernel MortonSort +#pragma kernel FindFluidNeighborsInSameLevel +#pragma kernel FindFluidNeighborsInUpperLevels +#pragma kernel BuildContactList +#pragma kernel BuildFluidParticleIndexBuffer + +StructuredBuffer solverBounds; +StructuredBuffer simplexBounds; +StructuredBuffer simplices; // particle indices in each simplex. + +StructuredBuffer positions; +StructuredBuffer restPositions; +StructuredBuffer principalRadii; +StructuredBuffer fluidMaterials; +StructuredBuffer fluidInterface; +StructuredBuffer normals; + +StructuredBuffer orientations; +StructuredBuffer restOrientations; + +StructuredBuffer velocities; +StructuredBuffer invMasses; +StructuredBuffer phases; +StructuredBuffer filters; + +StructuredBuffer R_cellCoords; // for each item, its cell coordinates. +StructuredBuffer R_offsetInCell; // for each item, its offset within the cell. +StructuredBuffer R_cellOffsets; // start of each cell in the sorted item array. +StructuredBuffer R_cellCounts; // number of item in each cell. +StructuredBuffer R_levelPopulation; + +RWStructuredBuffer cellCoords; // for each item, its cell coordinates. +RWStructuredBuffer offsetInCell; // for each item, its offset within the cell. +RWStructuredBuffer cellOffsets; // start of each cell in the sorted item array. +RWStructuredBuffer cellCounts; // number of item in each cell. + +RWStructuredBuffer cellHashToMortonIndex; + +RWStructuredBuffer mortonSortedCellHashes; +RWStructuredBuffer sortedSimplexToFluid; // fluidSimplices +RWStructuredBuffer sortedFluidIndices; +RWStructuredBuffer sortedSimplexIndices; + +RWStructuredBuffer sortedPositions; +RWStructuredBuffer sortedFluidMaterials; +RWStructuredBuffer sortedFluidInterface; +RWStructuredBuffer sortedPrincipalRadii; + +RWStructuredBuffer neighbors; +RWStructuredBuffer neighborCounts; + +RWStructuredBuffer particleContacts; +RWStructuredBuffer contactPairs; + +RWStructuredBuffer fluidDispatchBuffer; +RWStructuredBuffer dispatchBuffer; + +RWStructuredBuffer colors; + +uint maxContacts; +uint maxNeighbors; +uint fluidParticleCount; +float deltaTime; + +const uint groupWidth; +const uint groupHeight; +const uint stepIndex; + +/** +For each cell, calculate coords and morton. This only works if there’s no collisions, so use the coord of one random particle that maps to that cell: + +For each simplex: +Determine cell coords (any particle in it will do) and hash, store in array per cell. Sort array by morton(coords), create array that maps from cell hash to morton index, then use as cellCounts[mortonIndex]. + +This way we have sorted particles and cells, and can use for fluid surface. Win win!! +*/ + +[numthreads(128, 1, 1)] +void Clear (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= maxCells) + return; + + if (i == 0) + { + for (int l = 0; l <= GRID_LEVELS; ++l) + levelPopulation[l] = 0; + } + + // clear all cell counts to zero, and cell offsets to invalid. + cellOffsets[i] = INVALID; + cellCounts[i] = 0; + mortonSortedCellHashes[i] = i; +} + +[numthreads(128, 1, 1)] +void InsertSimplices (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= pointCount + edgeCount + triangleCount) return; + + // calculate simplex cell index: + int level = GridLevelForSize(simplexBounds[i].MaxAxisLength()); + float cellSize = CellSizeOfLevel(level); + int4 cellCoord = int4(floor((simplexBounds[i].Center() - solverBounds[0].min_)/ cellSize).xyz,level); + + // if the solver is 2D, project to the z = 0 cell. + if (mode == 1) cellCoord[2] = 0; + + // insert simplex in cell: + uint cellIndex = GridHash(cellCoord); + cellCoords[i] = cellCoord; + InterlockedAdd(cellCounts[cellIndex],1,offsetInCell[i]); + + // assign minimum morton code to cell + // (there may be hash collisions mapping two coordinates to the same cell, that's why we use atomic minimum) + float mortonCellSize = solverBounds[0].MaxAxisLength() / 1024.0; + uint morton = EncodeMorton3(floor((simplexBounds[i].Center() - solverBounds[0].min_).xyz / mortonCellSize)); + InterlockedMin(cellOffsets[cellIndex], morton); + + // clear neighbor count: + neighborCounts[i] = 0; + + // atomically increase this level's population by one: + InterlockedAdd(levelPopulation[1 + level],1); +} + +[numthreads(128,1,1)] +void MortonSort(uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + uint hIndex = i & (groupWidth - 1); + uint indexLeft = hIndex + (groupHeight + 1) * (i / groupWidth); + uint rightStepSize = stepIndex == 0 ? groupHeight - 2 * hIndex : (groupHeight + 1) / 2; + uint indexRight = indexLeft + rightStepSize; + + // Exit if out of bounds + if (indexRight >= maxCells) return; + + // get morton index for both cells: + uint mortonL = cellOffsets[indexLeft]; + uint mortonR = cellOffsets[indexRight]; + + // get cell counts: + uint simplexIndexL = cellCounts[indexLeft]; + uint simplexIndexR = cellCounts[indexRight]; + + uint orderL = mortonSortedCellHashes[indexLeft]; + uint orderR = mortonSortedCellHashes[indexRight]; + + // Swap entries if order is incorrect + if (mortonL > mortonR) + { + cellCounts[indexLeft] = simplexIndexR; + cellCounts[indexRight] = simplexIndexL; + + cellOffsets[indexLeft] = mortonR; + cellOffsets[indexRight] = mortonL; + + mortonSortedCellHashes[indexLeft] = orderR; + mortonSortedCellHashes[indexRight] = orderL; + } +} + +[numthreads(128,1,1)] +void BuildMortonIndices(uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= maxCells) return; + + // build map from cell hash to index in morton-sorted cell data. + int index = mortonSortedCellHashes[i]; + cellHashToMortonIndex[index] = i; +} + +[numthreads(128, 1, 1)] +void SortSimplices (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= pointCount + edgeCount + triangleCount) return; + + // write simplex index to its index in the grid: + uint cellIndex = cellHashToMortonIndex[GridHash(R_cellCoords[i])]; + uint gridIndex = R_cellOffsets[cellIndex] + R_offsetInCell[i]; + sortedSimplexIndices[gridIndex] = i; // maps from index in grid to simplex index. + + // flag fluid simplices with 1. we'll later do a prefix sum of this array + // to get a compact list of grid-sorted fluid indices. + int size; + int p = simplices[GetSimplexStartAndSize(i, size)]; + sortedFluidIndices[gridIndex] = ((phases[p] & Fluid) != 0) ? 1:0; +} + +[numthreads(1, 1, 1)] +void BuildFluidDispatch (uint3 id : SV_DispatchThreadID) +{ + // since we are using *exclusive* prefix sum, + // we must add the last entries of both buffers together to get total count of fluid simplices. + + int lastEntry = pointCount + edgeCount + triangleCount - 1; + fluidDispatchBuffer[3] = sortedSimplexToFluid[lastEntry] + sortedFluidIndices[lastEntry]; + fluidDispatchBuffer[0] = fluidDispatchBuffer[3] / 128 + 1; +} + +[numthreads(128, 1, 1)] +void SortFluidSimplices (uint3 id : SV_DispatchThreadID) //rename to sort fluid data. +{ + // check all simplices. + uint i = id.x; + if (i >= pointCount + edgeCount + triangleCount) return; + + uint cellIndex = cellHashToMortonIndex[GridHash(R_cellCoords[i])]; + uint gridIndex = R_cellOffsets[cellIndex] + R_offsetInCell[i]; + + // copy the data of first particle in each fluid simplex to sorted arrays + // using prefix sum results: same as grid order, but contiguous. + int size; + int p = simplices[GetSimplexStartAndSize(i, size)]; + + if ((phases[p] & Fluid) != 0) + { + int fluidIndex = sortedSimplexToFluid[gridIndex]; + sortedFluidIndices[fluidIndex] = i; + + sortedPositions[fluidIndex] = positions[p]; + sortedFluidMaterials[fluidIndex] = fluidMaterials[p]; + sortedFluidInterface[fluidIndex] = fluidInterface[p]; + sortedPrincipalRadii[fluidIndex] = principalRadii[p]; + } + else + sortedSimplexToFluid[gridIndex] = -1; +} + +int GetSimplexGroup(in int simplexStart,in int simplexSize, out int flags, out int category, out int mask, out bool restPositionsEnabled) +{ + flags = 0; + int group = 0; + category = 0; + mask = 0; + restPositionsEnabled = false; + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + group = max(group, phases[particleIndex] & GroupMask); + flags |= phases[particleIndex] & ~GroupMask; // get flags from phase + category |= filters[particleIndex] & CategoryMask; // get category from filter + mask |= (filters[particleIndex] & MaskMask) >> 16; // get mask from filter + restPositionsEnabled = restPositionsEnabled || (restPositions[particleIndex].w > 0.5f); + } + + return group; +} + +struct simplexData +{ + int index; + int start; + int size; + int category; + int mask; + int flags; + int group; + bool restPosEnabled; +}; + +simplexData GetSimplexData(int indexInGrid) +{ + simplexData s; + s.index = sortedSimplexIndices[indexInGrid]; + s.start = GetSimplexStartAndSize(s.index, s.size); + s.group = GetSimplexGroup(s.start, s.size, s.flags, s.category, s.mask, s.restPosEnabled); + return s; +} + +void InteractionTest(simplexData a, simplexData b) +{ + if ((a.flags & Fluid) == 0 || (b.flags & Fluid) == 0) + { + // immediately reject simplex pairs that share particles: + int j = 0; + for (int i = 0; i < a.size; ++i) + for (j = 0; j < b.size; ++j) + if (simplices[a.start + i] == simplices[b.start + j]) + return; + + // if all particles are in the same group: + if (a.group == b.group) + { + // if none are self-colliding, reject the pair. + if ((a.flags & b.flags & SelfCollide) == 0) + return; + } + // category-based filtering: + else if ((a.mask & b.category) == 0 || (b.mask & a.category) == 0) + return; + + // swap simplices (except for category) so that B is always the one-sided one. + int categoryA = a.category; + int categoryB = b.category; + if ((a.flags & OneSided) != 0 && categoryA < categoryB) + { + simplexData t = a; + a = b; + b = t; + } + + float4 simplexBary = BarycenterForSimplexOfSize(a.size); + float4 simplexPoint; + + Simplex simplexShape; + simplexShape.simplexStart = b.start; + simplexShape.simplexSize = b.size; + simplexShape.simplices = simplices; + simplexShape.positions = restPositions; + float simplexRadiusA = 0; float simplexRadiusB = 0; + + // skip the contact if there's self-intersection at rest: + if (a.group == b.group && (a.restPosEnabled || b.restPosEnabled)) + { + SurfacePoint restPoint = Optimize(simplexShape, restPositions, restOrientations, principalRadii, + simplices, a.start, a.size, simplexBary, simplexPoint, 4, 0); + + for (j = 0; j < a.size; ++j) + simplexRadiusA += principalRadii[simplices[a.start + j]].x * simplexBary[j]; + + for (j = 0; j < b.size; ++j) + simplexRadiusB += principalRadii[simplices[b.start + j]].x * restPoint.bary[j]; + + // compare distance along contact normal with radius. + if (dot(simplexPoint - restPoint.pos, restPoint.normal) < simplexRadiusA + simplexRadiusB) + return; + } + + simplexBary = BarycenterForSimplexOfSize(a.size); + simplexShape.positions = positions; + + SurfacePoint surfacePoint = Optimize(simplexShape, positions, orientations, principalRadii, + simplices, a.start, a.size, simplexBary, simplexPoint); + + simplexRadiusA = 0; simplexRadiusB = 0; + float4 velocityA = FLOAT4_ZERO, velocityB = FLOAT4_ZERO, normalA = FLOAT4_ZERO, normalB = FLOAT4_ZERO; + float invMassA = 0, invMassB = 0; + + for (j = 0; j < a.size; ++j) + { + int particleIndex = simplices[a.start + j]; + simplexRadiusA += principalRadii[particleIndex].x * simplexBary[j]; + velocityA += velocities[particleIndex] * simplexBary[j]; + float4 nrm = asfloat(normals[particleIndex]); + normalA += (nrm.w < 0 ? float4(rotate_vector(orientations[particleIndex],nrm.xyz), nrm.w) : nrm) * simplexBary[j]; + invMassA += invMasses[particleIndex] * simplexBary[j]; + } + + for (j = 0; j < b.size; ++j) + { + int particleIndex = simplices[b.start + j]; + simplexRadiusB += principalRadii[particleIndex].x * surfacePoint.bary[j]; + velocityB += velocities[particleIndex] * surfacePoint.bary[j]; + float4 nrm = asfloat(normals[particleIndex]); + normalB += (nrm.w < 0 ? float4(rotate_vector(orientations[particleIndex],nrm.xyz), nrm.w) : nrm) * surfacePoint.bary[j]; + invMassB += invMasses[particleIndex] * simplexBary[j]; + } + + // no contact between fixed simplices: TODO: make optional + //if (!(invMassA > 0 || invMassB > 0)) + // return; + + float dAB = dot(simplexPoint - surfacePoint.pos, surfacePoint.normal); + float vel = dot(velocityA - velocityB, surfacePoint.normal); + + // check if the projected velocity along the contact normal will get us within collision distance. + if (vel * deltaTime + dAB <= simplexRadiusA + simplexRadiusB + collisionMargin) + { + // adapt collision normal for one-sided simplices: + if ((b.flags & OneSided) != 0 && categoryA < categoryB) + OneSidedNormal(normalB, surfacePoint.normal); + + // during inter-collision, if either particle contains SDF data and they overlap: + if (a.group != b.group && (normalB.w < 0 || normalA.w < 0) && dAB * 1.05f <= simplexRadiusA + simplexRadiusB) + { + // as normal, pick SDF gradient belonging to least penetration distance: + float4 nij = normalB; + if (normalB.w >= 0 || (normalA.w < 0 && normalB.w < normalA.w)) + nij = float4(-normalA.xyz, normalA.w); + + // for boundary particles, use one sided sphere normal: + if (abs(nij.w) <= max(simplexRadiusA, simplexRadiusB) * 1.5f) + OneSidedNormal(nij, surfacePoint.normal); + else + surfacePoint.normal = nij; + } + + uint count = particleContacts.IncrementCounter(); + if (count < maxContacts) + { + contact c = (contact)0; + + c.normal = surfacePoint.normal; + c.pointA = simplexBary; + c.pointB = surfacePoint.bary; + c.bodyA = a.index; + c.bodyB = b.index; + + particleContacts[count] = c; + contactPairs[count] = uint2(c.bodyA,c.bodyB); + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } + } +} + +[numthreads(128, 1, 1)] +void BuildContactList (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= pointCount + edgeCount + triangleCount) return; + + // current cell: + int4 cellCoord = R_cellCoords[i]; + uint cellIndex = cellHashToMortonIndex[GridHash(cellCoord)]; + uint n = R_cellOffsets[cellIndex]; + uint end = n + R_cellCounts[cellIndex]; + uint indexInGrid = n + R_offsetInCell[i]; + + simplexData data1 = GetSimplexData(indexInGrid); + + // in current cell, only consider simplices that appear after this one: + for (++indexInGrid; indexInGrid < end; ++indexInGrid) + InteractionTest(data1,GetSimplexData(indexInGrid)); + + // neighbour cells ahead of the current one in the same level: + for(int j = 0; j < 13; ++j) + { + // get first simplex in neighbor cell: + cellIndex = cellHashToMortonIndex[GridHash(cellCoord + aheadCellNeighborhood[j])]; + n = R_cellOffsets[cellIndex]; + end = n + R_cellCounts[cellIndex]; + + // iterate through all simplices in neighbor cell: + for (; n < end; ++n) + InteractionTest(data1,GetSimplexData(n)); + } + + // higher grid levels: + for (uint m = 1; m <= R_levelPopulation[0]; ++m) + { + uint l = R_levelPopulation[m]; + if (l <= (uint)cellCoord.w) continue; + + int4 parentCellCoords = GetParentCellCoords(cellCoord, l); + + for (int j = 0; j < 27; ++j) + { + // get first simplex in neighbor cell: + cellIndex = cellHashToMortonIndex[GridHash(parentCellCoords + cellNeighborhood[j])]; + n = R_cellOffsets[cellIndex]; + end = n + R_cellCounts[cellIndex]; + + // iterate through all simplices in neighbor cell: + for (; n < end; ++n) + InteractionTest(data1,GetSimplexData(n)); + } + } +} + +[numthreads(128, 1, 1)] +void FindFluidNeighborsInSameLevel (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + // current cell: + int4 cellCoord = R_cellCoords[sortedFluidIndices[i]]; + int4 neighborCoord; + uint cellIndex, n, end; + + float4 d; + float interactionRadius, cellSize; + int fluidB; + + float4 posA = sortedPositions[i]; + float radA = sortedFluidMaterials[i].x; + + uint count = 0; + + // neighbour cells in same level. We don't need atomics for this, + // and we can guarantee that the neighbors for each particle will + // appear in sorted order. + for(int j = 0; j < 27; ++j) + { + // get cell start/end + neighborCoord = cellCoord + cellNeighborhood[j]; + cellIndex = cellHashToMortonIndex[GridHash(neighborCoord)]; + n = R_cellOffsets[cellIndex]; + end = n + R_cellCounts[cellIndex]; + + // iterate through all simplices in neighbor cell: + for (; n < end; ++n) + { + fluidB = sortedSimplexToFluid[n]; + if (fluidB >= 0 && fluidB != (int)i) + { + // due to hash collisions, two neighboring cells might map to the same + // hash bucket, and we'll add the same set of particles twice to the neighbors list. + // So we only consider particles that have the same spatial coordinates as the cell. + if (any (R_cellCoords[sortedFluidIndices[fluidB]] - neighborCoord)) + continue; + + // calculate particle center distance: + d = posA - sortedPositions[fluidB]; d.w = 0; + interactionRadius = max(radA, sortedFluidMaterials[fluidB].x) + collisionMargin; + + if (dot(d,d) <= interactionRadius * interactionRadius && count < maxNeighbors) + neighbors[maxNeighbors * i + (count++)] = fluidB; + } + } + } + + neighborCounts[i] = count; +} + +[numthreads(128, 1, 1)] +void FindFluidNeighborsInUpperLevels (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + int s = sortedFluidIndices[i]; + + int4 cellCoord = R_cellCoords[s]; + int4 parentCellCoords, neighborCoord; + uint cellIndex, n, end; + + float4 d; + float interactionRadius, cellSize; + int fluidB; + + float4 posA = sortedPositions[i]; + float radA = sortedFluidMaterials[i].x; + + for (uint m = 1; m <= R_levelPopulation[0]; ++m) + { + uint l = R_levelPopulation[m]; + + // skip levels below this particle's level. + if (l <= (uint)cellCoord.w) continue; + + parentCellCoords = GetParentCellCoords(cellCoord, l); + + for (int j = 0; j < 27; ++j) + { + // get cell start/end + neighborCoord = parentCellCoords + cellNeighborhood[j]; + cellIndex = cellHashToMortonIndex[GridHash(neighborCoord)]; + n = R_cellOffsets[cellIndex]; + end = n + R_cellCounts[cellIndex]; + + // iterate through all simplices in neighbor cell: + for (; n < end; ++n) + { + fluidB = sortedSimplexToFluid[n]; + if (fluidB >= 0) + { + // due to hash collisions, two neighboring cells might map to the same + // hash bucket, and we'll add the same set of particles twice to the neighbors list. + // So we only consider particles that have the same spatial coordinates as the cell. + if (any (R_cellCoords[sortedFluidIndices[fluidB]] - neighborCoord)) + continue; + + // calculate particle center distance: + d = posA - sortedPositions[fluidB]; d.w = 0; + interactionRadius = max(radA, sortedFluidMaterials[fluidB].x) + collisionMargin; + + if (dot(d,d) <= interactionRadius * interactionRadius) + { + uint entryA, entryB; + InterlockedAdd(neighborCounts[i], 1, entryA); + InterlockedAdd(neighborCounts[fluidB], 1, entryB); + + if (entryA < maxNeighbors && entryB < maxNeighbors) + { + neighbors[maxNeighbors * i + entryA] = fluidB; + neighbors[maxNeighbors * fluidB + entryB] = i; + } + } + } + } + } + } + +} + +[numthreads(128, 1, 1)] +void BuildFluidParticleIndexBuffer (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + // convert simplex index to start in indices array. + int o; + sortedFluidIndices[i] = simplices[GetSimplexStartAndSize(sortedFluidIndices[i], o)]; +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ParticleGrid.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ParticleGrid.compute.meta new file mode 100644 index 000000000..15d29e6b1 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ParticleGrid.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 282fd6222e54d48fea7f2d1a74501fa9 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ParticleMeshBuilding.compute b/Assets/ThirdParty/Obi/Resources/Compute/ParticleMeshBuilding.compute new file mode 100644 index 000000000..e990898dc --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ParticleMeshBuilding.compute @@ -0,0 +1,72 @@ +#pragma kernel BuildMesh + +#include "MathUtils.cginc" + +struct RendererData +{ + float4 color; + float radiusScale; +}; + +StructuredBuffer particleIndices; + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer radii; +StructuredBuffer colors; + +StructuredBuffer rendererIndices; +StructuredBuffer rendererData; + +RWByteAddressBuffer vertices; +RWByteAddressBuffer indices; + +uint firstParticle; +uint particleCount; + +[numthreads(128, 1, 1)] +void BuildMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= particleCount) return; + + int p = particleIndices[firstParticle + i]; + int r = rendererIndices[firstParticle + i]; + + // <<2 = multiply by 4 to get byte address, since a float/int is 4 bytes in size. + + // particle data is the same for all 4 vertices: + for (uint v = i*4; v < i*4 + 4; ++v) + { + int base = v*23; + + // pos + vertices.Store4(base<<2, asuint(float4(positions[p].xyz, 1))); + + // color: + vertices.Store4((base+7)<<2, asuint(colors[p] * rendererData[r].color)); + + // b1, b2, b3: + vertices.Store4((base+11)<<2, asuint( float4(rotate_vector(orientations[p],float3(1,0,0)),radii[p].x * radii[p].w * rendererData[r].radiusScale) )); + vertices.Store4((base+15)<<2, asuint( float4(rotate_vector(orientations[p],float3(0,1,0)),radii[p].y * radii[p].w * rendererData[r].radiusScale) )); + vertices.Store4((base+19)<<2, asuint( float4(rotate_vector(orientations[p],float3(0,0,1)),radii[p].z * radii[p].w * rendererData[r].radiusScale) )); + } + + //different offset for each vertex: + int base = i*4; + vertices.Store3((base*23 + 4)<<2, asuint(float3(1,1,0))); + vertices.Store3(((base+1)*23 + 4)<<2, asuint(float3(-1,1,0))); + vertices.Store3(((base+2)*23 + 4)<<2, asuint(float3(-1,-1,0))); + vertices.Store3(((base+3)*23 + 4)<<2, asuint(float3(1,-1,0))); + + // indices: + indices.Store((i*6)<<2, asuint(i*4+2)); + indices.Store((i*6+1)<<2, asuint(i*4+1)); + indices.Store((i*6+2)<<2, asuint(i*4)); + + indices.Store((i*6+3)<<2, asuint(i*4+3)); + indices.Store((i*6+4)<<2, asuint(i*4+2)); + indices.Store((i*6+5)<<2, asuint(i*4)); +} + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta new file mode 100644 index 000000000..c28621d12 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5989e4df4ce944ea96d566e7df4d68a +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/PathFrame.cginc b/Assets/ThirdParty/Obi/Resources/Compute/PathFrame.cginc new file mode 100644 index 000000000..e9ea2742a --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/PathFrame.cginc @@ -0,0 +1,158 @@ +#ifndef PATHFRAME_INCLUDE +#define PATHFRAME_INCLUDE + +#include "MathUtils.cginc" + +struct pathFrame +{ + float3 position; + float3 tangent; + float3 normal; + float3 binormal; + + float4 color; + float thickness; + + + void Initialize(float3 position, float3 tangent, float3 normal, float3 binormal, float4 color, float thickness){ + this.position = position; + this.normal = normal; + this.tangent = tangent; + this.binormal = binormal; + this.color = color; + this.thickness = thickness; + } + + void Reset() + { + position = float3(0,0,0); + tangent = float3(0,0,1); + normal = float3(0,1,0); + binormal = float3(1,0,0); + color = float4(1,1,1,1); + thickness = 0; + } + + void SetTwist(float twist) + { + quaternion twistQ = axis_angle(tangent, radians(twist)); + normal = rotate_vector(twistQ, normal); + binormal = rotate_vector(twistQ, binormal); + } + + void Transport(pathFrame frame, float twist) + { + // Calculate delta rotation: + quaternion rotQ = from_to_rotation(tangent, frame.tangent); + quaternion twistQ = axis_angle(frame.tangent, radians(twist)); + quaternion finalQ = qmul(twistQ , rotQ); + + // Rotate previous frame axes to obtain the new ones: + normal = rotate_vector(finalQ, normal); + binormal = rotate_vector(finalQ, binormal); + tangent = frame.tangent; + position = frame.position; + thickness = frame.thickness; + color = frame.color; + } + + void Transport(float3 newPosition, float3 newTangent, float twist) + { + // Calculate delta rotation: + quaternion rotQ = from_to_rotation(tangent, newTangent); + quaternion twistQ = axis_angle(newTangent, radians(twist)); + quaternion finalQ = qmul(twistQ, rotQ); + + // Rotate previous frame axes to obtain the new ones: + normal = rotate_vector(finalQ, normal); + binormal = rotate_vector(finalQ, binormal); + tangent = newTangent; + position = newPosition; + + } + + // Transport, hinting the normal. + void Transport(float3 newPosition, float3 newTangent, float3 newNormal, float twist) + { + normal = rotate_vector(axis_angle(newTangent,radians(twist)), newNormal); + tangent = newTangent; + binormal = cross(normal, tangent); + position = newPosition; + } + + float3x3 ToMatrix(int mainAxis) + { + float3x3 basis; + + if (mainAxis == 0) + { + basis._m00_m10_m20 = tangent; + basis._m01_m11_m21 = binormal; + basis._m02_m12_m22 = normal; + } + else if (mainAxis == 1) + { + basis._m01_m11_m21 = tangent; + basis._m02_m12_m22 = binormal; + basis._m00_m10_m20 = normal; + } + else + { + basis._m02_m12_m22 = tangent; + basis._m00_m10_m20 = binormal; + basis._m01_m11_m21 = normal; + } + + /*int xo = (mainAxis) % 3; + int yo = (mainAxis + 1) % 3; + int zo = (mainAxis + 2) % 3; + + basis[xo] = tangent; + basis[yo] = binormal; + basis[zo] = normal;*/ + + return basis; + } +}; + +void WeightedSum(float w1, float w2, float w3, in pathFrame c1, in pathFrame c2, in pathFrame c3, out pathFrame sum) +{ + sum.position.x = c1.position.x * w1 + c2.position.x * w2 + c3.position.x * w3; + sum.position.y = c1.position.y * w1 + c2.position.y * w2 + c3.position.y * w3; + sum.position.z = c1.position.z * w1 + c2.position.z * w2 + c3.position.z * w3; + + sum.tangent.x = c1.tangent.x * w1 + c2.tangent.x * w2 + c3.tangent.x * w3; + sum.tangent.y = c1.tangent.y * w1 + c2.tangent.y * w2 + c3.tangent.y * w3; + sum.tangent.z = c1.tangent.z * w1 + c2.tangent.z * w2 + c3.tangent.z * w3; + + sum.normal.x = c1.normal.x * w1 + c2.normal.x * w2 + c3.normal.x * w3; + sum.normal.y = c1.normal.y * w1 + c2.normal.y * w2 + c3.normal.y * w3; + sum.normal.z = c1.normal.z * w1 + c2.normal.z * w2 + c3.normal.z * w3; + + sum.binormal.x = c1.binormal.x * w1 + c2.binormal.x * w2 + c3.binormal.x * w3; + sum.binormal.y = c1.binormal.y * w1 + c2.binormal.y * w2 + c3.binormal.y * w3; + sum.binormal.z = c1.binormal.z * w1 + c2.binormal.z * w2 + c3.binormal.z * w3; + + sum.color.x = c1.color.x * w1 + c2.color.x * w2 + c3.color.x * w3; + sum.color.y = c1.color.y * w1 + c2.color.y * w2 + c3.color.y * w3; + sum.color.z = c1.color.z * w1 + c2.color.z * w2 + c3.color.z * w3; + sum.color.w = c1.color.w * w1 + c2.color.w * w2 + c3.color.w * w3; + + sum.thickness = c1.thickness * w1 + c2.thickness * w2 + c3.thickness * w3; +} + +pathFrame addFrames(pathFrame c1, pathFrame c2) +{ + pathFrame r; + r.Initialize(c1.position + c2.position, c1.tangent + c2.tangent, c1.normal + c2.normal, c1.binormal + c2.binormal, c1.color + c2.color, c1.thickness + c2.thickness); + return r; +} + +pathFrame multiplyFrame(float f, pathFrame c) +{ + pathFrame r; + r.Initialize(c.position * f, c.tangent * f, c.normal * f, c.binormal * f, c.color * f, c.thickness * f); + return r; +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/PathFrame.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/PathFrame.cginc.meta new file mode 100644 index 000000000..fa818faa6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/PathFrame.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 10c2f01e614d74b30b6a489c96e8a0ce +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/PathSmoothing.compute b/Assets/ThirdParty/Obi/Resources/Compute/PathSmoothing.compute new file mode 100644 index 000000000..06bf6ae5b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/PathSmoothing.compute @@ -0,0 +1,235 @@ +#pragma kernel ParallelTransport +#pragma kernel Decimate +#pragma kernel ChaikinSmooth + +#include "PathFrame.cginc" + +struct smootherPathData +{ + uint smoothing; + float decimation; + float twist; + float restLength; + float smoothLength; + bool usesOrientedParticles; +}; + +StructuredBuffer renderablePositions; +StructuredBuffer renderableOrientations; +StructuredBuffer principalRadii; +StructuredBuffer colors; + +RWStructuredBuffer pathData; +StructuredBuffer particleIndices; + +RWStructuredBuffer pathFrames; +StructuredBuffer frameOffsets; +RWStructuredBuffer decimatedFrameCounts; + +RWStructuredBuffer smoothFrames; +StructuredBuffer smoothFrameOffsets; +RWStructuredBuffer smoothFrameCounts; + +// Variables set from the CPU +uint chunkCount; + +void PathFrameFromParticle(inout pathFrame frame, int particleIndex, bool useOrientedParticles, bool interpolateOrientation = false) +{ + // Update current frame values from particles: + frame.position = renderablePositions[particleIndex].xyz; + frame.thickness = principalRadii[particleIndex][0]; + frame.color = colors[particleIndex]; + + // Use particle orientation if possible: + if (useOrientedParticles) + { + quaternion current = renderableOrientations[particleIndex]; + quaternion previous = renderableOrientations[max(0, particleIndex - 1)]; + float4x4 average = q_toMatrix(interpolateOrientation ? q_slerp(current, previous, 0.5f) : current); + frame.normal = average._m01_m11_m21; + frame.binormal = average._m00_m10_m20; + frame.tangent = average._m02_m12_m22; + } +} + + +[numthreads(128, 1, 1)] +void ParallelTransport (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= chunkCount) return; + + pathFrame nextFrame; + pathFrame currFrame; + pathFrame prevFrame; + + nextFrame.Reset(); + currFrame.Reset(); + prevFrame.Reset(); + + int firstIndex = i > 0 ? frameOffsets[i - 1] : 0; + int frameCount = frameOffsets[i] - firstIndex; + + // initialize current and previous frame: + PathFrameFromParticle(currFrame, particleIndices[firstIndex], pathData[i].usesOrientedParticles, false); + prevFrame = currFrame; + + // parallel transport: + for (int m = 1; m <= frameCount; ++m) + { + int index = firstIndex + min(m, frameCount - 1); + int pIndex = particleIndices[index]; + + // generate curve frame from particle: + PathFrameFromParticle(nextFrame, pIndex, pathData[i].usesOrientedParticles); + + if (pathData[i].usesOrientedParticles) + { + // copy frame directly. + prevFrame = currFrame; + } + else + { + // perform parallel transport, using forward / backward average to calculate tangent. + // if the average is too small, reuse the previous frame tangent. + currFrame.tangent = normalizesafe((currFrame.position - prevFrame.position) + + (nextFrame.position - currFrame.position), prevFrame.tangent); + prevFrame.Transport(currFrame, pathData[i].twist); + } + + // advance current frame: + currFrame = nextFrame; + pathFrames[firstIndex + m - 1] = prevFrame; + } +} + +[numthreads(128, 1, 1)] +void Decimate (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= chunkCount) return; + + int firstInputIndex = i > 0 ? frameOffsets[i - 1] : 0; + int inputFrameCount = frameOffsets[i] - firstInputIndex; + + // no decimation, no work to do, just return: + if (pathData[i].decimation < 0.00001f || inputFrameCount < 3) + { + decimatedFrameCounts[i] = inputFrameCount; + return; + } + + float scaledThreshold = pathData[i].decimation * pathData[i].decimation * 0.01f; + + int start = 0; + int end = inputFrameCount - 1; + decimatedFrameCounts[i] = 0; + + while (start < end) + { + // add starting point: + pathFrames[firstInputIndex + decimatedFrameCounts[i]++] = pathFrames[firstInputIndex + start]; + + int newEnd = end; + + while (true) + { + int maxDistanceIndex = 0; + float maxDistance = 0; + float mu; + + // find the point that's furthest away from the current segment: + for (int j = start + 1; j < newEnd; j++) + { + float3 nearest = NearestPointOnEdge(pathFrames[firstInputIndex + start].position, + pathFrames[firstInputIndex + newEnd].position, + pathFrames[firstInputIndex + j].position, mu); + + float3 delta = nearest - pathFrames[firstInputIndex + j].position; + float d = dot(delta,delta); + + if (d > maxDistance) + { + maxDistanceIndex = j; + maxDistance = d; + } + } + + if (maxDistance <= scaledThreshold) + break; + + newEnd = maxDistanceIndex; + } + + start = newEnd; + } + + // add the last point: + pathFrames[firstInputIndex + decimatedFrameCounts[i]++] = pathFrames[firstInputIndex + end]; + +} + +[numthreads(128, 1, 1)] +void ChaikinSmooth (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= chunkCount) return; + + int firstInputIndex = i > 0 ? frameOffsets[i - 1] : 0; + int inputFrameCount = decimatedFrameCounts[i]; + + int firstOutputIndex = smoothFrameOffsets[i]; + + int k = (int)pathData[i].smoothing; + + // No work to do. just copy the input to the output: + if (k == 0) + { + smoothFrameCounts[i] = inputFrameCount; + for (int j = 0; j < inputFrameCount; ++j) + smoothFrames[firstOutputIndex + j] = pathFrames[firstInputIndex + j]; + } + else + { + // precalculate some quantities: + int pCount = (int)pow(2, k); + int n0 = inputFrameCount - 1; + float twoRaisedToMinusKPlus1 = pow(2, -(k + 1)); + float twoRaisedToMinusK = pow(2, -k); + float twoRaisedToMinus2K = pow(2, -2 * k); + float twoRaisedToMinus2KMinus1 = pow(2, -2 * k - 1); + + smoothFrameCounts[i] = (inputFrameCount - 2) * pCount + 2; + + // calculate initial curve points: + smoothFrames[firstOutputIndex] = addFrames(multiplyFrame(0.5f + twoRaisedToMinusKPlus1 , pathFrames[firstInputIndex]) , multiplyFrame(0.5f - twoRaisedToMinusKPlus1, pathFrames[firstInputIndex + 1])); + smoothFrames[firstOutputIndex + pCount * n0 - pCount + 1] = addFrames(multiplyFrame(0.5f - twoRaisedToMinusKPlus1, pathFrames[firstInputIndex + n0 - 1]) , multiplyFrame(0.5f + twoRaisedToMinusKPlus1, pathFrames[firstInputIndex + n0])); + + // calculate internal points: + for (int j = 1; j <= pCount; ++j) + { + // precalculate coefficients: + float F = 0.5f - twoRaisedToMinusKPlus1 - (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2KMinus1); + float G = 0.5f + twoRaisedToMinusKPlus1 + (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2K); + float H = (j - 1) * j * twoRaisedToMinus2KMinus1; + + for (int l = 1; l < n0; ++l) + { + WeightedSum(F, G, H, + pathFrames[firstInputIndex + l - 1], + pathFrames[firstInputIndex + l], + pathFrames[firstInputIndex + l + 1], + smoothFrames[firstOutputIndex + (l - 1) * pCount + j]); + } + } + + // make first and last curve points coincide with original points: + smoothFrames[firstOutputIndex] = pathFrames[firstInputIndex]; + smoothFrames[firstOutputIndex + smoothFrameCounts[i] - 1] = pathFrames[firstInputIndex + inputFrameCount - 1]; + } + + // calculate path lengths: + pathData[i].smoothLength = 0; + for (int j = firstOutputIndex + 1; j < firstOutputIndex + smoothFrameCounts[i]; ++j) + pathData[i].smoothLength += distance(smoothFrames[j-1].position, smoothFrames[j].position); +} diff --git a/Assets/ThirdParty/Obi/Resources/Compute/PathSmoothing.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/PathSmoothing.compute.meta new file mode 100644 index 000000000..589cc57c4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/PathSmoothing.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91c36d3d171884541b751112dfac062c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Phases.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Phases.cginc new file mode 100644 index 000000000..30bfe2086 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Phases.cginc @@ -0,0 +1,13 @@ +#ifndef PHASES_INCLUDE +#define PHASES_INCLUDE + + +#define CategoryMask 0x0000ffff +#define MaskMask 0xffff0000 + +#define GroupMask 0x00ffffff +#define SelfCollide 1 << 24 +#define Fluid 1 << 25 +#define OneSided 1 << 26 + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Phases.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/Phases.cginc.meta new file mode 100644 index 000000000..290fe9508 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Phases.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 96d6b61b6caf54444b039bf6f29c9205 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/PinConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/PinConstraints.compute new file mode 100644 index 000000000..33bb460e4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/PinConstraints.compute @@ -0,0 +1,229 @@ +#pragma kernel Clear +#pragma kernel Initialize +#pragma kernel Project +#pragma kernel Apply +#pragma kernel ProjectRenderable + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" +#include "ColliderDefinitions.cginc" +#include "Rigidbody.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer colliderIndices; +StructuredBuffer offsets; +StructuredBuffer restDarboux; +StructuredBuffer stiffnesses; +RWStructuredBuffer lambdas; + +StructuredBuffer transforms; +StructuredBuffer shapes; +RWStructuredBuffer RW_rigidbodies; + +RWStructuredBuffer RW_positions; +RWStructuredBuffer RW_orientations; + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer prevPositions; +StructuredBuffer invMasses; +StructuredBuffer invRotationalMasses; + +StructuredBuffer inertialSolverFrame; + +// Variables set from the CPU +uint activeConstraintCount; +float stepTime; +float substepTime; +float timeLeft; +int steps; +float sorFactor; + +[numthreads(128, 1, 1)] +void Clear (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int colliderIndex = colliderIndices[i]; + + // no collider to pin to, so ignore the constraint. + if (colliderIndex < 0) + return; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + if (rigidbodyIndex >= 0) + { + int orig; + InterlockedExchange(RW_rigidbodies[rigidbodyIndex].constraintCount, 0, orig); + } +} + +[numthreads(128, 1, 1)] +void Initialize (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int colliderIndex = colliderIndices[i]; + + // no collider to pin to, so ignore the constraint. + if (colliderIndex < 0) + return; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + if (rigidbodyIndex >= 0) + { + InterlockedAdd(RW_rigidbodies[rigidbodyIndex].constraintCount, 1); + } +} + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int particleIndex = particleIndices[i]; + int colliderIndex = colliderIndices[i]; + + // no collider to pin to, so ignore the constraint. + if (colliderIndex < 0) + return; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + float frameEnd = stepTime * steps; + float substepsToEnd = timeLeft / substepTime; + + // calculate time adjusted compliances + float2 compliances = stiffnesses[i].xy / (substepTime * substepTime); + + // project particle position to the end of the full step: + float4 particlePosition = lerp(prevPositions[particleIndex], positions[particleIndex], substepsToEnd); + + // express pin offset in world space: + float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); + float4 predictedPinOffset = worldPinOffset; + quaternion predictedRotation = transforms[colliderIndex].rotation; + + float rigidbodyLinearW = 0; + float rigidbodyAngularW = 0; + + if (rigidbodyIndex >= 0) + { + rigidbody rb = rigidbodies[rigidbodyIndex]; + + // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) + float4 velocityAtPoint = GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex],inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), + asfloat(linearDeltasAsInt[rigidbodyIndex]), + asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); + + predictedPinOffset = IntegrateLinear(predictedPinOffset, inertialSolverFrame[0].frame.TransformVector(velocityAtPoint), frameEnd); + + // predict rotation at the end of the step: + predictedRotation = IntegrateAngular(predictedRotation, rb.angularVelocity + asfloat(angularDeltasAsInt[rigidbodyIndex]), frameEnd); + + // calculate linear and angular rigidbody effective masses (mass splitting: multiply by constraint count) + rigidbodyLinearW = rb.inverseMass * rb.constraintCount; + rigidbodyAngularW = RotationalInvMass(rb.inverseInertiaTensor, + worldPinOffset - rb.com, + normalizesafe(inertialSolverFrame[0].frame.TransformPoint(particlePosition) - predictedPinOffset)) * rb.constraintCount; + + } + + // Transform pin position to solver space for constraint solving: + predictedPinOffset = inertialSolverFrame[0].frame.InverseTransformPoint(predictedPinOffset); + predictedRotation = qmul(q_conj(inertialSolverFrame[0].frame.rotation), predictedRotation); + + float4 gradient = particlePosition - predictedPinOffset; + float constraint = length(gradient); + float4 gradientDir = gradient / (constraint + EPSILON); + + float4 lambda = lambdas[i]; + float linearDLambda = (-constraint - compliances.x * lambda.w) / (invMasses[particleIndex] + rigidbodyLinearW + rigidbodyAngularW + compliances.x + EPSILON); + lambda.w += linearDLambda; + float4 correction = linearDLambda * gradientDir; + + AddPositionDelta(particleIndex, correction * invMasses[particleIndex] / substepsToEnd); + + if (rigidbodyIndex >= 0) + { + ApplyImpulse(rigidbodyIndex, + -correction / frameEnd, + inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), + inertialSolverFrame[0].frame); + } + + if (rigidbodyAngularW > 0 || invRotationalMasses[particleIndex] > 0) + { + // bend/twist constraint: + quaternion omega = qmul(q_conj(orientations[particleIndex]), predictedRotation); //darboux vector + + quaternion omega_plus; + omega_plus = omega + restDarboux[i]; //delta Omega with - omega_0 + omega -= restDarboux[i]; //delta Omega with + omega_0 + if (dot(omega, omega) > dot(omega_plus, omega_plus)) + omega = omega_plus; + + float3 dlambda = (omega.xyz - compliances.y * lambda.xyz) / (compliances.y + invRotationalMasses[particleIndex] + rigidbodyAngularW + EPSILON); + lambda.xyz += dlambda; + + //discrete Darboux vector does not have vanishing scalar part: + quaternion dlambdaQ = quaternion(dlambda[0], dlambda[1], dlambda[2], 0); + + quaternion orientDelta = asfloat(orientationDeltasAsInt[particleIndex]); + orientDelta += qmul(predictedRotation, dlambdaQ) * invRotationalMasses[particleIndex] / substepsToEnd; + orientationDeltasAsInt[particleIndex] = asuint(orientDelta); + orientationConstraintCounts[particleIndex]++; + + if (rigidbodyIndex >= 0) + { + ApplyDeltaQuaternion(rigidbodyIndex, + predictedRotation, + -qmul(orientations[particleIndex], dlambdaQ) * rigidbodyAngularW, + inertialSolverFrame[0].frame, stepTime); + } + } + + lambdas[i] = lambda; +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p = particleIndices[i]; + + ApplyPositionDelta(RW_positions, p, sorFactor); + ApplyOrientationDelta(RW_orientations, p, sorFactor); +} + +[numthreads(128, 1, 1)] +void ProjectRenderable (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int particleIndex = particleIndices[i]; + int colliderIndex = colliderIndices[i]; + + // no collider to pin to or projection deactivated, so ignore the constraint. + if (colliderIndex < 0 || offsets[i].w < 0.5f) + return; + + transform attachmentMatrix = inertialSolverFrame[0].frame.Inverse().Multiply(transforms[colliderIndex]); + + RW_positions[particleIndex] = attachmentMatrix.TransformPoint(offsets[i]); + if (stiffnesses[i].y < 10000) + RW_orientations[particleIndex] = qmul(attachmentMatrix.rotation, restDarboux[i]); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/PinConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/PinConstraints.compute.meta new file mode 100644 index 000000000..235824622 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/PinConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d65f884fa36104c4493d2bc55441b89d +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/PinholeConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/PinholeConstraints.compute new file mode 100644 index 000000000..1d5893ac5 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/PinholeConstraints.compute @@ -0,0 +1,306 @@ +#pragma kernel Clear +#pragma kernel Initialize +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" +#include "ColliderDefinitions.cginc" +#include "Rigidbody.cginc" + +RWStructuredBuffer particleIndices; +StructuredBuffer colliderIndices; +StructuredBuffer offsets; +RWStructuredBuffer edgeMus; +StructuredBuffer edgeRanges; +StructuredBuffer edgeRangeMus; +StructuredBuffer parameters; +RWStructuredBuffer relativeVelocities; +RWStructuredBuffer lambdas; + +StructuredBuffer transforms; +StructuredBuffer shapes; +RWStructuredBuffer RW_rigidbodies; + +RWStructuredBuffer RW_positions; + +StructuredBuffer deformableEdges; +StructuredBuffer positions; +StructuredBuffer prevPositions; +StructuredBuffer invMasses; + +StructuredBuffer inertialSolverFrame; + +// Variables set from the CPU +uint activeConstraintCount; +float stepTime; +float substepTime; +float timeLeft; +int steps; +float sorFactor; + +[numthreads(128, 1, 1)] +void Clear (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int colliderIndex = colliderIndices[i]; + + // no collider to pin to, so ignore the constraint. + if (colliderIndex < 0) + return; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + if (rigidbodyIndex >= 0) + { + int orig; + InterlockedExchange(RW_rigidbodies[rigidbodyIndex].constraintCount, 0, orig); + } +} + +bool IsEdgeValid(int edgeIndex, int nextEdgeIndex, float mix) +{ + return (mix < 0) ? deformableEdges[nextEdgeIndex * 2 + 1] == deformableEdges[edgeIndex * 2] : + deformableEdges[nextEdgeIndex * 2] == deformableEdges[edgeIndex * 2 + 1]; +} + +bool ClampToRange(int i, int edgeIndex, inout float mix) +{ + bool clamped = false; + if (edgeIndex == edgeRanges[i].x && mix < edgeRangeMus[i].x) + { + mix = edgeRangeMus[i].x; + clamped = true; + } + if (edgeIndex == edgeRanges[i].y && mix > edgeRangeMus[i].y) + { + mix = edgeRangeMus[i].y; + clamped = true; + } + return clamped; +} + +[numthreads(128, 1, 1)] +void Initialize (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int edgeIndex = particleIndices[i]; + int colliderIndex = colliderIndices[i]; + + // if no collider or edge, ignore the constraint. + if (edgeIndex < 0 || colliderIndex < 0) + return; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + if (rigidbodyIndex >= 0) + { + InterlockedAdd(RW_rigidbodies[rigidbodyIndex].constraintCount, 1); + } + + float frameEnd = stepTime * steps; + float substepsToEnd = timeLeft / substepTime; + + // calculate time adjusted compliances + float compliance = parameters[i * 5] / (substepTime * substepTime); + + int p1 = deformableEdges[edgeIndex * 2]; + int p2 = deformableEdges[edgeIndex * 2 + 1]; + int edgeCount = max(0, edgeRanges[i].y - edgeRanges[i].x + 1); + + // express pin offset in world space: + float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); + float4 predictedPinOffset = worldPinOffset; + + if (rigidbodyIndex >= 0) + { + // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) + float4 velocityAtPoint = GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex],inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), + asfloat(linearDeltasAsInt[rigidbodyIndex]), + asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); + + predictedPinOffset = IntegrateLinear(predictedPinOffset, inertialSolverFrame[0].frame.TransformVector(velocityAtPoint), frameEnd); + } + + // transform pinhole position to solver space for constraint solving: + float4 solverPredictedOffset = inertialSolverFrame[0].frame.InverseTransformPoint(predictedPinOffset); + + // get current edge data: + float mix = 0; + float4 particlePosition1 = lerp(prevPositions[p1], positions[p1], substepsToEnd); + float4 particlePosition2 = lerp(prevPositions[p2], positions[p2], substepsToEnd); + float edgeLength = length(particlePosition1 - particlePosition2) + EPSILON; + NearestPointOnEdge(particlePosition1, particlePosition2, solverPredictedOffset, mix, false); + + // calculate current relative velocity between rope and pinhole: + float velocity = (mix - edgeMus[i]) / substepTime * edgeLength; // vel = pos / time. + relativeVelocities[i] = velocity; + + // apply motor force: + float targetAccel = (parameters[i * 5 + 2] - velocity) / substepTime; // accel = vel / time. + float maxAccel = parameters[i * 5 + 3] * max(lerp(invMasses[p1], invMasses[p2], mix), EPSILON); // accel = force / mass. Guard against inf*0 + velocity += clamp(targetAccel, -maxAccel, maxAccel) * substepTime; + + // calculate new position by adding motor acceleration: + float corrMix = edgeMus[i] + velocity * substepTime / edgeLength; + + // apply artificial friction by interpolating predicted position and corrected position. + mix = lerp(mix, corrMix, parameters[i * 5 + 1]); + + // move to an adjacent simplex if needed + if (!ClampToRange(i, edgeIndex, mix) && (mix < 0 || mix > 1)) + { + bool clampOnEnd = parameters[i * 5 + 4] > 0.5f; + + // calculate distance we need to travel along simplex chain: + float distToTravel = length(particlePosition1 - particlePosition2) * (mix < 0 ? -mix : mix - 1); + + int nextEdgeIndex; + for (int k = 0; k < 10; ++k) + { + // calculate index of next edge: + nextEdgeIndex = edgeRanges[i].x + (int)nfmod((mix < 0 ? edgeIndex - 1 : edgeIndex + 1) - edgeRanges[i].x, edgeCount); + + // see if it's valid + if (!IsEdgeValid(edgeIndex, nextEdgeIndex, mix)) + { + // disable constraint if needed + if (!clampOnEnd) { particleIndices[i] = -1; return; } + + // otherwise clamp to end: + mix = saturate(mix); + break; + } + + // advance to next edge: + edgeIndex = nextEdgeIndex; + + p1 = deformableEdges[edgeIndex*2]; + p2 = deformableEdges[edgeIndex*2 + 1]; + particlePosition1 = lerp(prevPositions[p1], positions[p1], substepsToEnd); + particlePosition2 = lerp(prevPositions[p2], positions[p2], substepsToEnd); + edgeLength = length(particlePosition1 - particlePosition2) + EPSILON; + + // stop if we reached target edge: + if (distToTravel <= edgeLength) + { + mix = mix < 0 ? 1 - saturate(distToTravel / edgeLength) : saturate(distToTravel / edgeLength); + ClampToRange(i, edgeIndex, mix); + break; + } + + // stop if we reached end of range: + if (ClampToRange(i, edgeIndex, mix)) + break; + + distToTravel -= edgeLength; + } + } + + // store new position along edge: + edgeMus[i] = mix; + particleIndices[i] = edgeIndex; +} + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int edgeIndex = particleIndices[i]; + int colliderIndex = colliderIndices[i]; + + // if no collider or edge, ignore the constraint. + if (edgeIndex < 0 || colliderIndex < 0) + return; + + float frameEnd = stepTime * steps; + float substepsToEnd = timeLeft / substepTime; + + // calculate time adjusted compliances + float compliance = parameters[i * 5] / (substepTime * substepTime); + + int p1 = deformableEdges[edgeIndex * 2]; + int p2 = deformableEdges[edgeIndex * 2 + 1]; + + // get current edge data: + float mix = edgeMus[i]; + float4 particlePosition1 = lerp(prevPositions[p1], positions[p1], substepsToEnd); + float4 particlePosition2 = lerp(prevPositions[p2], positions[p2], substepsToEnd); + float4 projection = lerp(particlePosition1, particlePosition2, mix); + + // express pin offset in world space: + float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); + float4 predictedPinOffset = worldPinOffset; + + float rigidbodyLinearW = 0; + float rigidbodyAngularW = 0; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + rigidbody rb = rigidbodies[rigidbodyIndex]; + + // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) + float4 velocityAtPoint = GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex],inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), + asfloat(linearDeltasAsInt[rigidbodyIndex]), + asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); + + predictedPinOffset = IntegrateLinear(predictedPinOffset, inertialSolverFrame[0].frame.TransformVector(velocityAtPoint), frameEnd); + + // calculate linear and angular rigidbody effective masses (mass splitting: multiply by constraint count) + rigidbodyLinearW = rb.inverseMass * rb.constraintCount; + rigidbodyAngularW = RotationalInvMass(rb.inverseInertiaTensor, + worldPinOffset - rb.com, + normalizesafe(inertialSolverFrame[0].frame.TransformPoint(projection) - predictedPinOffset)) * rb.constraintCount; + } + + // transform pinhole position to solver space for constraint solving: + predictedPinOffset = inertialSolverFrame[0].frame.InverseTransformPoint(predictedPinOffset); + + float4 gradient = projection - predictedPinOffset; + float constraint = length(gradient); + float4 gradientDir = gradient / (constraint + EPSILON); + + float lambda = (-constraint - compliance * lambdas[i]) / (lerp(invMasses[p1], invMasses[p2], mix) + rigidbodyLinearW + rigidbodyAngularW + compliance + EPSILON); + lambdas[i] += lambda; + float4 correction = lambda * gradientDir; + + float baryScale = BaryScale(float4(1 - mix, mix, 0, 0)); + + AddPositionDelta(p1, correction * baryScale * invMasses[p1] * (1 - mix) / substepsToEnd); + AddPositionDelta(p2, correction * baryScale * invMasses[p2] * mix / substepsToEnd); + + if (rigidbodyIndex >= 0) + { + ApplyImpulse(rigidbodyIndex, + -correction / frameEnd, + inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), + inertialSolverFrame[0].frame); + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int edgeIndex = particleIndices[i]; + if (edgeIndex < 0) return; + + int p1 = deformableEdges[edgeIndex * 2]; + int p2 = deformableEdges[edgeIndex * 2 + 1]; + + ApplyPositionDelta(RW_positions, p1, sorFactor); + ApplyPositionDelta(RW_positions, p2, sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/PinholeConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/PinholeConstraints.compute.meta new file mode 100644 index 000000000..b76f43e88 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/PinholeConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2e9779c1ab6b4ac5b79540db1485539 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Quaternion.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Quaternion.cginc new file mode 100644 index 000000000..9143d27ca --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Quaternion.cginc @@ -0,0 +1,230 @@ +#ifndef QUATERNION_INCLUDE +#define QUATERNION_INCLUDE + +#define QUATERNION_IDENTITY float4(0, 0, 0, 1) + +typedef float4 quaternion; + +// Quaternion multiplication +// http://mathworld.wolfram.com/Quaternion.html +quaternion qmul(quaternion q1, quaternion q2) +{ + return quaternion( + q2.xyz * q1.w + q1.xyz * q2.w + cross(q1.xyz, q2.xyz), + q1.w * q2.w - dot(q1.xyz, q2.xyz) + ); +} + +// Vector rotation with a quaternion +// http://mathworld.wolfram.com/Quaternion.html +float3 rotate_vector(quaternion r, float3 v) +{ + float4 r_c = r * float4(-1, -1, -1, 1); + return qmul(r, qmul(float4(v, 0), r_c)).xyz; +} + +// A given angle of rotation about a given axis +quaternion axis_angle(float3 axis, float angle) +{ + float sn = sin(angle * 0.5); + float cs = cos(angle * 0.5); + return quaternion(axis * sn, cs); +} + +// https://stackoverflow.com/questions/1171849/finding-quaternion-representing-the-rotation-from-one-vector-to-another +quaternion from_to_rotation(float3 v1, float3 v2) +{ + float4 q; + float d = dot(v1, v2); + if (d < -0.999999) + { + float3 right = float3(1, 0, 0); + float3 up = float3(0, 1, 0); + float3 tmp = cross(right, v1); + if (length(tmp) < 0.000001) + { + tmp = cross(up, v1); + } + tmp = normalize(tmp); + q = axis_angle(tmp, 3.14159265359f); + } else if (d > 0.999999) { + q = QUATERNION_IDENTITY; + } else { + q.xyz = cross(v1, v2); + q.w = 1 + d; + q = normalize(q); + } + return q; +} + +float4 q_conj(float4 q) +{ + return float4(-q.x, -q.y, -q.z, q.w); +} + +// https://jp.mathworks.com/help/aeroblks/quaternioninverse.html +quaternion q_inverse(quaternion q) +{ + quaternion conj = q_conj(q); + return conj / (q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w); +} + +quaternion q_diff(quaternion q1, quaternion q2) +{ + return q2 * q_inverse(q1); +} + +quaternion q_look_at(float3 forward, float3 up) +{ + forward = normalize(forward); + float3 right = normalize(cross(up, forward)); + up = cross(forward, right); + + float m00 = right.x; + float m01 = right.y; + float m02 = right.z; + float m10 = up.x; + float m11 = up.y; + float m12 = up.z; + float m20 = forward.x; + float m21 = forward.y; + float m22 = forward.z; + + float num8 = (m00 + m11) + m22; + quaternion q = QUATERNION_IDENTITY; + + if (num8 > 0.0) + { + float num = sqrt(num8 + 1.0); + q.w = num * 0.5; + num = 0.5 / num; + q.x = (m12 - m21) * num; + q.y = (m20 - m02) * num; + q.z = (m01 - m10) * num; + return q; + } + else if ((m00 >= m11) && (m00 >= m22)) + { + float num7 = sqrt(((1.0 + m00) - m11) - m22); + float num4 = 0.5 / num7; + q.x = 0.5 * num7; + q.y = (m01 + m10) * num4; + q.z = (m02 + m20) * num4; + q.w = (m12 - m21) * num4; + return q; + } + else if (m11 > m22) + { + float num6 = sqrt(((1.0 + m11) - m00) - m22); + float num3 = 0.5 / num6; + q.x = (m10 + m01) * num3; + q.y = 0.5 * num6; + q.z = (m21 + m12) * num3; + q.w = (m20 - m02) * num3; + return q; + } + else + { + float num5 = sqrt(((1.0 + m22) - m00) - m11); + float num2 = 0.5 / num5; + q.x = (m20 + m02) * num2; + q.y = (m21 + m12) * num2; + q.z = 0.5 * num5; + q.w = (m01 - m10) * num2; + return q; + } +} + +quaternion q_slerp(in quaternion a, in quaternion b, float t) +{ + // if either input is zero, return the other. + if (length(a) == 0.0) + { + if (length(b) == 0.0) + return QUATERNION_IDENTITY; + else + return b; + } + else if (length(b) == 0.0) + { + return a; + } + else + { + float cosHalfAngle = a.w * b.w + dot(a.xyz, b.xyz); + + if (cosHalfAngle >= 1.0 || cosHalfAngle <= -1.0) + { + return a; + } + else + { + if (cosHalfAngle < 0.0) + { + b.xyz = -b.xyz; + b.w = -b.w; + cosHalfAngle = -cosHalfAngle; + } + + float blendA; + float blendB; + if (cosHalfAngle < 0.99) + { + // do proper slerp for big angles + float halfAngle = acos(cosHalfAngle); + float sinHalfAngle = sin(halfAngle); + float oneOverSinHalfAngle = 1.0 / sinHalfAngle; + blendA = sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle; + blendB = sin(halfAngle * t) * oneOverSinHalfAngle; + } + else + { + // do lerp if angle is really small. + blendA = 1.0 - t; + blendB = t; + } + + quaternion result = quaternion(blendA * a.xyz + blendB * b.xyz, blendA * a.w + blendB * b.w); + + if (length(result) > 0.0) + return normalize(result); + else + return QUATERNION_IDENTITY; + } + } +} + +quaternion q_eulerXYZ(float3 euler) +{ + float3 s, c; + sincos(0.5f * euler, s, c); + return quaternion( + // s.x * c.y * c.z + s.y * s.z * c.x, + // s.y * c.x * c.z - s.x * s.z * c.y, + // s.z * c.x * c.y - s.x * s.y * c.z, + // c.x * c.y * c.z + s.y * s.z * s.x + float4(s.xyz, c.x) * c.yxxy * c.zzyz + s.yxxy * s.zzyz * float4(c.xyz, s.x) * float4(1.0f, -1.0f, -1.0f, 1.0f) + ); +} + +float4x4 q_toMatrix(quaternion q) +{ + float xx = q.x * q.x; + float xy = q.x * q.y; + float xz = q.x * q.z; + float xw = q.x * q.w; + + float yy = q.y * q.y; + float yz = q.y * q.z; + float yw = q.y * q.w; + + float zz = q.z * q.z; + float zw = q.z * q.w; + + return float4x4(1 - 2 * (yy + zz), 2 * (xy - zw), 2 * (xz + yw), 0, + 2 * (xy + zw), 1 - 2 * (xx + zz), 2 * (yz - xw), 0, + 2 * (xz - yw), 2 * (yz + xw), 1 - 2 * (xx + yy), 0, + 0, 0, 0, 1); +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Quaternion.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/Quaternion.cginc.meta new file mode 100644 index 000000000..ad02e0bf5 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Quaternion.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d586fccea37884cd99448480e05b9efc +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/QueryDefinitions.cginc b/Assets/ThirdParty/Obi/Resources/Compute/QueryDefinitions.cginc new file mode 100644 index 000000000..ddd2b711a --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/QueryDefinitions.cginc @@ -0,0 +1,30 @@ +#ifndef QUERYDEFS_INCLUDE +#define QUERYDEFS_INCLUDE + +#define SPHERE_QUERY 0 +#define BOX_QUERY 1 +#define RAY_QUERY 2 + +struct queryShape +{ + float4 center; + float4 size; + int type; + float contactOffset; + float maxDistance; + int filter; +}; + +struct queryResult +{ + float4 simplexBary; // point A, expressed as simplex barycentric coords for simplices. + float4 queryPoint; // point B, expressed as a solver-space position. + float4 normal; + float dist; + float distAlongRay; + int simplexIndex; + int queryIndex; +}; + + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/QueryDefinitions.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/QueryDefinitions.cginc.meta new file mode 100644 index 000000000..55f203af5 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/QueryDefinitions.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: aa793a9f45d044bb9af2361e9c92f11d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RayShapeQuery.compute b/Assets/ThirdParty/Obi/Resources/Compute/RayShapeQuery.compute new file mode 100644 index 000000000..a02d9f39f --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RayShapeQuery.compute @@ -0,0 +1,132 @@ +#include "ColliderDefinitions.cginc" +#include "QueryDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateResults + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer simplices; + +StructuredBuffer transforms; +StructuredBuffer shapes; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer results; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; + +struct Ray : IDistanceFunction +{ + queryShape s; + transform colliderToSolver; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4x4 simplexToSolver = TRS(pos.xyz, orientation, radii.xyz); + float4x4 solverToSimplex = Inverse(simplexToSolver); + float4x4 colliderToSimplex = mul(solverToSimplex, TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); + + // express ray in simplex space (ellipsoid == scaled sphere) + float4 rayOrigin = mul(colliderToSimplex, float4(s.center.xyz,1)); + float4 rayDirection = normalizesafe(mul(colliderToSimplex, float4(s.size.xyz,0))); + + float rayDistance = RaySphereIntersection(rayOrigin.xyz, rayDirection.xyz, float3(0,0,0), 1); + + if (rayDistance < 0) + { + pos = colliderToSolver.InverseTransformPointUnscaled(pos); + + float mu; + float4 centerLine = NearestPointOnEdge(s.center * colliderToSolver.scale, (s.center + s.size) * colliderToSolver.scale, pos, mu); + float4 centerToPoint = pos - centerLine; + float distanceToCenter = length(centerToPoint); + + float4 normal = centerToPoint / (distanceToCenter + EPSILON); + + projectedPoint.pos = colliderToSolver.TransformPointUnscaled(centerLine + normal * s.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + } + else + { + float4 rayPoint = mul(simplexToSolver, float4((rayOrigin + rayDirection * rayDistance).xyz,1)); + float4 normal = normalizesafe(float4((pos - rayPoint).xyz,0)); + + projectedPoint.pos = rayPoint + normal * s.contactOffset; + projectedPoint.normal = normal; + } + + projectedPoint.bary = float4(1,0,0,0); + } +}; + +[numthreads(128, 1, 1)] +void GenerateResults (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4*RAY_QUERY]) return; + + int firstPair = contactOffsetsPerType[RAY_QUERY]; + int simplexIndex = contactPairs[firstPair + i].x; + int queryIndex = contactPairs[firstPair + i].y; + + queryResult c = (queryResult)0; + + Ray rayShape; + rayShape.colliderToSolver = worldToSolver[0].Multiply(transforms[queryIndex]); + rayShape.s = shapes[queryIndex]; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + SurfacePoint surfacePoint = Optimize(rayShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + + float4 simplexPrevPosition = FLOAT4_ZERO; + float simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexPrevPosition += positions[particleIndex] * simplexBary[j]; + simplexRadius += EllipsoidRadius(surfacePoint.normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * simplexBary[j]; + } + + c.queryPoint = surfacePoint.pos; + c.normal = surfacePoint.normal; + c.simplexBary = simplexBary; + c.simplexIndex = simplexIndex; + c.queryIndex = queryIndex; + c.dist = dot(simplexPrevPosition - surfacePoint.pos, surfacePoint.normal) - simplexRadius; + + if (c.dist <= rayShape.s.maxDistance) + { + uint count = results.IncrementCounter(); + if (count < maxContacts) + { + float4 pointOnRay = surfacePoint.pos + surfacePoint.normal * c.dist; + c.distAlongRay = dot(pointOnRay.xyz - rayShape.s.center.xyz, normalizesafe(rayShape.s.size.xyz)); + + results[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RayShapeQuery.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/RayShapeQuery.compute.meta new file mode 100644 index 000000000..5228b8174 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RayShapeQuery.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc1e43b48b9764f8585de0bd68298b1c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Rigidbody.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Rigidbody.cginc new file mode 100644 index 000000000..9038eef51 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Rigidbody.cginc @@ -0,0 +1,108 @@ +#ifndef RIGIDBODY_INCLUDE +#define RIGIDBODY_INCLUDE + +#include "InertialFrame.cginc" +#include "InterlockedUtils.cginc" +#include "Integration.cginc" + +RWStructuredBuffer linearDeltasAsInt; +RWStructuredBuffer angularDeltasAsInt; + +struct rigidbody +{ + float4x4 inverseInertiaTensor; + float4 velocity; + float4 angularVelocity; + float4 com; + float inverseMass; + + int constraintCount; + int pad1; + int pad2; +}; + +StructuredBuffer rigidbodies; + +void CalculateContactMassesB(in rigidbody rb, + in transform t, + float4 pointB, + float4 normal, + float4 bitangent, + float4 tangent, + out float normalInvMassB, + out float tangentInvMassB, + out float bitangentInvMassB) +{ + float4 rB = t.TransformPoint(pointB) - rb.com; + + // initialize inverse linear masses: + normalInvMassB = tangentInvMassB = bitangentInvMassB = rb.inverseMass; + normalInvMassB += RotationalInvMass(rb.inverseInertiaTensor, rB, normal); + tangentInvMassB += RotationalInvMass(rb.inverseInertiaTensor, rB, tangent); + bitangentInvMassB += RotationalInvMass(rb.inverseInertiaTensor, rB, bitangent); +} + +float4 GetRigidbodyVelocityAtPoint(in rigidbody rb, + float4 pnt, + float4 linearDelta, + float4 angularDelta, + in inertialFrame frame) +{ + float4 linearVel = rb.velocity + linearDelta; + float4 angularVel = rb.angularVelocity + angularDelta; + float4 r = frame.frame.TransformPoint(pnt) - rb.com; + + // calculate rigidbody velocity. (point is assumed to be expressed in solver space, convert it to world space): + float4 wsRigidbodyVel = linearVel + float4(cross(angularVel.xyz, r.xyz), 0); + + // calculate solver velocity: + float4 wsSolverVelocity = frame.velocity + float4(cross(frame.angularVelocity.xyz, pnt.xyz), 0); + + // convert the resulting velocity back to solver space: + return frame.frame.InverseTransformVector(wsRigidbodyVel - wsSolverVelocity); +}; + +void AtomicAddLinearDelta(in int rigidbodyIndex, in float4 delta) +{ + InterlockedAddFloat(linearDeltasAsInt, rigidbodyIndex, 0, delta.x); + InterlockedAddFloat(linearDeltasAsInt, rigidbodyIndex, 1, delta.y); + InterlockedAddFloat(linearDeltasAsInt, rigidbodyIndex, 2, delta.z); +} + +void AtomicAddAngularDelta(in int rigidbodyIndex, in float4 delta) +{ + InterlockedAddFloat(angularDeltasAsInt, rigidbodyIndex, 0, delta.x); + InterlockedAddFloat(angularDeltasAsInt, rigidbodyIndex, 1, delta.y); + InterlockedAddFloat(angularDeltasAsInt, rigidbodyIndex, 2, delta.z); +} + +void ApplyImpulse(int rigidbodyIndex, + float4 impulse, + float4 pnt, + in transform frame) +{ + float4 impulseWS = frame.TransformVector(impulse); + float4 r = frame.TransformPoint(pnt) - rigidbodies[rigidbodyIndex].com; + + float4 linearDelta = rigidbodies[rigidbodyIndex].inverseMass * impulseWS; + float4 angularDelta = mul(rigidbodies[rigidbodyIndex].inverseInertiaTensor, float4(cross(r.xyz, impulseWS.xyz), 0)); + + AtomicAddLinearDelta (rigidbodyIndex, linearDelta); + AtomicAddAngularDelta(rigidbodyIndex, angularDelta); +} + +void ApplyDeltaQuaternion(int rigidbodyIndex, + quaternion rotation, + quaternion delta, + in transform frame, + float dt) +{ + quaternion rotationWS = qmul(frame.rotation, rotation); + quaternion deltaWS = qmul(frame.rotation, delta); + + // convert quaternion delta to angular acceleration: + quaternion newRotation = normalize(rotationWS + deltaWS); + AtomicAddAngularDelta(rigidbodyIndex, DifferentiateAngular(newRotation, rotationWS, dt)); +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Rigidbody.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/Rigidbody.cginc.meta new file mode 100644 index 000000000..68dede378 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Rigidbody.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 157a770866f4047a5b8a08e6aca2f1bf +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RopeChainRendering.compute b/Assets/ThirdParty/Obi/Resources/Compute/RopeChainRendering.compute new file mode 100644 index 000000000..57ee32be6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RopeChainRendering.compute @@ -0,0 +1,109 @@ +#pragma kernel UpdateChainMesh + +#include "PathFrame.cginc" + +struct chainRendererData +{ + int modifierOffset; + float twistAnchor; + float twist; + uint usesOrientedParticles; + + float4 scale; +}; + +struct chunkData +{ + int rendererIndex; + int offset; // index of the first element for each chunk. +}; + +struct linkModifier +{ + float3 translation; + float3 scale; + float3 rotation; + + void Clear() + { + translation = float3(0,0,0); + scale = float3(1,1,1); + rotation = float3(0,0,0); + } +}; + +StructuredBuffer rendererData; +StructuredBuffer chunksData; +StructuredBuffer modifiers; +StructuredBuffer elements; + +StructuredBuffer renderablePositions; +StructuredBuffer renderableOrientations; +StructuredBuffer principalRadii; +StructuredBuffer colors; +float4x4 solverToWorld; + +RWStructuredBuffer instanceTransforms; +RWStructuredBuffer invInstanceTransforms; +RWStructuredBuffer instanceColors; + +uint chunkCount; + +[numthreads(32, 1, 1)] +void UpdateChainMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= chunkCount) return; + + int firstIndex = i > 0 ? chunksData[i - 1].offset : 0; + uint elementCount = chunksData[i].offset - firstIndex; + + int rendererIndex = chunksData[i].rendererIndex; + chainRendererData renderer = rendererData[rendererIndex]; + + int firstModifier = rendererIndex > 0 ? rendererData[rendererIndex - 1].modifierOffset : 0; + uint modifierCount = renderer.modifierOffset - firstModifier; + + linkModifier modifier; + modifier.Clear(); + + pathFrame frame; + frame.Reset(); + + float twist = -renderer.twist * elementCount * renderer.twistAnchor; + frame.SetTwist(twist); + + // parallel transport: + for (uint m = 0; m < elementCount; ++m) + { + if (modifierCount > 0) + modifier = modifiers[firstModifier + m % modifierCount]; + + int index = firstIndex + m; + float4 pos = renderablePositions[elements[index].x]; + float4 nextPos = renderablePositions[elements[index].y]; + float4 vect = nextPos - pos; + float3 tangent = normalizesafe(vect.xyz); + + if (renderer.usesOrientedParticles == 1) + { + frame.Transport(nextPos.xyz, tangent, rotate_vector(renderableOrientations[elements[index].x], float3(0, 1, 0)), twist); + twist += renderer.twist; + } + else + frame.Transport(nextPos.xyz, tangent, renderer.twist); + + if (modifierCount > 0) + modifier = modifiers[firstModifier + m % (uint)modifierCount]; + + quaternion rotation = q_look_at(frame.tangent, frame.normal); + float3 position = (pos + vect * 0.5f).xyz + rotate_vector(rotation, modifier.translation); + float3 scale = principalRadii[elements[index].x].x * 2 * renderer.scale.xyz * modifier.scale; + + rotation = qmul(rotation, q_eulerXYZ(radians(modifier.rotation))); + + instanceTransforms[index] = mul(solverToWorld, TRS(position,rotation,scale)); + invInstanceTransforms[index] = Inverse(instanceTransforms[index]); + instanceColors[index] = (colors[elements[index].x] + colors[elements[index].x]) * 0.5; + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RopeChainRendering.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/RopeChainRendering.compute.meta new file mode 100644 index 000000000..a80ac9cb2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RopeChainRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64a1b58e2d7634b3b905947b0c5e78c7 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RopeExtrudedRendering.compute b/Assets/ThirdParty/Obi/Resources/Compute/RopeExtrudedRendering.compute new file mode 100644 index 000000000..cdcb106c5 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RopeExtrudedRendering.compute @@ -0,0 +1,164 @@ +#pragma kernel UpdateRopeMesh + +#include "PathFrame.cginc" + +struct smootherPathData +{ + uint smoothing; + float decimation; + float twist; + float restLength; + float smoothLength; + uint usesOrientedParticles; +}; + +struct extrudedMeshData +{ + int sectionVertexCount; + float thicknessScale; + float uvAnchor; + uint normalizeV; + float2 uvScale; +}; + +StructuredBuffer pathSmootherIndices; +StructuredBuffer chunkOffsets; + +StructuredBuffer frames; +StructuredBuffer frameOffsets; +StructuredBuffer frameCounts; + +StructuredBuffer sectionData; +StructuredBuffer sectionOffsets; +StructuredBuffer sectionIndices; + +StructuredBuffer vertexOffsets; +StructuredBuffer triangleOffsets; +StructuredBuffer triangleCounts; + +StructuredBuffer extrudedData; +StructuredBuffer pathData; + +RWByteAddressBuffer vertices; +RWByteAddressBuffer tris; + +// Variables set from the CPU +uint firstRenderer; +uint rendererCount; + +pathFrame LookAt(pathFrame frame, in pathFrame target, out float dist) +{ + float3 tangent = target.position - frame.position; + dist = length(tangent); + tangent /= dist + EPSILON; + + quaternion rotQ = from_to_rotation(frame.tangent, tangent); + frame.normal = rotate_vector(rotQ, frame.normal); + frame.binormal = rotate_vector(rotQ, frame.binormal); + frame.tangent = tangent; + + return frame; +} + +[numthreads(128, 1, 1)] +void UpdateRopeMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int u = id.x; + if (u >= rendererCount) return; + + int k = firstRenderer + u; + int s = pathSmootherIndices[k]; + + float3 vertex = float3(0,0,0); + float3 normal = float3(0,0,0); + float4 texTangent = FLOAT4_ZERO; + + int tri = 0; + int sectionIndex = 0; + int sectionStart = sectionOffsets[sectionIndices[k]]; + int sectionSegments = (sectionOffsets[sectionIndices[k] + 1] - sectionStart) - 1; + int verticesPerSection = sectionSegments + 1; // the last vertex in each section must be duplicated, due to uv wraparound. + + float smoothLength = 0; + int i; + for (i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) + smoothLength += pathData[i].smoothLength; + + float vCoord = -extrudedData[k].uvScale.y * pathData[chunkOffsets[s]].restLength * extrudedData[k].uvAnchor; + float actualToRestLengthRatio = smoothLength / pathData[chunkOffsets[s]].restLength; + + int firstVertex = vertexOffsets[k]; + int firstTriangle = triangleOffsets[k]; + + // clear out triangle indices for this rope: + for (i = firstTriangle; i < firstTriangle + triangleCounts[k]; ++i) + { + int offset = i*3; + tris.Store((offset)<<2, 0); + tris.Store((offset+1)<<2,0); + tris.Store((offset+2)<<2,0); + } + + // for each chunk in the rope: + for (i = chunkOffsets[s]; i < chunkOffsets[s+1]; ++i) + { + int firstFrame = frameOffsets[i]; + int frameCount = frameCounts[i]; + + for (int f = 0; f < frameCount; ++f) + { + // Calculate previous and next curve indices: + int prevIndex = firstFrame + max(f - 1, 0); + int index = firstFrame + f; + + // advance v texcoord: + vCoord += extrudedData[k].uvScale.y * (distance(frames[index].position, frames[prevIndex].position) / + (extrudedData[k].normalizeV ? smoothLength : actualToRestLengthRatio)); + + // calculate section thickness and scale the basis vectors by it: + float sectionThickness = frames[index].thickness * extrudedData[k].thicknessScale; + + // Loop around each segment: + int nextSectionIndex = sectionIndex + 1; + for (int j = 0; j <= sectionSegments; ++j) + { + // make just one copy of the section vertex: + float2 sectionVertex = sectionData[sectionStart + j]; + + // calculate normal using section vertex, curve normal and binormal: + normal.x = (sectionVertex.x * frames[index].normal.x + sectionVertex.y * frames[index].binormal.x) * sectionThickness; + normal.y = (sectionVertex.x * frames[index].normal.y + sectionVertex.y * frames[index].binormal.y) * sectionThickness; + normal.z = (sectionVertex.x * frames[index].normal.z + sectionVertex.y * frames[index].binormal.z) * sectionThickness; + + // offset curve position by normal: + vertex.x = frames[index].position.x + normal.x; + vertex.y = frames[index].position.y + normal.y; + vertex.z = frames[index].position.z + normal.z; + + // cross(normal, curve tangent) + texTangent.xyz = cross(normal, frames[index].tangent); + texTangent.w = -1; + + int base = (firstVertex + sectionIndex * verticesPerSection + j) * 16; + vertices.Store3( base<<2, asuint(vertex)); + vertices.Store3((base + 3)<<2, asuint(normal)); + vertices.Store4((base + 6)<<2, asuint(texTangent)); + vertices.Store4((base + 10)<<2, asuint(frames[index].color)); + vertices.Store2((base + 14)<<2, asuint(float2(j / (float)sectionSegments * extrudedData[k].uvScale.x, vCoord))); + + if (j < sectionSegments && f < frameCount - 1) + { + int offset = firstTriangle * 3; + tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * verticesPerSection + j)); + tris.Store((offset + tri++)<<2, asuint(firstVertex + nextSectionIndex * verticesPerSection + j)); + tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * verticesPerSection + (j + 1))); + + tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * verticesPerSection + (j + 1))); + tris.Store((offset + tri++)<<2, asuint(firstVertex + nextSectionIndex * verticesPerSection + j)); + tris.Store((offset + tri++)<<2, asuint(firstVertex + nextSectionIndex * verticesPerSection + (j + 1))); + } + } + sectionIndex++; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta new file mode 100644 index 000000000..2861b99f9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d389c799c83d43f38f2486ab16fe902 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RopeLineRendering.compute b/Assets/ThirdParty/Obi/Resources/Compute/RopeLineRendering.compute new file mode 100644 index 000000000..8d3582ae6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RopeLineRendering.compute @@ -0,0 +1,162 @@ +#pragma kernel UpdateLineMesh + +#include "PathFrame.cginc" + +struct smootherPathData +{ + uint smoothing; + float decimation; + float twist; + float restLength; + float smoothLength; + uint usesOrientedParticles; +}; + +struct lineMeshData +{ + float2 uvScale; + float thicknessScale; + float uvAnchor; + uint normalizeV; +}; + +StructuredBuffer pathSmootherIndices; +StructuredBuffer chunkOffsets; + +StructuredBuffer frames; +StructuredBuffer frameOffsets; +StructuredBuffer frameCounts; + +StructuredBuffer vertexOffsets; +StructuredBuffer triangleOffsets; +StructuredBuffer triangleCounts; + +StructuredBuffer rendererData; +StructuredBuffer pathData; + +RWByteAddressBuffer vertices; +RWByteAddressBuffer tris; + +// Variables set from the CPU +uint firstRenderer; +uint rendererCount; +float3 localSpaceCamera; + +pathFrame LookAt(pathFrame frame, in pathFrame target, out float dist) +{ + float3 tangent = target.position - frame.position; + dist = length(tangent); + tangent /= dist + EPSILON; + + quaternion rotQ = from_to_rotation(frame.tangent, tangent); + frame.normal = rotate_vector(rotQ, frame.normal); + frame.binormal = rotate_vector(rotQ, frame.binormal); + frame.tangent = tangent; + + return frame; +} + +[numthreads(128, 1, 1)] +void UpdateLineMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int u = id.x; + if (u >= rendererCount) return; + + int k = firstRenderer + u; + int s = pathSmootherIndices[k]; + + float3 vertex = float3(0,0,0); + float3 normal = float3(0,0,0); + float4 bitangent = FLOAT4_ZERO; + + int tri = 0; + int sectionIndex = 0; + int firstVertex = vertexOffsets[k]; + int firstTriangle = triangleOffsets[k]; + + float smoothLength = 0; + int i = 0; + for (i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) + smoothLength += pathData[i].smoothLength; + + float vCoord = -rendererData[k].uvScale.y * pathData[chunkOffsets[s]].restLength * rendererData[k].uvAnchor; + float actualToRestLengthRatio = smoothLength / pathData[chunkOffsets[s]].restLength; + + // clear out triangle indices for this rope: + for (i = firstTriangle; i < firstTriangle + triangleCounts[k]; ++i) + { + int offset = i*3; + tris.Store((offset)<<2, 0); + tris.Store((offset+1)<<2,0); + tris.Store((offset+2)<<2,0); + } + + // for each chunk in the rope: + for (i = chunkOffsets[s]; i < chunkOffsets[s+1]; ++i) + { + int firstFrame = frameOffsets[i]; + int frameCount = frameCounts[i]; + + for (int f = 0; f < frameCount; ++f) + { + // Calculate previous and next curve indices: + int prevIndex = firstFrame + max(f - 1, 0); + int index = firstFrame + f; + + // advance v texcoord: + vCoord += rendererData[k].uvScale.y * (distance(frames[index].position, frames[prevIndex].position) / + (rendererData[k].normalizeV == 1 ? smoothLength : actualToRestLengthRatio)); + + // calculate section thickness and scale the basis vectors by it: + float sectionThickness = frames[index].thickness * rendererData[k].thicknessScale; + + normal.x = frames[index].position.x - localSpaceCamera.x; + normal.y = frames[index].position.y - localSpaceCamera.y; + normal.z = frames[index].position.z - localSpaceCamera.z; + normal = normalize(normal); + + bitangent.x = -(normal.y * frames[index].tangent.z - normal.z * frames[index].tangent.y); + bitangent.y = -(normal.z * frames[index].tangent.x - normal.x * frames[index].tangent.z); + bitangent.z = -(normal.x * frames[index].tangent.y - normal.y * frames[index].tangent.x); + bitangent.xyz = normalize(bitangent.xyz); + bitangent.w = 1; + + vertex.x = frames[index].position.x - bitangent.x * sectionThickness; + vertex.y = frames[index].position.y - bitangent.y * sectionThickness; + vertex.z = frames[index].position.z - bitangent.z * sectionThickness; + + int base = (firstVertex + sectionIndex * 2) * 16; + vertices.Store3( base<<2, asuint(vertex)); + vertices.Store3((base + 3)<<2, asuint(-normal)); + vertices.Store4((base + 6)<<2, asuint(bitangent)); + vertices.Store4((base + 10)<<2, asuint(frames[index].color)); + vertices.Store2((base + 14)<<2, asuint(float2(0, vCoord))); + + vertex.x = frames[index].position.x + bitangent.x * sectionThickness; + vertex.y = frames[index].position.y + bitangent.y * sectionThickness; + vertex.z = frames[index].position.z + bitangent.z * sectionThickness; + + base = (firstVertex + sectionIndex * 2 + 1) * 16; + vertices.Store3( base<<2, asuint(vertex)); + vertices.Store3((base + 3)<<2, asuint(-normal)); + vertices.Store4((base + 6)<<2, asuint(bitangent)); + vertices.Store4((base + 10)<<2, asuint(frames[index].color)); + vertices.Store2((base + 14)<<2, asuint(float2(1, vCoord))); + + if (f < frameCount - 1) + { + + int offset = firstTriangle * 3; + tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * 2)); + tris.Store((offset + tri++)<<2, asuint(firstVertex + (sectionIndex + 1) * 2)); + tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * 2 + 1)); + + tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * 2 + 1)); + tris.Store((offset + tri++)<<2, asuint(firstVertex + (sectionIndex + 1) * 2)); + tris.Store((offset + tri++)<<2, asuint(firstVertex + (sectionIndex + 1) * 2 + 1)); + } + + sectionIndex++; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RopeLineRendering.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/RopeLineRendering.compute.meta new file mode 100644 index 000000000..05e0afc7a --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RopeLineRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9fce691efd9941a78e1e74355ec3d84 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RopeMeshRendering.compute b/Assets/ThirdParty/Obi/Resources/Compute/RopeMeshRendering.compute new file mode 100644 index 000000000..f12fc2dcc --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RopeMeshRendering.compute @@ -0,0 +1,218 @@ +#pragma kernel UpdateRopeMesh + +#include "PathFrame.cginc" + +struct ropeMeshData +{ + uint axis; + float volumeScaling; + uint stretchWithRope; + uint spanEntireLength; + uint instances; + float instanceSpacing; + float offset; + float meshSizeAlongAxis; + float4 scale; +}; + +struct smootherPathData +{ + uint smoothing; + float decimation; + float twist; + float restLength; + float smoothLength; + uint usesOrientedParticles; +}; + +struct MeshData +{ + int firstVertex; + int vertexCount; + + int firstTriangle; + int triangleCount; +}; + +StructuredBuffer pathSmootherIndices; +StructuredBuffer chunkOffsets; + +StructuredBuffer frames; +StructuredBuffer frameOffsets; +StructuredBuffer frameCounts; + +StructuredBuffer vertexOffsets; + +StructuredBuffer meshIndices; +StructuredBuffer meshData; + +StructuredBuffer sortedIndices; +StructuredBuffer sortedOffsets; + +StructuredBuffer rendererData; +StructuredBuffer pathData; + +StructuredBuffer positions; +StructuredBuffer normals; +StructuredBuffer tangents; +StructuredBuffer colors; + +RWByteAddressBuffer vertices; + +// Variables set from the CPU +uint firstRenderer; +uint rendererCount; + +pathFrame InterpolateFrames(pathFrame a, pathFrame b, float3 bOffset, float t) +{ + // this offset is used to displace a copy of the first and last frames of the path, + // to ensure meshes extrude correctly prior to the first or past the last frame. + b.position += bOffset; + pathFrame interp = addFrames(multiplyFrame(1 - t, a) ,multiplyFrame(t , b)); + + // (no need to renormalize tangent, since offsetFromCurve[axis] = 0) + interp.normal = normalize(interp.normal); + interp.binormal = normalize(interp.binormal); + return interp; +} + +[numthreads(16, 1, 1)] +void UpdateRopeMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= rendererCount) return; + + int rendererIndex = firstRenderer + i; + int pathIndex = pathSmootherIndices[rendererIndex]; + ropeMeshData renderer = rendererData[rendererIndex]; + + // get mesh data: + MeshData mesh = meshData[meshIndices[rendererIndex]]; + int sortedOffset = sortedOffsets[rendererIndex]; + + // get index of first output vertex: + int firstOutputVertex = vertexOffsets[rendererIndex]; + + // get index of first chunk, ignore others (no support for tearing): + int chunkIndex = chunkOffsets[pathIndex]; + + // get first frame and frame count: + int firstFrame = frameOffsets[chunkIndex]; + int lastFrame = firstFrame + frameCounts[chunkIndex] - 1; + + // get mesh deform axis: + int axis = renderer.axis; + + // initialize scale vector: + float3 actualScale = renderer.scale.xyz; + + // calculate stretch ratio: + float stretchRatio = renderer.stretchWithRope == 1 ? pathData[chunkIndex].smoothLength / pathData[chunkIndex].restLength : 1; + + // squashing factor, makes mesh thinner when stretched and thicker when compresssed. + float squashing = clamp(1 + renderer.volumeScaling * (1 / max(stretchRatio, 0.01f) - 1), 0.01f, 2); + + // calculate scale along swept axis so that the mesh spans the entire lenght of the rope if required. + if (renderer.spanEntireLength == 1) + { + float totalMeshLength = renderer.meshSizeAlongAxis * renderer.instances; + float totalSpacing = renderer.instanceSpacing * (renderer.instances - 1); + float axisScale = pathData[chunkIndex].restLength / (totalMeshLength + totalSpacing); + + if (axis == 0) actualScale.x = axisScale; + else if (axis == 1) actualScale.y = axisScale; + else actualScale.z = axisScale; + } + + // init loop variables: + float lengthAlongAxis = renderer.offset; + int index = firstFrame; + int nextIndex = firstFrame + 1; + int prevIndex = firstFrame; + float nextMagnitude = distance(frames[index].position, frames[nextIndex].position); + float prevMagnitude = nextMagnitude; + + + for (int j = 0; j < mesh.vertexCount; ++j) + { + int base = (firstOutputVertex + sortedIndices[sortedOffset + j]) * 14; + vertices.Store3(base << 2, asuint(positions[mesh.firstVertex + sortedIndices[sortedOffset + j]] * float3(0.5,1,1))); + } + + for (int k = 0; k < (int)renderer.instances; ++k) + { + for (int j = 0; j < mesh.vertexCount; ++j) + { + int currVIndex = mesh.firstVertex + sortedIndices[sortedOffset + j]; + int prevVIndex = mesh.firstVertex + sortedIndices[sortedOffset + max(0,j - 1)]; + + // calculate how much we've advanced in the sort axis since the last vertex: + lengthAlongAxis += (positions[currVIndex][axis] - positions[prevVIndex][axis]) * actualScale[axis] * stretchRatio; + + // check if we have moved to a new section of the curve: + pathFrame frame; + if (lengthAlongAxis < 0) + { + while (-lengthAlongAxis > prevMagnitude && index > firstFrame) + { + lengthAlongAxis += prevMagnitude; + index = max(index - 1, firstFrame); + nextIndex = min(index + 1, lastFrame); + prevIndex = max(index - 1, firstFrame); + nextMagnitude = distance(frames[index].position, frames[nextIndex].position); + prevMagnitude = distance(frames[index].position, frames[prevIndex].position); + } + + float3 offset = float3(0,0,0); + if (index == prevIndex) + { + offset = frames[index].position - frames[nextIndex].position; + prevMagnitude = length(offset); + } + + frame = InterpolateFrames(frames[index], frames[prevIndex], offset, -lengthAlongAxis / prevMagnitude); + } + else + { + while (lengthAlongAxis > nextMagnitude && index < lastFrame) + { + lengthAlongAxis -= nextMagnitude; + index = min(index + 1, lastFrame); + nextIndex = min(index + 1, lastFrame); + prevIndex = max(index - 1, firstFrame); + nextMagnitude = distance(frames[index].position, frames[nextIndex].position); + prevMagnitude = distance(frames[index].position, frames[prevIndex].position); + } + + float3 offset = float3(0,0,0); + if (index == nextIndex) + { + offset = frames[index].position - frames[prevIndex].position; + nextMagnitude = length(offset); + } + + frame = InterpolateFrames(frames[index], frames[nextIndex], offset, lengthAlongAxis / nextMagnitude); + } + + // update basis matrix: + float3x3 basis = frame.ToMatrix(axis); + + // calculate vertex offset from curve: + float3 offsetFromCurve = positions[currVIndex] * actualScale * frame.thickness * squashing; + if (axis == 0) offsetFromCurve.x = 0; + else if (axis == 1) offsetFromCurve.y = 0; + else offsetFromCurve.z = 0; + + // write modified vertex data: + int base = (firstOutputVertex + sortedIndices[sortedOffset + j]) * 14; + vertices.Store3( base<<2, asuint(frame.position + mul(basis, offsetFromCurve))); + vertices.Store3((base + 3)<<2, asuint(mul(basis, normals[currVIndex]))); + vertices.Store4((base + 6)<<2, asuint(float4(mul(basis, tangents[currVIndex].xyz), tangents[currVIndex].w))); + vertices.Store4((base + 10)<<2, asuint(frames[index].color)); + } + + firstOutputVertex += mesh.vertexCount; + lengthAlongAxis += renderer.instanceSpacing * actualScale[axis] * stretchRatio; + } + +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/RopeMeshRendering.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/RopeMeshRendering.compute.meta new file mode 100644 index 000000000..fbe83db5c --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/RopeMeshRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68510b7d06c3544fba668628be450928 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Scan.compute b/Assets/ThirdParty/Obi/Resources/Compute/Scan.compute new file mode 100644 index 000000000..dc961d991 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Scan.compute @@ -0,0 +1,78 @@ +#pragma kernel ScanInBucketExclusive +#pragma kernel ScanAddBucketResult + +#define THREADS_PER_GROUP 512 // Ensure that this equals the 'threadsPerGroup' const in the host script. Must be an odd power of 2. + +// These must be a multiple of THREADS_PER_GROUP. +StructuredBuffer _Input; +RWStructuredBuffer _Result; +RWStructuredBuffer _BlockSum; +uint count; + +groupshared uint bucket[THREADS_PER_GROUP]; + +// Scan in each bucket. +[numthreads(THREADS_PER_GROUP, 1, 1)] +void ScanInBucketExclusive(uint DTid : SV_DispatchThreadID, uint Gid : SV_GroupID, uint GI : SV_GroupIndex) +{ + if (DTid < count) { + bucket[GI] = _Input[DTid]; + } else { + bucket[GI] = 0; + } + + GroupMemoryBarrierWithGroupSync(); + + uint stride; + + // up-sweep + [unroll] + for (stride = 2; stride <= THREADS_PER_GROUP; stride <<= 1) + { + GroupMemoryBarrierWithGroupSync(); + if (((GI + 1) % stride) == 0) + { + const uint half_stride = (stride >> 1); + bucket[GI] += bucket[GI - half_stride]; + } + } + + // Without this barrier, setting tg_mem[-1] to 0 may not be properly + // propagated across the entire threadgroup. + GroupMemoryBarrierWithGroupSync(); + if (GI == THREADS_PER_GROUP - 1) + { + // clear the last element + _BlockSum[Gid] = bucket[GI]; + bucket[GI] = 0; + } + + // down-sweep + [unroll] + for (stride = THREADS_PER_GROUP; stride > 1; stride >>= 1) + { + GroupMemoryBarrierWithGroupSync(); + + if (((GI + 1) % stride) == 0) + { + const uint half_stride = (stride >> 1); + const uint prev_idx = GI - half_stride; + const int tmp = bucket[prev_idx]; + bucket[prev_idx] = bucket[GI]; + bucket[GI] += tmp; + } + } + + GroupMemoryBarrierWithGroupSync(); + + if (DTid < count) + _Result[DTid] = bucket[GI]; +} + +// Add the bucket scanned result to each bucket to get the final result. +[numthreads(THREADS_PER_GROUP, 1, 1)] +void ScanAddBucketResult(uint DTid : SV_DispatchThreadID, uint Gid : SV_GroupID) +{ + if (DTid < count) + _Result[DTid] += _Input[Gid]; +} diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Scan.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/Scan.compute.meta new file mode 100644 index 000000000..4b20551d8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Scan.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7124bb82b9af4476c8de8e82d7f8caba +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ShapeMatchingConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/ShapeMatchingConstraints.compute new file mode 100644 index 000000000..79d671b37 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ShapeMatchingConstraints.compute @@ -0,0 +1,266 @@ +#pragma kernel CalculateRestShapeMatching +#pragma kernel PlasticDeformation +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer firstIndex; +StructuredBuffer numIndices; +StructuredBuffer explicitGroup; +StructuredBuffer shapeMaterialParameters; + +RWStructuredBuffer RW_restComs; +RWStructuredBuffer coms; +RWStructuredBuffer constraintOrientations; + +RWStructuredBuffer RW_Aqq; +RWStructuredBuffer RW_linearTransforms; +RWStructuredBuffer RW_deformation; + +RWStructuredBuffer RW_positions; +RWStructuredBuffer orientations; + +StructuredBuffer restComs; +StructuredBuffer Aqq; +StructuredBuffer linearTransforms; +StructuredBuffer deformation; + +StructuredBuffer positions; +StructuredBuffer restPositions; +StructuredBuffer restOrientations; +StructuredBuffer invMasses; +StructuredBuffer invRotationalMasses; +StructuredBuffer principalRadii; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +void RecalculateRestData(uint i) +{ + int k = 0; + float maximumMass = 10000; + + // initialize rest center of mass and shape matrix: + RW_restComs[i] = FLOAT4_ZERO; + RW_Aqq[i] = FLOAT4X4_ZERO; + + float4 restCom = FLOAT4_ZERO; + float4x4 _Aqq = FLOAT4X4_ZERO, _Rqq = FLOAT4X4_ZERO; + + // calculate rest center of mass, shape mass and RW_Aqq matrix. + for (int j = 0; j < numIndices[i]; ++j) + { + k = particleIndices[firstIndex[i] + j]; + + float mass = maximumMass; + if (invMasses[k] > 1.0f / maximumMass) + mass = 1.0f / invMasses[k]; + + restCom += restPositions[k] * mass; + + float4x4 particleR = q_toMatrix(restOrientations[k]); + particleR[3][3] = 0; + + _Rqq += mul(particleR, + mul(AsDiagonal(GetParticleInertiaTensor(principalRadii[k],invRotationalMasses[k])), + transpose(particleR)) + ); + + float4 restPosition = restPositions[k]; + restPosition[3] = 0; + + _Aqq += mass * multrnsp4(restPosition, restPosition); + } + + if (restCom[3] < EPSILON) + return; + + restCom.xyz /= restCom[3]; + RW_restComs[i] = restCom; + + restCom[3] = 0; + _Aqq -= RW_restComs[i][3] * multrnsp4(restCom, restCom); + _Aqq[3][3] = 1; // so that the determinant is never 0 due to all-zeros row/column. + + RW_Aqq[i] = Inverse(_Rqq + mul(RW_deformation[i], mul(_Aqq, transpose(RW_deformation[i])))); + +} + +[numthreads(128, 1, 1)] +void CalculateRestShapeMatching (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + RecalculateRestData(i); +} + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int k; + float maximumMass = 10000; + + coms[i] = FLOAT4_ZERO; + float4x4 Apq = FLOAT4X4_ZERO, Rpq = FLOAT4X4_ZERO; + + // calculate shape mass, center of mass, and moment matrix: + int j; + for (j = 0; j < numIndices[i]; ++j) + { + k = particleIndices[firstIndex[i] + j]; + + float mass = maximumMass; + if (invMasses[k] > 1.0f / maximumMass) + mass = 1.0f / invMasses[k]; + + coms[i] += positions[k] * mass; + + float4x4 particleR = q_toMatrix(orientations[k]); + float4x4 particleRT = q_toMatrix(restOrientations[k]); + particleR[3][3] = 0; + particleRT[3][3] = 0; + + Rpq += mul(particleR, + mul(AsDiagonal(GetParticleInertiaTensor(principalRadii[k],invRotationalMasses[k])), + transpose(particleRT)) + ); + + float4 restPosition = restPositions[k]; + restPosition[3] = 0; + + Apq += mass * multrnsp4(positions[k], restPosition); + } + + if (restComs[i][3] < EPSILON) + return; + + coms[i] /= restComs[i][3]; + + // subtract global shape moment: + float4 restCom = restComs[i]; + restCom[3] = 0; + + Apq -= restComs[i][3] * multrnsp4(coms[i], restCom); + + // calculate optimal transform including plastic deformation: + float4x4 Apq_def = Rpq + mul(Apq, transpose(deformation[i])); + Apq_def[3][3] = 1; + + // reconstruct full best-matching linear transform: + RW_linearTransforms[i] = mul(Apq_def, Aqq[i]); + + // extract rotation from transform matrix, using warmstarting and few iterations: + constraintOrientations[i] = ExtractRotation(Apq_def, constraintOrientations[i], 5); + + // calculate particle orientations: + if (explicitGroup[i] > 0) + { + // if the group is explicit, set the orientation for all particles: + for (int j = 0; j < numIndices[i]; ++j) + { + k = particleIndices[firstIndex[i] + j]; + orientations[k] = qmul(constraintOrientations[i], restOrientations[k]); + } + } + else + { + // set orientation of center particle only: + int centerIndex = particleIndices[firstIndex[i]]; + orientations[centerIndex] = qmul(constraintOrientations[i], restOrientations[centerIndex]); + } + + // finally, obtain rotation matrix: + float4x4 R = q_toMatrix(constraintOrientations[i]); + R[3][3] = 0; + float4x4 transform = mul(R,deformation[i]); + + // calculate and accumulate particle goal positions: + float4 goal, delta; + for (j = 0; j < numIndices[i]; ++j) + { + k = particleIndices[firstIndex[i] + j]; + goal = coms[i] + mul(transform, restPositions[k] - restComs[i]); + delta = (goal - positions[k]) * shapeMaterialParameters[i * 5]; + + AddPositionDelta(k, delta); + } +} + +[numthreads(128, 1, 1)] +void PlasticDeformation (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= activeConstraintCount) return; + + // get plastic deformation parameters: + float plastic_yield = shapeMaterialParameters[i * 5 + 1]; + float plastic_creep = shapeMaterialParameters[i * 5 + 2]; + float plastic_recovery = shapeMaterialParameters[i * 5 + 3]; + float max_deform = shapeMaterialParameters[i * 5 + 4]; + + // if we are allowed to absorb deformation: + if (plastic_creep > 0) + { + //obtain rotation matrix: + float4x4 R = q_toMatrix(constraintOrientations[i]); + R[3][3] = 1; + + // get scale matrix (A = RS so S = Rt * A) and its deviation from the identity matrix: + float4x4 deform_matrix = mul(transpose(R), linearTransforms[i]) - FLOAT4X4_IDENTITY; + + // if the amount of deformation exceeds the yield threshold: + float norm = FrobeniusNorm(deform_matrix); + if (norm > plastic_yield) + { + // deform the shape permanently: + RW_deformation[i] = mul(FLOAT4X4_IDENTITY + plastic_creep * deform_matrix, RW_deformation[i]); + + // clamp deformation so that it does not exceed a percentage; + deform_matrix = RW_deformation[i] - FLOAT4X4_IDENTITY; + norm = FrobeniusNorm(deform_matrix); + if (norm > max_deform) + { + RW_deformation[i] = FLOAT4X4_IDENTITY + max_deform * deform_matrix / norm; + } + + // if we cannot recover from plastic deformation, recalculate rest shape now: + if (plastic_recovery == 0) + RecalculateRestData(i); + } + } + + // if we can recover from plastic deformation, lerp towards non-deformed shape and recalculate rest shape: + if (plastic_recovery > 0) + { + RW_deformation[i] += (FLOAT4X4_IDENTITY - RW_deformation[i]) * min(plastic_recovery * deltaTime, 1.0f); + RecalculateRestData(i); + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int first = firstIndex[i]; + int last = first + numIndices[i]; + + for (int k = first; k < last; ++k) + { + int p = particleIndices[k]; + ApplyPositionDelta(RW_positions, p, sorFactor); + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta new file mode 100644 index 000000000..ea486ca81 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18ba9336feedf4902b78736cf9abdaa8 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Simplex.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Simplex.cginc new file mode 100644 index 000000000..9fc762e39 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Simplex.cginc @@ -0,0 +1,89 @@ +#ifndef SIMPLEX_INCLUDE +#define SIMPLEX_INCLUDE + +#include "Optimization.cginc" + +uint pointCount; +uint edgeCount; +uint triangleCount; + +int GetSimplexStartAndSize(in uint index, out uint size) +{ + size = 0; + int start = 0; + + if (index < triangleCount) + { + size = 3; + start = index * 3; + } + else if (index < triangleCount + edgeCount) + { + size = 2; + start = triangleCount * 3 + (index - triangleCount) * 2; + } + else if (index < triangleCount + edgeCount + pointCount) + { + size = 1; + start = triangleCount * 3 + edgeCount * 2 + (index - triangleCount - edgeCount); + } + return start; +} + +float4 BarycenterForSimplexOfSize(in int simplexSize) +{ + switch(simplexSize) + { + case 1: return float4(1,0,0,0); + case 2: return float4(0.5,0.5,0,0); + case 3: return float4(1/3.0,1/3.0,1/3.0,0); + case 4: return float4(0.25,0.25,0.25,0.25); + default: return float4(1,0,0,0); + } +} + +struct Simplex : IDistanceFunction +{ + StructuredBuffer positions; + StructuredBuffer radii; + StructuredBuffer simplices; + + int simplexStart; + int simplexSize; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + switch (simplexSize) + { + case 1: + default: + { + float4 p1 = positions[simplices[simplexStart]]; p1.w = 0; + projectedPoint.bary = float4(1, 0, 0, 0); + projectedPoint.pos = p1; + } + break; + case 2: + { + float4 p1 = positions[simplices[simplexStart]]; p1.w = 0; + float4 p2 = positions[simplices[simplexStart + 1]]; p2.w = 0; + float mu; + NearestPointOnEdge(p1, p2, pos, mu); + projectedPoint.bary = float4(1 - mu, mu, 0, 0); + projectedPoint.pos = p1 * projectedPoint.bary[0] + p2 * projectedPoint.bary[1]; + + }break; + case 3: + { + CachedTri tri; + tri.Cache(float4(positions[simplices[simplexStart]].xyz,0), + float4(positions[simplices[simplexStart + 1]].xyz,0), + float4(positions[simplices[simplexStart + 2]].xyz,0)); + projectedPoint.pos = NearestPointOnTri(tri, pos, projectedPoint.bary); + }break; + } + projectedPoint.normal = normalizesafe(pos - projectedPoint.pos); + } + +}; +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Simplex.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/Simplex.cginc.meta new file mode 100644 index 000000000..a695ffd73 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Simplex.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d8eeb7300d95c4653a91d905aaaf5344 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SkinConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/SkinConstraints.compute new file mode 100644 index 000000000..c3714990c --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SkinConstraints.compute @@ -0,0 +1,71 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer skinPoints; +StructuredBuffer skinNormals; +StructuredBuffer skinRadiiBackstop; +StructuredBuffer skinCompliance; +RWStructuredBuffer lambdas; + +RWStructuredBuffer positions; +StructuredBuffer invMasses; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + float radius = skinRadiiBackstop[i].x; + float collisionRadius = skinRadiiBackstop[i].y; + float backstopDistance = collisionRadius + skinRadiiBackstop[i].z; + + float compliance = skinCompliance[i] / (deltaTime * deltaTime); + int p = particleIndices[i]; + + if (invMasses[p] > 0) + { + float4 toSkin = positions[p] - skinPoints[i]; + float4 toBackstop = positions[p] - (skinPoints[i] - skinNormals[i] * backstopDistance); + + // distance to skin and backstop sphere centers: + float d = length(toSkin); + float b = length(toBackstop); + + // constrain particle within skin radius. + // ignore mass in the equations (use 1), as we don't want particle mass to interfere with skin compliance. + // We should be able to adjust skin properties and particle mass (for collisions) independently. + float constraint = max(0,d - radius); + float dlambda = (-constraint - compliance * lambdas[i]) / (1 + compliance); + lambdas[i] += dlambda; + float4 skinCorrection = dlambda * toSkin / (d + EPSILON); + + // constrain particle outside the backstop sphere (0 compliance): + constraint = min(0, b - collisionRadius); + float4 backstopCorrection = - constraint * toBackstop / (b + EPSILON); + + AddPositionDelta(p, skinCorrection + backstopCorrection); + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i]; + + ApplyPositionDelta(positions, p1, sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SkinConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/SkinConstraints.compute.meta new file mode 100644 index 000000000..92eeacff3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SkinConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bec2152263654b08b1639ececa4ced6 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SoftbodyRendering.compute b/Assets/ThirdParty/Obi/Resources/Compute/SoftbodyRendering.compute new file mode 100644 index 000000000..1afb27c92 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SoftbodyRendering.compute @@ -0,0 +1,145 @@ +#pragma kernel UpdateSoftbodyMesh + +#include "MathUtils.cginc" + +struct Influence +{ + int index; + float weight; +}; + +struct SkinmapData +{ + int firstInfluence; + int firstInfNumber; + int firstParticleBindPose; + + int firstSkinWeight; + int firstSkinWeightNumber; + int firstBoneBindPose; + + int bindPoseCount; +}; + +struct SkeletonData +{ + int firstBone; + int boneCount; +}; + +struct MeshData +{ + int firstVertex; + int vertexCount; + + int firstTriangle; + int triangleCount; +}; + +StructuredBuffer particleIndices; +StructuredBuffer rendererIndices; // for each vertex/particle, index of its renderer. + +StructuredBuffer renderablePositions; +StructuredBuffer renderableOrientations; + +StructuredBuffer restPositions; +StructuredBuffer restOrientations; +StructuredBuffer colors; + +StructuredBuffer skinConstraintOffsets; + +StructuredBuffer skinmapIndices; // for each renderer, index of its skinmap. +StructuredBuffer meshIndices; // for each renderer, index of its mesh. +StructuredBuffer skeletonIndices; // for each renderer, index of its skeleton. + +StructuredBuffer particleOffsets; // for each renderer, index of its first particle in the batch. +StructuredBuffer vertexOffsets; // for each renderer, index of its first vertex in the batch. + +StructuredBuffer skinData; +StructuredBuffer influences; +StructuredBuffer influenceOffsets; +StructuredBuffer bindPoses; + +StructuredBuffer skeletonData; +StructuredBuffer bonePos; +StructuredBuffer boneRot; +StructuredBuffer boneScl; + +StructuredBuffer meshData; +StructuredBuffer positions; +StructuredBuffer normals; +StructuredBuffer tangents; + +RWByteAddressBuffer vertices; + +// Variables set from the CPU +uint vertexCount; +float4x4 world2Solver; + +[numthreads(128, 1, 1)] +void UpdateSoftbodyMesh (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= vertexCount) return; + + int rendererIndex = rendererIndices[i]; + + // get skin map and mesh data: + SkinmapData skin = skinData[skinmapIndices[rendererIndex]]; + MeshData mesh = meshData[meshIndices[rendererIndex]]; + SkeletonData skel = skeletonData[skeletonIndices[rendererIndex]]; + + // get index of this vertex in its original mesh: + int originalVertexIndex = i - vertexOffsets[rendererIndex]; + + // get index of the vertex in the mesh batch: + int batchedVertexIndex = mesh.firstVertex + originalVertexIndex; + + // get first influence and amount of influences for this vertex: + int influenceStart = influenceOffsets[skin.firstInfNumber + originalVertexIndex]; + int influenceCount = influenceOffsets[skin.firstInfNumber + originalVertexIndex + 1] - influenceStart; + + float3 position = float3(0,0,0); + float3 normal = float3(0,0,0); + float4 tangent = FLOAT4_ZERO; + float4 color = FLOAT4_ZERO; + + for (int k = influenceStart; k < influenceStart + influenceCount; ++k) + { + Influence inf = influences[skin.firstInfluence + k]; + float4x4 trfm; + + if (inf.index < skin.bindPoseCount) // bone influence: + { + int boneIndex = skel.firstBone + inf.index; + int bindIndex = skin.firstParticleBindPose + inf.index; + + float4x4 bind = bindPoses[bindIndex]; + + float4x4 deform = inf.index < skel.boneCount ? TRS(bonePos[boneIndex], boneRot[boneIndex], boneScl[boneIndex]) : FLOAT4X4_IDENTITY; + + // bone skinning leaves vertices in world space, so convert to solver space afterwards: + trfm = mul(world2Solver, mul(deform, bind)); + } + else // particle influence + { + int p = particleIndices[particleOffsets[rendererIndex] + inf.index - skin.bindPoseCount]; + + float4x4 deform = mul(m_translate(FLOAT4X4_IDENTITY,renderablePositions[p].xyz), q_toMatrix(renderableOrientations[p])); + trfm = mul(deform, bindPoses[skin.firstParticleBindPose + inf.index]); + color += colors[p] * inf.weight; + } + + // update vertex/normal/tangent: + position += mul(trfm, float4(positions[batchedVertexIndex], 1)).xyz * inf.weight; + normal += mul(trfm, float4(normals[batchedVertexIndex], 0)).xyz * inf.weight; + tangent += float4(mul(trfm, float4(tangents[batchedVertexIndex].xyz, 0)).xyz, tangents[batchedVertexIndex].w) * inf.weight; + } + + int base = i * 14; + vertices.Store3( base<<2, asuint(position)); + vertices.Store3((base + 3)<<2, asuint(normal)); + vertices.Store4((base + 6)<<2, asuint(tangent)); + vertices.Store4((base + 10)<<2, asuint(color)); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SoftbodyRendering.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/SoftbodyRendering.compute.meta new file mode 100644 index 000000000..4ae05f36c --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SoftbodyRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 805ca20f71b034180a1ab0ba707928be +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Solver.compute b/Assets/ThirdParty/Obi/Resources/Compute/Solver.compute new file mode 100644 index 000000000..2cb5d27cc --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Solver.compute @@ -0,0 +1,288 @@ +#pragma kernel ApplyInertialForces +#pragma kernel ApplyRigidbodyDeltas +#pragma kernel PredictPositions +#pragma kernel UpdateVelocities +#pragma kernel UpdatePositions +#pragma kernel UpdateLifetimes +#pragma kernel EnforceLimits +#pragma kernel Interpolate + +#include "Bounds.cginc" +#include "Integration.cginc" +#include "CollisionMaterial.cginc" +#include "SolverParameters.cginc" +#include "MathUtils.cginc" +#include "Rigidbody.cginc" + +StructuredBuffer simplices; +StructuredBuffer activeParticles; +StructuredBuffer invMasses; +StructuredBuffer invRotationalMasses; +StructuredBuffer phases; +StructuredBuffer buoyancies; +StructuredBuffer fluidRadii; + +StructuredBuffer startPositions; +StructuredBuffer endPositions; +StructuredBuffer startOrientations; +StructuredBuffer endOrientations; + +RWStructuredBuffer positions; +RWStructuredBuffer orientations; +RWStructuredBuffer principalRadii; +RWStructuredBuffer renderablePositions; +RWStructuredBuffer renderableOrientations; +RWStructuredBuffer renderableRadii; +RWStructuredBuffer prevPositions; +RWStructuredBuffer prevOrientations; +RWStructuredBuffer velocities; +RWStructuredBuffer angularVelocities; +RWStructuredBuffer life; +RWStructuredBuffer wind; + +RWStructuredBuffer deadParticles; + +RWStructuredBuffer externalForces; +RWStructuredBuffer externalTorques; + +RWStructuredBuffer linearDeltas; +RWStructuredBuffer angularDeltas; + +StructuredBuffer inertialSolverFrame; + +// Variables set from the CPU +uint particleCount; + +float deltaTime; +float blendFactor; +float velocityScale; +bool killOffLimits; + +float4 angularVel; +float4 inertialAccel; +float4 eulerAccel; +float4 ambientWind; +bool inertialWind; + +float4 boundaryLimitsMin; +float4 boundaryLimitsMax; + +[numthreads(128, 1, 1)] +void ApplyInertialForces(uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = activeParticles[i]; + + if (invMasses[p] > 0) + { + float4 euler = float4(cross(eulerAccel.xyz, positions[p].xyz), 0); + float4 centrifugal = float4(cross(angularVel.xyz, cross(angularVel.xyz, positions[p].xyz)), 0); + float4 coriolis = 2 * float4(cross(angularVel.xyz, velocities[p].xyz), 0); + float4 angularAccel = euler + coriolis + centrifugal; + + velocities[p] -= (inertialAccel * worldLinearInertiaScale + angularAccel * worldAngularInertiaScale) * deltaTime; + } + + wind[p] = ambientWind; + + if (inertialWind) + { + float4 wsPos = inertialSolverFrame[0].frame.TransformPoint(positions[p]); + wind[p] -= inertialSolverFrame[0].frame.InverseTransformVector(inertialSolverFrame[0].velocityAtPoint(wsPos)); + } +} + +[numthreads(128, 1, 1)] +void ApplyRigidbodyDeltas (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= particleCount) return; + + linearDeltas[i].xyz = float3(asfloat(linearDeltasAsInt[i].x), + asfloat(linearDeltasAsInt[i].y), + asfloat(linearDeltasAsInt[i].z)); + + angularDeltas[i].xyz = float3(asfloat(angularDeltasAsInt[i].x), + asfloat(angularDeltasAsInt[i].y), + asfloat(angularDeltasAsInt[i].z)); +} + +[numthreads(128, 1, 1)] +void PredictPositions (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = activeParticles[i]; + + // the previous position/orientation is the current position/orientation at the start of the step. + prevPositions[p] = positions[p]; + prevOrientations[p] = orientations[p]; + + // predict positions: + if (invMasses[p] > 0) + { + float4 effectiveGravity = float4(gravity,0); + + // Adjust gravity for buoyant fluid particles: + if ((phases[p] & (int)PHASE_FLUID) != 0) + effectiveGravity *= -buoyancies[p].z; + + // apply external forces and gravity: + float4 vel = velocities[p] + (invMasses[p] * externalForces[p] + effectiveGravity) * deltaTime; + + // project velocity to 2D plane if needed: + if (mode == 1) + vel[3] = 0; + + velocities[p] = vel; + } + + if (invRotationalMasses[p] > 0) + { + // apply external torques (simplification: we don't use full inertia tensor here) + float3 angularVel = angularVelocities[p].xyz + invRotationalMasses[p] * externalTorques[p].xyz * deltaTime; + + // project angular velocity to 2D plane normal if needed: + if (mode == 1) + angularVel = Project(angularVel,float3(0, 0, 1)); + + angularVelocities[p] = float4(angularVel, angularVelocities[p].w); + } + + positions[p] = IntegrateLinear(positions[p], velocities[p], deltaTime); + orientations[p] = IntegrateAngular(orientations[p], angularVelocities[p], deltaTime); +} + +[numthreads(128, 1, 1)] +void UpdateVelocities (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = activeParticles[i]; + + // Project particles on the XY plane if we are in 2D mode: + if (mode == 1) + { + // restrict position to the 2D plane + float4 pos = positions[p]; + pos[2] = prevPositions[p][2]; + positions[p] = pos; + } + + if (invMasses[p] > 0) + velocities[p] = DifferentiateLinear(positions[p],prevPositions[p],deltaTime); + else + velocities[p] = FLOAT4_ZERO; + + if (invRotationalMasses[p] > 0) + angularVelocities[p].xyz = DifferentiateAngular(orientations[p], prevOrientations[p], deltaTime).xyz; + else + angularVelocities[p] = FLOAT4_ZERO; +} + +[numthreads(128, 1, 1)] +void UpdatePositions (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = activeParticles[i]; + + // damp velocities: + velocities[p] *= velocityScale; + angularVelocities[p].xyz *= velocityScale; + + // clamp velocities: + float velMagnitude = length(velocities[p]); + float angularVelMagnitude = length(angularVelocities[p].xyz); + + if (velMagnitude > EPSILON) + velocities[p] *= min(maxVelocity, velMagnitude) / velMagnitude; + + if (angularVelMagnitude > EPSILON) + angularVelocities[p].xyz *= min(maxAngularVelocity, angularVelMagnitude) / angularVelMagnitude; + + // if the kinetic energy is below the sleep threshold, keep the particle at its previous position. + if (velMagnitude * velMagnitude * 0.5f + angularVelMagnitude * angularVelMagnitude * 0.5f <= sleepThreshold) + { + positions[p] = prevPositions[p]; + orientations[p] = prevOrientations[p]; + velocities[p] = FLOAT4_ZERO; + angularVelocities[p].xyz = float3(0,0,0); + } +} + +[numthreads(128, 1, 1)] +void UpdateLifetimes (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = activeParticles[i]; + + life[p] -= deltaTime; + + // if particle is dead, append it to array. + if (life[p] <= 0) + { + // atomically increment dead particle counter: + uint count = deadParticles.IncrementCounter(); + + deadParticles[count] = p; + life[p] = 0; + } +} + +[numthreads(128, 1, 1)] +void EnforceLimits (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + int p = activeParticles[i]; + + float4 pos = positions[p]; + float4 prevPos = prevPositions[p]; + + bool outside = any(step(pos, boundaryLimitsMin).xyz + step(boundaryLimitsMax, pos).xyz); + + if ((phases[p] & (int)PHASE_ISOLATED) != 0) + life[p] = killOffLimits && outside ? 0 : life[p]; + + pos.xyz = clamp(pos, boundaryLimitsMin, boundaryLimitsMax).xyz; + prevPos.xyz = clamp(prevPos, boundaryLimitsMin, boundaryLimitsMax).xyz; + + positions[p] = pos; + prevPositions[p] = prevPos; +} + +[numthreads(128, 1, 1)] +void Interpolate (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + if (interpolation == 1) + { + renderablePositions[i] = lerp(startPositions[i], endPositions[i], blendFactor); + renderableOrientations[i] = normalize(q_slerp(startOrientations[i], endOrientations[i], blendFactor)); + renderableRadii[i] = principalRadii[i]; + } + else if (interpolation == 2) + { + renderablePositions[i] = lerp(endPositions[i], positions[i], blendFactor); + renderableOrientations[i] = normalize(q_slerp(endOrientations[i], orientations[i], blendFactor)); + renderableRadii[i] = principalRadii[i]; + } + else + { + renderablePositions[i] = endPositions[i]; + renderableOrientations[i] = normalize(endOrientations[i]); + renderableRadii[i] = principalRadii[i]; + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Solver.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/Solver.compute.meta new file mode 100644 index 000000000..5e9538951 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Solver.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f597cb6a5a9e45499d9fd0f6160e5b4 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SolverParameters.cginc b/Assets/ThirdParty/Obi/Resources/Compute/SolverParameters.cginc new file mode 100644 index 000000000..8de4762a4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SolverParameters.cginc @@ -0,0 +1,23 @@ +#ifndef SOLVERPARAMS_INCLUDE +#define SOLVERPARAMS_INCLUDE + +int mode; +int interpolation; +float3 gravity; +float damping; +float worldLinearInertiaScale; +float worldAngularInertiaScale; +float maxAnisotropy; +float sleepThreshold; +float maxVelocity; +float maxAngularVelocity; +float collisionMargin; +float maxDepenetration; +float colliderCCD; +float particleCCD; +float shockPropagation; +int surfaceCollisionIterations; +float surfaceCollisionTolerance; +float4 diffusionMask; + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SolverParameters.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/SolverParameters.cginc.meta new file mode 100644 index 000000000..a591ec8ca --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SolverParameters.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 57c61c65170924f0aa225156e164ceb8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SortParticleData.compute b/Assets/ThirdParty/Obi/Resources/Compute/SortParticleData.compute new file mode 100644 index 000000000..80282cf6f --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SortParticleData.compute @@ -0,0 +1,30 @@ +#pragma kernel SortData + +StructuredBuffer sortedToOriginal; + +StructuredBuffer positions; +StructuredBuffer prevPositions; +StructuredBuffer principalRadii; +StructuredBuffer userData; + +RWStructuredBuffer sortedPositions; +RWStructuredBuffer sortedPrevPositions; +RWStructuredBuffer sortedPrincipalRadii; +RWStructuredBuffer sortedUserData; + +StructuredBuffer dispatchBuffer; + +[numthreads(128, 1, 1)] +void SortData (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + int original = sortedToOriginal[i]; + + sortedPositions[i] = positions[original]; + sortedPrevPositions[i] = prevPositions[original]; + sortedPrincipalRadii[i] = principalRadii[original]; + sortedUserData[i] = userData[original]; +} + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SortParticleData.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/SortParticleData.compute.meta new file mode 100644 index 000000000..13aa550a1 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SortParticleData.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9cd8eed4d0d6e45c18941232e855994f +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SpatialQueries.compute b/Assets/ThirdParty/Obi/Resources/Compute/SpatialQueries.compute new file mode 100644 index 000000000..b9db064d1 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SpatialQueries.compute @@ -0,0 +1,314 @@ +#include "GridUtils.cginc" +#include "CollisionMaterial.cginc" +#include "ContactHandling.cginc" +#include "ColliderDefinitions.cginc" +#include "Rigidbody.cginc" +#include "Bounds.cginc" +#include "Simplex.cginc" +#include "SolverParameters.cginc" +#include "AtomicDeltas.cginc" +#include "Phases.cginc" +#include "QueryDefinitions.cginc" + +#define MAX_RESULTS_PER_SIMPLEX 32 + +#pragma kernel Clear +#pragma kernel BuildUnsortedList +#pragma kernel FindPopulatedLevels +#pragma kernel SortList +#pragma kernel BuildContactList +#pragma kernel PrefixSumColliderCounts +#pragma kernel SortContactPairs + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; + +StructuredBuffer activeParticles; +StructuredBuffer simplices; +StructuredBuffer filters; +RWStructuredBuffer simplexBounds; // bounding box of each simplex. + +StructuredBuffer transforms; +StructuredBuffer shapes; +RWStructuredBuffer sortedColliderIndices; + +RWStructuredBuffer colliderTypeCounts; +RWStructuredBuffer contactOffsetsPerType; +RWStructuredBuffer unsortedContactPairs; + +RWStructuredBuffer cellIndices; +RWStructuredBuffer cellOffsets; + +RWStructuredBuffer cellCounts; +RWStructuredBuffer offsetInCells; + +RWStructuredBuffer contacts; +RWStructuredBuffer contactPairs; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer solverToWorld; +StructuredBuffer worldToSolver; + +uint maxResults; +uint queryCount; // amount of colliders in the grid. +uint cellsPerShape; // max amount of cells a collider can be inserted into. Typically this is 8. +int shapeTypeCount; // number of different query shapes, ie: box, sphere, ray, etc. + +aabb CalculateShapeAABB(in queryShape shape) +{ + float offset = shape.contactOffset + shape.maxDistance; + + aabb bounds; + bounds.min_ = FLT_MAX; + bounds.max_ = FLT_MIN; + switch (shape.type) + { + case SPHERE_QUERY: + bounds.FromParticle(shape.center, shape.size.x + offset); break; + case BOX_QUERY: + bounds.FromEdge(shape.center - shape.size*0.5f, shape.center + shape.size * 0.5f, offset); break; + case RAY_QUERY: + bounds.FromEdge(shape.center, shape.center + shape.size, offset); break; + } + return bounds; +} + +[numthreads(128, 1, 1)] +void Clear (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i == 0) + { + for (int l = 0; l <= GRID_LEVELS; ++l) + levelPopulation[l] = 0; + } + + // clear all cell offsets to invalid, so that we can later use atomic minimum to calculate the offset. + if (i < maxCells) + { + cellOffsets[i] = INVALID; + cellCounts[i] = 0; + } + + // clear all cell indices to invalid. + if (i < queryCount) + { + for (uint j = 0; j < cellsPerShape; ++j) + cellIndices[i*cellsPerShape+j] = INVALID; + } +} + +[numthreads(128, 1, 1)] +void BuildUnsortedList (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= queryCount) return; + + // get bounds in solver space: + aabb bounds = CalculateShapeAABB(shapes[i]).Transformed(worldToSolver[0].Multiply(transforms[i])); + + // calculate bounds size, grid level and cell size: + float4 size = bounds.max_ - bounds.min_; + float maxSize = max(max (size.x, size.y), size.z); + int level = GridLevelForSize(maxSize); + float cellSize = CellSizeOfLevel(level); + + // calculate max and min cell coordinates (force 4th component to zero, might not be after expanding) + int4 minCell = floor(bounds.min_ / cellSize); + int4 maxCell = floor(bounds.max_ / cellSize); + minCell[3] = 0; + maxCell[3] = 0; + + int4 cellSpan = maxCell - minCell; + + // insert collider in cells: + for (int x = 0; x <= cellSpan[0]; ++x) + { + for (int y = 0; y <= cellSpan[1]; ++y) + { + for (int z = 0; z <= cellSpan[2]; ++z) + { + int cellIndex = GridHash(minCell + int4(x, y, z, level)); + + // calculate flat index of this cell into arrays: + int k = x + y*2 + z*4 + i*cellsPerShape; + + cellIndices[k] = cellIndex; + InterlockedAdd(cellCounts[cellIndex],1,offsetInCells[k]); + } + } + } + + // atomically increase this level's population by one: + InterlockedAdd(levelPopulation[1 + level],1); +} + +[numthreads(128, 1, 1)] +void SortList (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= queryCount * cellsPerShape) return; + + uint cellIndex = cellIndices[i]; + + if (cellIndex != INVALID) + { + // write shape to its sorted index: + uint sortedIndex = cellOffsets[cellIndex] + offsetInCells[i]; + sortedColliderIndices[sortedIndex] = i; + } +} + +[numthreads(128, 1, 1)] +void BuildContactList (uint3 id : SV_DispatchThreadID) +{ + unsigned int threadIndex = id.x; + + if (threadIndex >= pointCount + edgeCount + triangleCount) return; + + uint cellCount = queryCount * cellsPerShape; + int candidateCount = 0; + uint candidates[MAX_RESULTS_PER_SIMPLEX]; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(threadIndex, simplexSize); + + aabb b = simplexBounds[threadIndex]; + + // max size of the particle bounds in cells: + int4 maxSize = int4(10,10,10,10); + + // build a list of candidate colliders: + for (uint m = 1; m <= levelPopulation[0]; ++m) + { + uint l = levelPopulation[m]; + float cellSize = CellSizeOfLevel(l); + + int4 minCell = floor(b.min_ / cellSize); + int4 maxCell = floor(b.max_ / cellSize); + maxCell = minCell + min(maxCell - minCell, maxSize); + + for (int x = minCell[0]; x <= maxCell[0]; ++x) + { + for (int y = minCell[1]; y <= maxCell[1]; ++y) + { + for (int z = minCell[2]; z <= maxCell[2]; ++z) + { + uint flatCellIndex = GridHash(int4(x,y,z,l)); + uint cellStart = cellOffsets[flatCellIndex]; + uint cellCount = cellCounts[flatCellIndex]; + + // iterate through queries in the neighbour cell + for (uint n = cellStart; n < cellStart + cellCount; ++n) + { + if (candidateCount < MAX_RESULTS_PER_SIMPLEX) + candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerShape; + } + + } + } + } + } + + //evaluate candidates and create contacts: + if (candidateCount > 0) + { + // insert sort: + for (int k = 1; k < candidateCount; ++k) + { + uint key = candidates[k]; + int j = k - 1; + + while (j >= 0 && candidates[j] > key) + candidates[j + 1] = candidates[j--]; + + candidates[j + 1] = key; + } + + // make sure each candidate only shows up once in the list: + int first = 0, contactCount = 0; + while(++first != candidateCount) + { + if (candidates[contactCount] != candidates[first]) + candidates[++contactCount] = candidates[first]; + } + contactCount++; + + // append contacts: + for (int i = 0; i < contactCount; i++) + { + int c = candidates[i]; + + // get shape bounds in solver space: + aabb colliderBoundsSS = CalculateShapeAABB(shapes[c]).Transformed(worldToSolver[0].Multiply(transforms[c])); + + // check if any simplex particle and the collider should collide: + bool shouldCollide = false; + int colliderCategory = shapes[c].filter & CategoryMask; + int colliderMask = (shapes[c].filter & MaskMask) >> 16; + for (int j = 0; j < simplexSize; ++j) + { + int simplexCategory = filters[simplices[simplexStart + j]] & CategoryMask; + int simplexMask = (filters[simplices[simplexStart + j]] & MaskMask) >> 16; + shouldCollide = shouldCollide || ((simplexCategory & colliderMask) != 0 && (simplexMask & colliderCategory) != 0); + } + + if (shouldCollide && b.IntersectsAabb(colliderBoundsSS)) + { + uint count; + InterlockedAdd(dispatchBuffer[7], 1, count); + + // technically incorrect, as number of pairs != number of contacts but + // we will ignore either excess pairs or contacts. + if (count < maxResults) + { + // increment the amount of contacts for this shape type: + InterlockedAdd(colliderTypeCounts[shapes[c].type],1); + + // enqueue a new contact pair: + unsortedContactPairs[count] = uint2(threadIndex,c); + + InterlockedMax(dispatchBuffer[4],(count + 1) / 128 + 1); + } + } + } + } +} + +[numthreads(1, 1, 1)] +void PrefixSumColliderCounts (uint3 id : SV_DispatchThreadID) +{ + contactOffsetsPerType[0] = 0; + int i; + + for (i = 0; i < shapeTypeCount; ++i) + { + contactOffsetsPerType[i+1] = contactOffsetsPerType[i] + colliderTypeCounts[i]; + + // write amount of pairs per collider type in the dispatch buffer: + dispatchBuffer[8 + i*4] = colliderTypeCounts[i] / 128 + 1; + dispatchBuffer[8 + i*4 + 3] = colliderTypeCounts[i]; + } +} + +[numthreads(128, 1, 1)] +void SortContactPairs (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= dispatchBuffer[7] || i >= maxResults) return; + + uint2 pair = unsortedContactPairs[i]; + int shapeType = (int)shapes[pair.y].type; + + // decrement amount of pairs for the given collider type: + uint count; + InterlockedAdd(colliderTypeCounts[shapeType],-1, count); + + // write the pair directly at its position in the sorted array: + contactPairs[contactOffsetsPerType[shapeType] + count - 1] = pair; +} + + + diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SpatialQueries.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/SpatialQueries.compute.meta new file mode 100644 index 000000000..69122c2b3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SpatialQueries.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbbb4eb0bd2fa43e08564bf661b00670 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SphereShape.compute b/Assets/ThirdParty/Obi/Resources/Compute/SphereShape.compute new file mode 100644 index 000000000..d801dd95f --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SphereShape.compute @@ -0,0 +1,72 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "DistanceFunctions.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer velocities; + +StructuredBuffer simplices; + +StructuredBuffer transforms; +StructuredBuffer shapes; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer contacts; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; + +[numthreads(128, 1, 1)] +void GenerateContacts (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4*SPHERE_SHAPE]) return; + + uint count = contacts.IncrementCounter(); + if (count < maxContacts) + { + int firstPair = contactOffsetsPerType[SPHERE_SHAPE]; + int simplexIndex = contactPairs[firstPair + i].x; + int colliderIndex = contactPairs[firstPair + i].y; + + contact c = (contact)0; + + Sphere sphereShape; + sphereShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + sphereShape.s = shapes[colliderIndex]; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + SurfacePoint surfacePoint = Optimize(sphereShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + c.pointB = surfacePoint.pos; + c.normal = surfacePoint.normal * sphereShape.s.isInverted(); + c.pointA = simplexBary; + c.bodyA = simplexIndex; + c.bodyB = colliderIndex; + + contacts[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SphereShape.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/SphereShape.compute.meta new file mode 100644 index 000000000..282bd67c2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SphereShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6bde4f5390fee479ba06d6691eb9450b +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SphereShapeQuery.compute b/Assets/ThirdParty/Obi/Resources/Compute/SphereShapeQuery.compute new file mode 100644 index 000000000..cea2c12e3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SphereShapeQuery.compute @@ -0,0 +1,107 @@ +#include "ColliderDefinitions.cginc" +#include "QueryDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateResults + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer simplices; + +StructuredBuffer transforms; +StructuredBuffer shapes; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer results; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; + +struct Sphere : IDistanceFunction +{ + queryShape s; + transform colliderToSolver; + + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) + { + float4 center = s.center * colliderToSolver.scale; + float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; + + float radius = s.size.x * cmax(colliderToSolver.scale.xyz); + float distanceToCenter = length(pnt); + + float4 normal = pnt / (distanceToCenter + EPSILON); + + projectedPoint.pos = colliderToSolver.TransformPointUnscaled(center + normal * (radius + s.contactOffset)); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + projectedPoint.bary = float4(1,0,0,0); + } +}; + +[numthreads(128, 1, 1)] +void GenerateResults (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4*SPHERE_QUERY]) return; + + int firstPair = contactOffsetsPerType[SPHERE_QUERY]; + int simplexIndex = contactPairs[firstPair + i].x; + int queryIndex = contactPairs[firstPair + i].y; + + queryResult c = (queryResult)0; + + Sphere sphereShape; + sphereShape.colliderToSolver = worldToSolver[0].Multiply(transforms[queryIndex]); + sphereShape.s = shapes[queryIndex]; + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + SurfacePoint surfacePoint = Optimize(sphereShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + + float4 simplexPrevPosition = FLOAT4_ZERO; + float simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexPrevPosition += positions[particleIndex] * simplexBary[j]; + simplexRadius += EllipsoidRadius(surfacePoint.normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * simplexBary[j]; + } + + c.queryPoint = surfacePoint.pos; + c.normal = surfacePoint.normal; + c.simplexBary = simplexBary; + c.simplexIndex = simplexIndex; + c.queryIndex = queryIndex; + c.dist = dot(simplexPrevPosition - surfacePoint.pos,surfacePoint.normal) - simplexRadius; + + if (c.dist <= sphereShape.s.maxDistance) + { + uint count = results.IncrementCounter(); + if (count < maxContacts) + { + results[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } + +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SphereShapeQuery.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/SphereShapeQuery.compute.meta new file mode 100644 index 000000000..c8efb5a70 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SphereShapeQuery.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1b86e67abd0f74accb1c47af5aa6ffbe +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/StitchConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/StitchConstraints.compute new file mode 100644 index 000000000..e26a380fd --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/StitchConstraints.compute @@ -0,0 +1,64 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer stiffnesses; +RWStructuredBuffer lambdas; + +RWStructuredBuffer positions; +StructuredBuffer invMasses; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 2 + 1]; + + float w1 = invMasses[p1]; + float w2 = invMasses[p2]; + + // calculate time adjusted compliance + float compliance = stiffnesses[i] / (deltaTime * deltaTime); + + // calculate position and lambda deltas: + float4 dist = positions[p1] - positions[p2]; + float constraint = length(dist); + + // calculate lambda and position deltas: + float dlambda = (-constraint - compliance * lambdas[i]) / (w1 + w2 + compliance + EPSILON); + float4 delta = dlambda * dist / (constraint + EPSILON); + + lambdas[i] += dlambda; + + float4 delta1 = delta * w1; + float4 delta2 = -delta * w2; + + AddPositionDelta(p1, delta1); + AddPositionDelta(p2, delta2); +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 2 + 1]; + + ApplyPositionDelta(positions, p1, sorFactor); + ApplyPositionDelta(positions, p2, sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/StitchConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/StitchConstraints.compute.meta new file mode 100644 index 000000000..bf07c4dc6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/StitchConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d8b905ab89234f6c9c7774317150282 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/StretchShearConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/StretchShearConstraints.compute new file mode 100644 index 000000000..5da22d7e1 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/StretchShearConstraints.compute @@ -0,0 +1,86 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer orientationIndices; +StructuredBuffer restLengths; +StructuredBuffer restOrientations; +StructuredBuffer stiffnesses; +RWStructuredBuffer lambdas; + +RWStructuredBuffer positions; +RWStructuredBuffer orientations; +StructuredBuffer invMasses; +StructuredBuffer invRotationalMasses; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 2 + 1]; + int q = orientationIndices[i]; + + float w1 = invMasses[p1]; + float w2 = invMasses[p2]; + + // calculate time adjusted compliance + float3 compliances = stiffnesses[i] / (deltaTime * deltaTime); + + float3 e = rotate_vector(restOrientations[i], float3(0, 0, 1)); + quaternion basis = qmul(orientations[q],restOrientations[i]); + + // calculate rod vector in local element space: + float3 gamma = rotate_vector(q_conj(basis), (positions[p2] - positions[p1]).xyz) / (restLengths[i] + EPSILON); + + // subtract third director vector (0,0,1): + gamma[2] -= 1; + + float W = (w1 + w2) / (restLengths[i] + EPSILON) + invRotationalMasses[q] * 4.0f * restLengths[i]; + float3 dlambda = (gamma - compliances * lambdas[i]) / (W + compliances + EPSILON); + lambdas[i] += dlambda; + + // convert lambda delta lambda back to world space: + dlambda = rotate_vector(basis, dlambda); + + float4 delta1 = float4(dlambda, 0) * w1; + float4 delta2 = -float4(dlambda, 0) * w2; + + quaternion e_3 = quaternion(e.x,e.y,e.z,0); + quaternion q_e_3_bar = qmul(orientations[q],q_conj(e_3)); + + // calculate rotation delta: + quaternion rotDelta = qmul(quaternion(dlambda[0], dlambda[1], dlambda[2], 0.0f),q_e_3_bar); + rotDelta *= 2.0f * invRotationalMasses[q] * restLengths[i]; + + AddPositionDelta(p1, delta1); + AddPositionDelta(p2, delta2); + AddOrientationDelta(q, rotDelta); +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 2 + 1]; + int q = orientationIndices[i]; + + ApplyPositionDelta(positions, p1, sorFactor); + ApplyPositionDelta(positions, p2, sorFactor); + ApplyOrientationDelta(orientations, q, sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/StretchShearConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/StretchShearConstraints.compute.meta new file mode 100644 index 000000000..99b251aff --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/StretchShearConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09e95e8821fe445bf87f0d434d789822 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SurfacePoint.cginc b/Assets/ThirdParty/Obi/Resources/Compute/SurfacePoint.cginc new file mode 100644 index 000000000..e9d25466a --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SurfacePoint.cginc @@ -0,0 +1,19 @@ +#ifndef SURFACEPOINT_INCLUDE +#define SURFACEPOINT_INCLUDE + +/** + * point in the surface of a signed distance field. + */ +struct SurfacePoint +{ + float4 bary; + float4 pos; + float4 normal; +}; + +interface IDistanceFunction +{ + void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint); +}; + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/SurfacePoint.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/SurfacePoint.cginc.meta new file mode 100644 index 000000000..f7b123e22 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/SurfacePoint.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b54db800f0f884467b02edb24ca317d4 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/TetherConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/TetherConstraints.compute new file mode 100644 index 000000000..cd99220ff --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/TetherConstraints.compute @@ -0,0 +1,64 @@ +#pragma kernel Project +#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer particleIndices; +StructuredBuffer maxLengthScale; +StructuredBuffer stiffnesses; +RWStructuredBuffer lambdas; + +RWStructuredBuffer positions; +StructuredBuffer invMasses; + +// Variables set from the CPU +uint activeConstraintCount; +float deltaTime; +float sorFactor; + +[numthreads(128, 1, 1)] +void Project (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 2 + 1]; + + float w1 = invMasses[p1]; + float w2 = invMasses[p2]; + + // calculate time adjusted compliance + float compliance = stiffnesses[i] / (deltaTime * deltaTime); + + // calculate position and lambda deltas: + float4 dist = positions[p1] - positions[p2]; + float d = length(dist); + + // calculate constraint value (distance - rest length) + float constraint = d - (maxLengthScale[i].x * maxLengthScale[i].y); + + if (constraint > 0) + { + // calculate lambda and position deltas: + float dlambda = (-constraint - compliance * lambdas[i]) / (w1 + w2 + compliance + EPSILON); + float4 delta = dlambda * dist / (d + EPSILON); + lambdas[i] += dlambda; + + AddPositionDelta(p1, delta * w1); + } +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + int p = particleIndices[i * 2]; + + ApplyPositionDelta(positions, p, sorFactor); +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/TetherConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/TetherConstraints.compute.meta new file mode 100644 index 000000000..280042e3c --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/TetherConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dcd2ea33ecfcb4fb0ac44c5a66ea69f8 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Transform.cginc b/Assets/ThirdParty/Obi/Resources/Compute/Transform.cginc new file mode 100644 index 000000000..039279a43 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Transform.cginc @@ -0,0 +1,98 @@ +#ifndef TRANSFORM_INCLUDE +#define TRANSFORM_INCLUDE + +#include "Quaternion.cginc" +#include "Integration.cginc" + +struct transform +{ + float4 translation; + float4 scale; + quaternion rotation; + + transform Transform(float4 translation_, quaternion rotation_, float4 scale_) + { + // make sure there are good values in the 4th component: + translation_[3] = 0; + scale_[3] = 1; + + transform t; + t.translation = translation_; + t.rotation = rotation_; + t.scale = scale_; + return t; + } + + transform Inverse() + { + return Transform(float4(rotate_vector(q_conj(rotation),(translation / -scale).xyz),0), + q_conj(rotation), + 1 / scale); + } + + transform Interpolate(transform other, float translationalMu, float rotationalMu, float scaleMu) + { + return Transform(lerp(translation, other.translation, translationalMu), + q_slerp(rotation, other.rotation, rotationalMu), + lerp(scale, other.scale, scaleMu)); + } + + transform Integrate(float4 linearVelocity, float4 angularVelocity, float dt) + { + return Transform(IntegrateLinear(translation, linearVelocity, dt), + IntegrateAngular(rotation, angularVelocity, dt), + scale); + } + + float4 TransformPoint(float4 pnt) + { + return float4(translation.xyz + rotate_vector(rotation, (pnt * scale).xyz),0); + } + + float4 InverseTransformPoint(float4 pnt) + { + return float4(rotate_vector(q_conj(rotation),(pnt - translation).xyz) / scale.xyz , 0); + } + + float4 TransformPointUnscaled(float4 pnt) + { + return float4(translation.xyz + rotate_vector(rotation,pnt.xyz), 0); + } + + float4 InverseTransformPointUnscaled(float4 pnt) + { + return float4(rotate_vector(q_conj(rotation), (pnt - translation).xyz), 0); + } + + float4 TransformDirection(float4 dir) + { + return float4(rotate_vector(rotation, dir.xyz), 0); + } + + float4 InverseTransformDirection(float4 dir) + { + return float4(rotate_vector(q_conj(rotation), dir.xyz), 0); + } + + float4 TransformVector(float4 vect) + { + return float4(rotate_vector(rotation, (vect * scale).xyz), 0); + } + + float4 InverseTransformVector(float4 vect) + { + return float4(rotate_vector(q_conj(rotation),vect.xyz) / scale.xyz, 0); + } + + transform Multiply(transform b) + { + return Transform(this.TransformPoint(b.translation), + qmul(this.rotation,b.rotation), + this.scale * b.scale); + } +}; + + + + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/Transform.cginc.meta b/Assets/ThirdParty/Obi/Resources/Compute/Transform.cginc.meta new file mode 100644 index 000000000..f749fcd8d --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/Transform.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7e54b6c6b777643958abffa4510e0518 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/TriangleMeshShape.compute b/Assets/ThirdParty/Obi/Resources/Compute/TriangleMeshShape.compute new file mode 100644 index 000000000..f5ea3f0d3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/TriangleMeshShape.compute @@ -0,0 +1,154 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "DistanceFunctions.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +StructuredBuffer positions; +StructuredBuffer orientations; +StructuredBuffer principalRadii; +StructuredBuffer velocities; + +StructuredBuffer simplices; +StructuredBuffer simplexBounds; // bounding box of each simplex. + +StructuredBuffer transforms; +StructuredBuffer shapes; + +// triangle mesh data: +StructuredBuffer triangleMeshHeaders; +StructuredBuffer bihNodes; +StructuredBuffer triangles; +StructuredBuffer vertices; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer contacts; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; +float deltaTime; + + +[numthreads(128, 1, 1)] +void GenerateContacts (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + + // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. + if (i >= dispatchBuffer[11 + 4 * TRIANGLE_MESH_SHAPE]) return; + + int firstPair = contactOffsetsPerType[TRIANGLE_MESH_SHAPE]; + int simplexIndex = contactPairs[firstPair + i].x; + int colliderIndex = contactPairs[firstPair + i].y; + shape s = shapes[colliderIndex]; + + if (s.dataIndex < 0) return; + + TriangleMeshHeader header = triangleMeshHeaders[s.dataIndex]; + + TriangleMesh meshShape; + meshShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); + meshShape.s = s; + + // invert a full matrix here to accurately represent collider bounds scale. + float4x4 solverToCollider = Inverse(TRS(meshShape.colliderToSolver.translation.xyz, meshShape.colliderToSolver.rotation, meshShape.colliderToSolver.scale.xyz)); + aabb simplexBound = simplexBounds[simplexIndex].Transformed(solverToCollider); + + float4 marginCS = float4((s.contactOffset + collisionMargin) / meshShape.colliderToSolver.scale.xyz, 0); + + int simplexSize; + int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); + + int stack[12]; + int stackTop = 0; + + stack[stackTop++] = 0; + + while (stackTop > 0) + { + // pop node index from the stack: + int nodeIndex = stack[--stackTop]; + + BIHNode node = bihNodes[header.firstNode + nodeIndex]; + + // leaf node: + if (node.firstChild < 0) + { + // check for contact against all triangles: + for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) + { + Triangle t = triangles[header.firstTriangle + dataOffset]; + float4 v1 = float4(vertices[header.firstVertex + t.i1], 0); + float4 v2 = float4(vertices[header.firstVertex + t.i2], 0); + float4 v3 = float4(vertices[header.firstVertex + t.i3], 0); + aabb triangleBounds; + triangleBounds.FromTriangle(v1, v2, v3, marginCS); + + if (triangleBounds.IntersectsAabb(simplexBound, s.is2D())) + { + float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); + float4 simplexPoint; + + meshShape.tri.Cache(v1 * meshShape.colliderToSolver.scale, v2 * meshShape.colliderToSolver.scale, v3 * meshShape.colliderToSolver.scale); + + SurfacePoint surfacePoint = Optimize(meshShape, positions, orientations, principalRadii, + simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); + + float4 velocity = FLOAT4_ZERO; + float simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; + velocity += velocities[particleIndex] * simplexBary[j]; + } + + /*float4 rbVelocity = float4.zero; + if (rigidbodyIndex >= 0) + rbVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, colliderPoint.point, rigidbodies, solverToWorld);*/ + + float dAB = dot(simplexPoint - surfacePoint.pos, surfacePoint.normal); + float vel = dot(velocity /*- rbVelocity*/, surfacePoint.normal); + + if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) + { + uint count = contacts.IncrementCounter(); + if (count < maxContacts) + { + contact c = (contact)0; + + c.pointB = surfacePoint.pos; + c.normal = surfacePoint.normal * meshShape.s.isInverted(); + c.pointA = simplexBary; + c.bodyA = simplexIndex; + c.bodyB = colliderIndex; + + contacts[count] = c; + + InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); + InterlockedMax(dispatchBuffer[3], count + 1); + } + } + } + } + } + else // check min and/or max children: + { + // visit min node: + if (simplexBound.min_[node.axis] <= node.min_) + stack[stackTop++] = node.firstChild; + + // visit max node: + if (simplexBound.max_[node.axis] >= node.max_) + stack[stackTop++] = node.firstChild + 1; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/Compute/TriangleMeshShape.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/TriangleMeshShape.compute.meta new file mode 100644 index 000000000..a677721aa --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/TriangleMeshShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5454af20f9614aa79e51a90271093e3 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/Compute/VolumeConstraints.compute b/Assets/ThirdParty/Obi/Resources/Compute/VolumeConstraints.compute new file mode 100644 index 000000000..4f6e3d71b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/VolumeConstraints.compute @@ -0,0 +1,153 @@ +#pragma kernel Gradients +#pragma kernel CalculateVolume +#pragma kernel Denominators +#pragma kernel Constraint +#pragma kernel AccumulateDeltas +#pragma kernel Apply + +//#pragma kernel Project +//#pragma kernel Apply + +#include "MathUtils.cginc" +#include "AtomicDeltas.cginc" + +StructuredBuffer triangles; +StructuredBuffer firstTriangle; +StructuredBuffer numTriangles; +StructuredBuffer restVolumes; +StructuredBuffer pressureStiffness; +RWStructuredBuffer lambdas; + +RWStructuredBuffer denominators; +RWStructuredBuffer volumes; +RWStructuredBuffer gradients; + +StructuredBuffer particles; +StructuredBuffer particleConstraintIndex; +StructuredBuffer triangleConstraintIndex; + +RWStructuredBuffer positions; +StructuredBuffer invMasses; + +// Variables set from the CPU +uint activeConstraintCount; +uint trianglesCount; +uint particlesCount; + +float deltaTime; +float sorFactor; + + +void AccumulateGradient(in int index, in float3 grad) +{ + InterlockedAddFloat(gradients, index, 0, grad.x); + InterlockedAddFloat(gradients, index, 1, grad.y); + InterlockedAddFloat(gradients, index, 2, grad.z); +} + +[numthreads(128, 1, 1)] +void Gradients (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= trianglesCount) return; + + int v = i * 3; + int i1 = triangles[v]; + int i2 = triangles[v + 1]; + int i3 = triangles[v + 2]; + + //accumulate gradient for each particle in the triangle: + AccumulateGradient(i1,cross(positions[i2].xyz, positions[i3].xyz)); + AccumulateGradient(i2,cross(positions[i3].xyz, positions[i1].xyz)); + AccumulateGradient(i3,cross(positions[i1].xyz, positions[i2].xyz)); +} + +[numthreads(128, 1, 1)] +void CalculateVolume (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= trianglesCount) return; + + int constraintIndex = triangleConstraintIndex[i]; + + int v = i * 3; + int i1 = triangles[v]; + int i2 = triangles[v + 1]; + int i3 = triangles[v + 2]; + + float vol = dot(cross(positions[i1].xyz, positions[i2].xyz), positions[i3].xyz) / 6.0f; + InterlockedAddFloat(volumes, triangleConstraintIndex[i],vol); +} + +// One denominator per constraint +// each particle in the constraint contributes only once. + +[numthreads(128, 1, 1)] +void Denominators (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= particlesCount) return; + + int p = particles[i]; + + float3 grad = asfloat(gradients[p]).xyz; + float denom = invMasses[p] * dot(grad, grad); + InterlockedAddFloat(denominators, particleConstraintIndex[i], denom); +} + +[numthreads(128, 1, 1)] +void Constraint (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + float compliance = pressureStiffness[i].y / (deltaTime * deltaTime); + + // equality constraint: volume - pressure * rest volume = 0 + float constraint = asfloat(volumes[i]) - pressureStiffness[i].x * restVolumes[i]; + + // calculate lagrange multiplier delta: + float dlambda = (-constraint - compliance * 0) / (asfloat(denominators[i]) + compliance + EPSILON); + lambdas[i] = dlambda;//+= dlambda; + + volumes[i] = asuint(0); + denominators[i] = asuint(0); +} + +[numthreads(128, 1, 1)] +void AccumulateDeltas (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= particlesCount) return; + + int p = particles[i]; + int c = particleConstraintIndex[i]; + + AddPositionDelta(p, lambdas[c] * invMasses[p] * asfloat(gradients[p])); + gradients[p] = asuint(FLOAT4_ZERO); +} + +[numthreads(128, 1, 1)] +void Apply (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + + if (i >= activeConstraintCount) return; + + for (int j = 0; j < numTriangles[i]; ++j) + { + int v = (firstTriangle[i] + j) * 3; + int p1 = triangles[v]; + int p2 = triangles[v + 1]; + int p3 = triangles[v + 2]; + + ApplyPositionDelta(positions, p1, sorFactor); + ApplyPositionDelta(positions, p2, sorFactor); + ApplyPositionDelta(positions, p3, sorFactor); + } +} diff --git a/Assets/ThirdParty/Obi/Resources/Compute/VolumeConstraints.compute.meta b/Assets/ThirdParty/Obi/Resources/Compute/VolumeConstraints.compute.meta new file mode 100644 index 000000000..33f05bbe2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/Compute/VolumeConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fef3adb748a41466696a32b41ecc8831 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta similarity index 77% rename from Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta index 1354871a0..4f530cfdd 100644 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS.meta +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9571d0925c2004cd38ac86f7d85b061f +guid: 63dbef444f58449a5b4786567ee38655 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/StandardVertexColors.shader b/Assets/ThirdParty/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/StandardVertexColors.shader rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/StandardVertexColors.shader.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader.meta similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/StandardVertexColors.shader.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader.meta diff --git a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common.meta similarity index 77% rename from Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common.meta index 847d43cea..dd79e2da0 100644 --- a/Assets/ThirdParty/Obi/Plugins/Android/arm64-v8a.meta +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d31cde6706d1446b7a73b166ec0b560b +guid: f31685c4cf95048ceb543a69d4f84ff4 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced.meta new file mode 100644 index 000000000..71d0305c0 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b8d28b0e0918140d8b8ee3388bff5ec2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst.meta new file mode 100644 index 000000000..3bd5233dc --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a08e3a8d3c4f4d3b90eb00e408b5f5d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat new file mode 100644 index 000000000..8187ff606 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat @@ -0,0 +1,140 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Instanced + m_Shader: {fileID: 4800000, guid: 301c97d7892714ada9887f712bed2d53, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Normal: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Occlusion: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _BUILTIN_AlphaClip: 0 + - _BUILTIN_Blend: 0 + - _BUILTIN_CullMode: 2 + - _BUILTIN_DstBlend: 0 + - _BUILTIN_QueueControl: 0 + - _BUILTIN_QueueOffset: 0 + - _BUILTIN_SrcBlend: 1 + - _BUILTIN_Surface: 0 + - _BUILTIN_ZTest: 4 + - _BUILTIN_ZWrite: 1 + - _BUILTIN_ZWriteControl: 0 + - _Blend: 0 + - _BumpScale: 1 + - _CastShadows: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _PROCEDURAL_INSTANCING: 1 + - _Parallax: 0.02 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZTest: 4 + - _ZWrite: 1 + - _ZWriteControl: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &3510638688362179069 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 639247ca83abc874e893eb93af2b5e44, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/LightingData.asset.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta similarity index 63% rename from Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/LightingData.asset.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta index 4ebe50ea2..dd8a2a104 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/LightingData.asset.meta +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: 01df968f52f4b30449fed4038ccb6d32 +guid: 6380c47a989d54146bef5f3bac933a56 NativeFormatImporter: externalObjects: {} - mainObjectFileID: 112000000 + mainObjectFileID: 2100000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute.meta new file mode 100644 index 000000000..90994bc6b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5741e12d1b7644a1ea6e9239027b476b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat new file mode 100644 index 000000000..90b8b6e2b --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat @@ -0,0 +1,99 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2963227855003104821 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 639247ca83abc874e893eb93af2b5e44, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 0 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ProceduralInstanced + m_Shader: {fileID: -6465566751694194690, guid: 4df17ed533d3349a194f3bb8c89dcf5d, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BUILTIN_QueueControl: 0 + - _BUILTIN_QueueOffset: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/InstancedStandard.mat.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat.meta similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/InstancedStandard.mat.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat.meta diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph new file mode 100644 index 000000000..e1cf98f7d --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph @@ -0,0 +1,1049 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "4d9b84394d46483a8d82779f77202fc2", + "m_Properties": [], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "b8a9b963dec346b0a74188d7b6b0cbd5" + } + ], + "m_Nodes": [ + { + "m_Id": "f21b73915f984c11ae68788fc0ea87b5" + }, + { + "m_Id": "57ace758bfb94f7e8df57dc9e52d30e0" + }, + { + "m_Id": "f9361dfcb9af4dc7aa432a4c6703d796" + }, + { + "m_Id": "1a1b6499baff4672a53921e75ddaa5fc" + }, + { + "m_Id": "dce68951c9714e9788d94c3f8d2b91f5" + }, + { + "m_Id": "9081e58b798945758e693a26c3ebd8f5" + }, + { + "m_Id": "b123e3fa488745408e3fbf602a25daf3" + }, + { + "m_Id": "2c50baddc9b84aa8afb710be8e070875" + }, + { + "m_Id": "589e3cd2f09646a5a13738ee59e9ba67" + }, + { + "m_Id": "3c6527cfc4f6489bb7b4a2363bb7eb6d" + }, + { + "m_Id": "f2a0e5496350488fa545f78531eb1ec1" + }, + { + "m_Id": "141eeae6827640a3a61aeb2fe17525be" + }, + { + "m_Id": "1a26996b23904b9f86115e7a3a1217d4" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2c50baddc9b84aa8afb710be8e070875" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1a1b6499baff4672a53921e75ddaa5fc" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2c50baddc9b84aa8afb710be8e070875" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dce68951c9714e9788d94c3f8d2b91f5" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9081e58b798945758e693a26c3ebd8f5" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2c50baddc9b84aa8afb710be8e070875" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b123e3fa488745408e3fbf602a25daf3" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2c50baddc9b84aa8afb710be8e070875" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "dce68951c9714e9788d94c3f8d2b91f5" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f21b73915f984c11ae68788fc0ea87b5" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": -217.00001525878907, + "y": -224.0 + }, + "m_Blocks": [ + { + "m_Id": "f21b73915f984c11ae68788fc0ea87b5" + }, + { + "m_Id": "57ace758bfb94f7e8df57dc9e52d30e0" + }, + { + "m_Id": "f9361dfcb9af4dc7aa432a4c6703d796" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": -216.99998474121095, + "y": 20.0 + }, + "m_Blocks": [ + { + "m_Id": "1a1b6499baff4672a53921e75ddaa5fc" + }, + { + "m_Id": "589e3cd2f09646a5a13738ee59e9ba67" + }, + { + "m_Id": "3c6527cfc4f6489bb7b4a2363bb7eb6d" + }, + { + "m_Id": "f2a0e5496350488fa545f78531eb1ec1" + }, + { + "m_Id": "141eeae6827640a3a61aeb2fe17525be" + }, + { + "m_Id": "1a26996b23904b9f86115e7a3a1217d4" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_ActiveTargets": [ + { + "m_Id": "7338c42471074b8186f44d81129cb741" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "0a05b15df7ce451c80d16da630598a05", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0f629d2105bb44b7af198990fb5e0e3a", + "m_Id": 0, + "m_DisplayName": "Metallic", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Metallic", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "10e91cfc92e2437989b0fcafaa1b04e2", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "141eeae6827640a3a61aeb2fe17525be", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Occlusion", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "a08911364fef4ff9a88b383f6a943b8f" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Occlusion" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "1a1b6499baff4672a53921e75ddaa5fc", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "10e91cfc92e2437989b0fcafaa1b04e2" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "1a26996b23904b9f86115e7a3a1217d4", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Metallic", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "0f629d2105bb44b7af198990fb5e0e3a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Metallic" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "1fe2b168153e4be0aaf2bf6d9a61e25e", + "m_Id": 3, + "m_DisplayName": "Pos", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Pos", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "2c50baddc9b84aa8afb710be8e070875", + "m_Group": { + "m_Id": "" + }, + "m_Name": "GetInstanceData (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -923.0, + "y": 19.999998092651368, + "width": 250.0, + "height": 118.00003051757813 + } + }, + "m_Slots": [ + { + "m_Id": "a2a2e4fd908444d4b04556ecd31ca4a1" + }, + { + "m_Id": "1fe2b168153e4be0aaf2bf6d9a61e25e" + }, + { + "m_Id": "37ecf6c8b3124fb88f0c94ed94b29b1f" + }, + { + "m_Id": "2c56cb67b3594192821def9e2c1f6e25" + } + ], + "synonyms": [ + "code", + "HLSL" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "GetInstanceData", + "m_FunctionSource": "9d77a2f1bd0624d4aa045916cb0955c9", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2c56cb67b3594192821def9e2c1f6e25", + "m_Id": 2, + "m_DisplayName": "Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "37ecf6c8b3124fb88f0c94ed94b29b1f", + "m_Id": 4, + "m_DisplayName": "OutPos", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "OutPos", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "3b467b9abac74f6680f029acc0fe9962", + "m_Id": 1, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "3c6527cfc4f6489bb7b4a2363bb7eb6d", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalTS", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "f5027c09c73c476da7ed59558d84434c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalTS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "506261c1d36144a997b4e1d83f9e50ed", + "m_Id": 0, + "m_DisplayName": "Smoothness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Smoothness", + "m_StageCapability": 2, + "m_Value": 0.5, + "m_DefaultValue": 0.5, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "57ace758bfb94f7e8df57dc9e52d30e0", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "bbf8165ffd154394a2a8816930eddf76" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "589e3cd2f09646a5a13738ee59e9ba67", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Smoothness", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "506261c1d36144a997b4e1d83f9e50ed" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Smoothness" +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.BuiltIn.ShaderGraph.BuiltInTarget", + "m_ObjectId": "7338c42471074b8186f44d81129cb741", + "m_ActiveSubTarget": { + "m_Id": "8c851f9258de4ef494985580b1531932" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZWriteControl": 0, + "m_ZTestMode": 4, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": false, + "m_CustomEditorGUI": "" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "76eb4fd0181147b9ba1c126d0b50b4c8", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.BuiltIn.ShaderGraph.BuiltInLitSubTarget", + "m_ObjectId": "8c851f9258de4ef494985580b1531932", + "m_WorkflowMode": 1, + "m_NormalDropOffSpace": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.PositionNode", + "m_ObjectId": "9081e58b798945758e693a26c3ebd8f5", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1202.5, + "y": 73.0000228881836, + "width": 205.99993896484376, + "height": 130.5 + } + }, + "m_Slots": [ + { + "m_Id": "c9308b0d0e9a4b2eacfd32a0defa35ba" + } + ], + "synonyms": [ + "location" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Space": 0, + "m_PositionSource": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "95e168ba774041c59d5e045b2ee33f3c", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a08911364fef4ff9a88b383f6a943b8f", + "m_Id": 0, + "m_DisplayName": "Ambient Occlusion", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Occlusion", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a2a2e4fd908444d4b04556ecd31ca4a1", + "m_Id": 0, + "m_DisplayName": "InstanceID", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "InstanceID", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.InstanceIDNode", + "m_ObjectId": "b123e3fa488745408e3fbf602a25daf3", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Instance ID", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1099.5001220703125, + "y": -21.500003814697267, + "width": 109.5, + "height": 77.00001525878906 + } + }, + "m_Slots": [ + { + "m_Id": "76eb4fd0181147b9ba1c126d0b50b4c8" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "b8a9b963dec346b0a74188d7b6b0cbd5", + "m_Name": "", + "m_ChildObjectList": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "bbf8165ffd154394a2a8816930eddf76", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "c9308b0d0e9a4b2eacfd32a0defa35ba", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "dcc60507b5a34b6e8fba60b6787a5774", + "m_Id": 0, + "m_DisplayName": "Emission", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Emission", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 1, + "m_DefaultColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "dce68951c9714e9788d94c3f8d2b91f5", + "m_Group": { + "m_Id": "" + }, + "m_Name": "vertInstancingSetup (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -615.0, + "y": -224.00003051757813, + "width": 269.0, + "height": 94.00001525878906 + } + }, + "m_Slots": [ + { + "m_Id": "95e168ba774041c59d5e045b2ee33f3c" + }, + { + "m_Id": "3b467b9abac74f6680f029acc0fe9962" + } + ], + "synonyms": [ + "code", + "HLSL" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 1, + "m_FunctionName": "vertInstancingSetup", + "m_FunctionSource": "", + "m_FunctionBody": "Out = In;\n}\n\n#pragma multi_compile_instancing\n#pragma instancing_options renderinglayer procedural:vertInstancingSetup\n\nvoid dummy(){" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "f219385ccac248649c14265dcc45cdbd", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f21b73915f984c11ae68788fc0ea87b5", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 47.999996185302737, + "y": -60.00000762939453, + "width": 199.9999237060547, + "height": 41.0 + } + }, + "m_Slots": [ + { + "m_Id": "0a05b15df7ce451c80d16da630598a05" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f2a0e5496350488fa545f78531eb1ec1", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Emission", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "dcc60507b5a34b6e8fba60b6787a5774" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Emission" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "f5027c09c73c476da7ed59558d84434c", + "m_Id": 0, + "m_DisplayName": "Normal (Tangent Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalTS", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 3 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f9361dfcb9af4dc7aa432a4c6703d796", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "f219385ccac248649c14265dcc45cdbd" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph.meta new file mode 100644 index 000000000..299e52000 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4df17ed533d3349a194f3bb8c89dcf5d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc new file mode 100644 index 000000000..44c796b32 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc @@ -0,0 +1,33 @@ +#ifndef PROCEDURAL_INCLUDED +#define PROCEDURAL_INCLUDED + +#define UNITY_INDIRECT_DRAW_ARGS IndirectDrawIndexedArgs +#include "UnityIndirect.cginc" + +StructuredBuffer _InstanceTransforms; +StructuredBuffer _InvInstanceTransforms; +StructuredBuffer _Colors; + +#if UNITY_ANY_INSTANCING_ENABLED + // Based on : + // https://github.com/Unity-Technologies/Graphics/blob/master/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/ParticlesInstancing.hlsl + // and/or + // https://github.com/TwoTailsGames/Unity-Built-in-Shaders/blob/master/CGIncludes/UnityStandardParticleInstancing.cginc + + void vertInstancingSetup() { + } +#endif + +void GetInstanceData_float(uint svInstanceID, float3 pos, out float3 outPos, out float4 color) +{ + InitIndirectDrawArgs(0); + uint instanceID = GetIndirectInstanceID_Base(svInstanceID); + + unity_ObjectToWorld = _InstanceTransforms[instanceID]; + unity_WorldToObject = _InvInstanceTransforms[instanceID]; + color = _Colors[instanceID]; + + outPos = pos; +} + +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc.meta new file mode 100644 index 000000000..68b2e76df --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9d77a2f1bd0624d4aa045916cb0955c9 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiEllipsoids.cginc b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc similarity index 63% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiEllipsoids.cginc rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc index 157d9d0b5..63513cb9c 100644 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiEllipsoids.cginc +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc @@ -1,15 +1,13 @@ #ifndef OBIELLIPSOIDS_INCLUDED #define OBIELLIPSOIDS_INCLUDED -float _RadiusScale; - // Eye ray origin in world space. // Works both for orthographic and perspective cameras. float3 WorldEye(float3 worldPos){ if ((UNITY_MATRIX_P[3].x == 0.0) && (UNITY_MATRIX_P[3].y == 0.0) && (UNITY_MATRIX_P[3].z == 0.0)){ return mul(UNITY_MATRIX_I_V,float4(mul(UNITY_MATRIX_V, float4(worldPos,1)).xy,0,1)).xyz; }else - return UNITY_MATRIX_I_V._m03_m13_m23; + return _WorldSpaceCameraPos; } // Returns visible ellipsoid radius and offset from center, given the eye position in parameter space. @@ -43,6 +41,20 @@ float IntersectEllipsoid(float3 v, float4 mapping, float3 a2, float3 a3, out flo return 2 * sqrtiq * exp(-r2*2.0f); } +void BuildVelocityStretchedBasis(float3 velocity, float stretchIntensity, float radius, out float4 t0, out float4 t1, out float4 t2) +{ + t0 = float4(UNITY_MATRIX_V[0].xyz, radius); // camera right vector + t2 = float4(UNITY_MATRIX_V[2].xyz, radius); // camera forward vector + + float3 eyeVel = velocity - dot(velocity, t2.xyz) * t2.xyz; + float velNorm = length(eyeVel); + float stretchAmount = velNorm * stretchIntensity; + + // use it to lerp between velocity vector and camera right: + t0 = float4(velNorm > 0.00001 ? eyeVel / velNorm : t0, radius * (1 + stretchAmount)); + t1 = float4(normalize(cross(t0.xyz,t2.xyz)), radius); +} + void BuildParameterSpaceMatrices(float4 t0, float4 t1, float4 t2, out float3x3 P, out float3x3 IP) { // build 3x3 orientation matrix and its inverse; @@ -50,18 +62,18 @@ void BuildParameterSpaceMatrices(float4 t0, float4 t1, float4 t2, out float3x3 P float3x3 O = transpose(IO); // build 3x3 scaling matrix and its inverse: - float3x3 S = float3x3(_RadiusScale*t0.w,0,0,0,_RadiusScale*t1.w,0,0,0,_RadiusScale*t2.w); - float3x3 IS = float3x3(1/(_RadiusScale*t0.w),0,0,0,1/(_RadiusScale*t1.w),0,0,0,1/(_RadiusScale*t2.w)); + float3x3 S = float3x3(t0.w,0,0,0,t1.w,0,0,0,t2.w); + float3x3 IS = float3x3(1/t0.w,0,0,0,1/t1.w,0,0,0,1/t2.w); // build 3x3 transformation matrix and its inverse: - P = mul(mul(O,S),IO); - IP = mul(mul(O,IS),IO); + P = mul((float3x3)unity_ObjectToWorld, mul(O,mul(S,IO)) ); + IP = mul(mul(mul(O,IS),IO), (float3x3)unity_WorldToObject); } float BuildEllipsoidBillboard(float3 center, float3 corner, float3x3 P, float3x3 IP, out float3 worldPos, out float3 view, out float3 eye) { // eye position and quad vectors in parameter space: - eye = mul(IP,WorldEye(center) - center); + eye = mul(IP, WorldEye(center) - center); float3 u = normalize(cross(-eye,UNITY_MATRIX_V[1].xyz)); float3 k = normalize(cross(-eye,u)); @@ -78,8 +90,14 @@ float BuildEllipsoidBillboard(float3 center, float3 corner, float3x3 P, float3x3 void BuildAuxiliaryNormalVectors(float3 center, float3 worldPos, float3 view, float3x3 P, float3x3 IP, out float3 a2, out float3 a3) { - a2 = mul((float3x3)UNITY_MATRIX_V,mul(IP,mul(IP,WorldEye(worldPos) - center))); //T^-2 * (eye - center) - a3 = mul((float3x3)UNITY_MATRIX_V,mul(IP,mul(IP,view))); //T^-2 * A[0] + // calculate T^-2 in object space, then multiply by + // inverse transpose of modelview to rotate normal from object to eye. + // This way the normal calculated in IntersectEllipsoid() is already in view space. + IP = mul((float3x3)unity_ObjectToWorld,IP); + float3x3 IP2 = mul((float3x3)UNITY_MATRIX_IT_MV, mul((float3x3)unity_WorldToObject,mul (IP, IP))); + + a2 = mul(IP2,WorldEye(worldPos) - center); //T^-2 * (eye - center) + a3 = mul(IP2,view); //T^-2 * A[0] } #endif diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiEllipsoids.cginc.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc.meta similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiEllipsoids.cginc.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc.meta diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc new file mode 100644 index 000000000..af6982158 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc @@ -0,0 +1,106 @@ +#ifndef OBIELLIPSOIDS_INCLUDED +#define OBIELLIPSOIDS_INCLUDED + +// Eye ray origin in world space. +// Works both for orthographic and perspective cameras. +float3 WorldEye(float3 worldPos){ + if ((UNITY_MATRIX_P[3].x == 0.0) && (UNITY_MATRIX_P[3].y == 0.0) && (UNITY_MATRIX_P[3].z == 0.0)){ + return mul(UNITY_MATRIX_I_V,float4(mul(UNITY_MATRIX_V, float4(worldPos,1)).xy,0,1)).xyz; + }else + return _WorldSpaceCameraPos; +} + +// Returns visible ellipsoid radius and offset from center, given the eye position in parameter space. +// Works both for orthographic and perspective cameras. +float VisibleEllipsoidCircleRadius(float3 eye, out float3 m){ + if ((UNITY_MATRIX_P[3].x == 0.0) && (UNITY_MATRIX_P[3].y == 0.0) && (UNITY_MATRIX_P[3].z == 0.0)){ + m = float3(0,0,0); + return 1; + }else{ + float t = 1/dot(eye,eye); + m = t * eye; + return sqrt(1-t); + } +} + +// Performs accurate raycasting of a spherical impostor. +// Works both for orthographic and perspective cameras. +void IntersectEllipsoid_float(float3 v, float4 mapping, float3 a2, float3 a3, out float3 eyePos, out float3 eyeNormal, out float thickness, out float clipThreshold) +{ + float r2 = dot(mapping.xy, mapping.xy); + + // clip if the ray does not intersect the sphere. + clipThreshold = r2/mapping.w; + float iq = 1 - clipThreshold; + + float sqrtiq = sqrt(iq); + float lambda = 1/(1 + mapping.z * sqrtiq); + + eyePos = lambda * v; + eyeNormal = normalize(a2 + lambda * a3); + + // return gaussian-falloff thickness. + thickness = 2 * sqrtiq * exp(-r2*2.0f); + + clipThreshold = (1 - clipThreshold > 0) ? 0 : 1.01; +} + +void BuildVelocityStretchedBasis_float(float3 velocity, float stretchIntensity, float radius, out float4 t0, out float4 t1, out float4 t2) +{ + t0 = float4(UNITY_MATRIX_V[0].xyz, radius); // camera right vector + t2 = float4(UNITY_MATRIX_V[2].xyz, radius); // camera forward vector + + float3 eyeVel = velocity - dot(velocity, t2.xyz) * t2.xyz; + float velNorm = length(eyeVel); + float stretchAmount = velNorm * stretchIntensity; + + // use it to lerp between velocity vector and camera right: + t0 = float4(velNorm > 0.00001 ? eyeVel / velNorm : t0.xyz, radius * (1 + stretchAmount)); + t1 = float4(normalize(cross(t0.xyz,t2.xyz)), radius); +} + +void BuildParameterSpaceMatrices_float(float4 t0, float4 t1, float4 t2, float radiusScale, out float3x3 P, out float3x3 IP) +{ + // build 3x3 orientation matrix and its inverse; + float3x3 IO = float3x3(t0.xyz,t1.xyz,t2.xyz); + float3x3 O = transpose(IO); + + // build 3x3 scaling matrix and its inverse: + float3x3 S = float3x3(radiusScale*t0.w,0,0,0,radiusScale*t1.w,0,0,0,radiusScale*t2.w); + float3x3 IS = float3x3(1/(radiusScale*t0.w),0,0,0,1/(radiusScale*t1.w),0,0,0,1/(radiusScale*t2.w)); + + // build 3x3 transformation matrix and its inverse: + P = mul((float3x3)UNITY_MATRIX_M, mul(O,mul(S,IO)) ); + IP = mul(mul(mul(O,IS),IO), (float3x3)UNITY_MATRIX_I_M); +} + +void BuildEllipsoidBillboard_float(float3 center, float3 corner, float3x3 P, float3x3 IP, out float3 worldPos, out float3 view, out float3 eye, out float radius) +{ + // eye position and quad vectors in parameter space: + eye = mul(IP,WorldEye(center) - center); + float3 u = normalize(cross(-eye,UNITY_MATRIX_V[1].xyz)); + float3 k = normalize(cross(-eye,u)); + + // visible circle radius and offset from center in the direction of the view ray: + float3 m; + radius = VisibleEllipsoidCircleRadius(eye,m); + + // world position of the billboard corner, and view vector to it: + worldPos = center + mul(P, m) + radius * (mul(P,u)* corner.x + mul(P,k)* corner.y); + view = worldPos - WorldEye(worldPos); +} + +void BuildAuxiliaryNormalVectors_float(float3 center, float3 worldPos, float3 view, float3x3 P, float3x3 IP, out float3 a2, out float3 a3) +{ + // calculate T^-2 in object space, then multiply by + // inverse transpose of modelview to rotate normal from object to eye. + // This way the normal calculated in IntersectEllipsoid() is already in view space. + IP = mul((float3x3)UNITY_MATRIX_M,IP); + float3x3 IT_MV = transpose(mul((float3x3)UNITY_MATRIX_I_V, (float3x3)UNITY_MATRIX_I_M)); + float3x3 IP2 = mul(IT_MV, mul((float3x3)UNITY_MATRIX_I_M,mul (IP, IP))); // UNITY_MATRIX_IT_MV + + a2 = mul(IP2,WorldEye(worldPos) - center); //T^-2 * (eye - center) + a3 = mul(IP2,view); //T^-2 * A[0] +} + +#endif diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta new file mode 100644 index 000000000..62b298766 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bc807595df1f54350ac0027aaf7cb91b +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiUtils.cginc b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiUtils.cginc rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiUtils.cginc.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc.meta similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiUtils.cginc.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc.meta diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph new file mode 100644 index 000000000..4b61fbcdf --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph @@ -0,0 +1,5867 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "78d72b84620c4d40bd076ace556c78f8", + "m_Properties": [ + { + "m_Id": "1f4b884eb7a5494fa0a4c6b1726ae6e9" + }, + { + "m_Id": "22b23a850ca345f6b5b35205f12039ae" + }, + { + "m_Id": "ac709b9b0cc14e26a2611422b499ba45" + } + ], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "4c99293183f94afb9e94b8936dbbcc14" + } + ], + "m_Nodes": [ + { + "m_Id": "1fdb294276af4309848652e8d2e07def" + }, + { + "m_Id": "5ff456959eca4fbd934a5aac0280d67f" + }, + { + "m_Id": "d11f8fd02e364ad5b8eadd3550fa2851" + }, + { + "m_Id": "cf2c0d4033c24443b7c21cb036226b3f" + }, + { + "m_Id": "dffaa900d1d04a7db60ef0ccab276839" + }, + { + "m_Id": "0dcd4dbbd33e4365be4d2cdfdc121036" + }, + { + "m_Id": "84cbbe352286486abb8cf0a951e3e458" + }, + { + "m_Id": "2ece075db2b3411a80af471816c4e871" + }, + { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + { + "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" + }, + { + "m_Id": "79ee34ad93234f7880a9f2680b904beb" + }, + { + "m_Id": "44656ed842a54a34b956fc57e356de21" + }, + { + "m_Id": "18eff50f7a64480385a1ad3698dc0a1d" + }, + { + "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" + }, + { + "m_Id": "9a540fa4d7fd41edb663c20d392cc937" + }, + { + "m_Id": "b585fdf2c7ce438b8a72c6f452ff31ab" + }, + { + "m_Id": "b397b42dfd5342b0b6291c60e22ae6d4" + }, + { + "m_Id": "e185f6e703b749569fec95035ae86e44" + }, + { + "m_Id": "7e7b6ef93c414bec8d608482fc837fb3" + }, + { + "m_Id": "b35a3765628d49f69d75dfc77df38114" + }, + { + "m_Id": "29c676f6f7fc4d2dbb627a099736baaa" + }, + { + "m_Id": "32c989810b8e4fe7b964240b81ea9def" + }, + { + "m_Id": "a5babea545924715b0ba888ac6373f66" + }, + { + "m_Id": "babccae7634a4d2090f45aa9e154b2ca" + }, + { + "m_Id": "2ed72e60304c47509002fc1b2c204a99" + }, + { + "m_Id": "6f0ad27166324e6fbc829bc0e4076d27" + }, + { + "m_Id": "7650578a1434466faec6ab2d3fe8f0a6" + }, + { + "m_Id": "69d4f0ec92ff4182be437caf84eafb72" + }, + { + "m_Id": "af8c0d42edcd4eda8e6e86de937dbadf" + }, + { + "m_Id": "4c900e907c5340d88caa515b644c0a70" + }, + { + "m_Id": "97bd7a4169c641a59a7012a029b44964" + }, + { + "m_Id": "3b5798f4b422481bb94c97f7014cd7b9" + }, + { + "m_Id": "ee946d6d4c7c4cb1b920e447bb01d580" + }, + { + "m_Id": "f5da1c6b4af04e169c2dce3319f17d13" + }, + { + "m_Id": "675f1b67f80444599ddf4ba675419f8d" + }, + { + "m_Id": "4959d2015a38402881b6fec5e5a518a6" + }, + { + "m_Id": "463beca994a14896865c0978dffaa08b" + }, + { + "m_Id": "e445db0b154846179887a9470ff3aa66" + }, + { + "m_Id": "e94b4e133a134411aa01241421f711cb" + }, + { + "m_Id": "dfd25b2a19df42beba356ef0e5e0b3be" + }, + { + "m_Id": "23a24fff90ba43ab9e3d17e24ec85ad7" + }, + { + "m_Id": "c6116508eb7246469fe9c6ae81460410" + }, + { + "m_Id": "186ed2ae0dbb4487a943f3930c952fc4" + }, + { + "m_Id": "26e1af9d3ae14f71adf1a395a49b937e" + }, + { + "m_Id": "51ff74a2115b4f07940322b02e8b9806" + }, + { + "m_Id": "115b4d546e6b497dae56cf2a084bb730" + }, + { + "m_Id": "4142867127cb4a21bfa771e4c5b504bc" + }, + { + "m_Id": "e17c109ffbe942c89e40ff95cd1cfd7a" + }, + { + "m_Id": "7be03ef72fc946ff81de225831947baf" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "115b4d546e6b497dae56cf2a084bb730" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "af8c0d42edcd4eda8e6e86de937dbadf" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "186ed2ae0dbb4487a943f3930c952fc4" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "18eff50f7a64480385a1ad3698dc0a1d" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "23a24fff90ba43ab9e3d17e24ec85ad7" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 5 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6f0ad27166324e6fbc829bc0e4076d27" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 6 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "115b4d546e6b497dae56cf2a084bb730" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 6 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "babccae7634a4d2090f45aa9e154b2ca" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "23a24fff90ba43ab9e3d17e24ec85ad7" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1fdb294276af4309848652e8d2e07def" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "26e1af9d3ae14f71adf1a395a49b937e" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "29c676f6f7fc4d2dbb627a099736baaa" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2ece075db2b3411a80af471816c4e871" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2ece075db2b3411a80af471816c4e871" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2ed72e60304c47509002fc1b2c204a99" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "babccae7634a4d2090f45aa9e154b2ca" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2ed72e60304c47509002fc1b2c204a99" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "babccae7634a4d2090f45aa9e154b2ca" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "32c989810b8e4fe7b964240b81ea9def" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "3b5798f4b422481bb94c97f7014cd7b9" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5ff456959eca4fbd934a5aac0280d67f" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "44656ed842a54a34b956fc57e356de21" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4959d2015a38402881b6fec5e5a518a6" + }, + "m_SlotId": 3 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f5da1c6b4af04e169c2dce3319f17d13" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4c900e907c5340d88caa515b644c0a70" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3b5798f4b422481bb94c97f7014cd7b9" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "186ed2ae0dbb4487a943f3930c952fc4" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "26e1af9d3ae14f71adf1a395a49b937e" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "51ff74a2115b4f07940322b02e8b9806" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2ed72e60304c47509002fc1b2c204a99" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" + }, + "m_SlotId": 5 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7e7b6ef93c414bec8d608482fc837fb3" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" + }, + "m_SlotId": 6 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b35a3765628d49f69d75dfc77df38114" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "675f1b67f80444599ddf4ba675419f8d" + }, + "m_SlotId": 3 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f5da1c6b4af04e169c2dce3319f17d13" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "69d4f0ec92ff4182be437caf84eafb72" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "af8c0d42edcd4eda8e6e86de937dbadf" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "6f0ad27166324e6fbc829bc0e4076d27" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7650578a1434466faec6ab2d3fe8f0a6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7650578a1434466faec6ab2d3fe8f0a6" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "babccae7634a4d2090f45aa9e154b2ca" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "79ee34ad93234f7880a9f2680b904beb" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7be03ef72fc946ff81de225831947baf" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dffaa900d1d04a7db60ef0ccab276839" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4959d2015a38402881b6fec5e5a518a6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" + }, + "m_SlotId": 5 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a5babea545924715b0ba888ac6373f66" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "dfd25b2a19df42beba356ef0e5e0b3be" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "84cbbe352286486abb8cf0a951e3e458" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "84cbbe352286486abb8cf0a951e3e458" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "51ff74a2115b4f07940322b02e8b9806" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "97bd7a4169c641a59a7012a029b44964" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "3b5798f4b422481bb94c97f7014cd7b9" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a5babea545924715b0ba888ac6373f66" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "463beca994a14896865c0978dffaa08b" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "af8c0d42edcd4eda8e6e86de937dbadf" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b585fdf2c7ce438b8a72c6f452ff31ab" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b397b42dfd5342b0b6291c60e22ae6d4" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "babccae7634a4d2090f45aa9e154b2ca" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9a540fa4d7fd41edb663c20d392cc937" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c6116508eb7246469fe9c6ae81460410" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "675f1b67f80444599ddf4ba675419f8d" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e185f6e703b749569fec95035ae86e44" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e185f6e703b749569fec95035ae86e44" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "c6116508eb7246469fe9c6ae81460410" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e445db0b154846179887a9470ff3aa66" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "4f921bef2597498da8ae8c75e3007b37" + }, + "m_SlotId": 5 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f5da1c6b4af04e169c2dce3319f17d13" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ee946d6d4c7c4cb1b920e447bb01d580" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 535.0, + "y": 29.9999942779541 + }, + "m_Blocks": [ + { + "m_Id": "7e7b6ef93c414bec8d608482fc837fb3" + }, + { + "m_Id": "b35a3765628d49f69d75dfc77df38114" + }, + { + "m_Id": "1fdb294276af4309848652e8d2e07def" + }, + { + "m_Id": "b585fdf2c7ce438b8a72c6f452ff31ab" + }, + { + "m_Id": "9a540fa4d7fd41edb663c20d392cc937" + }, + { + "m_Id": "4142867127cb4a21bfa771e4c5b504bc" + }, + { + "m_Id": "e17c109ffbe942c89e40ff95cd1cfd7a" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 535.0000610351563, + "y": 411.0000305175781 + }, + "m_Blocks": [ + { + "m_Id": "5ff456959eca4fbd934a5aac0280d67f" + }, + { + "m_Id": "463beca994a14896865c0978dffaa08b" + }, + { + "m_Id": "d11f8fd02e364ad5b8eadd3550fa2851" + }, + { + "m_Id": "cf2c0d4033c24443b7c21cb036226b3f" + }, + { + "m_Id": "dffaa900d1d04a7db60ef0ccab276839" + }, + { + "m_Id": "0dcd4dbbd33e4365be4d2cdfdc121036" + }, + { + "m_Id": "ee946d6d4c7c4cb1b920e447bb01d580" + }, + { + "m_Id": "e94b4e133a134411aa01241421f711cb" + }, + { + "m_Id": "dfd25b2a19df42beba356ef0e5e0b3be" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_ActiveTargets": [ + { + "m_Id": "5915510c968749209ff6f351ddb9a96e" + }, + { + "m_Id": "4790e9cb06234cefa4390fb194e36e9d" + }, + { + "m_Id": "9f0ab621b28741df9e2a65a37837af56" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "02661c44bbcb4c2f9ba17e80d7961c8b", + "m_Id": 1, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.LightingData", + "m_ObjectId": "0302a9604b3f4175835f2fe805babd5b", + "m_NormalDropOffSpace": 0, + "m_BlendPreserveSpecular": true, + "m_ReceiveDecals": false, + "m_ReceiveSSR": true, + "m_ReceiveSSRTransparent": false, + "m_SpecularAA": false, + "m_SpecularOcclusionMode": 1, + "m_OverrideBakedGI": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", + "m_ObjectId": "036bc09f36e2448f81db41a6ae1e8190", + "m_Id": 2, + "m_DisplayName": "P", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "P", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicMatrixMaterialSlot", + "m_ObjectId": "0486de2ab41b4463853f8b70b1c609d6", + "m_Id": 0, + "m_DisplayName": "", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "0631b78f49ed4369abc26bddeecd8c71", + "m_Id": 2, + "m_DisplayName": "view", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "view", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "06a2fcfa697b4e19af278e2c539b8d2d", + "m_Id": 0, + "m_DisplayName": "Ambient Occlusion", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Occlusion", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "08351f97eeea4b6485b39a61a65a3fe8", + "m_Id": 5, + "m_DisplayName": "RGB", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGB", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "09069b51882f444b840aabb69c7c506f", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.BuiltinData", + "m_ObjectId": "094b0804cd0a4e33920a4abe743454a6", + "m_Distortion": false, + "m_DistortionMode": 0, + "m_DistortionDepthTest": true, + "m_AddPrecomputedVelocity": false, + "m_TransparentWritesMotionVec": false, + "m_AlphaToMask": false, + "m_DepthOffset": true, + "m_ConservativeDepthOffset": false, + "m_TransparencyFog": true, + "m_AlphaTestShadow": false, + "m_BackThenFrontRendering": false, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "09cd01e9020d48e1bda65b06c6a71b16", + "m_Id": 0, + "m_DisplayName": "_Smoothness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0a65b1a8a9cc4d26aa3d5676905379a0", + "m_Id": 0, + "m_DisplayName": "Depth Offset", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "DepthOffset", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "0ba2bd333a584e04a0f559269a5cb217", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "0bed110901394810986b7c46885c2dbb", + "m_Id": 3, + "m_DisplayName": "a3", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "a3", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "0c6df044f18e4fca8e0602ab941e36b3", + "m_Id": 5, + "m_DisplayName": "a2", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "a2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "0dcd4dbbd33e4365be4d2cdfdc121036", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Occlusion", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "06a2fcfa697b4e19af278e2c539b8d2d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Occlusion" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", + "m_ObjectId": "115b4d546e6b497dae56cf2a084bb730", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Redirect Node", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -215.00003051757813, + "y": 216.00003051757813, + "width": 56.00001525878906, + "height": 24.0 + } + }, + "m_Slots": [ + { + "m_Id": "34b089445d94443bae321419aba92376" + }, + { + "m_Id": "ef8a1c0804ec4253ad73c319031bec6e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", + "m_ObjectId": "186ed2ae0dbb4487a943f3930c952fc4", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Redirect Node", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1105.0, + "y": -97.00000762939453, + "width": 56.0, + "height": 24.000015258789064 + } + }, + "m_Slots": [ + { + "m_Id": "0486de2ab41b4463853f8b70b1c609d6" + }, + { + "m_Id": "3cdefcef62e446c6820185746a0ec7a1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "18eff50f7a64480385a1ad3698dc0a1d", + "m_Group": { + "m_Id": "" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1908.0, + "y": 196.0000457763672, + "width": 145.0, + "height": 128.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "9d04c3fa0c6848bd908018475a5ec9cf" + } + ], + "synonyms": [ + "texcoords", + "coords", + "coordinates" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 2 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "1a63d9f74e5943368bfe7e3f9bba296a", + "m_Group": { + "m_Id": "" + }, + "m_Name": "BuildEllipsoidBillboard (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1105.0, + "y": -20.999990463256837, + "width": 279.0, + "height": 165.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "24cc20330a6746e78f01f178e5c0ee25" + }, + { + "m_Id": "54c2e40c04ab4fa88a6d13a3467a46bd" + }, + { + "m_Id": "036bc09f36e2448f81db41a6ae1e8190" + }, + { + "m_Id": "48d6d267a6b6420c974cd75196394443" + }, + { + "m_Id": "436f317395f24909887811586c2f866e" + }, + { + "m_Id": "5861051e6958489e94681625dec6c335" + }, + { + "m_Id": "6fe22af4b335449785d1591830c50ad8" + }, + { + "m_Id": "5649099a965447e4a907f5c05f14dbbd" + } + ], + "synonyms": [ + "code", + "HLSL" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "BuildEllipsoidBillboard", + "m_FunctionSource": "bc807595df1f54350ac0027aaf7cb91b", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "1f4b884eb7a5494fa0a4c6b1726ae6e9", + "m_Guid": { + "m_GuidSerialized": "763834f5-9d1d-4816-ab86-2702663f61f8" + }, + "m_Name": "_ParticleColor", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "_ParticleColor", + "m_DefaultReferenceName": "_ParticleColor", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "isMainColor": false, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "1f4c9820a5b244deb7bd8e2bf0aa5270", + "m_Id": 0, + "m_DisplayName": "Metallic", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Metallic", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "1fdb294276af4309848652e8d2e07def", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 549.0, + "y": 56.99999237060547, + "width": 200.0, + "height": 41.000022888183597 + } + }, + "m_Slots": [ + { + "m_Id": "7e16c891692f43b1951da51f4eb47500" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "202b523ecf9e4573829b429baf158c79", + "m_Id": 0, + "m_DisplayName": "", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", + "m_ObjectId": "212c4e3679184df4b049b834fa8b8426", + "m_Id": 4, + "m_DisplayName": "IP", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "IP", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "22b23a850ca345f6b5b35205f12039ae", + "m_Guid": { + "m_GuidSerialized": "50e8f452-c4bb-469f-bc6d-d232542d1f49" + }, + "m_Name": "_RadiusScale", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "_RadiusScale", + "m_DefaultReferenceName": "_RadiusScale", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 1.0, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.TransformNode", + "m_ObjectId": "23a24fff90ba43ab9e3d17e24ec85ad7", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Transform", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -426.00006103515627, + "y": -20.999967575073243, + "width": 211.00003051757813, + "height": 156.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "09069b51882f444b840aabb69c7c506f" + }, + { + "m_Id": "2bd336d88e8e4c18a43bb2689820da8b" + } + ], + "synonyms": [ + "world", + "tangent", + "object", + "view", + "screen", + "convert" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Conversion": { + "from": 2, + "to": 0 + }, + "m_ConversionType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "24cc20330a6746e78f01f178e5c0ee25", + "m_Id": 0, + "m_DisplayName": "center", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "center", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", + "m_ObjectId": "26e1af9d3ae14f71adf1a395a49b937e", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Redirect Node", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1105.0, + "y": -72.99999237060547, + "width": 56.0, + "height": 24.00000762939453 + } + }, + "m_Slots": [ + { + "m_Id": "f66158b6241342c88d2a4991233e93a8" + }, + { + "m_Id": "bfadf92d913d48b88b7911b3bf4952ba" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CustomInterpolatorNode", + "m_ObjectId": "29c676f6f7fc4d2dbb627a099736baaa", + "m_Group": { + "m_Id": "" + }, + "m_Name": "a2 (Custom Interpolator)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -757.0000610351563, + "y": 766.0, + "width": 186.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "c1114c7b3db74f0da0e27c4938d3b793" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "customBlockNodeName": "a2", + "serializedType": 4 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2b95d6ad64994e1b81cadbf3a7869b7f", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "2bd336d88e8e4c18a43bb2689820da8b", + "m_Id": 1, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "2c02d7c314a54cb8bed120d81563a87f", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.PositionNode", + "m_ObjectId": "2ece075db2b3411a80af471816c4e871", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1571.0001220703125, + "y": -238.0, + "width": 206.0001220703125, + "height": 131.0 + } + }, + "m_Slots": [ + { + "m_Id": "719c4a0aa83440f1abe407eb97fe03d1" + } + ], + "synonyms": [ + "location" + ], + "m_Precision": 1, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Space": 2, + "m_PositionSource": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "2ed72e60304c47509002fc1b2c204a99", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -534.0, + "y": 266.0, + "width": 119.99993896484375, + "height": 149.00003051757813 + } + }, + "m_Slots": [ + { + "m_Id": "d9e1566528a04795a93b9222cfe9b841" + }, + { + "m_Id": "feae803029f141b7b77576f65de3f361" + }, + { + "m_Id": "9932077343944e9ea934ada791a438e8" + }, + { + "m_Id": "b61bc63901084fca9804abee48abddfd" + }, + { + "m_Id": "ae35ddc362bb47d9831f62b11095e69c" + } + ], + "synonyms": [ + "separate" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CustomInterpolatorNode", + "m_ObjectId": "32c989810b8e4fe7b964240b81ea9def", + "m_Group": { + "m_Id": "" + }, + "m_Name": "a3 (Custom Interpolator)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -757.0000610351563, + "y": 865.0, + "width": 186.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "2c02d7c314a54cb8bed120d81563a87f" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "customBlockNodeName": "a3", + "serializedType": 4 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "32c9f709646841e6b3d5d2ecf3b88217", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "333055955acb46f7b454539413c183b0", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "34b089445d94443bae321419aba92376", + "m_Id": 0, + "m_DisplayName": "", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "3b5798f4b422481bb94c97f7014cd7b9", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 245.99986267089845, + "y": 410.9999694824219, + "width": 129.9999542236328, + "height": 118.00003051757813 + } + }, + "m_Slots": [ + { + "m_Id": "9d0a9a76df624baebeb40acbf1676a05" + }, + { + "m_Id": "6706229ffa8a452fb31f3e611a4e969f" + }, + { + "m_Id": "e27b00a5d6b8496e888b33ff61e843e3" + } + ], + "synonyms": [ + "multiplication", + "times", + "x" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicMatrixMaterialSlot", + "m_ObjectId": "3cdefcef62e446c6820185746a0ec7a1", + "m_Id": 1, + "m_DisplayName": "", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "3e0e2d1e47374294b5539e85bc63baf7", + "m_Id": 6, + "m_DisplayName": "a3", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "a3", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "3f7e82d473a94fab86903e3875520da8", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "4142867127cb4a21bfa771e4c5b504bc", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "b456d184e007428eb74e555e1d369069" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "41c7519efb9a45fb85dcded2b16d584d", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "436f317395f24909887811586c2f866e", + "m_Id": 4, + "m_DisplayName": "worldPos", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "worldPos", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "44656ed842a54a34b956fc57e356de21", + "m_Group": { + "m_Id": "" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1908.0, + "y": 62.000003814697269, + "width": 145.0, + "height": 129.0 + } + }, + "m_Slots": [ + { + "m_Id": "2b95d6ad64994e1b81cadbf3a7869b7f" + } + ], + "synonyms": [ + "texcoords", + "coords", + "coordinates" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "463beca994a14896865c0978dffaa08b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalWS", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 541.0000610351563, + "y": 518.0, + "width": 199.99993896484376, + "height": 41.0 + } + }, + "m_Slots": [ + { + "m_Id": "d08d226deab44224a9c127e0838da1ec" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalWS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDTarget", + "m_ObjectId": "4790e9cb06234cefa4390fb194e36e9d", + "m_ActiveSubTarget": { + "m_Id": "f63f238dcaed45b9859faec9503ae798" + }, + "m_Datas": [ + { + "m_Id": "de8e93dbd1744203a66905de95755eec" + }, + { + "m_Id": "094b0804cd0a4e33920a4abe743454a6" + }, + { + "m_Id": "0302a9604b3f4175835f2fe805babd5b" + }, + { + "m_Id": "91a6a3e7575d45f9ad4d9f157973bc76" + } + ], + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", + "m_ObjectId": "48d6d267a6b6420c974cd75196394443", + "m_Id": 3, + "m_DisplayName": "IP", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "IP", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "4959d2015a38402881b6fec5e5a518a6", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -100.99998474121094, + "y": 973.0, + "width": 120.0, + "height": 149.0 + } + }, + "m_Slots": [ + { + "m_Id": "aa904b9834494fefae0603bbf51a46ae" + }, + { + "m_Id": "a04bfc2e0f9748878673606fffc20b60" + }, + { + "m_Id": "d5ab07535b904d6c95b72aefdd4d8ccd" + }, + { + "m_Id": "7e1b86be59204bddbf54c850cfe7f7fd" + }, + { + "m_Id": "ea691d98931f4db5b57fa9074c8ac113" + } + ], + "synonyms": [ + "separate" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "4c900e907c5340d88caa515b644c0a70", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 49.99992752075195, + "y": 511.9999694824219, + "width": 148.99998474121095, + "height": 34.000030517578128 + } + }, + "m_Slots": [ + { + "m_Id": "ec49096fac914af0a3faddf1feb3953c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "1f4b884eb7a5494fa0a4c6b1726ae6e9" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "4c99293183f94afb9e94b8936dbbcc14", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "1f4b884eb7a5494fa0a4c6b1726ae6e9" + }, + { + "m_Id": "22b23a850ca345f6b5b35205f12039ae" + }, + { + "m_Id": "ac709b9b0cc14e26a2611422b499ba45" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "4d1be359822e42259ed2488d64051ddd", + "m_Id": 2, + "m_DisplayName": "t1", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "t1", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "4f921bef2597498da8ae8c75e3007b37", + "m_Group": { + "m_Id": "" + }, + "m_Name": "BuildParameterSpaceMatrices (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1690.999755859375, + "y": 29.999990463256837, + "width": 326.0, + "height": 166.00001525878907 + } + }, + "m_Slots": [ + { + "m_Id": "6de4193c77c443cf829c0b9051349796" + }, + { + "m_Id": "4d1be359822e42259ed2488d64051ddd" + }, + { + "m_Id": "67fa16b6c3424083aaed5ff9d043584a" + }, + { + "m_Id": "d3003457079944b499113867ead39439" + }, + { + "m_Id": "cd294f26621f499cb86c60132cc4143c" + }, + { + "m_Id": "774879720fdb4a149503b61c37ca1170" + } + ], + "synonyms": [ + "code", + "HLSL" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "BuildParameterSpaceMatrices", + "m_FunctionSource": "bc807595df1f54350ac0027aaf7cb91b", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "51b895e1b64e43529095cc44fc769771", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", + "m_ObjectId": "51ff74a2115b4f07940322b02e8b9806", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Redirect Node", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1005.9999389648438, + "y": 304.0, + "width": 56.0, + "height": 24.0 + } + }, + "m_Slots": [ + { + "m_Id": "202b523ecf9e4573829b429baf158c79" + }, + { + "m_Id": "7597891277e54542b0e496704bf8a7f6" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "53f213ac70a7461ab7fb3813e00bb7f6", + "m_Id": 0, + "m_DisplayName": "", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "54c2e40c04ab4fa88a6d13a3467a46bd", + "m_Id": 1, + "m_DisplayName": "corner", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "corner", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "5649099a965447e4a907f5c05f14dbbd", + "m_Id": 7, + "m_DisplayName": "radius", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "radius", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "5861051e6958489e94681625dec6c335", + "m_Id": 6, + "m_DisplayName": "view", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "view", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.BuiltIn.ShaderGraph.BuiltInTarget", + "m_ObjectId": "5915510c968749209ff6f351ddb9a96e", + "m_ActiveSubTarget": { + "m_Id": "64c04874fef94dbaa74657a68a9696db" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZWriteControl": 0, + "m_ZTestMode": 4, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": true, + "m_CustomEditorGUI": "" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "5cb55dd043474b2ca931483a70806fb7", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "5ee2f7c86c814012bd5eba803e4b36ea", + "m_Group": { + "m_Id": "" + }, + "m_Name": "BuildAuxiliaryNormalVectors (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -533.9999389648438, + "y": -262.9999694824219, + "width": 316.00006103515627, + "height": 189.99996948242188 + } + }, + "m_Slots": [ + { + "m_Id": "855a9ade904b45bcac021a0c28779459" + }, + { + "m_Id": "60093ed6facb41ca9cb2a1c011469dfd" + }, + { + "m_Id": "0631b78f49ed4369abc26bddeecd8c71" + }, + { + "m_Id": "e3ffd102837b43d98258c9830c869bff" + }, + { + "m_Id": "212c4e3679184df4b049b834fa8b8426" + }, + { + "m_Id": "0c6df044f18e4fca8e0602ab941e36b3" + }, + { + "m_Id": "3e0e2d1e47374294b5539e85bc63baf7" + } + ], + "synonyms": [ + "code", + "HLSL" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "BuildAuxiliaryNormalVectors", + "m_FunctionSource": "bc807595df1f54350ac0027aaf7cb91b", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "5ff456959eca4fbd934a5aac0280d67f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "0ba2bd333a584e04a0f559269a5cb217" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "60093ed6facb41ca9cb2a1c011469dfd", + "m_Id": 1, + "m_DisplayName": "worldPos", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "worldPos", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "619732196dbf41f6a0e7b1174688f54c", + "m_Id": 6, + "m_DisplayName": "RG", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RG", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "61c80ef969694adf838815d13bc5cd67", + "m_Id": 0, + "m_DisplayName": "Emission", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Emission", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 1, + "m_DefaultColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.BuiltIn.ShaderGraph.BuiltInLitSubTarget", + "m_ObjectId": "64c04874fef94dbaa74657a68a9696db", + "m_WorkflowMode": 1, + "m_NormalDropOffSpace": 2 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "6706229ffa8a452fb31f3e611a4e969f", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SplitNode", + "m_ObjectId": "675f1b67f80444599ddf4ba675419f8d", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Split", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -101.00003814697266, + "y": 815.0, + "width": 120.00003814697266, + "height": 149.0 + } + }, + "m_Slots": [ + { + "m_Id": "9dcc637f334c4ca6bf1c804405d3a006" + }, + { + "m_Id": "80b7c010fc9449a6be2b2971c67263b6" + }, + { + "m_Id": "b7ad4b8143794b239501e5624069fe3e" + }, + { + "m_Id": "32c9f709646841e6b3d5d2ecf3b88217" + }, + { + "m_Id": "3f7e82d473a94fab86903e3875520da8" + } + ], + "synonyms": [ + "separate" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "67fa16b6c3424083aaed5ff9d043584a", + "m_Id": 3, + "m_DisplayName": "t2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "t2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Matrix4MaterialSlot", + "m_ObjectId": "6938d733952943ab93dd81dd0cee899e", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TransformationMatrixNode", + "m_ObjectId": "69d4f0ec92ff4182be437caf84eafb72", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Transformation Matrix", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -214.9999237060547, + "y": 89.0, + "width": 171.99996948242188, + "height": 111.99996948242188 + } + }, + "m_Slots": [ + { + "m_Id": "6938d733952943ab93dd81dd0cee899e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_matrix": -1, + "m_MatrixType": 2 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "6ad20bbbd1074108a572a177504cb6ea", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "6de4193c77c443cf829c0b9051349796", + "m_Id": 1, + "m_DisplayName": "t0", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "t0", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "6f08d1c6b86e499681f60f1f6a7f9196", + "m_Id": 6, + "m_DisplayName": "thickness", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "thickness", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.LengthNode", + "m_ObjectId": "6f0ad27166324e6fbc829bc0e4076d27", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Length", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -663.9999389648438, + "y": 368.0000305175781, + "width": 129.99993896484376, + "height": 93.99993896484375 + } + }, + "m_Slots": [ + { + "m_Id": "8b53ecbd13194b99a498b327fe512e93" + }, + { + "m_Id": "e716e7c9ae6e45278a7d746d0a1da856" + } + ], + "synonyms": [ + "measure" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "6fe22af4b335449785d1591830c50ad8", + "m_Id": 5, + "m_DisplayName": "eye", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "eye", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "719c4a0aa83440f1abe407eb97fe03d1", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "74076c4a517f4a9bb9273882b00b51a6", + "m_Id": 1, + "m_DisplayName": "", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "748d29134b584213abde74716f79052b", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "7597891277e54542b0e496704bf8a7f6", + "m_Id": 1, + "m_DisplayName": "", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ReciprocalNode", + "m_ObjectId": "7650578a1434466faec6ab2d3fe8f0a6", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Reciprocal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -414.00006103515627, + "y": 368.0000305175781, + "width": 145.0, + "height": 128.99996948242188 + } + }, + "m_Slots": [ + { + "m_Id": "5cb55dd043474b2ca931483a70806fb7" + }, + { + "m_Id": "02661c44bbcb4c2f9ba17e80d7961c8b" + } + ], + "synonyms": [ + "rcp" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_ReciprocalMethod": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalLitSubTarget", + "m_ObjectId": "773994bbd21543a0aefb333735078a53", + "m_WorkflowMode": 1, + "m_NormalDropOffSpace": 2, + "m_ClearCoat": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", + "m_ObjectId": "774879720fdb4a149503b61c37ca1170", + "m_Id": 4, + "m_DisplayName": "IP", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "IP", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "789d3c4acdee4777a68a43567cc7de51", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "79ab31681e3e419183510b2fa4f09f6a", + "m_Id": 2, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "79ee34ad93234f7880a9f2680b904beb", + "m_Group": { + "m_Id": "" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1908.0, + "y": -73.0, + "width": 145.0, + "height": 129.0 + } + }, + "m_Slots": [ + { + "m_Id": "748d29134b584213abde74716f79052b" + } + ], + "synonyms": [ + "texcoords", + "coords", + "coordinates" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "7be03ef72fc946ff81de225831947baf", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 362.0, + "y": 616.0, + "width": 145.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "09cd01e9020d48e1bda65b06c6a71b16" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "ac709b9b0cc14e26a2611422b499ba45" + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", + "m_ObjectId": "7c1b54d0ae564cce9fee0e3b18b0f945", + "m_Group": { + "m_Id": "" + }, + "m_Name": "IntersectEllipsoid (Custom Function)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -425.99981689453127, + "y": 599.9999389648438, + "width": 251.99984741210938, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "afbbb64c9a7b4d16963c20b5f2af4154" + }, + { + "m_Id": "f30fd08bbcc74a6198fb279d65f82696" + }, + { + "m_Id": "b9f263f81f814659b65ba7c8965c6b7e" + }, + { + "m_Id": "0bed110901394810986b7c46885c2dbb" + }, + { + "m_Id": "d068f1207b3340f6a006284eb45ddb8b" + }, + { + "m_Id": "ce9414174ca54d1293c032bb45fac6a3" + }, + { + "m_Id": "6f08d1c6b86e499681f60f1f6a7f9196" + }, + { + "m_Id": "f50f51a906cb44dcbc8403263a8cfa32" + } + ], + "synonyms": [ + "code", + "HLSL" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SourceType": 0, + "m_FunctionName": "IntersectEllipsoid", + "m_FunctionSource": "bc807595df1f54350ac0027aaf7cb91b", + "m_FunctionBody": "Enter function body here..." +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "7e16c891692f43b1951da51f4eb47500", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7e1b86be59204bddbf54c850cfe7f7fd", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "7e7b6ef93c414bec8d608482fc837fb3", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.CustomInterpolator", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 540.0000610351563, + "y": 51.99999237060547, + "width": 199.99993896484376, + "height": 41.00001525878906 + } + }, + "m_Slots": [ + { + "m_Id": "9d1228b7470642dd9a33ba2fb5148690" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.a2#4" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "8053f38f7ace4f8c9ae0b53fca131228", + "m_Id": 1, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "80b7c010fc9449a6be2b2971c67263b6", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalVectorNode", + "m_ObjectId": "84cbbe352286486abb8cf0a951e3e458", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Normal Vector", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1570.9998779296875, + "y": -106.99996948242188, + "width": 206.0, + "height": 131.0 + } + }, + "m_Slots": [ + { + "m_Id": "6ad20bbbd1074108a572a177504cb6ea" + } + ], + "synonyms": [ + "surface direction" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "855a9ade904b45bcac021a0c28779459", + "m_Id": 0, + "m_DisplayName": "center", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "center", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "8b53ecbd13194b99a498b327fe512e93", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.SystemData", + "m_ObjectId": "91a6a3e7575d45f9ad4d9f157973bc76", + "m_MaterialNeedsUpdateHash": 529, + "m_SurfaceType": 0, + "m_RenderingPass": 1, + "m_BlendMode": 0, + "m_ZTest": 4, + "m_ZWrite": false, + "m_TransparentCullMode": 2, + "m_OpaqueCullMode": 2, + "m_SortPriority": 0, + "m_AlphaTest": false, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false, + "m_DoubleSidedMode": 0, + "m_DOTSInstancing": false, + "m_CustomVelocity": false, + "m_Tessellation": false, + "m_TessellationMode": 0, + "m_TessellationFactorMinDistance": 20.0, + "m_TessellationFactorMaxDistance": 50.0, + "m_TessellationFactorTriangleSize": 100.0, + "m_TessellationShapeFactor": 0.75, + "m_TessellationBackFaceCullEpsilon": -0.25, + "m_TessellationMaxDisplacement": 0.009999999776482582, + "m_Version": 1, + "inspectorFoldoutMask": 9 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "94d8bef9ca4146a9bc8013782aa27188", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", + "m_ObjectId": "97bd7a4169c641a59a7012a029b44964", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Vertex Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 81.0, + "y": 391.0, + "width": 118.00001525878906, + "height": 93.99990844726563 + } + }, + "m_Slots": [ + { + "m_Id": "333055955acb46f7b454539413c183b0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 2, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "9932077343944e9ea934ada791a438e8", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "9a540fa4d7fd41edb663c20d392cc937", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.CustomInterpolator", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 557.0, + "y": 316.0, + "width": 200.0001220703125, + "height": 40.999969482421878 + } + }, + "m_Slots": [ + { + "m_Id": "f14b3173a44b48f1a3ab3e787ab15403" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.mapping#4" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "9d04c3fa0c6848bd908018475a5ec9cf", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "9d0a9a76df624baebeb40acbf1676a05", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "9d1228b7470642dd9a33ba2fb5148690", + "m_Id": 0, + "m_DisplayName": "a2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "a2", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "9dcc637f334c4ca6bf1c804405d3a006", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "9f0ab621b28741df9e2a65a37837af56", + "m_ActiveSubTarget": { + "m_Id": "773994bbd21543a0aefb333735078a53" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": true, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a04bfc2e0f9748878673606fffc20b60", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.TransformNode", + "m_ObjectId": "a5babea545924715b0ba888ac6373f66", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Transform", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -24.000009536743165, + "y": 594.0, + "width": 211.00003051757813, + "height": 157.0 + } + }, + "m_Slots": [ + { + "m_Id": "789d3c4acdee4777a68a43567cc7de51" + }, + { + "m_Id": "8053f38f7ace4f8c9ae0b53fca131228" + } + ], + "synonyms": [ + "world", + "tangent", + "object", + "view", + "screen", + "convert" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Conversion": { + "from": 1, + "to": 2 + }, + "m_ConversionType": 1 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "a7a558d25384460e8b0995dc9f89165a", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "aa904b9834494fefae0603bbf51a46ae", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ac5ddd82d3a84a4cbf509ddfe1beb229", + "m_Id": 3, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "ac709b9b0cc14e26a2611422b499ba45", + "m_Guid": { + "m_GuidSerialized": "fd0f61ba-fe9f-4b6c-a0ab-7f54fec438ab" + }, + "m_Name": "_Smoothness", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "_Smoothness", + "m_DefaultReferenceName": "_Smoothness", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.5, + "m_FloatType": 1, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "acddb4312eae4453829ee3b01c3b96e1", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ae35ddc362bb47d9831f62b11095e69c", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "af8c0d42edcd4eda8e6e86de937dbadf", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -5.000051021575928, + "y": 145.00003051757813, + "width": 143.00003051757813, + "height": 117.99993896484375 + } + }, + "m_Slots": [ + { + "m_Id": "eefaca546df646d9bab0a7e8ead8fe9f" + }, + { + "m_Id": "e82eba05d3404e81a4d1193cf676653b" + }, + { + "m_Id": "acddb4312eae4453829ee3b01c3b96e1" + } + ], + "synonyms": [ + "multiplication", + "times", + "x" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "afbbb64c9a7b4d16963c20b5f2af4154", + "m_Id": 0, + "m_DisplayName": "v", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "v", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "b35a3765628d49f69d75dfc77df38114", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.CustomInterpolator", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 547.0, + "y": 88.00001525878906, + "width": 200.0001220703125, + "height": 40.999969482421878 + } + }, + "m_Slots": [ + { + "m_Id": "c81b0a23ef5c4e1bbc194418c1316342" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.a3#4" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CustomInterpolatorNode", + "m_ObjectId": "b397b42dfd5342b0b6291c60e22ae6d4", + "m_Group": { + "m_Id": "" + }, + "m_Name": "mapping (Custom Interpolator)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -787.0000610351563, + "y": 672.0, + "width": 221.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "94d8bef9ca4146a9bc8013782aa27188" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "customBlockNodeName": "mapping", + "serializedType": 4 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "b456d184e007428eb74e555e1d369069", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "b585fdf2c7ce438b8a72c6f452ff31ab", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.CustomInterpolator", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 235.00001525878907, + "y": 189.0, + "width": 199.99989318847657, + "height": 40.99998474121094 + } + }, + "m_Slots": [ + { + "m_Id": "e5ebb82ec44c4baf91e6301f7c8864a9" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.viewRay#3" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b61bc63901084fca9804abee48abddfd", + "m_Id": 3, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b7ad4b8143794b239501e5624069fe3e", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b97286e6cc284c43a67b57f07ce0539b", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "b9f263f81f814659b65ba7c8965c6b7e", + "m_Id": 2, + "m_DisplayName": "a2", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "a2", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CombineNode", + "m_ObjectId": "babccae7634a4d2090f45aa9e154b2ca", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Combine", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -215.00001525878907, + "y": 266.0, + "width": 140.00001525878907, + "height": 166.0 + } + }, + "m_Slots": [ + { + "m_Id": "f4036022b00d4f13bf8f03f2b55d5b41" + }, + { + "m_Id": "d49b15aa5cf746cf954a2b46e033e76d" + }, + { + "m_Id": "79ab31681e3e419183510b2fa4f09f6a" + }, + { + "m_Id": "ac5ddd82d3a84a4cbf509ddfe1beb229" + }, + { + "m_Id": "c6fd8c5c8cf744a58bb4efca3dab998f" + }, + { + "m_Id": "08351f97eeea4b6485b39a61a65a3fe8" + }, + { + "m_Id": "619732196dbf41f6a0e7b1174688f54c" + } + ], + "synonyms": [ + "append" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicMatrixMaterialSlot", + "m_ObjectId": "bfadf92d913d48b88b7911b3bf4952ba", + "m_Id": 1, + "m_DisplayName": "", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "c1114c7b3db74f0da0e27c4938d3b793", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", + "m_ObjectId": "c6116508eb7246469fe9c6ae81460410", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Redirect Node", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -426.00006103515627, + "y": 864.9999389648438, + "width": 56.000030517578128, + "height": 24.00006103515625 + } + }, + "m_Slots": [ + { + "m_Id": "53f213ac70a7461ab7fb3813e00bb7f6" + }, + { + "m_Id": "74076c4a517f4a9bb9273882b00b51a6" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "c6fd8c5c8cf744a58bb4efca3dab998f", + "m_Id": 4, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "c81b0a23ef5c4e1bbc194418c1316342", + "m_Id": 0, + "m_DisplayName": "a3", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "a3", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", + "m_ObjectId": "cd294f26621f499cb86c60132cc4143c", + "m_Id": 0, + "m_DisplayName": "P", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "P", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "ce61c417fb924d9098ede6f08e533041", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "ce9414174ca54d1293c032bb45fac6a3", + "m_Id": 5, + "m_DisplayName": "eyeNormal", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "eyeNormal", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "cf2c0d4033c24443b7c21cb036226b3f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Emission", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "61c80ef969694adf838815d13bc5cd67" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Emission" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "d068f1207b3340f6a006284eb45ddb8b", + "m_Id": 4, + "m_DisplayName": "eyePos", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "eyePos", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "d08d226deab44224a9c127e0838da1ec", + "m_Id": 0, + "m_DisplayName": "Normal (World Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalWS", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 2 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "d11f8fd02e364ad5b8eadd3550fa2851", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Metallic", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "1f4c9820a5b244deb7bd8e2bf0aa5270" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Metallic" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d3003457079944b499113867ead39439", + "m_Id": 5, + "m_DisplayName": "radiusScale", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "radiusScale", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d49b15aa5cf746cf954a2b46e033e76d", + "m_Id": 1, + "m_DisplayName": "G", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d5ab07535b904d6c95b72aefdd4d8ccd", + "m_Id": 2, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "d9e1566528a04795a93b9222cfe9b841", + "m_Id": 0, + "m_DisplayName": "In", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "In", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "db6f119a98ed4aee872e15302095fbfb", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "dba07545e112449c9e6450b20a948fe0", + "m_Id": 0, + "m_DisplayName": "Smoothness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Smoothness", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.5, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitData", + "m_ObjectId": "de8e93dbd1744203a66905de95755eec", + "m_RayTracing": false, + "m_MaterialType": 0, + "m_RefractionModel": 0, + "m_SSSTransmission": true, + "m_EnergyConservingSpecular": true, + "m_ClearCoat": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "dfd25b2a19df42beba356ef0e5e0b3be", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.AlphaClipThreshold", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "f73cd7a7841243ac96286fd2afaf7862" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.AlphaClipThreshold" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "dffaa900d1d04a7db60ef0ccab276839", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Smoothness", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "dba07545e112449c9e6450b20a948fe0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Smoothness" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e09a4f7448b74893a9745d1625d39a19", + "m_Id": 0, + "m_DisplayName": "_RadiusScale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "e17c109ffbe942c89e40ff95cd1cfd7a", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "41c7519efb9a45fb85dcded2b16d584d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CustomInterpolatorNode", + "m_ObjectId": "e185f6e703b749569fec95035ae86e44", + "m_Group": { + "m_Id": "" + }, + "m_Name": "viewRay (Custom Interpolator)", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -790.0000610351563, + "y": 576.0, + "width": 219.0, + "height": 94.0 + } + }, + "m_Slots": [ + { + "m_Id": "db6f119a98ed4aee872e15302095fbfb" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "customBlockNodeName": "viewRay", + "serializedType": 3 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "e27b00a5d6b8496e888b33ff61e843e3", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", + "m_ObjectId": "e3ffd102837b43d98258c9830c869bff", + "m_Id": 3, + "m_DisplayName": "P", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "P", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "e445db0b154846179887a9470ff3aa66", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -1906.9998779296875, + "y": 331.0, + "width": 143.9998779296875, + "height": 33.999969482421878 + } + }, + "m_Slots": [ + { + "m_Id": "e09a4f7448b74893a9745d1625d39a19" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "22b23a850ca345f6b5b35205f12039ae" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", + "m_ObjectId": "e5ebb82ec44c4baf91e6301f7c8864a9", + "m_Id": 0, + "m_DisplayName": "viewRay", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "viewRay", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e716e7c9ae6e45278a7d746d0a1da856", + "m_Id": 1, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "e82eba05d3404e81a4d1193cf676653b", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "e94b4e133a134411aa01241421f711cb", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "b97286e6cc284c43a67b57f07ce0539b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ea691d98931f4db5b57fa9074c8ac113", + "m_Id": 4, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "ec49096fac914af0a3faddf1feb3953c", + "m_Id": 0, + "m_DisplayName": "_ParticleColor", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "ee946d6d4c7c4cb1b920e447bb01d580", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.DepthOffset", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 546.0, + "y": 732.0, + "width": 200.0, + "height": 41.0 + } + }, + "m_Slots": [ + { + "m_Id": "0a65b1a8a9cc4d26aa3d5676905379a0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.DepthOffset" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "eefaca546df646d9bab0a7e8ead8fe9f", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "ef8a1c0804ec4253ad73c319031bec6e", + "m_Id": 1, + "m_DisplayName": "", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f14b3173a44b48f1a3ab3e787ab15403", + "m_Id": 0, + "m_DisplayName": "mapping", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "mapping", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f30fd08bbcc74a6198fb279d65f82696", + "m_Id": 1, + "m_DisplayName": "mapping", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "mapping", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f4036022b00d4f13bf8f03f2b55d5b41", + "m_Id": 0, + "m_DisplayName": "R", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f50f51a906cb44dcbc8403263a8cfa32", + "m_Id": 7, + "m_DisplayName": "clipThreshold", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "clipThreshold", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SubtractNode", + "m_ObjectId": "f5da1c6b4af04e169c2dce3319f17d13", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Subtract", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 63.999977111816409, + "y": 877.0, + "width": 126.00000762939453, + "height": 118.00006103515625 + } + }, + "m_Slots": [ + { + "m_Id": "a7a558d25384460e8b0995dc9f89165a" + }, + { + "m_Id": "ce61c417fb924d9098ede6f08e533041" + }, + { + "m_Id": "51b895e1b64e43529095cc44fc769771" + } + ], + "synonyms": [ + "subtraction", + "remove", + "minus", + "take away" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitSubTarget", + "m_ObjectId": "f63f238dcaed45b9859faec9503ae798" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicMatrixMaterialSlot", + "m_ObjectId": "f66158b6241342c88d2a4991233e93a8", + "m_Id": 0, + "m_DisplayName": "", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "", + "m_StageCapability": 3, + "m_Value": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f73cd7a7841243ac96286fd2afaf7862", + "m_Id": 0, + "m_DisplayName": "Alpha Clip Threshold", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "AlphaClipThreshold", + "m_StageCapability": 2, + "m_Value": 0.5, + "m_DefaultValue": 0.5, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "feae803029f141b7b77576f65de3f361", + "m_Id": 1, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph.meta new file mode 100644 index 000000000..59a0a5bc9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 99a2f8857960c44ca980d85023572447 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Particles.mat b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Particles.mat new file mode 100644 index 000000000..9a8bdb915 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Particles.mat @@ -0,0 +1,204 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5466045192948715276 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 639247ca83abc874e893eb93af2b5e44, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 0 +--- !u!114 &-4382110247035737841 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Particles + m_Shader: {fileID: -6465566751694194690, guid: 99a2f8857960c44ca980d85023572447, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _DEPTHOFFSET_ON + - _DISABLE_DECALS + - _DISABLE_SSR_TRANSPARENT + m_InvalidKeywords: + - _EMISSION + m_LightmapFlags: 3 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + MotionVector: User + disabledShaderPasses: + - MOTIONVECTORS + - TransparentDepthPrepass + - TransparentDepthPostpass + - TransparentBackface + - RayTracingPrepass + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaCutoffEnable: 0 + - _AlphaDstBlend: 0 + - _AlphaSrcBlend: 1 + - _BUILTIN_QueueControl: 0 + - _BUILTIN_QueueOffset: 0 + - _BlendMode: 0 + - _BumpScale: 1 + - _ConservativeDepthOffsetEnable: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 1 + - _DetailNormalMapScale: 1 + - _DoubleSidedEnable: 0 + - _DoubleSidedGIMode: 0 + - _DoubleSidedNormalMode: 2 + - _DstBlend: 0 + - _DstBlend2: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _ExcludeFromTUAndAA: 0 + - _Glossiness: 0.5 + - _InvFade: 1 + - _MaterialID: 1 + - _MaterialTypeMask: 2 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OpaqueCullMode: 2 + - _Parallax: 0.02 + - _PerPixelSorting: 0 + - _QueueControl: 0 + - _QueueOffset: 0 + - _RadiusScale: 1 + - _RayTracing: 0 + - _ReceivesSSR: 1 + - _ReceivesSSRTransparent: 0 + - _RefractionModel: 0 + - _RenderQueueType: 1 + - _RequireSplitLighting: 0 + - _Smoothness: 0.6 + - _SrcBlend: 1 + - _StencilRef: 0 + - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 + - _StencilRefGBuffer: 10 + - _StencilRefMV: 40 + - _StencilWriteMask: 6 + - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 + - _StencilWriteMaskGBuffer: 15 + - _StencilWriteMaskMV: 41 + - _SupportDecals: 0 + - _SurfaceType: 0 + - _TransmissionEnable: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentCullMode: 2 + - _TransparentDepthPostpassEnable: 0 + - _TransparentDepthPrepassEnable: 0 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 0 + - _TransparentZWrite: 0 + - _UVSec: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 3 + - _ZTestGBuffer: 4 + - _ZTestTransparent: 4 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _ParticleColor: {r: 1, g: 1, b: 1, a: 0} + - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &1457866186153954475 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.HighDefinition.Editor::UnityEditor.Rendering.HighDefinition.AssetVersion + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/LightingData.asset.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Particles.mat.meta similarity index 63% rename from Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/LightingData.asset.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Particles.mat.meta index 63c4f1de4..c30f265c0 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/LightingData.asset.meta +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/Particles.mat.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: 2f80d1bbf7ee7a04fa11b0bad858ba56 +guid: fb88690dea2394644849cde5abd037f9 NativeFormatImporter: externalObjects: {} - mainObjectFileID: 112000000 + mainObjectFileID: 2100000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/particle.png b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/particle.png similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/particle.png rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/particle.png diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/particle.png.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/particle.png.meta similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/particle.png.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/Common/particle.png.meta diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields.meta new file mode 100644 index 000000000..bbfbc4174 --- /dev/null +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aacd9fe47bf4d416d883fd99066cf37e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldRendering.mat b/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat similarity index 93% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldRendering.mat rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat index 25265c443..386f534e4 100644 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldRendering.mat +++ b/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: DistanceFieldRendering m_Shader: {fileID: 4800000, guid: 8447096d1e8064b37939be221dd9afb5, type: 3} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -88,3 +92,4 @@ Material: - _InsideColor: {r: 1, g: 1, b: 1, a: 1} - _OutsideColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldRendering.mat.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat.meta similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldRendering.mat.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat.meta diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldSlice.shader b/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldSlice.shader rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldSlice.shader.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader.meta similarity index 100% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFieldSlice.shader.meta rename to Assets/ThirdParty/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader.meta diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiLightingBuiltIn.cginc b/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiLightingBuiltIn.cginc deleted file mode 100644 index 35ff81bb9..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiLightingBuiltIn.cginc +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef OBILIGHTINGBUILTIN_INCLUDED -#define OBILIGHTINGBUILTIN_INCLUDED - -#include "UnityCG.cginc" -#include "UnityStandardUtils.cginc" -#include "AutoLight.cginc" - -half3 SampleSphereAmbient(float3 eyeNormal, float3 eyePos) -{ - #if UNITY_SHOULD_SAMPLE_SH - half3 worldNormal = mul(transpose((float3x3)UNITY_MATRIX_V),eyeNormal); - half3 worldPos = mul(_Camera_to_World,half4(eyePos,1.0)); - return ShadeSHPerPixel(half4(worldNormal, 1.0),half3(0,0,0),worldPos); - #else - return UNITY_LIGHTMODEL_AMBIENT; - #endif -} - -#endif diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiParticles.cginc b/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiParticles.cginc deleted file mode 100644 index b2e8f8f40..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiParticles.cginc +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef OBIPARTICLES_INCLUDED -#define OBIPARTICLES_INCLUDED - -float _RadiusScale; - -float3 BillboardSphereNormals(float2 texcoords) -{ - float3 n; - n.xy = texcoords*2.0-1.0; - float r2 = dot(n.xy, n.xy); - clip (1 - r2); // clip pixels outside circle - n.z = sqrt(1.0 - r2); - return n; -} - -float BillboardSphereThickness(float2 texcoords) -{ - float2 n = texcoords*2.0-1.0; - float r2 = dot(n.xy, n.xy); - clip (1 - r2); // clip pixels outside circle - return sqrt(1.0 - r2)*2.0f*exp(-r2*2.0f); -} - -#endif diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiParticles.cginc.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiParticles.cginc.meta deleted file mode 100644 index a08cdc8ea..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ObiParticles.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: e4575c757879646c793ff2b434b83e74 -timeCreated: 1445285630 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Particle.mat.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/Particle.mat.meta deleted file mode 100644 index c37067413..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Particle.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fb972beb020dd4ff5ab78835f4393522 -timeCreated: 1444705309 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ParticleShader.shader b/Assets/ThirdParty/Obi/Resources/ObiMaterials/ParticleShader.shader deleted file mode 100644 index 941d682f9..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/ParticleShader.shader +++ /dev/null @@ -1,215 +0,0 @@ -Shader "Obi/Particles" { - -Properties { - _Color ("Particle color", Color) = (1,1,1,1) - _RadiusScale("Radius scale",float) = 1 -} - - SubShader { - - Pass { - - Name "ParticleFwdBase" - Tags {"Queue"="Geometry" "IgnoreProjector"="True" "RenderType"="Opaque" "LightMode" = "ForwardBase"} - Blend SrcAlpha OneMinusSrcAlpha - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #pragma fragmentoption ARB_precision_hint_fastest - - #pragma multi_compile_fwdbase nolightmap - - #include "ObiEllipsoids.cginc" - #include "ObiUtils.cginc" - #include "ObiLightingBuiltIn.cginc" - - fixed4 _Color; - fixed4 _LightColor0; - - struct vin{ - float4 vertex : POSITION; - float3 corner : NORMAL; - fixed4 color : COLOR; - - float4 t0 : TEXCOORD0; // ellipsoid t1 vector - float4 t1 : TEXCOORD1; // ellipsoid t2 vector - float4 t2 : TEXCOORD2; // ellipsoid t3 vector - }; - - struct v2f - { - float4 pos : SV_POSITION; - fixed4 color : COLOR; - float4 mapping : TEXCOORD0; - float3 viewRay : TEXCOORD1; - float3 lightDir : TEXCOORD2; - float3 a2 : TEXCOORD3; - float3 a3 : TEXCOORD4; - LIGHTING_COORDS(5,6) - }; - - struct fout - { - half4 color : SV_Target; - float depth : SV_Depth; - }; - - v2f vert(vin v) - { - float3x3 P, IP; - BuildParameterSpaceMatrices(v.t0,v.t1,v.t2,P,IP); - - float3 worldPos; - float3 view; - float3 eye; - float radius = BuildEllipsoidBillboard(v.vertex,v.corner,P,IP,worldPos,view,eye); - - v2f o; - o.pos = mul(UNITY_MATRIX_VP, float4(worldPos,v.vertex.w)); - o.mapping = float4(v.corner.xy,1/length(eye),radius); // A[1] - o.viewRay = mul((float3x3)UNITY_MATRIX_V,view); // A[0] - o.color = v.color * _Color; - - BuildAuxiliaryNormalVectors(v.vertex,worldPos,view,P,IP,o.a2,o.a3); - - o.lightDir = mul((float3x3)UNITY_MATRIX_MV, ObjSpaceLightDir(v.vertex)); - TRANSFER_VERTEX_TO_FRAGMENT(o); - - return o; - } - - fout frag(v2f i) - { - fout fo; - - fo.color = half4(0,0,0,i.color.a); - - // generate sphere normals: - float3 p,n; - IntersectEllipsoid(i.viewRay,i.mapping, i.a2,i.a3,p, n); - - // clip space position: - float4 pos = mul(UNITY_MATRIX_P,float4(p,1.0)); - - // simple lighting: ambient - half3 amb = SampleSphereAmbient(n,p); - - // simple lighting: diffuse - float ndotl = saturate( dot( n, normalize(i.lightDir) ) ); - UNITY_LIGHT_ATTENUATION(atten,i,0); - - // final lit color: - fo.color.rgb = i.color * (_LightColor0 * ndotl * atten + amb); - - // normalized device coordinates: - fo.depth = pos.z/pos.w; - - // in openGL calculated depth range is <-1,1> map it to <0,1> - #if SHADER_API_OPENGL || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 - fo.depth = 0.5*fo.depth + 0.5; - #endif - - return fo; - } - - ENDCG - - } - - Pass { - Name "ShadowCaster" - Tags { "LightMode" = "ShadowCaster" } - Offset 1, 1 - - Fog {Mode Off} - ZWrite On ZTest LEqual - - CGPROGRAM - - #pragma vertex ellipsoidShadowVS - #pragma fragment frag - #pragma fragmentoption ARB_precision_hint_fastest - - #pragma multi_compile_shadowcaster nolightmap - - #include "ObiEllipsoids.cginc" - #include "ObiUtils.cginc" - #include "ObiLightingBuiltIn.cginc" - - sampler3D _DitherMaskLOD; - fixed4 _Color; - - struct vin{ - float4 vertex : POSITION; - float3 corner : NORMAL; - fixed4 color : COLOR; - - float4 t0 : TEXCOORD0; // ellipsoid t1 vector - float4 t1 : TEXCOORD1; // ellipsoid t2 vector - float4 t2 : TEXCOORD2; // ellipsoid t3 vector - }; - - struct v2f { - fixed4 color : COLOR; - float4 mapping : TEXCOORD0; - float3 viewRay : TEXCOORD1; - }; - - struct fout - { - half4 color : SV_Target; - float depth : SV_Depth; - }; - - v2f ellipsoidShadowVS( vin v , out float4 outpos : SV_POSITION )// clip space position output - { - float3x3 P, IP; - BuildParameterSpaceMatrices(v.t0,v.t1,v.t2,P,IP); - - float3 worldPos; - float3 view; - float3 eye; - float radius = BuildEllipsoidBillboard(v.vertex,v.corner,P,IP,worldPos,view,eye); - - v2f o; - outpos = mul(UNITY_MATRIX_VP, float4(worldPos,v.vertex.w)); - o.mapping = float4(v.corner.xy,1/length(eye),radius); // A[1] - o.viewRay = mul((float3x3)UNITY_MATRIX_V,view); // A[0] - o.color = v.color * _Color; - return o; - } - - fout frag( v2f i , UNITY_VPOS_TYPE vpos : VPOS) - { - fout fo; - - float3 p,n; - IntersectEllipsoid(i.viewRay,i.mapping, float3(0,0,0),float3(0,0,0),p, n); - - // project camera space position. - float4 pos = UnityApplyLinearShadowBias( mul(UNITY_MATRIX_P,float4(p,1.0)) ); - - fo.color = pos.z/pos.w; //similar to what SHADOW_CASTER_FRAGMENT does in case there's no depth buffer. - fo.depth = pos.z/pos.w; - - // in openGL calculated depth range is <-1,1> map it to <0,1> - #if SHADER_API_OPENGL || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 - fo.depth = fo.depth*0.5+0.5; - #endif - - // Use dither mask for alpha blended shadows, based on pixel position xy - // and alpha level. Our dither texture is 4x4x16. - half alphaRef = tex3D(_DitherMaskLOD, float3(vpos.xy*0.25,i.color.a*0.9375)).a; - clip (alphaRef - 0.01); - - return fo; - } - ENDCG - - } - - } -FallBack "Diffuse" -} - diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/SimpleParticleShader.shader b/Assets/ThirdParty/Obi/Resources/ObiMaterials/SimpleParticleShader.shader deleted file mode 100644 index b6b0f89aa..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/SimpleParticleShader.shader +++ /dev/null @@ -1,131 +0,0 @@ -Shader "Obi/Simple Particles" { - -Properties { - _Color ("Particle color", Color) = (1,1,1,1) -} - - SubShader { - - Pass { - - Name "ParticleFwdBase" - Tags {"Queue"="Geometry" "IgnoreProjector"="True" "RenderType"="Opaque" "LightMode" = "ForwardBase"} - Blend SrcAlpha OneMinusSrcAlpha - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #pragma fragmentoption ARB_precision_hint_fastest - - #pragma multi_compile_fwdbase nolightmap - - #include "ObiParticles.cginc" - #include "ObiUtils.cginc" - #include "ObiLightingBuiltIn.cginc" - - fixed4 _Color; - fixed4 _LightColor0; - - struct vin{ - float4 vertex : POSITION; - float3 corner : NORMAL; - fixed4 color : COLOR; - float4 t0 : TEXCOORD0; // ellipsoid t1 vector - }; - - struct v2f - { - float4 pos : POSITION; - fixed4 color : COLOR; - float2 texcoord : TEXCOORD0; - float3 lightDir : TEXCOORD1; - LIGHTING_COORDS(3,4) - }; - - v2f vert(vin v) - { - v2f o; - - // particle positions are passed in world space, no need to use modelview matrix, just view. - float radius = v.t0.w * _RadiusScale; - float4 viewpos = mul(UNITY_MATRIX_V, v.vertex) + float4(v.corner.x, v.corner.y, 0, 0) * radius; // multiply by size. - o.pos = mul(UNITY_MATRIX_P, viewpos); - o.texcoord = float3(v.corner.x*0.5+0.5, v.corner.y*0.5+0.5, radius); - o.color = v.color * _Color; - - o.lightDir = mul ((float3x3)UNITY_MATRIX_MV, ObjSpaceLightDir(v.vertex)); - - TRANSFER_VERTEX_TO_FRAGMENT(o); - - return o; - } - - fixed4 frag(v2f i) : SV_Target - { - // generate sphere normals: - float3 n = BillboardSphereNormals(i.texcoord); - - // simple lighting: diffuse - float ndotl = saturate( dot( n, normalize(i.lightDir) ) ); - - // final lit color: - return fixed4(i.color.rgb * (_LightColor0 * ndotl + UNITY_LIGHTMODEL_AMBIENT),i.color.a); - } - - ENDCG - - } - - Pass { - Name "ShadowCaster" - Tags { "LightMode" = "ShadowCaster" } - Offset 1, 1 - - Fog {Mode Off} - ZWrite On ZTest LEqual - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #pragma fragmentoption ARB_precision_hint_fastest - - #pragma multi_compile_shadowcaster nolightmap - - #include "ObiParticles.cginc" - - struct vin{ - float4 vertex : POSITION; - float3 corner : NORMAL; - float4 t0 : TEXCOORD0; // ellipsoid t1 vector - }; - - struct v2f { - float4 pos : POSITION; - float3 texcoord : TEXCOORD0; - }; - - v2f vert( vin v ) - { - v2f o; - - float radius = v.t0.w * _RadiusScale; - float4 viewpos = mul(UNITY_MATRIX_V, v.vertex) + float4(v.corner.x, v.corner.y, 0, 0) * radius; - o.pos = mul(UNITY_MATRIX_P, viewpos); - o.texcoord = float3(v.corner.x*0.5+0.5, v.corner.y*0.5+0.5, radius); - return o; - } - - fixed4 frag( v2f i ) : SV_Target - { - float3 n = BillboardSphereNormals(i.texcoord); - - return fixed4(0,0,0,0); - } - ENDCG - - } - - } -FallBack "Diffuse" -} - diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP.meta deleted file mode 100644 index 0507e4054..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7377795ea5bbd404ba97de2909380e01 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ObiLightingURP.cginc b/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ObiLightingURP.cginc deleted file mode 100644 index aa1019617..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ObiLightingURP.cginc +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef OBILIGHTINGBUILTURP_INCLUDED -#define OBILIGHTINGBUILTURP_INCLUDED - -#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" -#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" -#include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" - -half3 SampleSphereAmbient(float3 eyeNormal) -{ - half3 worldNormal = mul(UNITY_MATRIX_I_V,half4(eyeNormal,0.0)); - return SampleSH(worldNormal); -} - -float3 ObjSpaceLightDir(in float4 modelPos) -{ - float3 lightPos = mul(unity_WorldToObject,_MainLightPosition).xyz; - float3 lightVector = lightPos.xyz - modelPos * _MainLightPosition.w; - return lightVector; -} - -float3 WorldSpaceLightDir(in float4 modelPos) -{ - float3 vertexPos = mul(unity_ObjectToWorld, modelPos).xyz; - float3 lightVector = _MainLightPosition.xyz - vertexPos * _MainLightPosition.w; - return lightVector; -} - -half Attenuation(float3 eyePos) -{ - half3 worldPos = mul(UNITY_MATRIX_I_V,half4(eyePos,1.0)); - float4 shadowCoord = TransformWorldToShadowCoord(worldPos); - Light mainLight = GetMainLight(shadowCoord); - return mainLight.shadowAttenuation * mainLight.distanceAttenuation; -} - -#endif diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ObiLightingURP.cginc.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ObiLightingURP.cginc.meta deleted file mode 100644 index 7a766777a..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ObiLightingURP.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 2231c15aefcd6484e9857cbb64ad8cd7 -timeCreated: 1445285630 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ParticleShaderURP.shader b/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ParticleShaderURP.shader deleted file mode 100644 index 7d20e3601..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ParticleShaderURP.shader +++ /dev/null @@ -1,236 +0,0 @@ -Shader "Obi/URP/Particles" { - -Properties { - _Color ("Particle color", Color) = (1,1,1,1) - _RadiusScale("Radius scale",float) = 1 -} - - SubShader { - - Tags{"RenderPipeline" = "UniversalRenderPipeline"} - - Pass { - - Name "ParticleFwdBase" - Tags {"Queue"="Geometry" "IgnoreProjector"="True" "RenderType"="Opaque" "LightMode" = "UniversalForward"} - Blend SrcAlpha OneMinusSrcAlpha - - HLSLPROGRAM - - #pragma prefer_hlslcc gles - #pragma exclude_renderers d3d11_9x - #pragma target 2.0 - - #pragma vertex vert - #pragma fragment frag - #pragma fragmentoption ARB_precision_hint_fastest - - #pragma multi_compile _ _MAIN_LIGHT_SHADOWS - #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE - #pragma multi_compile _ _SHADOWS_SOFT - - #include "../ObiUtils.cginc" - #include "ObiLightingURP.cginc" - #include "../ObiEllipsoids.cginc" - - float4 _Color; - float4 _LightColor0; - - struct vin{ - float4 vertex : POSITION; - float3 corner : NORMAL; - float4 color : COLOR; - float4 t0 : TEXCOORD0; // ellipsoid t1 vector - float4 t1 : TEXCOORD1; // ellipsoid t2 vector - float4 t2 : TEXCOORD2; // ellipsoid t3 vector - }; - - struct v2f - { - float4 pos : SV_POSITION; - float4 color : COLOR; - float4 mapping : TEXCOORD0; - float3 viewRay : TEXCOORD1; - float3 lightDir : TEXCOORD2; - float3 a2 : TEXCOORD3; - float3 a3 : TEXCOORD4; - }; - - struct fout - { - half4 color : SV_Target; - float depth : SV_Depth; - }; - - v2f vert(vin v) - { - float3x3 P, IP; - BuildParameterSpaceMatrices(v.t0,v.t1,v.t2,P,IP); - - float3 worldPos; - float3 view; - float3 eye; - float radius = BuildEllipsoidBillboard(v.vertex,v.corner,P,IP,worldPos,view,eye); - - v2f o; - o.pos = mul(UNITY_MATRIX_VP, float4(worldPos,v.vertex.w)); - o.mapping = float4(v.corner.xy,1/length(eye),radius); // A[1] - o.viewRay = mul((float3x3)UNITY_MATRIX_V,view); // A[0] - o.color = v.color * _Color; - - BuildAuxiliaryNormalVectors(v.vertex,worldPos,view,P,IP,o.a2,o.a3); - - o.lightDir = mul((float3x3)UNITY_MATRIX_MV, ObjSpaceLightDir(v.vertex)); - - return o; - } - - fout frag(v2f i) - { - fout fo; - - fo.color = half4(0,0,0,i.color.a); - - // generate sphere normals: - float3 p,n; - IntersectEllipsoid(i.viewRay,i.mapping, i.a2,i.a3, p, n); - - // clip space position: - float4 pos = mul(UNITY_MATRIX_P,float4(p,1.0)); - - // simple lighting: ambient - half3 amb = SampleSphereAmbient(n); - - // simple lighting: diffuse - float ndotl = saturate( dot( n, normalize(i.lightDir) ) ); - float atten = Attenuation(p); - - // final lit color: - fo.color.rgb = i.color * (_LightColor0 * ndotl * atten + amb); - - // normalized device coordinates: - fo.depth = pos.z/pos.w; - - // in openGL calculated depth range is <-1,1> map it to <0,1> - #if SHADER_API_OPENGL || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 - fo.depth = 0.5 * fo.depth + 0.5; - #endif - - return fo; - } - - ENDHLSL - - } - - Pass { - - Name "ShadowCaster" - Tags { "LightMode" = "ShadowCaster" } - Offset 1, 1 - - Fog {Mode Off} - ZWrite On ZTest LEqual - - HLSLPROGRAM - - #pragma prefer_hlslcc gles - #pragma exclude_renderers d3d11_9x - #pragma target 2.0 - - #pragma vertex ellipsoidShadowVS - #pragma fragment frag - #pragma fragmentoption ARB_precision_hint_fastest - - #pragma multi_compile_shadowcaster - - #include "../ObiUtils.cginc" - #include "ObiLightingURP.cginc" - #include "../ObiEllipsoids.cginc" - - sampler3D _DitherMaskLOD; - float4 _Color; - - struct vin{ - float4 vertex : POSITION; - float3 corner : NORMAL; - float4 color : COLOR; - float4 t0 : TEXCOORD0; // ellipsoid t1 vector - float4 t1 : TEXCOORD1; // ellipsoid t2 vector - float4 t2 : TEXCOORD2; // ellipsoid t3 vector - }; - - struct v2f { - float4 color : COLOR; - float4 mapping : TEXCOORD0; - float3 viewRay : TEXCOORD1; - float3 lightDir : TEXCOORD2; - float3 a2 : TEXCOORD3; - float3 a3 : TEXCOORD4; - }; - - struct fout - { - half4 color : SV_Target; - float depth : SV_Depth; - }; - - v2f ellipsoidShadowVS( vin v , out float4 outpos : SV_POSITION )// clip space position output - { - float3x3 P, IP; - BuildParameterSpaceMatrices(v.t0,v.t1,v.t2,P,IP); - - float3 worldPos; - float3 view; - float3 eye; - float radius = BuildEllipsoidBillboard(v.vertex,v.corner,P,IP,worldPos,view,eye); - - v2f o; - outpos = mul(UNITY_MATRIX_VP, float4(worldPos,v.vertex.w)); - o.mapping = float4(v.corner.xy,1/length(eye),radius); // A[1] - o.viewRay = mul((float3x3)UNITY_MATRIX_V,view); // A[0] - o.color = v.color * _Color; - - BuildAuxiliaryNormalVectors(v.vertex,worldPos,view,P,IP,o.a2,o.a3); - - o.lightDir = WorldSpaceLightDir(v.vertex); - return o; - } - - fout frag( v2f i ) - { - fout fo; - - float3 p,n; - IntersectEllipsoid(i.viewRay,i.mapping,i.a2,i.a3,p, n); - - // calculate world space position and normal: - float4 wnormal = mul(UNITY_MATRIX_I_V,float4(n,0)); - float4 wpos = mul(UNITY_MATRIX_I_V,float4(p,1)); - - // calculate clip space position. - float4 clipPos = TransformWorldToHClip(ApplyShadowBias(wpos, wnormal, normalize(i.lightDir))); - - #if UNITY_REVERSED_Z - clipPos.z = min(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); - #else - clipPos.z = max(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); - #endif - - fo.color = clipPos.z/clipPos.w; //similar to what SHADOW_CASTER_FRAGMENT does in case there's no depth buffer. - fo.depth = clipPos.z/clipPos.w; - - // in openGL calculated depth range is <-1,1> map it to <0,1> - #if SHADER_API_OPENGL || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 - fo.depth = fo.depth*0.5+0.5; - #endif - - return fo; - } - ENDHLSL - - } - - } -} - diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ParticleShaderURP.shader.meta b/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ParticleShaderURP.shader.meta deleted file mode 100644 index c201e984d..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/ParticleShaderURP.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 28641a0edd6e047c6af7e3c6b342c81a -timeCreated: 1438934781 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/SimpleParticleShaderURP.shader b/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/SimpleParticleShaderURP.shader deleted file mode 100644 index 95d2ee5d8..000000000 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/URP/SimpleParticleShaderURP.shader +++ /dev/null @@ -1,145 +0,0 @@ -Shader "Obi/URP/Simple Particles" { - -Properties { - _Color ("Particle color", Color) = (1,1,1,1) -} - - SubShader { - - Tags{"RenderPipeline" = "UniversalRenderPipeline"} - - Pass { - - Name "ParticleFwdBase" - Tags {"Queue"="Geometry" "IgnoreProjector"="True" "RenderType"="Opaque" "LightMode" = "UniversalForward"} - Blend SrcAlpha OneMinusSrcAlpha - - HLSLPROGRAM - - #pragma prefer_hlslcc gles - #pragma exclude_renderers d3d11_9x - #pragma target 2.0 - - #pragma vertex vert - #pragma fragment frag - #pragma fragmentoption ARB_precision_hint_fastest - - #pragma multi_compile _ _MAIN_LIGHT_SHADOWS - #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE - #pragma multi_compile _ _SHADOWS_SOFT - - #include "../ObiUtils.cginc" - #include "ObiLightingURP.cginc" - #include "../ObiParticles.cginc" - - float4 _Color; - float4 _LightColor0; - - struct vin{ - float4 vertex : POSITION; - float3 corner : NORMAL; - float4 color : COLOR; - float4 t0 : TEXCOORD0; // ellipsoid t1 vector - }; - - struct v2f - { - float4 pos : POSITION; - float4 color : COLOR; - float2 texcoord : TEXCOORD0; - float3 lightDir : TEXCOORD1; - }; - - v2f vert(vin v) - { - v2f o; - - // particle positions are passed in world space, no need to use modelview matrix, just view. - float radius = v.t0.w * _RadiusScale; - float4 viewpos = mul(UNITY_MATRIX_V, v.vertex) + float4(v.corner.x, v.corner.y, 0, 0) * radius; // multiply by size. - o.pos = mul(UNITY_MATRIX_P, viewpos); - o.texcoord = float3(v.corner.x*0.5+0.5, v.corner.y*0.5+0.5, radius); - o.color = v.color * _Color; - - o.lightDir = mul ((float3x3)UNITY_MATRIX_MV, ObjSpaceLightDir(v.vertex)); - - return o; - } - - float4 frag(v2f i) : SV_Target - { - // generate sphere normals: - float3 n = BillboardSphereNormals(i.texcoord); - - // simple lighting: ambient - half3 amb = SampleSphereAmbient(n); - - // simple lighting: diffuse - float ndotl = saturate( dot( n, normalize(i.lightDir) ) ); - - // final lit color: - return float4(i.color.rgb * (_LightColor0 * ndotl + amb),i.color.a); - } - - ENDHLSL - - } - - Pass { - Name "ShadowCaster" - Tags { "LightMode" = "ShadowCaster" } - Offset 1, 1 - - Fog {Mode Off} - ZWrite On ZTest LEqual - - HLSLPROGRAM - #pragma prefer_hlslcc gles - #pragma exclude_renderers d3d11_9x - #pragma target 2.0 - - #pragma vertex vert - #pragma fragment frag - #pragma fragmentoption ARB_precision_hint_fastest - - #pragma multi_compile_shadowcaster - - #include "../ObiUtils.cginc" - #include "ObiLightingURP.cginc" - #include "../ObiParticles.cginc" - - struct vin{ - float4 vertex : POSITION; - float3 corner : NORMAL; - float4 t0 : TEXCOORD0; // ellipsoid t1 vector - }; - - struct v2f { - float4 pos : POSITION; - float3 texcoord : TEXCOORD0; - }; - - v2f vert( vin v ) - { - v2f o; - - float radius = v.t0.w * _RadiusScale; - float4 viewpos = mul(UNITY_MATRIX_V, v.vertex) + float4(v.corner.x, v.corner.y, 0, 0) * radius; - o.pos = mul(UNITY_MATRIX_P, viewpos); - o.texcoord = float3(v.corner.x*0.5+0.5, v.corner.y*0.5+0.5, radius); - return o; - } - - float4 frag( v2f i ) : SV_Target - { - float3 n = BillboardSphereNormals(i.texcoord); - - return float4(0,0,0,0); - } - ENDHLSL - - } - - } -} - diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim new file mode 100644 index 000000000..589ba23c3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim @@ -0,0 +1,213 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FanHorizontal + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: -0.25, y: 0, z: 2} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 4 + value: {x: -0.25, y: 0, z: -5} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 8.016666 + value: {x: -0.25, y: 0, z: 2} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 1 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 8.016666 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4 + value: -0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 8.016666 + value: -0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.x + path: + classID: 4 + script: {fileID: 0} + flags: 16 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 8.016666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.y + path: + classID: 4 + script: {fileID: 0} + flags: 16 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4 + value: -5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 8.016666 + value: 2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.z + path: + classID: 4 + script: {fileID: 0} + flags: 16 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/LightingData.asset.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta similarity index 63% rename from Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/LightingData.asset.meta rename to Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta index 47e1f659c..af40a9d24 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/LightingData.asset.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: ac581594031bc7e45abd7170d6314cfe +guid: 8e33f749f1d024f159aa5cae7a502d72 NativeFormatImporter: externalObjects: {} - mainObjectFileID: 112000000 + mainObjectFileID: 7400000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller new file mode 100644 index 000000000..abdf16d85 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1107 &-2774476986902412069 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -1105214364667259717} + m_Position: {x: 250, y: 120, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -1105214364667259717} +--- !u!1102 &-1105214364667259717 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FanHorizontal + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 8e33f749f1d024f159aa5cae7a502d72, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FanRoot + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -2774476986902412069} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/LightingData.asset.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta similarity index 63% rename from Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/LightingData.asset.meta rename to Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta index af41a37b2..3ec02df0b 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/LightingData.asset.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: e2ca4a3b6a61b014a8f1b1be22bf04cf +guid: 07415f30e4149416b920c1da07bdc3b7 NativeFormatImporter: externalObjects: {} - mainObjectFileID: 112000000 + mainObjectFileID: 9100000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta index d4525b1a1..a307593f6 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta @@ -1,219 +1,617 @@ fileFormatVersion: 2 guid: d89ea37480b6d75458aa38843e9688dc +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: Chest - 100002: //RootNode - 100004: Geo_grp - 100006: Head - 100008: Hips - 100010: Jaw - 100012: JawEND - 100014: Le_Eye_Mesh - 100016: LeftArm - 100018: LeftCheek - 100020: LeftEye - 100022: LeftEyelidLower - 100024: LeftEyelidUpper - 100026: LeftFoot - 100028: LeftForeArm - 100030: LeftHand - 100032: LeftHandIndex1 - 100034: LeftHandIndex2 - 100036: LeftHandIndex3 - 100038: LeftHandMiddle1 - 100040: LeftHandMiddle2 - 100042: LeftHandMiddle3 - 100044: LeftHandPinky1 - 100046: LeftHandPinky2 - 100048: LeftHandPinky3 - 100050: LeftHandRing1 - 100052: LeftHandRing2 - 100054: LeftHandRing3 - 100056: LeftHandThumb1 - 100058: LeftHandThumb2 - 100060: LeftHandThumb3 - 100062: LeftInnerBrow - 100064: LeftIOuterBrow - 100066: LeftLeg - 100068: LeftLipCorner - 100070: LeftLipLower - 100072: LeftLipUpper - 100074: LeftNostril - 100076: LeftShoulder - 100078: LeftToes - 100080: LeftUpLeg - 100082: Lw_Teeth_Mesh - 100084: Neck - 100086: Reference - 100088: Ri_Eye_Mesh - 100090: RightArm - 100092: RightCheek - 100094: RightEye - 100096: RightEyelidLower - 100098: RightEyelidUpper - 100100: RightFoot - 100102: RightForeArm - 100104: RightHand - 100106: RightHandIndex1 - 100108: RightHandIndex2 - 100110: RightHandIndex3 - 100112: RightHandMiddle1 - 100114: RightHandMiddle2 - 100116: RightHandMiddle3 - 100118: RightHandPinky1 - 100120: RightHandPinky2 - 100122: RightHandPinky3 - 100124: RightHandRing1 - 100126: RightHandRing2 - 100128: RightHandRing3 - 100130: RightHandThumb1 - 100132: RightHandThumb2 - 100134: RightHandThumb3 - 100136: RightInnerBrow - 100138: RightIOuterBrow - 100140: RightLeg - 100142: RightLipCorner - 100144: RightLipLower - 100146: RightLipUpper - 100148: RightNostril - 100150: RightShoulder - 100152: RightToes - 100154: RightUpLeg - 100156: Spine - 100158: TongueBack - 100160: TongueTip - 100162: Tounge_Mesh - 100164: Unity_Body_Mesh - 100166: Up_Teeth_Mesh - 400000: Chest - 400002: //RootNode - 400004: Geo_grp - 400006: Head - 400008: Hips - 400010: Jaw - 400012: JawEND - 400014: Le_Eye_Mesh - 400016: LeftArm - 400018: LeftCheek - 400020: LeftEye - 400022: LeftEyelidLower - 400024: LeftEyelidUpper - 400026: LeftFoot - 400028: LeftForeArm - 400030: LeftHand - 400032: LeftHandIndex1 - 400034: LeftHandIndex2 - 400036: LeftHandIndex3 - 400038: LeftHandMiddle1 - 400040: LeftHandMiddle2 - 400042: LeftHandMiddle3 - 400044: LeftHandPinky1 - 400046: LeftHandPinky2 - 400048: LeftHandPinky3 - 400050: LeftHandRing1 - 400052: LeftHandRing2 - 400054: LeftHandRing3 - 400056: LeftHandThumb1 - 400058: LeftHandThumb2 - 400060: LeftHandThumb3 - 400062: LeftInnerBrow - 400064: LeftIOuterBrow - 400066: LeftLeg - 400068: LeftLipCorner - 400070: LeftLipLower - 400072: LeftLipUpper - 400074: LeftNostril - 400076: LeftShoulder - 400078: LeftToes - 400080: LeftUpLeg - 400082: Lw_Teeth_Mesh - 400084: Neck - 400086: Reference - 400088: Ri_Eye_Mesh - 400090: RightArm - 400092: RightCheek - 400094: RightEye - 400096: RightEyelidLower - 400098: RightEyelidUpper - 400100: RightFoot - 400102: RightForeArm - 400104: RightHand - 400106: RightHandIndex1 - 400108: RightHandIndex2 - 400110: RightHandIndex3 - 400112: RightHandMiddle1 - 400114: RightHandMiddle2 - 400116: RightHandMiddle3 - 400118: RightHandPinky1 - 400120: RightHandPinky2 - 400122: RightHandPinky3 - 400124: RightHandRing1 - 400126: RightHandRing2 - 400128: RightHandRing3 - 400130: RightHandThumb1 - 400132: RightHandThumb2 - 400134: RightHandThumb3 - 400136: RightInnerBrow - 400138: RightIOuterBrow - 400140: RightLeg - 400142: RightLipCorner - 400144: RightLipLower - 400146: RightLipUpper - 400148: RightNostril - 400150: RightShoulder - 400152: RightToes - 400154: RightUpLeg - 400156: Spine - 400158: TongueBack - 400160: TongueTip - 400162: Tounge_Mesh - 400164: Unity_Body_Mesh - 400166: Up_Teeth_Mesh - 2300000: Le_Eye_Mesh - 2300002: Ri_Eye_Mesh - 3300000: Le_Eye_Mesh - 3300002: Ri_Eye_Mesh - 4300000: Unity_Body_Mesh - 4300002: Up_Teeth_Mesh - 4300004: Lw_Teeth_Mesh - 4300006: Tounge_Mesh - 4300008: Le_Eye_Mesh - 4300010: Ri_Eye_Mesh - 7400000: UNTY_Sneak_tk04 - 7400002: HumanoidCrouchIdle - 7400004: HumanoidCrouchWalk - 7400006: HumanoidCrouchWalkRight - 7400008: HumanoidCrouchWalkLeft - 7400010: HumanoidCrouchTurnRight - 7400012: HumanoidCrouchTurnLeft - 7400014: HumanoidCrouchWalkRightB - 9500000: //RootNode - 13700000: Lw_Teeth_Mesh - 13700002: Tounge_Mesh - 13700004: Unity_Body_Mesh - 13700006: Up_Teeth_Mesh + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Chest + - first: + 1: 100002 + second: //RootNode + - first: + 1: 100004 + second: Geo_grp + - first: + 1: 100006 + second: Head + - first: + 1: 100008 + second: Hips + - first: + 1: 100010 + second: Jaw + - first: + 1: 100012 + second: JawEND + - first: + 1: 100014 + second: Le_Eye_Mesh + - first: + 1: 100016 + second: LeftArm + - first: + 1: 100018 + second: LeftCheek + - first: + 1: 100020 + second: LeftEye + - first: + 1: 100022 + second: LeftEyelidLower + - first: + 1: 100024 + second: LeftEyelidUpper + - first: + 1: 100026 + second: LeftFoot + - first: + 1: 100028 + second: LeftForeArm + - first: + 1: 100030 + second: LeftHand + - first: + 1: 100032 + second: LeftHandIndex1 + - first: + 1: 100034 + second: LeftHandIndex2 + - first: + 1: 100036 + second: LeftHandIndex3 + - first: + 1: 100038 + second: LeftHandMiddle1 + - first: + 1: 100040 + second: LeftHandMiddle2 + - first: + 1: 100042 + second: LeftHandMiddle3 + - first: + 1: 100044 + second: LeftHandPinky1 + - first: + 1: 100046 + second: LeftHandPinky2 + - first: + 1: 100048 + second: LeftHandPinky3 + - first: + 1: 100050 + second: LeftHandRing1 + - first: + 1: 100052 + second: LeftHandRing2 + - first: + 1: 100054 + second: LeftHandRing3 + - first: + 1: 100056 + second: LeftHandThumb1 + - first: + 1: 100058 + second: LeftHandThumb2 + - first: + 1: 100060 + second: LeftHandThumb3 + - first: + 1: 100062 + second: LeftInnerBrow + - first: + 1: 100064 + second: LeftIOuterBrow + - first: + 1: 100066 + second: LeftLeg + - first: + 1: 100068 + second: LeftLipCorner + - first: + 1: 100070 + second: LeftLipLower + - first: + 1: 100072 + second: LeftLipUpper + - first: + 1: 100074 + second: LeftNostril + - first: + 1: 100076 + second: LeftShoulder + - first: + 1: 100078 + second: LeftToes + - first: + 1: 100080 + second: LeftUpLeg + - first: + 1: 100082 + second: Lw_Teeth_Mesh + - first: + 1: 100084 + second: Neck + - first: + 1: 100086 + second: Reference + - first: + 1: 100088 + second: Ri_Eye_Mesh + - first: + 1: 100090 + second: RightArm + - first: + 1: 100092 + second: RightCheek + - first: + 1: 100094 + second: RightEye + - first: + 1: 100096 + second: RightEyelidLower + - first: + 1: 100098 + second: RightEyelidUpper + - first: + 1: 100100 + second: RightFoot + - first: + 1: 100102 + second: RightForeArm + - first: + 1: 100104 + second: RightHand + - first: + 1: 100106 + second: RightHandIndex1 + - first: + 1: 100108 + second: RightHandIndex2 + - first: + 1: 100110 + second: RightHandIndex3 + - first: + 1: 100112 + second: RightHandMiddle1 + - first: + 1: 100114 + second: RightHandMiddle2 + - first: + 1: 100116 + second: RightHandMiddle3 + - first: + 1: 100118 + second: RightHandPinky1 + - first: + 1: 100120 + second: RightHandPinky2 + - first: + 1: 100122 + second: RightHandPinky3 + - first: + 1: 100124 + second: RightHandRing1 + - first: + 1: 100126 + second: RightHandRing2 + - first: + 1: 100128 + second: RightHandRing3 + - first: + 1: 100130 + second: RightHandThumb1 + - first: + 1: 100132 + second: RightHandThumb2 + - first: + 1: 100134 + second: RightHandThumb3 + - first: + 1: 100136 + second: RightInnerBrow + - first: + 1: 100138 + second: RightIOuterBrow + - first: + 1: 100140 + second: RightLeg + - first: + 1: 100142 + second: RightLipCorner + - first: + 1: 100144 + second: RightLipLower + - first: + 1: 100146 + second: RightLipUpper + - first: + 1: 100148 + second: RightNostril + - first: + 1: 100150 + second: RightShoulder + - first: + 1: 100152 + second: RightToes + - first: + 1: 100154 + second: RightUpLeg + - first: + 1: 100156 + second: Spine + - first: + 1: 100158 + second: TongueBack + - first: + 1: 100160 + second: TongueTip + - first: + 1: 100162 + second: Tounge_Mesh + - first: + 1: 100164 + second: Unity_Body_Mesh + - first: + 1: 100166 + second: Up_Teeth_Mesh + - first: + 4: 400000 + second: Chest + - first: + 4: 400002 + second: //RootNode + - first: + 4: 400004 + second: Geo_grp + - first: + 4: 400006 + second: Head + - first: + 4: 400008 + second: Hips + - first: + 4: 400010 + second: Jaw + - first: + 4: 400012 + second: JawEND + - first: + 4: 400014 + second: Le_Eye_Mesh + - first: + 4: 400016 + second: LeftArm + - first: + 4: 400018 + second: LeftCheek + - first: + 4: 400020 + second: LeftEye + - first: + 4: 400022 + second: LeftEyelidLower + - first: + 4: 400024 + second: LeftEyelidUpper + - first: + 4: 400026 + second: LeftFoot + - first: + 4: 400028 + second: LeftForeArm + - first: + 4: 400030 + second: LeftHand + - first: + 4: 400032 + second: LeftHandIndex1 + - first: + 4: 400034 + second: LeftHandIndex2 + - first: + 4: 400036 + second: LeftHandIndex3 + - first: + 4: 400038 + second: LeftHandMiddle1 + - first: + 4: 400040 + second: LeftHandMiddle2 + - first: + 4: 400042 + second: LeftHandMiddle3 + - first: + 4: 400044 + second: LeftHandPinky1 + - first: + 4: 400046 + second: LeftHandPinky2 + - first: + 4: 400048 + second: LeftHandPinky3 + - first: + 4: 400050 + second: LeftHandRing1 + - first: + 4: 400052 + second: LeftHandRing2 + - first: + 4: 400054 + second: LeftHandRing3 + - first: + 4: 400056 + second: LeftHandThumb1 + - first: + 4: 400058 + second: LeftHandThumb2 + - first: + 4: 400060 + second: LeftHandThumb3 + - first: + 4: 400062 + second: LeftInnerBrow + - first: + 4: 400064 + second: LeftIOuterBrow + - first: + 4: 400066 + second: LeftLeg + - first: + 4: 400068 + second: LeftLipCorner + - first: + 4: 400070 + second: LeftLipLower + - first: + 4: 400072 + second: LeftLipUpper + - first: + 4: 400074 + second: LeftNostril + - first: + 4: 400076 + second: LeftShoulder + - first: + 4: 400078 + second: LeftToes + - first: + 4: 400080 + second: LeftUpLeg + - first: + 4: 400082 + second: Lw_Teeth_Mesh + - first: + 4: 400084 + second: Neck + - first: + 4: 400086 + second: Reference + - first: + 4: 400088 + second: Ri_Eye_Mesh + - first: + 4: 400090 + second: RightArm + - first: + 4: 400092 + second: RightCheek + - first: + 4: 400094 + second: RightEye + - first: + 4: 400096 + second: RightEyelidLower + - first: + 4: 400098 + second: RightEyelidUpper + - first: + 4: 400100 + second: RightFoot + - first: + 4: 400102 + second: RightForeArm + - first: + 4: 400104 + second: RightHand + - first: + 4: 400106 + second: RightHandIndex1 + - first: + 4: 400108 + second: RightHandIndex2 + - first: + 4: 400110 + second: RightHandIndex3 + - first: + 4: 400112 + second: RightHandMiddle1 + - first: + 4: 400114 + second: RightHandMiddle2 + - first: + 4: 400116 + second: RightHandMiddle3 + - first: + 4: 400118 + second: RightHandPinky1 + - first: + 4: 400120 + second: RightHandPinky2 + - first: + 4: 400122 + second: RightHandPinky3 + - first: + 4: 400124 + second: RightHandRing1 + - first: + 4: 400126 + second: RightHandRing2 + - first: + 4: 400128 + second: RightHandRing3 + - first: + 4: 400130 + second: RightHandThumb1 + - first: + 4: 400132 + second: RightHandThumb2 + - first: + 4: 400134 + second: RightHandThumb3 + - first: + 4: 400136 + second: RightInnerBrow + - first: + 4: 400138 + second: RightIOuterBrow + - first: + 4: 400140 + second: RightLeg + - first: + 4: 400142 + second: RightLipCorner + - first: + 4: 400144 + second: RightLipLower + - first: + 4: 400146 + second: RightLipUpper + - first: + 4: 400148 + second: RightNostril + - first: + 4: 400150 + second: RightShoulder + - first: + 4: 400152 + second: RightToes + - first: + 4: 400154 + second: RightUpLeg + - first: + 4: 400156 + second: Spine + - first: + 4: 400158 + second: TongueBack + - first: + 4: 400160 + second: TongueTip + - first: + 4: 400162 + second: Tounge_Mesh + - first: + 4: 400164 + second: Unity_Body_Mesh + - first: + 4: 400166 + second: Up_Teeth_Mesh + - first: + 23: 2300000 + second: Le_Eye_Mesh + - first: + 23: 2300002 + second: Ri_Eye_Mesh + - first: + 33: 3300000 + second: Le_Eye_Mesh + - first: + 33: 3300002 + second: Ri_Eye_Mesh + - first: + 43: 4300000 + second: Unity_Body_Mesh + - first: + 43: 4300002 + second: Up_Teeth_Mesh + - first: + 43: 4300004 + second: Lw_Teeth_Mesh + - first: + 43: 4300006 + second: Tounge_Mesh + - first: + 43: 4300008 + second: Le_Eye_Mesh + - first: + 43: 4300010 + second: Ri_Eye_Mesh + - first: + 74: 7400000 + second: UNTY_Sneak_tk04 + - first: + 74: 7400002 + second: HumanoidCrouchIdle + - first: + 74: 7400004 + second: HumanoidCrouchWalk + - first: + 74: 7400006 + second: HumanoidCrouchWalkRight + - first: + 74: 7400008 + second: HumanoidCrouchWalkLeft + - first: + 74: 7400010 + second: HumanoidCrouchTurnRight + - first: + 74: 7400012 + second: HumanoidCrouchTurnLeft + - first: + 74: 7400014 + second: HumanoidCrouchWalkRightB + - first: + 95: 9500000 + second: //RootNode + - first: + 137: 13700000 + second: Lw_Teeth_Mesh + - first: + 137: 13700002 + second: Tounge_Mesh + - first: + 137: 13700004 + second: Unity_Body_Mesh + - first: + 137: 13700006 + second: Up_Teeth_Mesh + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidCrouchIdle takeName: Take 001 + internalID: 0 firstFrame: 264 lastFrame: 319 wrapMode: 0 @@ -221,6 +619,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 1 @@ -237,9 +636,11 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidCrouchWalk takeName: Take 001 + internalID: 0 firstFrame: 105 lastFrame: 159 wrapMode: 0 @@ -247,6 +648,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 1 @@ -263,16 +665,19 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidCrouchWalkRight takeName: Take 001 + internalID: 0 firstFrame: 2193 lastFrame: 2245 wrapMode: 0 orientationOffsetY: -38 level: 0 - cycleOffset: .300000012 + cycleOffset: 0.3 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 1 @@ -289,16 +694,19 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidCrouchWalkLeft takeName: Take 001 + internalID: 0 firstFrame: 1542 lastFrame: 1610 wrapMode: 0 orientationOffsetY: -38 level: 0 - cycleOffset: .709999979 + cycleOffset: 0.71 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -315,9 +723,11 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidCrouchTurnRight takeName: Take 001 + internalID: 0 firstFrame: 1932 lastFrame: 1976 wrapMode: 0 @@ -325,6 +735,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -341,9 +752,11 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidCrouchTurnLeft takeName: Take 001 + internalID: 0 firstFrame: 1932 lastFrame: 1976 wrapMode: 0 @@ -351,6 +764,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -367,9 +781,11 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidCrouchWalkRightB takeName: Take 001 + internalID: 0 firstFrame: 1542 lastFrame: 1610 wrapMode: 0 @@ -377,6 +793,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -393,18 +810,31 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -412,736 +842,765 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips limit: min: {x: -40, y: -40, z: -40} max: {x: 40, y: 40, z: 40} - value: {x: .0748809204, y: 0, z: .0374404602} - length: .0936011821 + value: {x: 0.07488092, y: 0, z: 0.03744046} + length: 0.09360118 modified: 1 - boneName: LeftUpLeg humanName: LeftUpperLeg limit: - min: {x: -60.0000038, y: -60.0000038, z: -90} - max: {x: 60.0000038, y: 60.0000038, z: 50} - value: {x: .327766955, y: 0, z: .163883477} - length: .409708828 + min: {x: -60.000004, y: -60.000004, z: -90} + max: {x: 60.000004, y: 60.000004, z: 50} + value: {x: 0.32776695, y: 0, z: 0.16388348} + length: 0.40970883 modified: 1 - boneName: RightUpLeg humanName: RightUpperLeg limit: - min: {x: -60.0000038, y: -60.0000038, z: -90} - max: {x: 60.0000038, y: 60.0000038, z: 50} - value: {x: .327766657, y: 0, z: .163883328} - length: .40970847 + min: {x: -60.000004, y: -60.000004, z: -90} + max: {x: 60.000004, y: 60.000004, z: 50} + value: {x: 0.32776666, y: 0, z: 0.16388333} + length: 0.40970847 modified: 1 - boneName: LeftLeg humanName: LeftLowerLeg limit: min: {x: -90, y: 0, z: -80} max: {x: 90, y: 0, z: 80} - value: {x: .338686317, y: 0, z: .169343159} - length: .423358053 + value: {x: 0.33868632, y: 0, z: 0.16934316} + length: 0.42335805 modified: 1 - boneName: RightLeg humanName: RightLowerLeg limit: min: {x: -90, y: 0, z: -80} max: {x: 90, y: 0, z: 80} - value: {x: .338686228, y: 0, z: .169343114} - length: .423357934 + value: {x: 0.33868623, y: 0, z: 0.16934311} + length: 0.42335793 modified: 1 - boneName: LeftFoot humanName: LeftFoot limit: - min: {x: 0, y: -30.0000019, z: -50} - max: {x: 0, y: 30.0000019, z: 50} - value: {x: .0686752051, y: 0, z: .0343376026} - length: .0858440399 + min: {x: 0, y: -30.000002, z: -50} + max: {x: 0, y: 30.000002, z: 50} + value: {x: 0.068675205, y: 0, z: 0.034337603} + length: 0.08584404 modified: 1 - boneName: RightFoot humanName: RightFoot limit: - min: {x: 0, y: -30.0000019, z: -50} - max: {x: 0, y: 30.0000019, z: 50} - value: {x: .0686753467, y: 0, z: .0343376733} - length: .0858442187 + min: {x: 0, y: -30.000002, z: -50} + max: {x: 0, y: 30.000002, z: 50} + value: {x: 0.06867535, y: 0, z: 0.034337673} + length: 0.08584422 modified: 1 - boneName: Spine humanName: Spine limit: min: {x: -40, y: -40, z: -40} max: {x: 40, y: 40, z: 40} - value: {x: .131201908, y: 0, z: .065600954} - length: .164002463 + value: {x: 0.13120191, y: 0, z: 0.065600954} + length: 0.16400246 modified: 1 - boneName: Chest humanName: Chest limit: min: {x: -40, y: -40, z: -40} max: {x: 40, y: 40, z: 40} - value: {x: .190353379, y: 0, z: .0951766893} - length: .237941802 + value: {x: 0.19035338, y: 0, z: 0.09517669} + length: 0.2379418 modified: 1 - boneName: Neck humanName: Neck limit: min: {x: -40, y: -40, z: -40} max: {x: 40, y: 40, z: 40} - value: {x: .0855656564, y: 0, z: .0427828282} - length: .106957108 + value: {x: 0.08556566, y: 0, z: 0.04278283} + length: 0.10695711 modified: 1 - boneName: Head humanName: Head limit: min: {x: -40, y: -40, z: -40} max: {x: 40, y: 40, z: 40} - value: {x: .0855656564, y: 0, z: .0427828282} - length: .106957108 + value: {x: 0.08556566, y: 0, z: 0.04278283} + length: 0.10695711 modified: 1 - boneName: LeftShoulder humanName: LeftShoulder limit: min: {x: 0, y: -15.000001, z: -15.000001} - max: {x: 0, y: 15.000001, z: 30.0000019} - value: {x: .0728295371, y: 0, z: .0364147685} - length: .0910369605 + max: {x: 0, y: 15.000001, z: 30.000002} + value: {x: 0.07282954, y: 0, z: 0.03641477} + length: 0.09103696 modified: 1 - boneName: RightShoulder humanName: RightShoulder limit: min: {x: 0, y: -15.000001, z: -15.000001} - max: {x: 0, y: 15.000001, z: 30.0000019} - value: {x: .0728297681, y: 0, z: .036414884} - length: .0910372436 + max: {x: 0, y: 15.000001, z: 30.000002} + value: {x: 0.07282977, y: 0, z: 0.036414884} + length: 0.09103724 modified: 1 - boneName: LeftArm humanName: LeftUpperArm limit: - min: {x: -90, y: -100, z: -60.0000038} + min: {x: -90, y: -100, z: -60.000004} max: {x: 90, y: 100, z: 100} - value: {x: .203239575, y: 0, z: .101619788} - length: .25404954 + value: {x: 0.20323958, y: 0, z: 0.10161979} + length: 0.25404954 modified: 1 - boneName: RightArm humanName: RightUpperArm limit: - min: {x: -90, y: -100, z: -60.0000038} + min: {x: -90, y: -100, z: -60.000004} max: {x: 90, y: 100, z: 100} - value: {x: .203239575, y: 0, z: .101619788} - length: .25404954 + value: {x: 0.20323958, y: 0, z: 0.10161979} + length: 0.25404954 modified: 1 - boneName: LeftForeArm humanName: LeftLowerArm limit: min: {x: -90, y: 0, z: -80} max: {x: 90, y: 0, z: 80} - value: {x: .197111592, y: 0, z: .0985557958} - length: .246389553 + value: {x: 0.19711159, y: 0, z: 0.098555796} + length: 0.24638955 modified: 1 - boneName: RightForeArm humanName: RightLowerArm limit: min: {x: -90, y: 0, z: -80} max: {x: 90, y: 0, z: 80} - value: {x: .197110742, y: 0, z: .0985553712} - length: .246388495 + value: {x: 0.19711074, y: 0, z: 0.09855537} + length: 0.2463885 modified: 1 - boneName: LeftHand humanName: LeftHand limit: min: {x: 0, y: -40, z: -80} max: {x: 0, y: 40, z: 80} - value: {x: .0985557958, y: 0, z: .0492778979} - length: .123194776 + value: {x: 0.098555796, y: 0, z: 0.049277898} + length: 0.12319478 modified: 1 - boneName: RightHand humanName: RightHand limit: min: {x: 0, y: -40, z: -80} max: {x: 0, y: 40, z: 80} - value: {x: .0985553712, y: 0, z: .0492776856} - length: .123194247 + value: {x: 0.09855537, y: 0, z: 0.049277686} + length: 0.12319425 modified: 1 - boneName: LeftToes humanName: LeftToes limit: min: {x: 0, y: 0, z: -50} max: {x: 0, y: 0, z: 50} - value: {x: .065187104, y: 0, z: .032593552} - length: .0814839154 + value: {x: 0.065187104, y: 0, z: 0.032593552} + length: 0.081483915 modified: 1 - boneName: RightToes humanName: RightToes limit: min: {x: 0, y: 0, z: -50} max: {x: 0, y: 0, z: 50} - value: {x: .0651872158, y: 0, z: .0325936079} - length: .081484057 + value: {x: 0.065187216, y: 0, z: 0.032593608} + length: 0.08148406 modified: 1 - boneName: LeftCheek humanName: LeftEye limit: min: {x: 0, y: -20, z: -10} max: {x: 0, y: 20, z: 15.000001} - value: {x: .0799999759, y: 0, z: .0399999879} - length: .100000001 + value: {x: 0.079999976, y: 0, z: 0.039999988} + length: 0.1 modified: 1 - boneName: RightCheek humanName: RightEye limit: min: {x: 0, y: -20, z: -10} max: {x: 0, y: 20, z: 15.000001} - value: {x: .0799999759, y: 0, z: .0399999879} - length: .100000001 + value: {x: 0.079999976, y: 0, z: 0.039999988} + length: 0.1 modified: 1 - boneName: Jaw humanName: Jaw limit: min: {x: 0, y: -10, z: -10} max: {x: 0, y: 10, z: 10} - value: {x: .0799999759, y: 0, z: .0399999879} - length: .100000001 + value: {x: 0.079999976, y: 0, z: 0.039999988} + length: 0.1 modified: 1 - boneName: LeftHandThumb1 humanName: Left Thumb Proximal limit: min: {x: 0, y: -25, z: -20} max: {x: 0, y: 25, z: 20} - value: {x: .0232954323, y: 0, z: .0116477162} - length: .0291192997 + value: {x: 0.023295432, y: 0, z: 0.011647716} + length: 0.0291193 modified: 1 - boneName: LeftHandThumb2 humanName: Left Thumb Intermediate limit: min: {x: 0, y: 0, z: -40} max: {x: 0, y: 0, z: 35} - value: {x: .0270182174, y: 0, z: .0135091087} - length: .0337727815 + value: {x: 0.027018217, y: 0, z: 0.013509109} + length: 0.03377278 modified: 1 - boneName: LeftHandThumb3 humanName: Left Thumb Distal limit: min: {x: 0, y: 0, z: -40} max: {x: 0, y: 0, z: 35} - value: {x: .0202636626, y: 0, z: .0101318313} - length: .0253295861 + value: {x: 0.020263663, y: 0, z: 0.010131831} + length: 0.025329586 modified: 1 - boneName: LeftHandIndex1 humanName: Left Index Proximal limit: min: {x: 0, y: -20, z: -50} max: {x: 0, y: 20, z: 50} - value: {x: .0318517908, y: 0, z: .0159258954} - length: .0398147553 + value: {x: 0.03185179, y: 0, z: 0.015925895} + length: 0.039814755 modified: 1 - boneName: LeftHandIndex2 humanName: Left Index Intermediate limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0223746132, y: 0, z: .0111873066} - length: .0279682763 + value: {x: 0.022374613, y: 0, z: 0.011187307} + length: 0.027968276 modified: 1 - boneName: LeftHandIndex3 humanName: Left Index Distal limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0167809594, y: 0, z: .00839047972} - length: .0209762082 + value: {x: 0.01678096, y: 0, z: 0.00839048} + length: 0.020976208 modified: 1 - boneName: LeftHandMiddle1 humanName: Left Middle Proximal limit: - min: {x: 0, y: -7.50000048, z: -50} - max: {x: 0, y: 7.50000048, z: 50} - value: {x: .0354253612, y: 0, z: .0177126806} - length: .0442817174 + min: {x: 0, y: -7.5000005, z: -50} + max: {x: 0, y: 7.5000005, z: 50} + value: {x: 0.03542536, y: 0, z: 0.01771268} + length: 0.044281717 modified: 1 - boneName: LeftHandMiddle2 humanName: Left Middle Intermediate limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0271717981, y: 0, z: .013585899} - length: .0339647569 + value: {x: 0.027171798, y: 0, z: 0.013585899} + length: 0.033964757 modified: 1 - boneName: LeftHandMiddle3 humanName: Left Middle Distal limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0203788485, y: 0, z: .0101894243} - length: .0254735686 + value: {x: 0.020378849, y: 0, z: 0.010189424} + length: 0.025473569 modified: 1 - boneName: LeftHandRing1 humanName: Left Ring Proximal limit: - min: {x: 0, y: -7.50000048, z: -50} - max: {x: 0, y: 7.50000048, z: 50} - value: {x: .034554895, y: 0, z: .0172774475} - length: .0431936346 + min: {x: 0, y: -7.5000005, z: -50} + max: {x: 0, y: 7.5000005, z: 50} + value: {x: 0.034554895, y: 0, z: 0.017277448} + length: 0.043193635 modified: 1 - boneName: LeftHandRing2 humanName: Left Ring Intermediate limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0246685278, y: 0, z: .0123342639} - length: .0308356676 + value: {x: 0.024668528, y: 0, z: 0.012334264} + length: 0.030835668 modified: 1 - boneName: LeftHandRing3 humanName: Left Ring Distal limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0185013935, y: 0, z: .00925069675} - length: .0231267512 + value: {x: 0.018501393, y: 0, z: 0.009250697} + length: 0.023126751 modified: 1 - boneName: LeftHandPinky1 humanName: Left Little Proximal limit: min: {x: 0, y: -20, z: -50} max: {x: 0, y: 20, z: 50} - value: {x: .024671454, y: 0, z: .012335727} - length: .0308393259 + value: {x: 0.024671454, y: 0, z: 0.012335727} + length: 0.030839326 modified: 1 - boneName: LeftHandPinky2 humanName: Left Little Intermediate limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0184512939, y: 0, z: .00922564697} - length: .0230641253 + value: {x: 0.018451294, y: 0, z: 0.009225647} + length: 0.023064125 modified: 1 - boneName: LeftHandPinky3 humanName: Left Little Distal limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0138384728, y: 0, z: .00691923639} - length: .0172980949 + value: {x: 0.013838473, y: 0, z: 0.0069192364} + length: 0.017298095 modified: 1 - boneName: RightHandThumb1 humanName: Right Thumb Proximal limit: min: {x: 0, y: -25, z: -20} max: {x: 0, y: 25, z: 20} - value: {x: .0232955087, y: 0, z: .0116477543} - length: .0291193947 + value: {x: 0.023295509, y: 0, z: 0.011647754} + length: 0.029119395 modified: 1 - boneName: RightHandThumb2 humanName: Right Thumb Intermediate limit: min: {x: 0, y: 0, z: -40} max: {x: 0, y: 0, z: 35} - value: {x: .0270181522, y: 0, z: .0135090761} - length: .0337726995 + value: {x: 0.027018152, y: 0, z: 0.013509076} + length: 0.0337727 modified: 1 - boneName: RightHandThumb3 humanName: Right Thumb Distal limit: min: {x: 0, y: 0, z: -40} max: {x: 0, y: 0, z: 35} - value: {x: .0202636123, y: 0, z: .0101318061} - length: .0253295247 + value: {x: 0.020263612, y: 0, z: 0.010131806} + length: 0.025329525 modified: 1 - boneName: RightHandIndex1 humanName: Right Index Proximal limit: min: {x: 0, y: -20, z: -50} max: {x: 0, y: 20, z: 50} - value: {x: .0318510309, y: 0, z: .0159255154} - length: .0398138054 + value: {x: 0.03185103, y: 0, z: 0.015925515} + length: 0.039813805 modified: 1 - boneName: RightHandIndex2 humanName: Right Index Intermediate limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0223747212, y: 0, z: .0111873606} - length: .0279684104 + value: {x: 0.022374721, y: 0, z: 0.011187361} + length: 0.02796841 modified: 1 - boneName: RightHandIndex3 humanName: Right Index Distal limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0167810395, y: 0, z: .00839051977} - length: .0209763087 + value: {x: 0.01678104, y: 0, z: 0.00839052} + length: 0.020976309 modified: 1 - boneName: RightHandMiddle1 humanName: Right Middle Proximal limit: - min: {x: 0, y: -7.50000048, z: -50} - max: {x: 0, y: 7.50000048, z: 50} - value: {x: .0354258306, y: 0, z: .0177129153} - length: .044282306 + min: {x: 0, y: -7.5000005, z: -50} + max: {x: 0, y: 7.5000005, z: 50} + value: {x: 0.03542583, y: 0, z: 0.017712915} + length: 0.044282306 modified: 1 - boneName: RightHandMiddle2 humanName: Right Middle Intermediate limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0271718819, y: 0, z: .0135859409} - length: .0339648612 + value: {x: 0.027171882, y: 0, z: 0.013585941} + length: 0.03396486 modified: 1 - boneName: RightHandMiddle3 humanName: Right Middle Distal limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .02037891, y: 0, z: .010189455} - length: .0254736468 + value: {x: 0.02037891, y: 0, z: 0.010189455} + length: 0.025473647 modified: 1 - boneName: RightHandRing1 humanName: Right Ring Proximal limit: - min: {x: 0, y: -7.50000048, z: -50} - max: {x: 0, y: 7.50000048, z: 50} - value: {x: .0345548131, y: 0, z: .0172774065} - length: .043193534 + min: {x: 0, y: -7.5000005, z: -50} + max: {x: 0, y: 7.5000005, z: 50} + value: {x: 0.034554813, y: 0, z: 0.017277407} + length: 0.043193534 modified: 1 - boneName: RightHandRing2 humanName: Right Ring Intermediate limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .024668118, y: 0, z: .012334059} - length: .0308351573 + value: {x: 0.024668118, y: 0, z: 0.012334059} + length: 0.030835157 modified: 1 - boneName: RightHandRing3 humanName: Right Ring Distal limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0185010862, y: 0, z: .00925054308} - length: .0231263675 + value: {x: 0.018501086, y: 0, z: 0.009250543} + length: 0.023126367 modified: 1 - boneName: RightHandPinky1 humanName: Right Little Proximal limit: min: {x: 0, y: -20, z: -50} max: {x: 0, y: 20, z: 50} - value: {x: .0246717427, y: 0, z: .0123358713} - length: .0308396872 + value: {x: 0.024671743, y: 0, z: 0.012335871} + length: 0.030839687 modified: 1 - boneName: RightHandPinky2 humanName: Right Little Intermediate limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .0184513107, y: 0, z: .00922565535} - length: .0230641477 + value: {x: 0.01845131, y: 0, z: 0.009225655} + length: 0.023064148 modified: 1 - boneName: RightHandPinky3 humanName: Right Little Distal limit: min: {x: 0, y: 0, z: -45} max: {x: 0, y: 0, z: 45} - value: {x: .013838484, y: 0, z: .00691924198} - length: .0172981098 + value: {x: 0.013838484, y: 0, z: 0.006919242} + length: 0.01729811 modified: 1 skeleton: - name: + parentName: position: {x: 0, y: 0, z: 0} - rotation: {x: 0, y: 0, z: 0, w: .99999994} + rotation: {x: 0, y: 0, z: 0, w: 0.99999994} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Reference + parentName: position: {x: 0, y: 0, z: 0} - rotation: {x: 0, y: -0, z: 0, w: .99999994} + rotation: {x: 0, y: -0, z: 0, w: 0.99999994} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: 3.42077811e-09, y: .963793695, z: -.0235067811} - rotation: {x: 5.82076654e-09, y: 4.65661252e-08, z: -2.91038305e-09, w: .99999994} - scale: {x: .999999464, y: .999999464, z: .999999583} - transformModified: 1 + parentName: + position: {x: 0.000000003420778, y: 0.9637937, z: -0.023506781} + rotation: {x: 0.0000000058207665, y: 0.000000046566125, z: -0.000000002910383, + w: 0.99999994} + scale: {x: 0.99999946, y: 0.99999946, z: 0.9999996} - name: LeftUpLeg - position: {x: -.0754494593, y: -.045663476, z: 4.68068517e-09} - rotation: {x: -4.07453626e-08, y: -3.4924593e-08, z: -4.3655735e-08, w: .99999994} - scale: {x: 1, y: 1.00000036, z: 1.00000036} - transformModified: 1 + parentName: + position: {x: -0.07544946, y: -0.045663476, z: 0.000000004680685} + rotation: {x: -0.000000040745363, y: -0.000000034924593, z: -0.000000043655735, + w: 0.99999994} + scale: {x: 1, y: 1.0000004, z: 1.0000004} - name: LeftLeg - position: {x: -.0205504373, y: -.409130454, z: .0071713319} - rotation: {x: 2.32830679e-08, y: -4.65661252e-08, z: 3.49245859e-08, w: .99999994} - scale: {x: 1.00000024, y: 1.00000024, z: .999999762} - transformModified: 1 + parentName: + position: {x: -0.020550437, y: -0.40913045, z: 0.007171332} + rotation: {x: 0.000000023283068, y: -0.000000046566125, z: 0.000000034924586, + w: 0.99999994} + scale: {x: 1.0000002, y: 1.0000002, z: 0.99999976} - name: LeftFoot - position: {x: -.00515303621, y: -.423155665, z: -.0120320953} - rotation: {x: 1.16415313e-08, y: 6.9849186e-08, z: 1.16529e-08, w: .99999994} - scale: {x: 1.00000012, y: 1.00000012, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: -0.005153036, y: -0.42315567, z: -0.012032095} + rotation: {x: 0.000000011641531, y: 0.000000069849186, z: 0.0000000116529, w: 0.99999994} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001} - name: LeftToes - position: {x: -.00748698693, y: -.0731672943, z: .145427078} - rotation: {x: 4.54747316e-11, y: -1.16415313e-08, z: 7.20825038e-19, w: .99999994} - scale: {x: 1, y: 1.00000012, z: .99999994} - transformModified: 1 + parentName: + position: {x: -0.007486987, y: -0.073167294, z: 0.14542708} + rotation: {x: 4.547473e-11, y: -0.000000011641531, z: 7.2082504e-19, w: 0.99999994} + scale: {x: 1, y: 1.0000001, z: 0.99999994} - name: RightUpLeg - position: {x: .0754495189, y: -.045663774, z: 6.53003767e-08} - rotation: {x: -1.23691262e-08, y: -4.80213167e-08, z: -3.20142099e-08, w: .99999994} - scale: {x: 1, y: 1.00000024, z: .999999821} - transformModified: 1 + parentName: + position: {x: 0.07544952, y: -0.045663774, z: 0.00000006530038} + rotation: {x: -0.000000012369126, y: -0.000000048021317, z: -0.00000003201421, + w: 0.99999994} + scale: {x: 1, y: 1.0000002, z: 0.9999998} - name: RightLeg - position: {x: .0205504801, y: -.409130156, z: .00717126951} - rotation: {x: 1.23691271e-08, y: 1.45519141e-09, z: 3.4924593e-08, w: .99999994} - scale: {x: 1.00000012, y: 1, z: 1.00000024} - transformModified: 1 + parentName: + position: {x: 0.02055048, y: -0.40913016, z: 0.0071712695} + rotation: {x: 0.000000012369127, y: 0.0000000014551914, z: 0.000000034924593, + w: 0.99999994} + scale: {x: 1.0000001, y: 1, z: 1.0000002} - name: RightFoot - position: {x: .00515298778, y: -.423155665, z: -.0120320329} - rotation: {x: -6.91215929e-09, y: 1.16415331e-08, z: -2.28095782e-16, w: .99999994} - scale: {x: 1.00000012, y: 1.00000012, z: 1} - transformModified: 1 + parentName: + position: {x: 0.005152988, y: -0.42315567, z: -0.012032033} + rotation: {x: -0.0000000069121593, y: 0.000000011641533, z: -2.2809578e-16, + w: 0.99999994} + scale: {x: 1.0000001, y: 1.0000001, z: 1} - name: RightToes - position: {x: .00748700323, y: -.0731672719, z: .145427436} - rotation: {x: 1.13686816e-09, y: -1.77635673e-15, z: -4.52041241e-24, w: .99999994} - scale: {x: 1, y: 1.00000012, z: .999999881} - transformModified: 1 + parentName: + position: {x: 0.007487003, y: -0.07316727, z: 0.14542744} + rotation: {x: 0.0000000011368682, y: -1.7763567e-15, z: -4.5204124e-24, w: 0.99999994} + scale: {x: 1, y: 1.0000001, z: 0.9999999} - name: Spine - position: {x: -3.00148741e-08, y: .0922629237, z: .0157713275} - rotation: {x: -1.74622983e-08, y: -4.65661252e-08, z: 1.45519143e-08, w: .99999994} - scale: {x: .99999994, y: 1.00000024, z: 1} - transformModified: 1 + parentName: + position: {x: -0.000000030014874, y: 0.09226292, z: 0.015771328} + rotation: {x: -0.000000017462298, y: -0.000000046566125, z: 0.000000014551914, + w: 0.99999994} + scale: {x: 0.99999994, y: 1.0000002, z: 1} - name: Chest - position: {x: 1.17779621e-07, y: .162540436, z: .0218507703} - rotation: {x: -2.91038282e-09, y: 3.04931835e-16, z: -1.16415313e-08, w: .99999994} - scale: {x: 1, y: 1, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: 0.00000011777962, y: 0.16254044, z: 0.02185077} + rotation: {x: -0.0000000029103828, y: 3.0493183e-16, z: -0.000000011641531, + w: 0.99999994} + scale: {x: 1, y: 1, z: 1.0000001} - name: LeftShoulder - position: {x: -.0382436588, y: .192178369, z: -.017063193} - rotation: {x: -.0140066501, y: -.0595066473, z: .228689954, w: .971577883} - scale: {x: 1.00000024, y: 1.00000012, z: 1.00000036} - transformModified: 1 + parentName: + position: {x: -0.03824366, y: 0.19217837, z: -0.017063193} + rotation: {x: -0.01400665, y: -0.059506647, z: 0.22868995, w: 0.9715779} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000004} - name: LeftArm - position: {x: -.0835746303, y: .0360973217, z: 2.02652473e-08} - rotation: {x: .00946434215, y: .0436915196, z: -.223042428, w: .973783076} - scale: {x: 1.00000024, y: .999999881, z: .999999583} - transformModified: 1 + parentName: + position: {x: -0.08357463, y: 0.03609732, z: 0.000000020265247} + rotation: {x: 0.009464342, y: 0.04369152, z: -0.22304243, w: 0.9737831} + scale: {x: 1.0000002, y: 0.9999999, z: 0.9999996} - name: LeftForeArm - position: {x: -.25404951, y: 1.22031747e-06, z: 3.19976436e-08} - rotation: {x: -.000616516976, y: .0220786054, z: -.0160702672, w: .999626815} - scale: {x: 1, y: 1.00000012, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: -0.2540495, y: 0.0000012203175, z: 0.000000031997644} + rotation: {x: -0.000616517, y: 0.022078605, z: -0.016070267, w: 0.9996268} + scale: {x: 1, y: 1.0000001, z: 1.0000001} - name: LeftHand - position: {x: -.246389613, y: -4.35680903e-07, z: -9.75885257e-08} - rotation: {x: -4.02154443e-09, y: -1.4466176e-09, z: -.0214135218, w: .999770641} - scale: {x: 1.00000012, y: .99999994, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: -0.24638961, y: -0.0000004356809, z: -0.000000097588526} + rotation: {x: -0.0000000040215444, y: -0.0000000014466176, z: -0.021413522, + w: 0.99977064} + scale: {x: 1.0000001, y: 0.99999994, z: 1.0000001} - name: LeftHandIndex1 - position: {x: -.075125888, y: -.0078406008, z: .0326528661} - rotation: {x: -.00211889809, y: .080257535, z: .0175381638, w: .996617556} - scale: {x: .999999523, y: 1, z: .999999762} - transformModified: 1 + parentName: + position: {x: -0.07512589, y: -0.007840601, z: 0.032652866} + rotation: {x: -0.002118898, y: 0.080257535, z: 0.017538164, w: 0.99661756} + scale: {x: 0.9999995, y: 1, z: 0.99999976} - name: LeftHandIndex2 - position: {x: -.0397970714, y: 4.91564933e-05, z: .0011855599} - rotation: {x: .000501967676, y: .0154704293, z: .0404186174, w: .999062896} - scale: {x: .999999821, y: 1, z: 1} - transformModified: 1 + parentName: + position: {x: -0.03979707, y: 0.000049156493, z: 0.0011855599} + rotation: {x: 0.0005019677, y: 0.015470429, z: 0.040418617, w: 0.9990629} + scale: {x: 0.9999998, y: 1, z: 1} - name: LeftHandIndex3 - position: {x: -.0279682875, y: -1.673816e-07, z: -6.32759711e-09} - rotation: {x: 3.69308495e-08, y: 6.05847372e-09, z: 7.44928075e-09, w: .99999994} - scale: {x: 1.00000012, y: .99999994, z: 1.00000024} - transformModified: 1 + parentName: + position: {x: -0.027968287, y: -0.0000001673816, z: -0.000000006327597} + rotation: {x: 0.00000003693085, y: 0.0000000060584737, z: 0.0000000074492807, + w: 0.99999994} + scale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} - name: LeftHandMiddle1 - position: {x: -.0760238469, y: -.00188483985, z: .0101411967} - rotation: {x: -.000768827042, y: .03332109, z: .0209074691, w: .999225616} - scale: {x: .999999702, y: 1.00000012, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: -0.07602385, y: -0.0018848398, z: 0.010141197} + rotation: {x: -0.00076882704, y: 0.03332109, z: 0.02090747, w: 0.9992256} + scale: {x: 0.9999997, y: 1.0000001, z: 1.0000001} - name: LeftHandMiddle2 - position: {x: -.0442796722, y: 3.25862288e-06, z: -.000425204897} - rotation: {x: -.00136237638, y: -.0191563964, z: .0379062556, w: .999096692} - scale: {x: .999999821, y: .999999464, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: -0.044279672, y: 0.0000032586229, z: -0.0004252049} + rotation: {x: -0.0013623764, y: -0.019156396, z: 0.037906256, w: 0.9990967} + scale: {x: 0.9999998, y: 0.99999946, z: 1.0000001} - name: LeftHandMiddle3 - position: {x: -.0339647718, y: 2.86249474e-07, z: -8.29717592e-08} - rotation: {x: 2.32546835e-08, y: 2.64777067e-09, z: 2.93403135e-10, w: .99999994} - scale: {x: .999999046, y: .999999762, z: .999999166} - transformModified: 1 + parentName: + position: {x: -0.03396477, y: 0.00000028624947, z: -0.00000008297176} + rotation: {x: 0.000000023254684, y: 0.0000000026477707, z: 2.9340314e-10, w: 0.99999994} + scale: {x: 0.99999905, y: 0.99999976, z: 0.99999917} - name: LeftHandPinky1 - position: {x: -.0656595677, y: -.00782520603, z: -.0322510153} - rotation: {x: -.000914534612, y: .0121654291, z: .0212139543, w: .999700487} - scale: {x: .999999523, y: .999999821, z: .999999702} - transformModified: 1 + parentName: + position: {x: -0.06565957, y: -0.007825206, z: -0.032251015} + rotation: {x: -0.0009145346, y: 0.012165429, z: 0.021213954, w: 0.9997005} + scale: {x: 0.9999995, y: 0.9999998, z: 0.9999997} - name: LeftHandPinky2 - position: {x: -.0308053438, y: -3.20081381e-05, z: -.0014482754} - rotation: {x: -.000170624597, y: -.00966151059, z: -.00536243059, w: .999938905} - scale: {x: 1.00000024, y: 1.00000012, z: 1.00000024} - transformModified: 1 + parentName: + position: {x: -0.030805344, y: -0.000032008138, z: -0.0014482754} + rotation: {x: -0.0001706246, y: -0.009661511, z: -0.0053624306, w: 0.9999389} + scale: {x: 1.0000002, y: 1.0000001, z: 1.0000002} - name: LeftHandPinky3 - position: {x: -.023064144, y: -6.31396097e-06, z: 1.49689924e-07} - rotation: {x: 2.02855333e-08, y: 5.32508655e-11, z: 1.8177555e-09, w: .99999994} - scale: {x: .99999994, y: .999999821, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: -0.023064144, y: -0.000006313961, z: 0.00000014968992} + rotation: {x: 0.000000020285533, y: 5.3250866e-11, z: 0.0000000018177555, w: 0.99999994} + scale: {x: 0.99999994, y: 0.9999998, z: 1.0000001} - name: LeftHandRing1 - position: {x: -.0703019649, y: -.00374631234, z: -.0114116408} - rotation: {x: -.000323360844, y: .0115971807, z: .024741888, w: .999626517} - scale: {x: .999999583, y: .999999881, z: .999999523} - transformModified: 1 + parentName: + position: {x: -0.070301965, y: -0.0037463123, z: -0.011411641} + rotation: {x: -0.00032336084, y: 0.011597181, z: 0.024741888, w: 0.9996265} + scale: {x: 0.9999996, y: 0.9999999, z: 0.9999995} - name: LeftHandRing2 - position: {x: -.0431358069, y: -1.94654622e-05, z: -.00223529967} - rotation: {x: -.00120297296, y: -.0231146254, z: .0409693159, w: .998892248} - scale: {x: 1, y: 1.00000024, z: 1} - transformModified: 1 + parentName: + position: {x: -0.043135807, y: -0.000019465462, z: -0.0022352997} + rotation: {x: -0.001202973, y: -0.023114625, z: 0.040969316, w: 0.99889225} + scale: {x: 1, y: 1.0000002, z: 1} - name: LeftHandRing3 - position: {x: -.0308356825, y: 2.39532568e-07, z: -7.19476922e-09} - rotation: {x: -6.08837869e-10, y: 1.12349374e-08, z: -7.34940375e-09, w: .99999994} - scale: {x: 1.00000036, y: 1.0000006, z: 1.00000048} - transformModified: 1 + parentName: + position: {x: -0.030835683, y: 0.00000023953257, z: -0.0000000071947692} + rotation: {x: -6.0883787e-10, y: 0.000000011234937, z: -0.0000000073494038, + w: 0.99999994} + scale: {x: 1.0000004, y: 1.0000006, z: 1.0000005} - name: LeftHandThumb1 - position: {x: -.0142304301, y: -.0123787876, z: .0255317632} - rotation: {x: -.012324756, y: -.00852822885, z: .0125762429, w: .99980849} - scale: {x: .999999583, y: .999999881, z: .999999404} - transformModified: 1 + parentName: + position: {x: -0.01423043, y: -0.012378788, z: 0.025531763} + rotation: {x: -0.012324756, y: -0.008528229, z: 0.012576243, w: 0.9998085} + scale: {x: 0.9999996, y: 0.9999999, z: 0.9999994} - name: LeftHandThumb2 - position: {x: -.0163738672, y: -.00529063167, z: .02349131} - rotation: {x: -.0260513071, y: .0966911316, z: .00361812161, w: .994966805} - scale: {x: 1.00000048, y: 1, z: 1.00000036} - transformModified: 1 + parentName: + position: {x: -0.016373867, y: -0.0052906317, z: 0.02349131} + rotation: {x: -0.026051307, y: 0.09669113, z: 0.0036181216, w: 0.9949668} + scale: {x: 1.0000005, y: 1, z: 1.0000004} - name: LeftHandThumb3 - position: {x: -.0254602432, y: -.00763921905, z: .0208331123} - rotation: {x: 2.46801015e-08, y: 6.89048749e-11, z: -2.14205915e-08, w: .99999994} - scale: {x: .999999821, y: 1, z: 1} - transformModified: 1 + parentName: + position: {x: -0.025460243, y: -0.007639219, z: 0.020833112} + rotation: {x: 0.000000024680102, y: 6.8904875e-11, z: -0.000000021420592, w: 0.99999994} + scale: {x: 0.9999998, y: 1, z: 1} - name: Neck - position: {x: -5.19688825e-08, y: .235723853, z: -.0324132778} - rotation: {x: -8.73114825e-09, y: -2.32830626e-08, z: 2.32830626e-08, w: .99999994} - scale: {x: 1.00000012, y: 1, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: -0.000000051968883, y: 0.23572385, z: -0.032413278} + rotation: {x: -0.000000008731148, y: -0.000000023283063, z: 0.000000023283063, + w: 0.99999994} + scale: {x: 1.0000001, y: 1, z: 1.0000001} - name: Head - position: {x: 5.99316294e-08, y: .106355786, z: .0113267787} - rotation: {x: 1.16415313e-08, y: 1.16415313e-08, z: -1.74622965e-08, w: .99999994} - scale: {x: 1.00000012, y: 1, z: .99999994} - transformModified: 1 + parentName: + position: {x: 0.00000005993163, y: 0.10635579, z: 0.011326779} + rotation: {x: 0.000000011641531, y: 0.000000011641531, z: -0.000000017462296, + w: 0.99999994} + scale: {x: 1.0000001, y: 1, z: 0.99999994} - name: Jaw - position: {x: -1.07955245e-07, y: .0111267567, z: .0103275944} - rotation: {x: -1.7085941e-15, y: 1.16415313e-08, z: 1.35525285e-16, w: .99999994} + parentName: + position: {x: -0.000000107955245, y: 0.011126757, z: 0.010327594} + rotation: {x: -1.7085941e-15, y: 0.000000011641531, z: 1.3552528e-16, w: 0.99999994} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440563, y: .0337018967, z: .0594304204} - rotation: {x: -1.7085941e-15, y: 1.16415313e-08, z: 1.35525285e-16, w: .99999994} + parentName: + position: {x: -0.054244056, y: 0.033701897, z: 0.05943042} + rotation: {x: -1.7085941e-15, y: 0.000000011641531, z: 1.3552528e-16, w: 0.99999994} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .0337027349, z: .0594274066} - rotation: {x: -8.20415731e-16, y: 1.16415313e-08, z: -3.08563885e-16, w: .99999994} - scale: {x: .999999881, y: 1, z: .999999881} - transformModified: 1 + parentName: + position: {x: 0.054239996, y: 0.033702735, z: 0.059427407} + rotation: {x: -8.2041573e-16, y: 0.000000011641531, z: -3.0856389e-16, w: 0.99999994} + scale: {x: 0.9999999, y: 1, z: 0.9999999} - name: RightShoulder - position: {x: .038328331, y: .192176938, z: -.0170631427} - rotation: {x: .228671849, y: .971582115, z: -.0140056564, w: -.0595073961} - scale: {x: 1.0000006, y: 1.00000024, z: 1.00000048} - transformModified: 1 + parentName: + position: {x: 0.03832833, y: 0.19217694, z: -0.017063143} + rotation: {x: 0.22867185, y: 0.9715821, z: -0.014005656, w: -0.059507396} + scale: {x: 1.0000006, y: 1.0000002, z: 1.0000005} - name: RightArm - position: {x: -.0835755765, y: .0360957384, z: -2.97162579e-08} - rotation: {x: -.211051971, y: -.974394083, z: .0173116866, w: -.0755877718} - scale: {x: .999999702, y: .999999821, z: .999999464} - transformModified: 1 + parentName: + position: {x: -0.08357558, y: 0.03609574, z: -0.000000029716258} + rotation: {x: -0.21105197, y: -0.9743941, z: 0.017311687, w: -0.07558777} + scale: {x: 0.9999997, y: 0.9999998, z: 0.99999946} - name: RightForeArm - position: {x: .253428489, y: .00601179199, z: -.0167043842} - rotation: {x: -.000616500562, y: .0220786314, z: -.0160702001, w: .999626815} - scale: {x: .999999821, y: .999999881, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: 0.2534285, y: 0.006011792, z: -0.016704384} + rotation: {x: -0.00061650056, y: 0.022078631, z: -0.0160702, w: 0.9996268} + scale: {x: 0.9999998, y: 0.9999999, z: 1.0000001} - name: RightHand - position: {x: .245373502, y: .0216428582, z: .00555044087} - rotation: {x: -8.05343081e-09, y: -3.4378973e-09, z: .021413656, w: .999770641} - scale: {x: 1.00000012, y: 1.00000012, z: .99999994} - transformModified: 1 + parentName: + position: {x: 0.2453735, y: 0.021642858, z: 0.005550441} + rotation: {x: -0.000000008053431, y: -0.0000000034378973, z: 0.021413656, w: 0.99977064} + scale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} - name: RightHandIndex1 - position: {x: .0747696534, y: -.00124316232, z: .0343442895} - rotation: {x: -.00211893418, y: .0802575499, z: .0175381694, w: .996617556} - scale: {x: .999999821, y: .999999821, z: .999999821} - transformModified: 1 + parentName: + position: {x: 0.07476965, y: -0.0012431623, z: 0.03434429} + rotation: {x: -0.0021189342, y: 0.08025755, z: 0.01753817, w: 0.99661756} + scale: {x: 0.9999998, y: 0.9999998, z: 0.9999998} - name: RightHandIndex2 - position: {x: .0370573327, y: .000723987061, z: .0145385358} - rotation: {x: -.00331782503, y: .0159309618, z: .0606124736, w: .998028696} - scale: {x: 1.00000012, y: 1, z: .999999881} - transformModified: 1 + parentName: + position: {x: 0.037057333, y: 0.00072398706, z: 0.014538536} + rotation: {x: -0.003317825, y: 0.015930962, z: 0.060612474, w: 0.9980287} + scale: {x: 1.0000001, y: 1, z: 0.9999999} - name: RightHandIndex3 - position: {x: .0252249315, y: -.00496666413, z: .0110121761} - rotation: {x: -7.26069649e-09, y: -1.4510702e-08, z: 2.18140634e-08, w: .99999994} - scale: {x: .999999583, y: 1.00000012, z: .999999821} - transformModified: 1 + parentName: + position: {x: 0.025224932, y: -0.004966664, z: 0.011012176} + rotation: {x: -0.0000000072606965, y: -0.000000014510702, z: 0.000000021814063, + w: 0.99999994} + scale: {x: 0.9999996, y: 1.0000001, z: 0.9999998} - name: RightHandMiddle1 - position: {x: .0756474659, y: .00478892541, z: .0118529648} - rotation: {x: -.000768840255, y: .0333211161, z: .0209074952, w: .999225616} - scale: {x: .999999404, y: .999999404, z: .999999642} - transformModified: 1 + parentName: + position: {x: 0.075647466, y: 0.0047889254, z: 0.011852965} + rotation: {x: -0.00076884025, y: 0.033321116, z: 0.020907495, w: 0.9992256} + scale: {x: 0.9999994, y: 0.9999994, z: 0.99999964} - name: RightHandMiddle2 - position: {x: .0438089147, y: .000194971071, z: .00645504799} - rotation: {x: -.00413233321, y: -.0335151851, z: .076134786, w: .996525466} - scale: {x: 1.00000036, y: 1, z: 1.00000024} - transformModified: 1 + parentName: + position: {x: 0.043808915, y: 0.00019497107, z: 0.006455048} + rotation: {x: -0.004132333, y: -0.033515185, z: 0.076134786, w: 0.99652547} + scale: {x: 1.0000004, y: 1, z: 1.0000002} - name: RightHandMiddle3 - position: {x: .0330724642, y: -.00754786143, z: .00168993894} - rotation: {x: 7.69444419e-09, y: 1.25382789e-08, z: 1.49648791e-08, w: .99999994} - scale: {x: .999999881, y: 1.00000036, z: 1} - transformModified: 1 + parentName: + position: {x: 0.033072464, y: -0.0075478614, z: 0.001689939} + rotation: {x: 0.000000007694444, y: 0.000000012538279, z: 0.00000001496488, + w: 0.99999994} + scale: {x: 0.9999999, y: 1.0000004, z: 1} - name: RightHandPinky1 - position: {x: .0668035522, y: -.00199553184, z: -.0307564847} - rotation: {x: .00317373709, y: -.192002267, z: .0450988412, w: .980352521} - scale: {x: .999999881, y: .999999583, z: .999999642} - transformModified: 1 + parentName: + position: {x: 0.06680355, y: -0.0019955318, z: -0.030756485} + rotation: {x: 0.003173737, y: -0.19200227, z: 0.04509884, w: 0.9803525} + scale: {x: 0.9999999, y: 0.9999996, z: 0.99999964} - name: RightHandPinky2 - position: {x: .0285310671, y: -.00139647431, z: -.0116238724} - rotation: {x: -.000170635802, y: -.00966133457, z: -.00536238402, w: .999938905} - scale: {x: 1.00000012, y: 1, z: 1.00000012} - transformModified: 1 + parentName: + position: {x: 0.028531067, y: -0.0013964743, z: -0.011623872} + rotation: {x: -0.0001706358, y: -0.009661335, z: -0.005362384, w: 0.9999389} + scale: {x: 1.0000001, y: 1, z: 1.0000001} - name: RightHandPinky3 - position: {x: .0214269906, y: -.000553206133, z: -.00851669535} - rotation: {x: 3.90360597e-08, y: -6.2735811e-10, z: -1.86674836e-08, w: .99999994} - scale: {x: 1.00000012, y: 1, z: .999999881} - transformModified: 1 + parentName: + position: {x: 0.02142699, y: -0.00055320613, z: -0.008516695} + rotation: {x: 0.00000003903606, y: -6.273581e-10, z: -0.000000018667484, w: 0.99999994} + scale: {x: 1.0000001, y: 1, z: 0.9999999} - name: RightHandRing1 - position: {x: .0705985799, y: .00245708786, z: -.00982159749} - rotation: {x: .000709679676, y: -.0543408655, z: .034945406, w: .9979105} - scale: {x: 1.00000012, y: .999999821, z: .999999881} - transformModified: 1 + parentName: + position: {x: 0.07059858, y: 0.0024570879, z: -0.0098215975} + rotation: {x: 0.0007096797, y: -0.054340865, z: 0.034945406, w: 0.9979105} + scale: {x: 1.0000001, y: 0.9999998, z: 0.9999999} - name: RightHandRing2 - position: {x: .0428873822, y: -.0013771269, z: -.00494583743} - rotation: {x: .000481452531, y: -.021291228, z: .0698404461, w: .997330785} - scale: {x: .999999404, y: .999999702, z: .999999702} - transformModified: 1 + parentName: + position: {x: 0.042887382, y: -0.0013771269, z: -0.0049458374} + rotation: {x: 0.00048145253, y: -0.021291228, z: 0.069840446, w: 0.9973308} + scale: {x: 0.9999994, y: 0.9999997, z: 0.9999997} - name: RightHandRing3 - position: {x: .0295002013, y: -.00769287953, z: -.00462228199} - rotation: {x: -3.35127268e-08, y: 2.45900145e-09, z: -1.36025351e-08, w: .99999994} - scale: {x: 1.00000024, y: .999999881, z: .999999881} - transformModified: 1 + parentName: + position: {x: 0.029500201, y: -0.0076928795, z: -0.004622282} + rotation: {x: -0.000000033512727, y: 0.0000000024590014, z: -0.000000013602535, + w: 0.99999994} + scale: {x: 1.0000002, y: 0.9999999, z: 0.9999999} - name: RightHandThumb1 - position: {x: .0146845682, y: -.0111069884, z: .0258579385} - rotation: {x: -.0128122158, y: -.00325594051, z: .0314567909, w: .999417603} - scale: {x: .999999702, y: .999999821, z: .999999583} - transformModified: 1 + parentName: + position: {x: 0.014684568, y: -0.011106988, z: 0.025857938} + rotation: {x: -0.012812216, y: -0.0032559405, z: 0.03145679, w: 0.9994176} + scale: {x: 0.9999997, y: 0.9999998, z: 0.9999996} - name: RightHandThumb2 - position: {x: .0163738634, y: -.00529022701, z: .0234914869} - rotation: {x: -.0260586143, y: -.0966913998, z: -.00361187197, w: .994966626} - scale: {x: .999999881, y: 1, z: 1} - transformModified: 1 + parentName: + position: {x: 0.016373863, y: -0.005290227, z: 0.023491487} + rotation: {x: -0.026058614, y: -0.0966914, z: -0.003611872, w: 0.9949666} + scale: {x: 0.9999999, y: 1, z: 1} - name: RightHandThumb3 - position: {x: .0254600979, y: -.00763982628, z: .0208329968} - rotation: {x: 2.29152075e-08, y: 4.65800554e-08, z: -4.59895189e-09, w: .99999994} - scale: {x: 1.00000024, y: .999999821, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + parentName: + position: {x: 0.025460098, y: -0.0076398263, z: 0.020832997} + rotation: {x: 0.000000022915208, y: 0.000000046580055, z: -0.000000004598952, + w: 0.99999994} + scale: {x: 1.0000002, y: 0.9999998, z: 1} + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta index c96cd7d8f..64095f575 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta @@ -1,506 +1,1478 @@ fileFormatVersion: 2 guid: dffa50cfe77e0434bbfa71245b3dd529 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: Chest - 100002: chestProxy_geo - 100004: //RootNode - 100006: Head - 100008: headProxy_geo - 100010: HeadTop_End - 100012: Hips - 100014: Jaw - 100016: JawEND - 100018: jawProxy_geo - 100020: l_ankleProxy_geo - 100022: l_ballProxy_geo - 100024: l_clavicleProxy_geo - 100026: l_erbowProxy_geo - 100028: l_hipProxy_geo - 100030: l_indexProxy_01_geo - 100032: l_indexProxy_02_geo - 100034: l_indexProxy_03_geo - 100036: l_kneeProxy_geo - 100038: l_middleProxy_01_geo - 100040: l_middleProxy_02_geo - 100042: l_middleProxy_03_geo - 100044: l_pinkyProxy_01_geo - 100046: l_pinkyProxy_02_geo - 100048: l_pinkyProxy_03_geo - 100050: l_ringProxy_01_geo - 100052: l_ringProxy_02_geo - 100054: l_ringProxy_03_geo - 100056: l_shourderProxy_geo - 100058: l_thumbProxy_01_geo - 100060: l_thumbProxy_02_geo - 100062: l_thumbProxy_03_geo - 100064: l_UNI_eye - 100066: l_wristProxy_geo - 100068: LeftArm - 100070: LeftCheek - 100072: LeftEye - 100074: LeftEyelidLower - 100076: LeftEyelidUpper - 100078: LeftFoot - 100080: LeftForeArm - 100082: LeftHand - 100084: LeftHandIndex1 - 100086: LeftHandIndex13 - 100088: LeftHandIndex17 - 100090: LeftHandIndex2 - 100092: LeftHandIndex3 - 100094: LeftHandMiddle1 - 100096: LeftHandMiddle13 - 100098: LeftHandMiddle17 - 100100: LeftHandMiddle2 - 100102: LeftHandMiddle3 - 100104: LeftHandPinky1 - 100106: LeftHandPinky13 - 100108: LeftHandPinky17 - 100110: LeftHandPinky2 - 100112: LeftHandPinky3 - 100114: LeftHandRing1 - 100116: LeftHandRing13 - 100118: LeftHandRing17 - 100120: LeftHandRing2 - 100122: LeftHandRing3 - 100124: LeftHandThumb1 - 100126: LeftHandThumb13 - 100128: LeftHandThumb17 - 100130: LeftHandThumb2 - 100132: LeftHandThumb3 - 100134: LeftInnerBrow - 100136: LeftIOuterBrow - 100138: LeftLeg - 100140: LeftLipCorner - 100142: LeftLipLower - 100144: LeftLipUpper - 100146: LeftNostril - 100148: LeftShoulder - 100150: LeftToes - 100152: LeftUpLeg - 100154: LToeBase_End2 - 100156: LToeBase_End3 - 100158: Neck - 100160: neckProxy_geo - 100162: pelvisProxy_geo - 100164: Pivot - 100166: r_ankleProxy_geo - 100168: r_ballProxy_geo - 100170: r_clavicleProxy_geo - 100172: r_erbowProxy_geo - 100174: r_hipProxy_geo - 100176: r_indexProxy_01_geo - 100178: r_indexProxy_02_geo - 100180: r_indexProxy_03_geo - 100182: r_kneeProxy_geo - 100184: r_middleProxy_01_geo - 100186: r_middleProxy_02_geo - 100188: r_middleProxy_03_geo - 100190: r_pinkyProxy_01_geo - 100192: r_pinkyProxy_02_geo - 100194: r_pinkyProxy_03_geo - 100196: r_ringProxy_01_geo - 100198: r_ringProxy_02_geo - 100200: r_ringProxy_03_geo - 100202: r_shourderProxy_geo - 100204: r_thumbProxy_01_geo - 100206: r_thumbProxy_02_geo - 100208: r_thumbProxy_03_geo - 100210: r_UNI_eye - 100212: r_wristProxy_geo - 100214: Reference - 100216: RightArm - 100218: RightCheek - 100220: RightEye - 100222: RightEyelidLower - 100224: RightEyelidUpper - 100226: RightFoot - 100228: RightForeArm - 100230: RightHand - 100232: RightHandIndex1 - 100234: RightHandIndex2 - 100236: RightHandIndex3 - 100238: RightHandMiddle1 - 100240: RightHandMiddle2 - 100242: RightHandMiddle3 - 100244: RightHandPinky1 - 100246: RightHandPinky2 - 100248: RightHandPinky3 - 100250: RightHandRing1 - 100252: RightHandRing2 - 100254: RightHandRing3 - 100256: RightHandThumb1 - 100258: RightHandThumb2 - 100260: RightHandThumb3 - 100262: RightInnerBrow - 100264: RightIOuterBrow - 100266: RightLeg - 100268: RightLipCorner - 100270: RightLipLower - 100272: RightLipUpper - 100274: RightNostril - 100276: RightShoulder - 100278: RightToes - 100280: RightUpLeg - 100282: Root - 100284: Spine - 100286: spineProxy_geo - 100288: TongueBack - 100290: TongueTip - 100292: UNI_01_Lower_teethProxy - 100294: UNI_01_TongueBaseProxy - 100296: UNI_01_TongueTipProxy - 100298: UNI_01_Upper_teethProxy - 400000: Chest - 400002: chestProxy_geo - 400004: //RootNode - 400006: Head - 400008: headProxy_geo - 400010: HeadTop_End - 400012: Hips - 400014: Jaw - 400016: JawEND - 400018: jawProxy_geo - 400020: l_ankleProxy_geo - 400022: l_ballProxy_geo - 400024: l_clavicleProxy_geo - 400026: l_erbowProxy_geo - 400028: l_hipProxy_geo - 400030: l_indexProxy_01_geo - 400032: l_indexProxy_02_geo - 400034: l_indexProxy_03_geo - 400036: l_kneeProxy_geo - 400038: l_middleProxy_01_geo - 400040: l_middleProxy_02_geo - 400042: l_middleProxy_03_geo - 400044: l_pinkyProxy_01_geo - 400046: l_pinkyProxy_02_geo - 400048: l_pinkyProxy_03_geo - 400050: l_ringProxy_01_geo - 400052: l_ringProxy_02_geo - 400054: l_ringProxy_03_geo - 400056: l_shourderProxy_geo - 400058: l_thumbProxy_01_geo - 400060: l_thumbProxy_02_geo - 400062: l_thumbProxy_03_geo - 400064: l_UNI_eye - 400066: l_wristProxy_geo - 400068: LeftArm - 400070: LeftCheek - 400072: LeftEye - 400074: LeftEyelidLower - 400076: LeftEyelidUpper - 400078: LeftFoot - 400080: LeftForeArm - 400082: LeftHand - 400084: LeftHandIndex1 - 400086: LeftHandIndex13 - 400088: LeftHandIndex17 - 400090: LeftHandIndex2 - 400092: LeftHandIndex3 - 400094: LeftHandMiddle1 - 400096: LeftHandMiddle13 - 400098: LeftHandMiddle17 - 400100: LeftHandMiddle2 - 400102: LeftHandMiddle3 - 400104: LeftHandPinky1 - 400106: LeftHandPinky13 - 400108: LeftHandPinky17 - 400110: LeftHandPinky2 - 400112: LeftHandPinky3 - 400114: LeftHandRing1 - 400116: LeftHandRing13 - 400118: LeftHandRing17 - 400120: LeftHandRing2 - 400122: LeftHandRing3 - 400124: LeftHandThumb1 - 400126: LeftHandThumb13 - 400128: LeftHandThumb17 - 400130: LeftHandThumb2 - 400132: LeftHandThumb3 - 400134: LeftInnerBrow - 400136: LeftIOuterBrow - 400138: LeftLeg - 400140: LeftLipCorner - 400142: LeftLipLower - 400144: LeftLipUpper - 400146: LeftNostril - 400148: LeftShoulder - 400150: LeftToes - 400152: LeftUpLeg - 400154: LToeBase_End2 - 400156: LToeBase_End3 - 400158: Neck - 400160: neckProxy_geo - 400162: pelvisProxy_geo - 400164: Pivot - 400166: r_ankleProxy_geo - 400168: r_ballProxy_geo - 400170: r_clavicleProxy_geo - 400172: r_erbowProxy_geo - 400174: r_hipProxy_geo - 400176: r_indexProxy_01_geo - 400178: r_indexProxy_02_geo - 400180: r_indexProxy_03_geo - 400182: r_kneeProxy_geo - 400184: r_middleProxy_01_geo - 400186: r_middleProxy_02_geo - 400188: r_middleProxy_03_geo - 400190: r_pinkyProxy_01_geo - 400192: r_pinkyProxy_02_geo - 400194: r_pinkyProxy_03_geo - 400196: r_ringProxy_01_geo - 400198: r_ringProxy_02_geo - 400200: r_ringProxy_03_geo - 400202: r_shourderProxy_geo - 400204: r_thumbProxy_01_geo - 400206: r_thumbProxy_02_geo - 400208: r_thumbProxy_03_geo - 400210: r_UNI_eye - 400212: r_wristProxy_geo - 400214: Reference - 400216: RightArm - 400218: RightCheek - 400220: RightEye - 400222: RightEyelidLower - 400224: RightEyelidUpper - 400226: RightFoot - 400228: RightForeArm - 400230: RightHand - 400232: RightHandIndex1 - 400234: RightHandIndex2 - 400236: RightHandIndex3 - 400238: RightHandMiddle1 - 400240: RightHandMiddle2 - 400242: RightHandMiddle3 - 400244: RightHandPinky1 - 400246: RightHandPinky2 - 400248: RightHandPinky3 - 400250: RightHandRing1 - 400252: RightHandRing2 - 400254: RightHandRing3 - 400256: RightHandThumb1 - 400258: RightHandThumb2 - 400260: RightHandThumb3 - 400262: RightInnerBrow - 400264: RightIOuterBrow - 400266: RightLeg - 400268: RightLipCorner - 400270: RightLipLower - 400272: RightLipUpper - 400274: RightNostril - 400276: RightShoulder - 400278: RightToes - 400280: RightUpLeg - 400282: Root - 400284: Spine - 400286: spineProxy_geo - 400288: TongueBack - 400290: TongueTip - 400292: UNI_01_Lower_teethProxy - 400294: UNI_01_TongueBaseProxy - 400296: UNI_01_TongueTipProxy - 400298: UNI_01_Upper_teethProxy - 2300000: chestProxy_geo - 2300002: headProxy_geo - 2300004: jawProxy_geo - 2300006: l_ankleProxy_geo - 2300008: l_ballProxy_geo - 2300010: l_clavicleProxy_geo - 2300012: l_erbowProxy_geo - 2300014: l_hipProxy_geo - 2300016: l_indexProxy_01_geo - 2300018: l_indexProxy_02_geo - 2300020: l_indexProxy_03_geo - 2300022: l_kneeProxy_geo - 2300024: l_middleProxy_01_geo - 2300026: l_middleProxy_02_geo - 2300028: l_middleProxy_03_geo - 2300030: l_pinkyProxy_01_geo - 2300032: l_pinkyProxy_02_geo - 2300034: l_pinkyProxy_03_geo - 2300036: l_ringProxy_01_geo - 2300038: l_ringProxy_02_geo - 2300040: l_ringProxy_03_geo - 2300042: l_shourderProxy_geo - 2300044: l_thumbProxy_01_geo - 2300046: l_thumbProxy_02_geo - 2300048: l_thumbProxy_03_geo - 2300050: l_UNI_eye - 2300052: l_wristProxy_geo - 2300054: neckProxy_geo - 2300056: pelvisProxy_geo - 2300058: r_ankleProxy_geo - 2300060: r_ballProxy_geo - 2300062: r_clavicleProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_hipProxy_geo - 2300068: r_indexProxy_01_geo - 2300070: r_indexProxy_02_geo - 2300072: r_indexProxy_03_geo - 2300074: r_kneeProxy_geo - 2300076: r_middleProxy_01_geo - 2300078: r_middleProxy_02_geo - 2300080: r_middleProxy_03_geo - 2300082: r_pinkyProxy_01_geo - 2300084: r_pinkyProxy_02_geo - 2300086: r_pinkyProxy_03_geo - 2300088: r_ringProxy_01_geo - 2300090: r_ringProxy_02_geo - 2300092: r_ringProxy_03_geo - 2300094: r_shourderProxy_geo - 2300096: r_thumbProxy_01_geo - 2300098: r_thumbProxy_02_geo - 2300100: r_thumbProxy_03_geo - 2300102: r_UNI_eye - 2300104: r_wristProxy_geo - 2300106: spineProxy_geo - 2300108: UNI_01_Lower_teethProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: UNI_01_TongueTipProxy - 2300114: UNI_01_Upper_teethProxy - 3300000: chestProxy_geo - 3300002: headProxy_geo - 3300004: jawProxy_geo - 3300006: l_ankleProxy_geo - 3300008: l_ballProxy_geo - 3300010: l_clavicleProxy_geo - 3300012: l_erbowProxy_geo - 3300014: l_hipProxy_geo - 3300016: l_indexProxy_01_geo - 3300018: l_indexProxy_02_geo - 3300020: l_indexProxy_03_geo - 3300022: l_kneeProxy_geo - 3300024: l_middleProxy_01_geo - 3300026: l_middleProxy_02_geo - 3300028: l_middleProxy_03_geo - 3300030: l_pinkyProxy_01_geo - 3300032: l_pinkyProxy_02_geo - 3300034: l_pinkyProxy_03_geo - 3300036: l_ringProxy_01_geo - 3300038: l_ringProxy_02_geo - 3300040: l_ringProxy_03_geo - 3300042: l_shourderProxy_geo - 3300044: l_thumbProxy_01_geo - 3300046: l_thumbProxy_02_geo - 3300048: l_thumbProxy_03_geo - 3300050: l_UNI_eye - 3300052: l_wristProxy_geo - 3300054: neckProxy_geo - 3300056: pelvisProxy_geo - 3300058: r_ankleProxy_geo - 3300060: r_ballProxy_geo - 3300062: r_clavicleProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_hipProxy_geo - 3300068: r_indexProxy_01_geo - 3300070: r_indexProxy_02_geo - 3300072: r_indexProxy_03_geo - 3300074: r_kneeProxy_geo - 3300076: r_middleProxy_01_geo - 3300078: r_middleProxy_02_geo - 3300080: r_middleProxy_03_geo - 3300082: r_pinkyProxy_01_geo - 3300084: r_pinkyProxy_02_geo - 3300086: r_pinkyProxy_03_geo - 3300088: r_ringProxy_01_geo - 3300090: r_ringProxy_02_geo - 3300092: r_ringProxy_03_geo - 3300094: r_shourderProxy_geo - 3300096: r_thumbProxy_01_geo - 3300098: r_thumbProxy_02_geo - 3300100: r_thumbProxy_03_geo - 3300102: r_UNI_eye - 3300104: r_wristProxy_geo - 3300106: spineProxy_geo - 3300108: UNI_01_Lower_teethProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: UNI_01_TongueTipProxy - 3300114: UNI_01_Upper_teethProxy - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: HumanoidIdle - 7400002: Idle_Glance - 9500000: //RootNode - 11100000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Chest + - first: + 1: 100002 + second: chestProxy_geo + - first: + 1: 100004 + second: //RootNode + - first: + 1: 100006 + second: Head + - first: + 1: 100008 + second: headProxy_geo + - first: + 1: 100010 + second: HeadTop_End + - first: + 1: 100012 + second: Hips + - first: + 1: 100014 + second: Jaw + - first: + 1: 100016 + second: JawEND + - first: + 1: 100018 + second: jawProxy_geo + - first: + 1: 100020 + second: l_ankleProxy_geo + - first: + 1: 100022 + second: l_ballProxy_geo + - first: + 1: 100024 + second: l_clavicleProxy_geo + - first: + 1: 100026 + second: l_erbowProxy_geo + - first: + 1: 100028 + second: l_hipProxy_geo + - first: + 1: 100030 + second: l_indexProxy_01_geo + - first: + 1: 100032 + second: l_indexProxy_02_geo + - first: + 1: 100034 + second: l_indexProxy_03_geo + - first: + 1: 100036 + second: l_kneeProxy_geo + - first: + 1: 100038 + second: l_middleProxy_01_geo + - first: + 1: 100040 + second: l_middleProxy_02_geo + - first: + 1: 100042 + second: l_middleProxy_03_geo + - first: + 1: 100044 + second: l_pinkyProxy_01_geo + - first: + 1: 100046 + second: l_pinkyProxy_02_geo + - first: + 1: 100048 + second: l_pinkyProxy_03_geo + - first: + 1: 100050 + second: l_ringProxy_01_geo + - first: + 1: 100052 + second: l_ringProxy_02_geo + - first: + 1: 100054 + second: l_ringProxy_03_geo + - first: + 1: 100056 + second: l_shourderProxy_geo + - first: + 1: 100058 + second: l_thumbProxy_01_geo + - first: + 1: 100060 + second: l_thumbProxy_02_geo + - first: + 1: 100062 + second: l_thumbProxy_03_geo + - first: + 1: 100064 + second: l_UNI_eye + - first: + 1: 100066 + second: l_wristProxy_geo + - first: + 1: 100068 + second: LeftArm + - first: + 1: 100070 + second: LeftCheek + - first: + 1: 100072 + second: LeftEye + - first: + 1: 100074 + second: LeftEyelidLower + - first: + 1: 100076 + second: LeftEyelidUpper + - first: + 1: 100078 + second: LeftFoot + - first: + 1: 100080 + second: LeftForeArm + - first: + 1: 100082 + second: LeftHand + - first: + 1: 100084 + second: LeftHandIndex1 + - first: + 1: 100086 + second: LeftHandIndex13 + - first: + 1: 100088 + second: LeftHandIndex17 + - first: + 1: 100090 + second: LeftHandIndex2 + - first: + 1: 100092 + second: LeftHandIndex3 + - first: + 1: 100094 + second: LeftHandMiddle1 + - first: + 1: 100096 + second: LeftHandMiddle13 + - first: + 1: 100098 + second: LeftHandMiddle17 + - first: + 1: 100100 + second: LeftHandMiddle2 + - first: + 1: 100102 + second: LeftHandMiddle3 + - first: + 1: 100104 + second: LeftHandPinky1 + - first: + 1: 100106 + second: LeftHandPinky13 + - first: + 1: 100108 + second: LeftHandPinky17 + - first: + 1: 100110 + second: LeftHandPinky2 + - first: + 1: 100112 + second: LeftHandPinky3 + - first: + 1: 100114 + second: LeftHandRing1 + - first: + 1: 100116 + second: LeftHandRing13 + - first: + 1: 100118 + second: LeftHandRing17 + - first: + 1: 100120 + second: LeftHandRing2 + - first: + 1: 100122 + second: LeftHandRing3 + - first: + 1: 100124 + second: LeftHandThumb1 + - first: + 1: 100126 + second: LeftHandThumb13 + - first: + 1: 100128 + second: LeftHandThumb17 + - first: + 1: 100130 + second: LeftHandThumb2 + - first: + 1: 100132 + second: LeftHandThumb3 + - first: + 1: 100134 + second: LeftInnerBrow + - first: + 1: 100136 + second: LeftIOuterBrow + - first: + 1: 100138 + second: LeftLeg + - first: + 1: 100140 + second: LeftLipCorner + - first: + 1: 100142 + second: LeftLipLower + - first: + 1: 100144 + second: LeftLipUpper + - first: + 1: 100146 + second: LeftNostril + - first: + 1: 100148 + second: LeftShoulder + - first: + 1: 100150 + second: LeftToes + - first: + 1: 100152 + second: LeftUpLeg + - first: + 1: 100154 + second: LToeBase_End2 + - first: + 1: 100156 + second: LToeBase_End3 + - first: + 1: 100158 + second: Neck + - first: + 1: 100160 + second: neckProxy_geo + - first: + 1: 100162 + second: pelvisProxy_geo + - first: + 1: 100164 + second: Pivot + - first: + 1: 100166 + second: r_ankleProxy_geo + - first: + 1: 100168 + second: r_ballProxy_geo + - first: + 1: 100170 + second: r_clavicleProxy_geo + - first: + 1: 100172 + second: r_erbowProxy_geo + - first: + 1: 100174 + second: r_hipProxy_geo + - first: + 1: 100176 + second: r_indexProxy_01_geo + - first: + 1: 100178 + second: r_indexProxy_02_geo + - first: + 1: 100180 + second: r_indexProxy_03_geo + - first: + 1: 100182 + second: r_kneeProxy_geo + - first: + 1: 100184 + second: r_middleProxy_01_geo + - first: + 1: 100186 + second: r_middleProxy_02_geo + - first: + 1: 100188 + second: r_middleProxy_03_geo + - first: + 1: 100190 + second: r_pinkyProxy_01_geo + - first: + 1: 100192 + second: r_pinkyProxy_02_geo + - first: + 1: 100194 + second: r_pinkyProxy_03_geo + - first: + 1: 100196 + second: r_ringProxy_01_geo + - first: + 1: 100198 + second: r_ringProxy_02_geo + - first: + 1: 100200 + second: r_ringProxy_03_geo + - first: + 1: 100202 + second: r_shourderProxy_geo + - first: + 1: 100204 + second: r_thumbProxy_01_geo + - first: + 1: 100206 + second: r_thumbProxy_02_geo + - first: + 1: 100208 + second: r_thumbProxy_03_geo + - first: + 1: 100210 + second: r_UNI_eye + - first: + 1: 100212 + second: r_wristProxy_geo + - first: + 1: 100214 + second: Reference + - first: + 1: 100216 + second: RightArm + - first: + 1: 100218 + second: RightCheek + - first: + 1: 100220 + second: RightEye + - first: + 1: 100222 + second: RightEyelidLower + - first: + 1: 100224 + second: RightEyelidUpper + - first: + 1: 100226 + second: RightFoot + - first: + 1: 100228 + second: RightForeArm + - first: + 1: 100230 + second: RightHand + - first: + 1: 100232 + second: RightHandIndex1 + - first: + 1: 100234 + second: RightHandIndex2 + - first: + 1: 100236 + second: RightHandIndex3 + - first: + 1: 100238 + second: RightHandMiddle1 + - first: + 1: 100240 + second: RightHandMiddle2 + - first: + 1: 100242 + second: RightHandMiddle3 + - first: + 1: 100244 + second: RightHandPinky1 + - first: + 1: 100246 + second: RightHandPinky2 + - first: + 1: 100248 + second: RightHandPinky3 + - first: + 1: 100250 + second: RightHandRing1 + - first: + 1: 100252 + second: RightHandRing2 + - first: + 1: 100254 + second: RightHandRing3 + - first: + 1: 100256 + second: RightHandThumb1 + - first: + 1: 100258 + second: RightHandThumb2 + - first: + 1: 100260 + second: RightHandThumb3 + - first: + 1: 100262 + second: RightInnerBrow + - first: + 1: 100264 + second: RightIOuterBrow + - first: + 1: 100266 + second: RightLeg + - first: + 1: 100268 + second: RightLipCorner + - first: + 1: 100270 + second: RightLipLower + - first: + 1: 100272 + second: RightLipUpper + - first: + 1: 100274 + second: RightNostril + - first: + 1: 100276 + second: RightShoulder + - first: + 1: 100278 + second: RightToes + - first: + 1: 100280 + second: RightUpLeg + - first: + 1: 100282 + second: Root + - first: + 1: 100284 + second: Spine + - first: + 1: 100286 + second: spineProxy_geo + - first: + 1: 100288 + second: TongueBack + - first: + 1: 100290 + second: TongueTip + - first: + 1: 100292 + second: UNI_01_Lower_teethProxy + - first: + 1: 100294 + second: UNI_01_TongueBaseProxy + - first: + 1: 100296 + second: UNI_01_TongueTipProxy + - first: + 1: 100298 + second: UNI_01_Upper_teethProxy + - first: + 4: 400000 + second: Chest + - first: + 4: 400002 + second: chestProxy_geo + - first: + 4: 400004 + second: //RootNode + - first: + 4: 400006 + second: Head + - first: + 4: 400008 + second: headProxy_geo + - first: + 4: 400010 + second: HeadTop_End + - first: + 4: 400012 + second: Hips + - first: + 4: 400014 + second: Jaw + - first: + 4: 400016 + second: JawEND + - first: + 4: 400018 + second: jawProxy_geo + - first: + 4: 400020 + second: l_ankleProxy_geo + - first: + 4: 400022 + second: l_ballProxy_geo + - first: + 4: 400024 + second: l_clavicleProxy_geo + - first: + 4: 400026 + second: l_erbowProxy_geo + - first: + 4: 400028 + second: l_hipProxy_geo + - first: + 4: 400030 + second: l_indexProxy_01_geo + - first: + 4: 400032 + second: l_indexProxy_02_geo + - first: + 4: 400034 + second: l_indexProxy_03_geo + - first: + 4: 400036 + second: l_kneeProxy_geo + - first: + 4: 400038 + second: l_middleProxy_01_geo + - first: + 4: 400040 + second: l_middleProxy_02_geo + - first: + 4: 400042 + second: l_middleProxy_03_geo + - first: + 4: 400044 + second: l_pinkyProxy_01_geo + - first: + 4: 400046 + second: l_pinkyProxy_02_geo + - first: + 4: 400048 + second: l_pinkyProxy_03_geo + - first: + 4: 400050 + second: l_ringProxy_01_geo + - first: + 4: 400052 + second: l_ringProxy_02_geo + - first: + 4: 400054 + second: l_ringProxy_03_geo + - first: + 4: 400056 + second: l_shourderProxy_geo + - first: + 4: 400058 + second: l_thumbProxy_01_geo + - first: + 4: 400060 + second: l_thumbProxy_02_geo + - first: + 4: 400062 + second: l_thumbProxy_03_geo + - first: + 4: 400064 + second: l_UNI_eye + - first: + 4: 400066 + second: l_wristProxy_geo + - first: + 4: 400068 + second: LeftArm + - first: + 4: 400070 + second: LeftCheek + - first: + 4: 400072 + second: LeftEye + - first: + 4: 400074 + second: LeftEyelidLower + - first: + 4: 400076 + second: LeftEyelidUpper + - first: + 4: 400078 + second: LeftFoot + - first: + 4: 400080 + second: LeftForeArm + - first: + 4: 400082 + second: LeftHand + - first: + 4: 400084 + second: LeftHandIndex1 + - first: + 4: 400086 + second: LeftHandIndex13 + - first: + 4: 400088 + second: LeftHandIndex17 + - first: + 4: 400090 + second: LeftHandIndex2 + - first: + 4: 400092 + second: LeftHandIndex3 + - first: + 4: 400094 + second: LeftHandMiddle1 + - first: + 4: 400096 + second: LeftHandMiddle13 + - first: + 4: 400098 + second: LeftHandMiddle17 + - first: + 4: 400100 + second: LeftHandMiddle2 + - first: + 4: 400102 + second: LeftHandMiddle3 + - first: + 4: 400104 + second: LeftHandPinky1 + - first: + 4: 400106 + second: LeftHandPinky13 + - first: + 4: 400108 + second: LeftHandPinky17 + - first: + 4: 400110 + second: LeftHandPinky2 + - first: + 4: 400112 + second: LeftHandPinky3 + - first: + 4: 400114 + second: LeftHandRing1 + - first: + 4: 400116 + second: LeftHandRing13 + - first: + 4: 400118 + second: LeftHandRing17 + - first: + 4: 400120 + second: LeftHandRing2 + - first: + 4: 400122 + second: LeftHandRing3 + - first: + 4: 400124 + second: LeftHandThumb1 + - first: + 4: 400126 + second: LeftHandThumb13 + - first: + 4: 400128 + second: LeftHandThumb17 + - first: + 4: 400130 + second: LeftHandThumb2 + - first: + 4: 400132 + second: LeftHandThumb3 + - first: + 4: 400134 + second: LeftInnerBrow + - first: + 4: 400136 + second: LeftIOuterBrow + - first: + 4: 400138 + second: LeftLeg + - first: + 4: 400140 + second: LeftLipCorner + - first: + 4: 400142 + second: LeftLipLower + - first: + 4: 400144 + second: LeftLipUpper + - first: + 4: 400146 + second: LeftNostril + - first: + 4: 400148 + second: LeftShoulder + - first: + 4: 400150 + second: LeftToes + - first: + 4: 400152 + second: LeftUpLeg + - first: + 4: 400154 + second: LToeBase_End2 + - first: + 4: 400156 + second: LToeBase_End3 + - first: + 4: 400158 + second: Neck + - first: + 4: 400160 + second: neckProxy_geo + - first: + 4: 400162 + second: pelvisProxy_geo + - first: + 4: 400164 + second: Pivot + - first: + 4: 400166 + second: r_ankleProxy_geo + - first: + 4: 400168 + second: r_ballProxy_geo + - first: + 4: 400170 + second: r_clavicleProxy_geo + - first: + 4: 400172 + second: r_erbowProxy_geo + - first: + 4: 400174 + second: r_hipProxy_geo + - first: + 4: 400176 + second: r_indexProxy_01_geo + - first: + 4: 400178 + second: r_indexProxy_02_geo + - first: + 4: 400180 + second: r_indexProxy_03_geo + - first: + 4: 400182 + second: r_kneeProxy_geo + - first: + 4: 400184 + second: r_middleProxy_01_geo + - first: + 4: 400186 + second: r_middleProxy_02_geo + - first: + 4: 400188 + second: r_middleProxy_03_geo + - first: + 4: 400190 + second: r_pinkyProxy_01_geo + - first: + 4: 400192 + second: r_pinkyProxy_02_geo + - first: + 4: 400194 + second: r_pinkyProxy_03_geo + - first: + 4: 400196 + second: r_ringProxy_01_geo + - first: + 4: 400198 + second: r_ringProxy_02_geo + - first: + 4: 400200 + second: r_ringProxy_03_geo + - first: + 4: 400202 + second: r_shourderProxy_geo + - first: + 4: 400204 + second: r_thumbProxy_01_geo + - first: + 4: 400206 + second: r_thumbProxy_02_geo + - first: + 4: 400208 + second: r_thumbProxy_03_geo + - first: + 4: 400210 + second: r_UNI_eye + - first: + 4: 400212 + second: r_wristProxy_geo + - first: + 4: 400214 + second: Reference + - first: + 4: 400216 + second: RightArm + - first: + 4: 400218 + second: RightCheek + - first: + 4: 400220 + second: RightEye + - first: + 4: 400222 + second: RightEyelidLower + - first: + 4: 400224 + second: RightEyelidUpper + - first: + 4: 400226 + second: RightFoot + - first: + 4: 400228 + second: RightForeArm + - first: + 4: 400230 + second: RightHand + - first: + 4: 400232 + second: RightHandIndex1 + - first: + 4: 400234 + second: RightHandIndex2 + - first: + 4: 400236 + second: RightHandIndex3 + - first: + 4: 400238 + second: RightHandMiddle1 + - first: + 4: 400240 + second: RightHandMiddle2 + - first: + 4: 400242 + second: RightHandMiddle3 + - first: + 4: 400244 + second: RightHandPinky1 + - first: + 4: 400246 + second: RightHandPinky2 + - first: + 4: 400248 + second: RightHandPinky3 + - first: + 4: 400250 + second: RightHandRing1 + - first: + 4: 400252 + second: RightHandRing2 + - first: + 4: 400254 + second: RightHandRing3 + - first: + 4: 400256 + second: RightHandThumb1 + - first: + 4: 400258 + second: RightHandThumb2 + - first: + 4: 400260 + second: RightHandThumb3 + - first: + 4: 400262 + second: RightInnerBrow + - first: + 4: 400264 + second: RightIOuterBrow + - first: + 4: 400266 + second: RightLeg + - first: + 4: 400268 + second: RightLipCorner + - first: + 4: 400270 + second: RightLipLower + - first: + 4: 400272 + second: RightLipUpper + - first: + 4: 400274 + second: RightNostril + - first: + 4: 400276 + second: RightShoulder + - first: + 4: 400278 + second: RightToes + - first: + 4: 400280 + second: RightUpLeg + - first: + 4: 400282 + second: Root + - first: + 4: 400284 + second: Spine + - first: + 4: 400286 + second: spineProxy_geo + - first: + 4: 400288 + second: TongueBack + - first: + 4: 400290 + second: TongueTip + - first: + 4: 400292 + second: UNI_01_Lower_teethProxy + - first: + 4: 400294 + second: UNI_01_TongueBaseProxy + - first: + 4: 400296 + second: UNI_01_TongueTipProxy + - first: + 4: 400298 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300000 + second: chestProxy_geo + - first: + 23: 2300002 + second: headProxy_geo + - first: + 23: 2300004 + second: jawProxy_geo + - first: + 23: 2300006 + second: l_ankleProxy_geo + - first: + 23: 2300008 + second: l_ballProxy_geo + - first: + 23: 2300010 + second: l_clavicleProxy_geo + - first: + 23: 2300012 + second: l_erbowProxy_geo + - first: + 23: 2300014 + second: l_hipProxy_geo + - first: + 23: 2300016 + second: l_indexProxy_01_geo + - first: + 23: 2300018 + second: l_indexProxy_02_geo + - first: + 23: 2300020 + second: l_indexProxy_03_geo + - first: + 23: 2300022 + second: l_kneeProxy_geo + - first: + 23: 2300024 + second: l_middleProxy_01_geo + - first: + 23: 2300026 + second: l_middleProxy_02_geo + - first: + 23: 2300028 + second: l_middleProxy_03_geo + - first: + 23: 2300030 + second: l_pinkyProxy_01_geo + - first: + 23: 2300032 + second: l_pinkyProxy_02_geo + - first: + 23: 2300034 + second: l_pinkyProxy_03_geo + - first: + 23: 2300036 + second: l_ringProxy_01_geo + - first: + 23: 2300038 + second: l_ringProxy_02_geo + - first: + 23: 2300040 + second: l_ringProxy_03_geo + - first: + 23: 2300042 + second: l_shourderProxy_geo + - first: + 23: 2300044 + second: l_thumbProxy_01_geo + - first: + 23: 2300046 + second: l_thumbProxy_02_geo + - first: + 23: 2300048 + second: l_thumbProxy_03_geo + - first: + 23: 2300050 + second: l_UNI_eye + - first: + 23: 2300052 + second: l_wristProxy_geo + - first: + 23: 2300054 + second: neckProxy_geo + - first: + 23: 2300056 + second: pelvisProxy_geo + - first: + 23: 2300058 + second: r_ankleProxy_geo + - first: + 23: 2300060 + second: r_ballProxy_geo + - first: + 23: 2300062 + second: r_clavicleProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_hipProxy_geo + - first: + 23: 2300068 + second: r_indexProxy_01_geo + - first: + 23: 2300070 + second: r_indexProxy_02_geo + - first: + 23: 2300072 + second: r_indexProxy_03_geo + - first: + 23: 2300074 + second: r_kneeProxy_geo + - first: + 23: 2300076 + second: r_middleProxy_01_geo + - first: + 23: 2300078 + second: r_middleProxy_02_geo + - first: + 23: 2300080 + second: r_middleProxy_03_geo + - first: + 23: 2300082 + second: r_pinkyProxy_01_geo + - first: + 23: 2300084 + second: r_pinkyProxy_02_geo + - first: + 23: 2300086 + second: r_pinkyProxy_03_geo + - first: + 23: 2300088 + second: r_ringProxy_01_geo + - first: + 23: 2300090 + second: r_ringProxy_02_geo + - first: + 23: 2300092 + second: r_ringProxy_03_geo + - first: + 23: 2300094 + second: r_shourderProxy_geo + - first: + 23: 2300096 + second: r_thumbProxy_01_geo + - first: + 23: 2300098 + second: r_thumbProxy_02_geo + - first: + 23: 2300100 + second: r_thumbProxy_03_geo + - first: + 23: 2300102 + second: r_UNI_eye + - first: + 23: 2300104 + second: r_wristProxy_geo + - first: + 23: 2300106 + second: spineProxy_geo + - first: + 23: 2300108 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: UNI_01_TongueTipProxy + - first: + 23: 2300114 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300000 + second: chestProxy_geo + - first: + 33: 3300002 + second: headProxy_geo + - first: + 33: 3300004 + second: jawProxy_geo + - first: + 33: 3300006 + second: l_ankleProxy_geo + - first: + 33: 3300008 + second: l_ballProxy_geo + - first: + 33: 3300010 + second: l_clavicleProxy_geo + - first: + 33: 3300012 + second: l_erbowProxy_geo + - first: + 33: 3300014 + second: l_hipProxy_geo + - first: + 33: 3300016 + second: l_indexProxy_01_geo + - first: + 33: 3300018 + second: l_indexProxy_02_geo + - first: + 33: 3300020 + second: l_indexProxy_03_geo + - first: + 33: 3300022 + second: l_kneeProxy_geo + - first: + 33: 3300024 + second: l_middleProxy_01_geo + - first: + 33: 3300026 + second: l_middleProxy_02_geo + - first: + 33: 3300028 + second: l_middleProxy_03_geo + - first: + 33: 3300030 + second: l_pinkyProxy_01_geo + - first: + 33: 3300032 + second: l_pinkyProxy_02_geo + - first: + 33: 3300034 + second: l_pinkyProxy_03_geo + - first: + 33: 3300036 + second: l_ringProxy_01_geo + - first: + 33: 3300038 + second: l_ringProxy_02_geo + - first: + 33: 3300040 + second: l_ringProxy_03_geo + - first: + 33: 3300042 + second: l_shourderProxy_geo + - first: + 33: 3300044 + second: l_thumbProxy_01_geo + - first: + 33: 3300046 + second: l_thumbProxy_02_geo + - first: + 33: 3300048 + second: l_thumbProxy_03_geo + - first: + 33: 3300050 + second: l_UNI_eye + - first: + 33: 3300052 + second: l_wristProxy_geo + - first: + 33: 3300054 + second: neckProxy_geo + - first: + 33: 3300056 + second: pelvisProxy_geo + - first: + 33: 3300058 + second: r_ankleProxy_geo + - first: + 33: 3300060 + second: r_ballProxy_geo + - first: + 33: 3300062 + second: r_clavicleProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_hipProxy_geo + - first: + 33: 3300068 + second: r_indexProxy_01_geo + - first: + 33: 3300070 + second: r_indexProxy_02_geo + - first: + 33: 3300072 + second: r_indexProxy_03_geo + - first: + 33: 3300074 + second: r_kneeProxy_geo + - first: + 33: 3300076 + second: r_middleProxy_01_geo + - first: + 33: 3300078 + second: r_middleProxy_02_geo + - first: + 33: 3300080 + second: r_middleProxy_03_geo + - first: + 33: 3300082 + second: r_pinkyProxy_01_geo + - first: + 33: 3300084 + second: r_pinkyProxy_02_geo + - first: + 33: 3300086 + second: r_pinkyProxy_03_geo + - first: + 33: 3300088 + second: r_ringProxy_01_geo + - first: + 33: 3300090 + second: r_ringProxy_02_geo + - first: + 33: 3300092 + second: r_ringProxy_03_geo + - first: + 33: 3300094 + second: r_shourderProxy_geo + - first: + 33: 3300096 + second: r_thumbProxy_01_geo + - first: + 33: 3300098 + second: r_thumbProxy_02_geo + - first: + 33: 3300100 + second: r_thumbProxy_03_geo + - first: + 33: 3300102 + second: r_UNI_eye + - first: + 33: 3300104 + second: r_wristProxy_geo + - first: + 33: 3300106 + second: spineProxy_geo + - first: + 33: 3300108 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: UNI_01_TongueTipProxy + - first: + 33: 3300114 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: HumanoidIdle + - first: + 74: 7400002 + second: Idle_Glance + - first: + 95: 9500000 + second: //RootNode + - first: + 111: 11100000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidIdle takeName: _87_a_U1_M_P_idle_Neutral__Fb_p0_No_1 + internalID: 0 firstFrame: 445 lastFrame: 517 wrapMode: 0 @@ -508,6 +1480,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 1 @@ -524,18 +1497,31 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -543,12 +1529,16 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -984,396 +1974,403 @@ ModelImporter: modified: 0 skeleton: - name: Idle(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: 0, y: .960555851, z: 0} + parentName: + position: {x: 0, y: 0.96055585, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg - position: {x: -.0754494965, y: -.0456640199, z: 0} + parentName: + position: {x: -0.0754495, y: -0.04566402, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg - position: {x: -.0205504987, y: -.409129977, z: -.000718647963} + parentName: + position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot - position: {x: -.00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes - position: {x: -.00748699997, y: -.0731673017, z: .145427123} + parentName: + position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg - position: {x: .0754495338, y: -.0456639901, z: 0} + parentName: + position: {x: 0.075449534, y: -0.04566399, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg - position: {x: .0205504671, y: -.409130007, z: -.000718647963} + parentName: + position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot - position: {x: .00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes - position: {x: .00748699997, y: -.0731673017, z: .145427495} + parentName: + position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine - position: {x: 2.6469779e-25, y: .0922631845, z: .0157713313} + parentName: + position: {x: 2.646978e-25, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest - position: {x: -0, y: .162540287, z: -.00165605545} + parentName: + position: {x: -0, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder - position: {x: -.0382859968, y: .221622497, z: -.017063085} - rotation: {x: -.0231816266, y: -.0412397236, z: .155462489, w: .986708343} + parentName: + position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} + rotation: {x: -0.023181627, y: -0.041239724, z: 0.15546249, w: 0.98670834} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm - position: {x: -.100502051, y: 5.68434176e-16, z: -3.330669e-18} - rotation: {x: .0886180326, y: .0276504513, z: -.142930597, w: .985369623} + parentName: + position: {x: -0.10050205, y: 5.684342e-16, z: -3.330669e-18} + rotation: {x: 0.08861803, y: 0.027650451, z: -0.1429306, w: 0.9853696} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm - position: {x: -.254049301, y: 5.68434176e-16, z: 1.11022296e-17} - rotation: {x: .124834061, y: .031358555, z: .00281256856, w: .99167794} + parentName: + position: {x: -0.2540493, y: 5.684342e-16, z: 1.11022296e-17} + rotation: {x: 0.12483406, y: 0.031358555, z: 0.0028125686, w: 0.99167794} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand - position: {x: -.24638927, y: 0, z: -1.99840139e-16} + parentName: + position: {x: -0.24638927, y: 0, z: -1.9984014e-16} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 - position: {x: -.0751257986, y: -.00784140453, z: .0326526426} - rotation: {x: .00608505122, y: -.0167607125, z: .0568631738, w: .998222768} + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: 0.006085051, y: -0.016760712, z: 0.056863174, w: 0.99822277} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 - position: {x: -.03979728, y: 4.98084046e-05, z: .00118575036} - rotation: {x: -.0674880594, y: .0152272331, z: .0327193551, w: .997067153} + parentName: + position: {x: -0.03979728, y: 0.000049808405, z: 0.0011857504} + rotation: {x: -0.06748806, y: 0.015227233, z: 0.032719355, w: 0.99706715} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 - position: {x: -.0279684775, y: -6.28122487e-09, z: -5.17186614e-08} + parentName: + position: {x: -0.027968477, y: -0.000000006281225, z: -0.00000005171866} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 - position: {x: -.0760238245, y: -.00188513438, z: .0101412293} - rotation: {x: -.00380875752, y: .0447872244, z: .0881900042, w: .995088995} + parentName: + position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} + rotation: {x: -0.0038087575, y: 0.044787224, z: 0.088190004, w: 0.995089} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 - position: {x: -.0442804359, y: 4.79887422e-06, z: -.000425400125} - rotation: {x: -.0125460858, y: -.00755280908, z: .0314764269, w: .999397218} + parentName: + position: {x: -0.044280436, y: 0.000004798874, z: -0.00042540013} + rotation: {x: -0.012546086, y: -0.007552809, z: 0.031476427, w: 0.9993972} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 - position: {x: -.0339648277, y: -1.21979289e-08, z: 3.75648268e-09} + parentName: + position: {x: -0.033964828, y: -0.000000012197929, z: 0.0000000037564827} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 - position: {x: -.0656599477, y: -.00782510638, z: -.0322512463} - rotation: {x: -.0661564544, y: .0816889778, z: .0931312442, w: .990089357} + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.066156454, y: 0.08168898, z: 0.093131244, w: 0.99008936} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 - position: {x: -.0308054481, y: -3.0874573e-05, z: -.0014480775} - rotation: {x: .0470220037, y: -.0211624149, z: .0376887321, w: .997958302} + parentName: + position: {x: -0.030805448, y: -0.000030874573, z: -0.0014480775} + rotation: {x: 0.047022004, y: -0.021162415, z: 0.037688732, w: 0.9979583} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 - position: {x: -.0230640266, y: -6.40258077e-06, z: 1.8332095e-08} + parentName: + position: {x: -0.023064027, y: -0.0000064025808, z: 0.000000018332095} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 - position: {x: -.0703021064, y: -.00374530931, z: -.0114117917} - rotation: {x: -.0202594865, y: .0722944736, z: .090059869, w: .993102431} + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: -0.020259487, y: 0.07229447, z: 0.09005987, w: 0.99310243} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 - position: {x: -.0431354567, y: -2.08823076e-05, z: -.00223517837} - rotation: {x: .018373603, y: -.0256185681, z: .0339712389, w: .998925507} + parentName: + position: {x: -0.043135457, y: -0.000020882308, z: -0.0022351784} + rotation: {x: 0.018373603, y: -0.025618568, z: 0.03397124, w: 0.9989255} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 - position: {x: -.0308355652, y: 7.71032613e-11, z: -1.64932707e-08} + parentName: + position: {x: -0.030835565, y: 7.710326e-11, z: -0.00000001649327} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 - position: {x: -.0142312413, y: -.0123778246, z: .0255316682} - rotation: {x: -.102060832, y: -.0509465337, z: -.102719858, w: .988148153} + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.10206083, y: -0.050946534, z: -0.10271986, w: 0.98814815} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 - position: {x: -.0163739994, y: -.00528999977, z: .0234914087} - rotation: {x: -.0260625444, y: .096688956, z: .00360701559, w: .994966805} + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.026062544, y: 0.096688956, z: 0.0036070156, w: 0.9949668} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 - position: {x: -.0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck - position: {x: -0, y: .259009302, z: -.0324132554} + parentName: + position: {x: -0, y: 0.2590093, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head - position: {x: -2.6469779e-25, y: .0830703825, z: .0113267815} + parentName: + position: {x: -2.646978e-25, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw - position: {x: 1.73472344e-20, y: .0111267585, z: .0103275431} - rotation: {x: .219240054, y: -0, z: -0, w: .975670993} + parentName: + position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} + rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND - position: {x: -1.73472344e-20, y: -.0482887588, z: .071851708} + parentName: + position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner - position: {x: -.032843262, y: -.01657876, z: .0661217645} + parentName: + position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower - position: {x: -.0142508168, y: -.0216887593, z: .0822406337} + parentName: + position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner - position: {x: .0328399986, y: -.01657876, z: .0661187842} + parentName: + position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower - position: {x: .0142508168, y: -.0216887593, z: .0822387859} + parentName: + position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack - position: {x: -1.73472344e-20, y: -.022869369, z: .0100954091} + parentName: + position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip - position: {x: -1.73472344e-20, y: -.0232788119, z: .0383227095} + parentName: + position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440265, y: .0337019488, z: .0594304018} + parentName: + position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye - position: {x: -.0208482333, y: .0825027004, z: .0554274321} + parentName: + position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower - position: {x: -.0356189571, y: .0650736615, z: .076234743} + parentName: + position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper - position: {x: -.0344068967, y: .10060814, z: .0802053064} + parentName: + position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow - position: {x: -.0120626912, y: .118765265, z: .0934668258} + parentName: + position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow - position: {x: -.0550398715, y: .114825293, z: .061777398} + parentName: + position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper - position: {x: -.0145013221, y: -.00511181122, z: .094618842} + parentName: + position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril - position: {x: -.0178999994, y: .0263128281, z: .0908674002} + parentName: + position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .033702828, z: .0594273992} + parentName: + position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye - position: {x: .020849999, y: .082502827, z: .0554273985} + parentName: + position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower - position: {x: .0356200002, y: .065072827, z: .0762374029} + parentName: + position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper - position: {x: .0344099998, y: .100612827, z: .0802073926} + parentName: + position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow - position: {x: .0120626874, y: .118765265, z: .0934668258} + parentName: + position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow - position: {x: .0550400019, y: .114822827, z: .061777398} + parentName: + position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper - position: {x: .0145013221, y: -.00510717137, z: .094617404} + parentName: + position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril - position: {x: .0178999994, y: .0263089053, z: .0908706188} + parentName: + position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder - position: {x: .0382860154, y: .221621141, z: -.017063085} - rotation: {x: .156615213, y: .987296224, z: -.0141431456, w: -.0227564517} + parentName: + position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} + rotation: {x: 0.15661521, y: 0.9872962, z: -0.014143146, w: -0.022756452} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm - position: {x: -.100501455, y: -2.49955224e-06, z: -5.15574072e-08} - rotation: {x: .128958732, y: .988591135, z: -.0591316372, w: .0506025925} + parentName: + position: {x: -0.100501455, y: -0.0000024995522, z: -0.000000051557407} + rotation: {x: 0.12895873, y: 0.98859113, z: -0.059131637, w: 0.050602593} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm - position: {x: .253428251, y: .00601135287, z: -.0167045239} - rotation: {x: .173002034, y: .0184975266, z: -.0264111329, w: .984393537} + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: 0.17300203, y: 0.018497527, z: -0.026411133, w: 0.98439354} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand - position: {x: .245373696, y: .0216417722, z: .00555046508} + parentName: + position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 - position: {x: .0747694969, y: -.00124305359, z: .0343444981} - rotation: {x: -.00425036438, y: .162121609, z: -.0406839401, w: .985922575} + parentName: + position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} + rotation: {x: -0.0042503644, y: 0.16212161, z: -0.04068394, w: 0.9859226} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 - position: {x: .0370584019, y: .00072612107, z: .0145388944} - rotation: {x: -.0775998086, y: .0223485287, z: .0409148932, w: .995893955} + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.07759981, y: 0.022348529, z: 0.040914893, w: 0.99589396} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 - position: {x: .0252250377, y: -.00496646529, z: .0110121462} + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 - position: {x: .0756476447, y: .00479140272, z: .0118531818} - rotation: {x: -.00183081278, y: .0143531328, z: -.0478143916, w: .998751462} + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.0018308128, y: 0.014353133, z: -0.04781439, w: 0.99875146} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 - position: {x: .0438090637, y: .000194188149, z: .00645493623} - rotation: {x: -.01889815, y: -.0441117585, z: .0829459056, w: .995397985} + parentName: + position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} + rotation: {x: -0.01889815, y: -0.04411176, z: 0.082945906, w: 0.995398} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 - position: {x: .0330724716, y: -.00754753686, z: .00168984616} + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 - position: {x: .0668033436, y: -.00199410878, z: -.0307561457} - rotation: {x: -.0619647875, y: -.25861457, z: -.0167126823, w: .963846266} + parentName: + position: {x: 0.06680334, y: -0.0019941088, z: -0.030756146} + rotation: {x: -0.061964788, y: -0.25861457, z: -0.016712682, w: 0.96384627} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 - position: {x: .0285308417, y: -.001397143, z: -.0116237961} - rotation: {x: .029886473, y: .000801108778, z: -.0616784878, w: .997648239} + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: 0.029886473, y: 0.0008011088, z: -0.061678488, w: 0.99764824} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 - position: {x: .0214268602, y: -.000553508929, z: -.00851660781} + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 - position: {x: .0705984756, y: .00245709647, z: -.00982145779} - rotation: {x: -.0148130022, y: -.115992621, z: -.0297175236, w: .992694914} + parentName: + position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} + rotation: {x: -0.014813002, y: -0.11599262, z: -0.029717524, w: 0.9926949} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 - position: {x: .0428871848, y: -.00137538207, z: -.00494585792} - rotation: {x: .0208193418, y: -.0215571187, z: .0755800083, w: .99668926} + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.004945858} + rotation: {x: 0.020819342, y: -0.021557119, z: 0.07558001, w: 0.99668926} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 - position: {x: .0295006037, y: -.00769293541, z: -.00462225592} + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 - position: {x: .0146849155, y: -.0111049423, z: .0258580949} - rotation: {x: -.120005637, y: .0336783491, z: .148804903, w: .980979919} + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} + rotation: {x: -0.12000564, y: 0.03367835, z: 0.1488049, w: 0.9809799} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 - position: {x: .0163739994, y: -.00528999977, z: .0234913602} - rotation: {x: -.0260625705, y: -.0966919959, z: -.00360832806, w: .994966567} + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.02606257, y: -0.096691996, z: -0.003608328, w: 0.99496657} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 - position: {x: .0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e8914d097ece7cc48a83d5fccd4098c0, - type: 3} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta index 4279d3c72..77ccf6a46 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta @@ -1,5 +1,9 @@ fileFormatVersion: 2 guid: 0d9d26e2162aa4d11ab075b34c029673 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: serializedVersion: 19301 internalIDToNameTable: @@ -2161,9 +2165,9 @@ ModelImporter: loopBlendPositionY: 0 loopBlendPositionXZ: 0 keepOriginalOrientation: 0 - keepOriginalPositionY: 0 + keepOriginalPositionY: 1 keepOriginalPositionXZ: 0 - heightFromFeet: 1 + heightFromFeet: 0 mirror: 0 bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 curves: [] @@ -2467,7 +2471,7 @@ ModelImporter: weight: 0 maskType: 0 maskSource: {instanceID: 0} - additiveReferencePoseFrame: 56 + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta index 333d3f5bc..e56742994 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta @@ -1,215 +1,605 @@ fileFormatVersion: 2 guid: 51dd2e4c869794f75a0df7d54b210214 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: Chest - 100002: Geo_grp - 100004: Head - 100006: Hips - 100008: //RootNode - 100010: Jaw - 100012: JawEND - 100014: Le_Eye_Mesh - 100016: LeftArm - 100018: LeftCheek - 100020: LeftEye - 100022: LeftEyelidLower - 100024: LeftEyelidUpper - 100026: LeftFoot - 100028: LeftForeArm - 100030: LeftHand - 100032: LeftHandIndex1 - 100034: LeftHandIndex2 - 100036: LeftHandIndex3 - 100038: LeftHandMiddle1 - 100040: LeftHandMiddle2 - 100042: LeftHandMiddle3 - 100044: LeftHandPinky1 - 100046: LeftHandPinky2 - 100048: LeftHandPinky3 - 100050: LeftHandRing1 - 100052: LeftHandRing2 - 100054: LeftHandRing3 - 100056: LeftHandThumb1 - 100058: LeftHandThumb2 - 100060: LeftHandThumb3 - 100062: LeftInnerBrow - 100064: LeftIOuterBrow - 100066: LeftLeg - 100068: LeftLipCorner - 100070: LeftLipLower - 100072: LeftLipUpper - 100074: LeftNostril - 100076: LeftShoulder - 100078: LeftToes - 100080: LeftUpLeg - 100082: Lw_Teeth_Mesh - 100084: Neck - 100086: Reference - 100088: Ri_Eye_Mesh - 100090: RightArm - 100092: RightCheek - 100094: RightEye - 100096: RightEyelidLower - 100098: RightEyelidUpper - 100100: RightFoot - 100102: RightForeArm - 100104: RightHand - 100106: RightHandIndex1 - 100108: RightHandIndex2 - 100110: RightHandIndex3 - 100112: RightHandMiddle1 - 100114: RightHandMiddle2 - 100116: RightHandMiddle3 - 100118: RightHandPinky1 - 100120: RightHandPinky2 - 100122: RightHandPinky3 - 100124: RightHandRing1 - 100126: RightHandRing2 - 100128: RightHandRing3 - 100130: RightHandThumb1 - 100132: RightHandThumb2 - 100134: RightHandThumb3 - 100136: RightInnerBrow - 100138: RightIOuterBrow - 100140: RightLeg - 100142: RightLipCorner - 100144: RightLipLower - 100146: RightLipUpper - 100148: RightNostril - 100150: RightShoulder - 100152: RightToes - 100154: RightUpLeg - 100156: Spine - 100158: TongueBack - 100160: TongueTip - 100162: Tounge_Mesh - 100164: Unity_Body_Mesh - 100166: Up_Teeth_Mesh - 400000: Chest - 400002: Geo_grp - 400004: Head - 400006: Hips - 400008: //RootNode - 400010: Jaw - 400012: JawEND - 400014: Le_Eye_Mesh - 400016: LeftArm - 400018: LeftCheek - 400020: LeftEye - 400022: LeftEyelidLower - 400024: LeftEyelidUpper - 400026: LeftFoot - 400028: LeftForeArm - 400030: LeftHand - 400032: LeftHandIndex1 - 400034: LeftHandIndex2 - 400036: LeftHandIndex3 - 400038: LeftHandMiddle1 - 400040: LeftHandMiddle2 - 400042: LeftHandMiddle3 - 400044: LeftHandPinky1 - 400046: LeftHandPinky2 - 400048: LeftHandPinky3 - 400050: LeftHandRing1 - 400052: LeftHandRing2 - 400054: LeftHandRing3 - 400056: LeftHandThumb1 - 400058: LeftHandThumb2 - 400060: LeftHandThumb3 - 400062: LeftInnerBrow - 400064: LeftIOuterBrow - 400066: LeftLeg - 400068: LeftLipCorner - 400070: LeftLipLower - 400072: LeftLipUpper - 400074: LeftNostril - 400076: LeftShoulder - 400078: LeftToes - 400080: LeftUpLeg - 400082: Lw_Teeth_Mesh - 400084: Neck - 400086: Reference - 400088: Ri_Eye_Mesh - 400090: RightArm - 400092: RightCheek - 400094: RightEye - 400096: RightEyelidLower - 400098: RightEyelidUpper - 400100: RightFoot - 400102: RightForeArm - 400104: RightHand - 400106: RightHandIndex1 - 400108: RightHandIndex2 - 400110: RightHandIndex3 - 400112: RightHandMiddle1 - 400114: RightHandMiddle2 - 400116: RightHandMiddle3 - 400118: RightHandPinky1 - 400120: RightHandPinky2 - 400122: RightHandPinky3 - 400124: RightHandRing1 - 400126: RightHandRing2 - 400128: RightHandRing3 - 400130: RightHandThumb1 - 400132: RightHandThumb2 - 400134: RightHandThumb3 - 400136: RightInnerBrow - 400138: RightIOuterBrow - 400140: RightLeg - 400142: RightLipCorner - 400144: RightLipLower - 400146: RightLipUpper - 400148: RightNostril - 400150: RightShoulder - 400152: RightToes - 400154: RightUpLeg - 400156: Spine - 400158: TongueBack - 400160: TongueTip - 400162: Tounge_Mesh - 400164: Unity_Body_Mesh - 400166: Up_Teeth_Mesh - 2300000: Le_Eye_Mesh - 2300002: Ri_Eye_Mesh - 3300000: Le_Eye_Mesh - 3300002: Ri_Eye_Mesh - 4300000: Le_Eye_Mesh - 4300002: Ri_Eye_Mesh - 4300004: Unity_Body_Mesh - 4300006: Up_Teeth_Mesh - 4300008: Lw_Teeth_Mesh - 4300010: Tounge_Mesh - 7400000: HumanoidJumpForwardLeft - 7400002: HumanoidFallLeft - 7400004: HumanoidJumpForwardRight - 7400006: HumanoidFallRight - 9500000: //RootNode - 13700000: Lw_Teeth_Mesh - 13700002: Tounge_Mesh - 13700004: Unity_Body_Mesh - 13700006: Up_Teeth_Mesh + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Chest + - first: + 1: 100002 + second: Geo_grp + - first: + 1: 100004 + second: Head + - first: + 1: 100006 + second: Hips + - first: + 1: 100008 + second: //RootNode + - first: + 1: 100010 + second: Jaw + - first: + 1: 100012 + second: JawEND + - first: + 1: 100014 + second: Le_Eye_Mesh + - first: + 1: 100016 + second: LeftArm + - first: + 1: 100018 + second: LeftCheek + - first: + 1: 100020 + second: LeftEye + - first: + 1: 100022 + second: LeftEyelidLower + - first: + 1: 100024 + second: LeftEyelidUpper + - first: + 1: 100026 + second: LeftFoot + - first: + 1: 100028 + second: LeftForeArm + - first: + 1: 100030 + second: LeftHand + - first: + 1: 100032 + second: LeftHandIndex1 + - first: + 1: 100034 + second: LeftHandIndex2 + - first: + 1: 100036 + second: LeftHandIndex3 + - first: + 1: 100038 + second: LeftHandMiddle1 + - first: + 1: 100040 + second: LeftHandMiddle2 + - first: + 1: 100042 + second: LeftHandMiddle3 + - first: + 1: 100044 + second: LeftHandPinky1 + - first: + 1: 100046 + second: LeftHandPinky2 + - first: + 1: 100048 + second: LeftHandPinky3 + - first: + 1: 100050 + second: LeftHandRing1 + - first: + 1: 100052 + second: LeftHandRing2 + - first: + 1: 100054 + second: LeftHandRing3 + - first: + 1: 100056 + second: LeftHandThumb1 + - first: + 1: 100058 + second: LeftHandThumb2 + - first: + 1: 100060 + second: LeftHandThumb3 + - first: + 1: 100062 + second: LeftInnerBrow + - first: + 1: 100064 + second: LeftIOuterBrow + - first: + 1: 100066 + second: LeftLeg + - first: + 1: 100068 + second: LeftLipCorner + - first: + 1: 100070 + second: LeftLipLower + - first: + 1: 100072 + second: LeftLipUpper + - first: + 1: 100074 + second: LeftNostril + - first: + 1: 100076 + second: LeftShoulder + - first: + 1: 100078 + second: LeftToes + - first: + 1: 100080 + second: LeftUpLeg + - first: + 1: 100082 + second: Lw_Teeth_Mesh + - first: + 1: 100084 + second: Neck + - first: + 1: 100086 + second: Reference + - first: + 1: 100088 + second: Ri_Eye_Mesh + - first: + 1: 100090 + second: RightArm + - first: + 1: 100092 + second: RightCheek + - first: + 1: 100094 + second: RightEye + - first: + 1: 100096 + second: RightEyelidLower + - first: + 1: 100098 + second: RightEyelidUpper + - first: + 1: 100100 + second: RightFoot + - first: + 1: 100102 + second: RightForeArm + - first: + 1: 100104 + second: RightHand + - first: + 1: 100106 + second: RightHandIndex1 + - first: + 1: 100108 + second: RightHandIndex2 + - first: + 1: 100110 + second: RightHandIndex3 + - first: + 1: 100112 + second: RightHandMiddle1 + - first: + 1: 100114 + second: RightHandMiddle2 + - first: + 1: 100116 + second: RightHandMiddle3 + - first: + 1: 100118 + second: RightHandPinky1 + - first: + 1: 100120 + second: RightHandPinky2 + - first: + 1: 100122 + second: RightHandPinky3 + - first: + 1: 100124 + second: RightHandRing1 + - first: + 1: 100126 + second: RightHandRing2 + - first: + 1: 100128 + second: RightHandRing3 + - first: + 1: 100130 + second: RightHandThumb1 + - first: + 1: 100132 + second: RightHandThumb2 + - first: + 1: 100134 + second: RightHandThumb3 + - first: + 1: 100136 + second: RightInnerBrow + - first: + 1: 100138 + second: RightIOuterBrow + - first: + 1: 100140 + second: RightLeg + - first: + 1: 100142 + second: RightLipCorner + - first: + 1: 100144 + second: RightLipLower + - first: + 1: 100146 + second: RightLipUpper + - first: + 1: 100148 + second: RightNostril + - first: + 1: 100150 + second: RightShoulder + - first: + 1: 100152 + second: RightToes + - first: + 1: 100154 + second: RightUpLeg + - first: + 1: 100156 + second: Spine + - first: + 1: 100158 + second: TongueBack + - first: + 1: 100160 + second: TongueTip + - first: + 1: 100162 + second: Tounge_Mesh + - first: + 1: 100164 + second: Unity_Body_Mesh + - first: + 1: 100166 + second: Up_Teeth_Mesh + - first: + 4: 400000 + second: Chest + - first: + 4: 400002 + second: Geo_grp + - first: + 4: 400004 + second: Head + - first: + 4: 400006 + second: Hips + - first: + 4: 400008 + second: //RootNode + - first: + 4: 400010 + second: Jaw + - first: + 4: 400012 + second: JawEND + - first: + 4: 400014 + second: Le_Eye_Mesh + - first: + 4: 400016 + second: LeftArm + - first: + 4: 400018 + second: LeftCheek + - first: + 4: 400020 + second: LeftEye + - first: + 4: 400022 + second: LeftEyelidLower + - first: + 4: 400024 + second: LeftEyelidUpper + - first: + 4: 400026 + second: LeftFoot + - first: + 4: 400028 + second: LeftForeArm + - first: + 4: 400030 + second: LeftHand + - first: + 4: 400032 + second: LeftHandIndex1 + - first: + 4: 400034 + second: LeftHandIndex2 + - first: + 4: 400036 + second: LeftHandIndex3 + - first: + 4: 400038 + second: LeftHandMiddle1 + - first: + 4: 400040 + second: LeftHandMiddle2 + - first: + 4: 400042 + second: LeftHandMiddle3 + - first: + 4: 400044 + second: LeftHandPinky1 + - first: + 4: 400046 + second: LeftHandPinky2 + - first: + 4: 400048 + second: LeftHandPinky3 + - first: + 4: 400050 + second: LeftHandRing1 + - first: + 4: 400052 + second: LeftHandRing2 + - first: + 4: 400054 + second: LeftHandRing3 + - first: + 4: 400056 + second: LeftHandThumb1 + - first: + 4: 400058 + second: LeftHandThumb2 + - first: + 4: 400060 + second: LeftHandThumb3 + - first: + 4: 400062 + second: LeftInnerBrow + - first: + 4: 400064 + second: LeftIOuterBrow + - first: + 4: 400066 + second: LeftLeg + - first: + 4: 400068 + second: LeftLipCorner + - first: + 4: 400070 + second: LeftLipLower + - first: + 4: 400072 + second: LeftLipUpper + - first: + 4: 400074 + second: LeftNostril + - first: + 4: 400076 + second: LeftShoulder + - first: + 4: 400078 + second: LeftToes + - first: + 4: 400080 + second: LeftUpLeg + - first: + 4: 400082 + second: Lw_Teeth_Mesh + - first: + 4: 400084 + second: Neck + - first: + 4: 400086 + second: Reference + - first: + 4: 400088 + second: Ri_Eye_Mesh + - first: + 4: 400090 + second: RightArm + - first: + 4: 400092 + second: RightCheek + - first: + 4: 400094 + second: RightEye + - first: + 4: 400096 + second: RightEyelidLower + - first: + 4: 400098 + second: RightEyelidUpper + - first: + 4: 400100 + second: RightFoot + - first: + 4: 400102 + second: RightForeArm + - first: + 4: 400104 + second: RightHand + - first: + 4: 400106 + second: RightHandIndex1 + - first: + 4: 400108 + second: RightHandIndex2 + - first: + 4: 400110 + second: RightHandIndex3 + - first: + 4: 400112 + second: RightHandMiddle1 + - first: + 4: 400114 + second: RightHandMiddle2 + - first: + 4: 400116 + second: RightHandMiddle3 + - first: + 4: 400118 + second: RightHandPinky1 + - first: + 4: 400120 + second: RightHandPinky2 + - first: + 4: 400122 + second: RightHandPinky3 + - first: + 4: 400124 + second: RightHandRing1 + - first: + 4: 400126 + second: RightHandRing2 + - first: + 4: 400128 + second: RightHandRing3 + - first: + 4: 400130 + second: RightHandThumb1 + - first: + 4: 400132 + second: RightHandThumb2 + - first: + 4: 400134 + second: RightHandThumb3 + - first: + 4: 400136 + second: RightInnerBrow + - first: + 4: 400138 + second: RightIOuterBrow + - first: + 4: 400140 + second: RightLeg + - first: + 4: 400142 + second: RightLipCorner + - first: + 4: 400144 + second: RightLipLower + - first: + 4: 400146 + second: RightLipUpper + - first: + 4: 400148 + second: RightNostril + - first: + 4: 400150 + second: RightShoulder + - first: + 4: 400152 + second: RightToes + - first: + 4: 400154 + second: RightUpLeg + - first: + 4: 400156 + second: Spine + - first: + 4: 400158 + second: TongueBack + - first: + 4: 400160 + second: TongueTip + - first: + 4: 400162 + second: Tounge_Mesh + - first: + 4: 400164 + second: Unity_Body_Mesh + - first: + 4: 400166 + second: Up_Teeth_Mesh + - first: + 23: 2300000 + second: Le_Eye_Mesh + - first: + 23: 2300002 + second: Ri_Eye_Mesh + - first: + 33: 3300000 + second: Le_Eye_Mesh + - first: + 33: 3300002 + second: Ri_Eye_Mesh + - first: + 43: 4300000 + second: Le_Eye_Mesh + - first: + 43: 4300002 + second: Ri_Eye_Mesh + - first: + 43: 4300004 + second: Unity_Body_Mesh + - first: + 43: 4300006 + second: Up_Teeth_Mesh + - first: + 43: 4300008 + second: Lw_Teeth_Mesh + - first: + 43: 4300010 + second: Tounge_Mesh + - first: + 74: 7400000 + second: HumanoidJumpForwardLeft + - first: + 74: 7400002 + second: HumanoidFallLeft + - first: + 74: 7400004 + second: HumanoidJumpForwardRight + - first: + 74: 7400006 + second: HumanoidFallRight + - first: + 95: 9500000 + second: //RootNode + - first: + 137: 13700000 + second: Lw_Teeth_Mesh + - first: + 137: 13700002 + second: Tounge_Mesh + - first: + 137: 13700004 + second: Unity_Body_Mesh + - first: + 137: 13700006 + second: Up_Teeth_Mesh + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidJumpForwardLeft takeName: idle_jumpFwd_idle_tk01 + internalID: 0 firstFrame: 350 lastFrame: 352 wrapMode: 0 @@ -217,6 +607,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -401,9 +792,11 @@ ModelImporter: weight: 1 maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidFallLeft takeName: idle_jumpFwd_idle_tk01 + internalID: 0 firstFrame: 355 lastFrame: 357 wrapMode: 0 @@ -411,6 +804,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -595,9 +989,11 @@ ModelImporter: weight: 1 maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidJumpForwardRight takeName: idle_jumpFwd_idle_tk01 + internalID: 0 firstFrame: 350 lastFrame: 352 wrapMode: 0 @@ -605,6 +1001,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -789,9 +1186,11 @@ ModelImporter: weight: 1 maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidFallRight takeName: idle_jumpFwd_idle_tk01 + internalID: 0 firstFrame: 355 lastFrame: 357 wrapMode: 0 @@ -799,6 +1198,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -983,18 +1383,31 @@ ModelImporter: weight: 1 maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -1002,12 +1415,16 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -1443,396 +1860,403 @@ ModelImporter: modified: 0 skeleton: - name: HumanoidJumpAndFall(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: -1.86264515e-08, y: .960032225, z: 0} + parentName: + position: {x: -0.000000018626451, y: 0.9600322, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg - position: {x: -.0754494965, y: -.0456640199, z: 0} + parentName: + position: {x: -0.0754495, y: -0.04566402, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg - position: {x: -.0205504987, y: -.409129977, z: .00717136543} + parentName: + position: {x: -0.020550499, y: -0.40912998, z: 0.0071713654} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot - position: {x: -.00515299942, y: -.423155904, z: -.0120320888} + parentName: + position: {x: -0.0051529994, y: -0.4231559, z: -0.012032089} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes - position: {x: -.00748699997, y: -.0731673017, z: .145427123} + parentName: + position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg - position: {x: .0754495338, y: -.0456639901, z: 0} + parentName: + position: {x: 0.075449534, y: -0.04566399, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg - position: {x: .0205504671, y: -.409130007, z: .00717136543} + parentName: + position: {x: 0.020550467, y: -0.40913, z: 0.0071713654} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot - position: {x: .00515299942, y: -.423155904, z: -.0120320888} + parentName: + position: {x: 0.0051529994, y: -0.4231559, z: -0.012032089} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes - position: {x: .00748699997, y: -.0731673017, z: .145427495} + parentName: + position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine - position: {x: -0, y: .0922631845, z: .0157713313} + parentName: + position: {x: -0, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest - position: {x: -0, y: .162540287, z: .0218507219} + parentName: + position: {x: -0, y: 0.16254029, z: 0.021850722} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder - position: {x: -.0382435061, y: .192178085, z: -.017063085} - rotation: {x: -.00121677481, y: -.00917607173, z: .327255577, w: .944890559} + parentName: + position: {x: -0.038243506, y: 0.19217809, z: -0.017063085} + rotation: {x: -0.0012167748, y: -0.009176072, z: 0.32725558, w: 0.94489056} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm - position: {x: -.0835747719, y: .036097575, z: 0} - rotation: {x: .208304122, y: -.055566486, z: -.310117185, w: .925931454} + parentName: + position: {x: -0.08357477, y: 0.036097575, z: 0} + rotation: {x: 0.20830412, y: -0.055566486, z: -0.3101172, w: 0.92593145} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm - position: {x: -.254049301, y: 0, z: 0} - rotation: {x: .00065340061, y: .0216908138, z: -.0116735483, w: .999696374} + parentName: + position: {x: -0.2540493, y: 0, z: 0} + rotation: {x: 0.0006534006, y: 0.021690814, z: -0.011673548, w: 0.9996964} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand - position: {x: -.24638927, y: 0, z: 0} - rotation: {x: .00174571283, y: -.0316711254, z: .0242843106, w: .999201775} + parentName: + position: {x: -0.24638927, y: 0, z: 0} + rotation: {x: 0.0017457128, y: -0.031671125, z: 0.02428431, w: 0.9992018} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 - position: {x: -.0751257986, y: -.00784140453, z: .0326526426} - rotation: {x: -.00211892044, y: .0802574381, z: .0175381862, w: .996617615} + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: -0.0021189204, y: 0.08025744, z: 0.017538186, w: 0.9966176} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 - position: {x: -.03979728, y: 4.98084046e-05, z: .00118575036} - rotation: {x: .000501934439, y: .0154705783, z: .0404105186, w: .999063313} + parentName: + position: {x: -0.03979728, y: 0.000049808405, z: 0.0011857504} + rotation: {x: 0.00050193444, y: 0.015470578, z: 0.04041052, w: 0.9990633} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 - position: {x: -.0279684775, y: -6.28122399e-09, z: -5.17186614e-08} + parentName: + position: {x: -0.027968477, y: -0.000000006281224, z: -0.00000005171866} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 - position: {x: -.0760238245, y: -.00188513438, z: .0101412293} - rotation: {x: -.000768873433, y: .0333210826, z: .020907538, w: .999225736} + parentName: + position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} + rotation: {x: -0.00076887343, y: 0.033321083, z: 0.020907538, w: 0.99922574} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 - position: {x: -.0442804359, y: 4.79887422e-06, z: -.000425400125} - rotation: {x: -.00136209256, y: -.0191520527, z: .0378838927, w: .999097645} + parentName: + position: {x: -0.044280436, y: 0.000004798874, z: -0.00042540013} + rotation: {x: -0.0013620926, y: -0.019152053, z: 0.037883893, w: 0.99909765} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 - position: {x: -.0339648277, y: -1.21979289e-08, z: 3.75648268e-09} + parentName: + position: {x: -0.033964828, y: -0.000000012197929, z: 0.0000000037564827} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 - position: {x: -.0656599477, y: -.00782510638, z: -.0322512463} - rotation: {x: -.000912672316, y: .0121611441, z: .0212233849, w: .999700367} + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.0009126723, y: 0.012161144, z: 0.021223385, w: 0.99970037} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 - position: {x: -.0308054481, y: -3.0874573e-05, z: -.0014480775} - rotation: {x: -.000226802338, y: -.00969417952, z: .000434517511, w: .999952912} + parentName: + position: {x: -0.030805448, y: -0.000030874573, z: -0.0014480775} + rotation: {x: -0.00022680234, y: -0.0096941795, z: 0.0004345175, w: 0.9999529} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 - position: {x: -.0230640266, y: -6.40258077e-06, z: 1.8332095e-08} + parentName: + position: {x: -0.023064027, y: -0.0000064025808, z: 0.000000018332095} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 - position: {x: -.0703021064, y: -.00374530931, z: -.0114117917} - rotation: {x: -.000324145716, y: .0115975412, z: .0247372258, w: .999626696} + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: -0.00032414572, y: 0.011597541, z: 0.024737226, w: 0.9996267} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 - position: {x: -.0431354567, y: -2.08823076e-05, z: -.00223517837} - rotation: {x: -.00120344944, y: -.0231133532, z: .0409869365, w: .998891592} + parentName: + position: {x: -0.043135457, y: -0.000020882308, z: -0.0022351784} + rotation: {x: -0.0012034494, y: -0.023113353, z: 0.040986937, w: 0.9988916} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 - position: {x: -.0308355652, y: 7.71049682e-11, z: -1.64932707e-08} + parentName: + position: {x: -0.030835565, y: 7.710497e-11, z: -0.00000001649327} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 - position: {x: -.0142312413, y: -.0123778246, z: .0255316682} - rotation: {x: -.1395832, y: -.0351250619, z: -.0833107978, w: .98607409} + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.1395832, y: -0.035125062, z: -0.0833108, w: 0.9860741} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 - position: {x: -.0163739994, y: -.00528999977, z: .0234914087} - rotation: {x: -.026061492, y: .0966902077, z: .00360864005, w: .994966805} + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.026061492, y: 0.09669021, z: 0.00360864, w: 0.9949668} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 - position: {x: -.0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck - position: {x: -0, y: .235723898, z: -.0324132554} + parentName: + position: {x: -0, y: 0.2357239, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head - position: {x: -0, y: .106355801, z: .0113267815} + parentName: + position: {x: -0, y: 0.1063558, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw - position: {x: -0, y: .0111267585, z: .0103275431} - rotation: {x: .219240054, y: -0, z: -0, w: .975670993} + parentName: + position: {x: -0, y: 0.0111267585, z: 0.010327543} + rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND - position: {x: -0, y: -.0482887588, z: .071851708} + parentName: + position: {x: -0, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner - position: {x: -.032843262, y: -.01657876, z: .0661217645} + parentName: + position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower - position: {x: -.0142508168, y: -.0216887593, z: .0822406337} + parentName: + position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner - position: {x: .0328399986, y: -.01657876, z: .0661187842} + parentName: + position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower - position: {x: .0142508168, y: -.0216887593, z: .0822387859} + parentName: + position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack - position: {x: -0, y: -.022869369, z: .0100954091} + parentName: + position: {x: -0, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip - position: {x: -0, y: -.000409444125, z: .0282272995} + parentName: + position: {x: -0, y: -0.00040944412, z: 0.0282273} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440265, y: .0337019488, z: .0594304018} + parentName: + position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye - position: {x: -.0208482333, y: .0825027004, z: .0554274321} + parentName: + position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower - position: {x: -.0356189571, y: .0650736615, z: .076234743} + parentName: + position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper - position: {x: -.0344068967, y: .10060814, z: .0802053064} + parentName: + position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow - position: {x: -.0120626912, y: .118765265, z: .0934668258} + parentName: + position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow - position: {x: -.0550398715, y: .114825293, z: .061777398} + parentName: + position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper - position: {x: -.0145013221, y: -.00511181122, z: .094618842} + parentName: + position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril - position: {x: -.0178999994, y: .0263128281, z: .0908674002} + parentName: + position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .033702828, z: .0594273992} + parentName: + position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye - position: {x: .020849999, y: .082502827, z: .0554273985} + parentName: + position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower - position: {x: .0356200002, y: .065072827, z: .0762374029} + parentName: + position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper - position: {x: .0344099998, y: .100612827, z: .0802073926} + parentName: + position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow - position: {x: .0120626874, y: .118765265, z: .0934668258} + parentName: + position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow - position: {x: .0550400019, y: .114822827, z: .061777398} + parentName: + position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper - position: {x: .0145013221, y: -.00510717137, z: .094617404} + parentName: + position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril - position: {x: .0178999994, y: .0263089053, z: .0908706188} + parentName: + position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder - position: {x: .0383285098, y: .192176744, z: -.017063085} - rotation: {x: .290413886, y: .956010222, z: .0322408788, w: -.02578477} + parentName: + position: {x: 0.03832851, y: 0.19217674, z: -0.017063085} + rotation: {x: 0.2904139, y: 0.9560102, z: 0.03224088, w: -0.02578477} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm - position: {x: -.0835755169, y: .0360957012, z: -5.15574072e-08} - rotation: {x: .263129145, y: .953624487, z: -.146085501, w: .00475239567} + parentName: + position: {x: -0.08357552, y: 0.0360957, z: -0.000000051557407} + rotation: {x: 0.26312914, y: 0.9536245, z: -0.1460855, w: 0.0047523957} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm - position: {x: .253428251, y: .00601135287, z: -.0167045239} - rotation: {x: -.0153278718, y: .0147472881, z: -.0201126598, w: .999571443} + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: -0.015327872, y: 0.014747288, z: -0.02011266, w: 0.99957144} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand - position: {x: .245373696, y: .0216417722, z: .00555046508} - rotation: {x: .000613642507, y: .036897447, z: -.0569219254, w: .9976964} + parentName: + position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} + rotation: {x: 0.0006136425, y: 0.036897447, z: -0.056921925, w: 0.9976964} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 - position: {x: .0747694969, y: -.00124305359, z: .0343444981} - rotation: {x: -.00211892044, y: .0802574381, z: .0175381862, w: .996617615} + parentName: + position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} + rotation: {x: -0.0021189204, y: 0.08025744, z: 0.017538186, w: 0.9966176} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 - position: {x: .0370584019, y: .00072612107, z: .0145388944} - rotation: {x: -.00332621601, y: .0159315318, z: .060632892, w: .998027444} + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.003326216, y: 0.015931532, z: 0.060632892, w: 0.99802744} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 - position: {x: .0252250377, y: -.00496646529, z: .0110121462} + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 - position: {x: .0756476447, y: .00479140272, z: .0118531818} - rotation: {x: -.000768873433, y: .0333210826, z: .020907538, w: .999225736} + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.00076887343, y: 0.033321083, z: 0.020907538, w: 0.99922574} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 - position: {x: .0438090637, y: .000194188149, z: .00645493623} - rotation: {x: -.00413046591, y: -.0335116945, z: .0761208013, w: .996526778} + parentName: + position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} + rotation: {x: -0.004130466, y: -0.033511695, z: 0.0761208, w: 0.9965268} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 - position: {x: .0330724716, y: -.00754753686, z: .00168984616} + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 - position: {x: .0668033436, y: -.00199410878, z: -.0307561457} - rotation: {x: .0031761073, y: -.192005888, z: .0451137684, w: .98035115} + parentName: + position: {x: 0.06680334, y: -0.0019941088, z: -0.030756146} + rotation: {x: 0.0031761073, y: -0.19200589, z: 0.04511377, w: 0.98035115} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 - position: {x: .0285308417, y: -.001397143, z: -.0116237961} - rotation: {x: -.00225326815, y: -.00959618483, z: -.0107575748, w: .999893546} + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: -0.0022532681, y: -0.009596185, z: -0.010757575, w: 0.99989355} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 - position: {x: .0214268602, y: -.000553508929, z: -.00851660781} + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 - position: {x: .0705984756, y: .00245709647, z: -.00982145779} - rotation: {x: .000710848777, y: -.0543420911, z: .0349445045, w: .997910559} + parentName: + position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} + rotation: {x: 0.0007108488, y: -0.05434209, z: 0.034944504, w: 0.99791056} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 - position: {x: .0428871848, y: -.00137538207, z: -.00494585792} - rotation: {x: .000484766497, y: -.0212895721, z: .0698628947, w: .997329295} + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.004945858} + rotation: {x: 0.0004847665, y: -0.021289572, z: 0.069862895, w: 0.9973293} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 - position: {x: .0295006037, y: -.00769293541, z: -.00462225592} + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 - position: {x: .0146849155, y: -.0111049423, z: .0258580949} - rotation: {x: -.108707562, y: .00948966853, z: .100395039, w: .988945663} + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} + rotation: {x: -0.10870756, y: 0.0094896685, z: 0.10039504, w: 0.98894566} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 - position: {x: .0163739994, y: -.00528999977, z: .0234913602} - rotation: {x: -.0260640942, y: -.0966886356, z: -.00360555435, w: .994966805} + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.026064094, y: -0.096688636, z: -0.0036055543, w: 0.9949668} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 - position: {x: .0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: 9bde93922c5ea4196b87f9b5593da1dc, - type: 3} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta index ab2a0163c..15d8aea00 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta @@ -1,503 +1,1469 @@ fileFormatVersion: 2 guid: f03e10c73f30b4ab4aa8ea8f1cc16d36 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: //RootNode - 100002: l_hipProxy_geo - 100004: l_kneeProxy_geo - 100006: l_ankleProxy_geo - 100008: l_ballProxy_geo - 100010: LToeBase_End2 - 100012: LeftToes - 100014: LeftFoot - 100016: LeftLeg - 100018: LeftUpLeg - 100020: pelvisProxy_geo - 100022: r_hipProxy_geo - 100024: r_kneeProxy_geo - 100026: r_ankleProxy_geo - 100028: r_ballProxy_geo - 100030: LToeBase_End3 - 100032: RightToes - 100034: RightFoot - 100036: RightLeg - 100038: RightUpLeg - 100040: spineProxy_geo - 100042: l_clavicleProxy_geo - 100044: l_shourderProxy_geo - 100046: l_erbowProxy_geo - 100048: l_wristProxy_geo - 100050: l_thumbProxy_01_geo - 100052: l_thumbProxy_02_geo - 100054: l_thumbProxy_03_geo - 100056: LeftHandThumb13 - 100058: LeftHandThumb3 - 100060: LeftHandThumb2 - 100062: LeftHandThumb1 - 100064: l_indexProxy_01_geo - 100066: l_indexProxy_02_geo - 100068: l_indexProxy_03_geo - 100070: LeftHandIndex13 - 100072: LeftHandIndex3 - 100074: LeftHandIndex2 - 100076: LeftHandIndex1 - 100078: l_middleProxy_01_geo - 100080: l_middleProxy_02_geo - 100082: l_middleProxy_03_geo - 100084: LeftHandMiddle13 - 100086: LeftHandMiddle3 - 100088: LeftHandMiddle2 - 100090: LeftHandMiddle1 - 100092: l_ringProxy_01_geo - 100094: l_ringProxy_02_geo - 100096: l_ringProxy_03_geo - 100098: LeftHandRing13 - 100100: LeftHandRing3 - 100102: LeftHandRing2 - 100104: LeftHandRing1 - 100106: l_pinkyProxy_01_geo - 100108: l_pinkyProxy_02_geo - 100110: l_pinkyProxy_03_geo - 100112: LeftHandPinky13 - 100114: LeftHandPinky3 - 100116: LeftHandPinky2 - 100118: LeftHandPinky1 - 100120: LeftHand - 100122: LeftForeArm - 100124: LeftArm - 100126: LeftShoulder - 100128: chestProxy_geo - 100130: r_clavicleProxy_geo - 100132: r_shourderProxy_geo - 100134: r_erbowProxy_geo - 100136: r_wristProxy_geo - 100138: r_thumbProxy_01_geo - 100140: r_thumbProxy_02_geo - 100142: r_thumbProxy_03_geo - 100144: LeftHandThumb17 - 100146: RightHandThumb3 - 100148: RightHandThumb2 - 100150: RightHandThumb1 - 100152: r_indexProxy_01_geo - 100154: r_indexProxy_02_geo - 100156: r_indexProxy_03_geo - 100158: LeftHandIndex17 - 100160: RightHandIndex3 - 100162: RightHandIndex2 - 100164: RightHandIndex1 - 100166: r_middleProxy_01_geo - 100168: r_middleProxy_02_geo - 100170: r_middleProxy_03_geo - 100172: LeftHandMiddle17 - 100174: RightHandMiddle3 - 100176: RightHandMiddle2 - 100178: RightHandMiddle1 - 100180: r_ringProxy_01_geo - 100182: r_ringProxy_02_geo - 100184: r_ringProxy_03_geo - 100186: LeftHandRing17 - 100188: RightHandRing3 - 100190: RightHandRing2 - 100192: RightHandRing1 - 100194: r_pinkyProxy_01_geo - 100196: r_pinkyProxy_02_geo - 100198: r_pinkyProxy_03_geo - 100200: LeftHandPinky17 - 100202: RightHandPinky3 - 100204: RightHandPinky2 - 100206: RightHandPinky1 - 100208: RightHand - 100210: RightForeArm - 100212: RightArm - 100214: RightShoulder - 100216: neckProxy_geo - 100218: UNI_01_Upper_teethProxy - 100220: headProxy_geo - 100222: RightLipUpper - 100224: RightNostril - 100226: RightCheek - 100228: RightEyelidLower - 100230: RightEyelidUpper - 100232: RightIOuterBrow - 100234: RightInnerBrow - 100236: LeftIOuterBrow - 100238: LeftInnerBrow - 100240: LeftEyelidUpper - 100242: LeftEyelidLower - 100244: LeftCheek - 100246: LeftNostril - 100248: LeftLipUpper - 100250: jawProxy_geo - 100252: UNI_01_Lower_teethProxy - 100254: LeftLipCorner - 100256: RightLipCorner - 100258: RightLipLower - 100260: JawEND - 100262: LeftLipLower - 100264: UNI_01_TongueTipProxy - 100266: TongueTip - 100268: UNI_01_TongueBaseProxy - 100270: TongueBack - 100272: Jaw - 100274: r_UNI_eye - 100276: RightEye - 100278: l_UNI_eye - 100280: LeftEye - 100282: HeadTop_End - 100284: Head - 100286: Neck - 100288: Chest - 100290: Spine - 100292: Hips - 100294: Reference - 400000: //RootNode - 400002: l_hipProxy_geo - 400004: l_kneeProxy_geo - 400006: l_ankleProxy_geo - 400008: l_ballProxy_geo - 400010: LToeBase_End2 - 400012: LeftToes - 400014: LeftFoot - 400016: LeftLeg - 400018: LeftUpLeg - 400020: pelvisProxy_geo - 400022: r_hipProxy_geo - 400024: r_kneeProxy_geo - 400026: r_ankleProxy_geo - 400028: r_ballProxy_geo - 400030: LToeBase_End3 - 400032: RightToes - 400034: RightFoot - 400036: RightLeg - 400038: RightUpLeg - 400040: spineProxy_geo - 400042: l_clavicleProxy_geo - 400044: l_shourderProxy_geo - 400046: l_erbowProxy_geo - 400048: l_wristProxy_geo - 400050: l_thumbProxy_01_geo - 400052: l_thumbProxy_02_geo - 400054: l_thumbProxy_03_geo - 400056: LeftHandThumb13 - 400058: LeftHandThumb3 - 400060: LeftHandThumb2 - 400062: LeftHandThumb1 - 400064: l_indexProxy_01_geo - 400066: l_indexProxy_02_geo - 400068: l_indexProxy_03_geo - 400070: LeftHandIndex13 - 400072: LeftHandIndex3 - 400074: LeftHandIndex2 - 400076: LeftHandIndex1 - 400078: l_middleProxy_01_geo - 400080: l_middleProxy_02_geo - 400082: l_middleProxy_03_geo - 400084: LeftHandMiddle13 - 400086: LeftHandMiddle3 - 400088: LeftHandMiddle2 - 400090: LeftHandMiddle1 - 400092: l_ringProxy_01_geo - 400094: l_ringProxy_02_geo - 400096: l_ringProxy_03_geo - 400098: LeftHandRing13 - 400100: LeftHandRing3 - 400102: LeftHandRing2 - 400104: LeftHandRing1 - 400106: l_pinkyProxy_01_geo - 400108: l_pinkyProxy_02_geo - 400110: l_pinkyProxy_03_geo - 400112: LeftHandPinky13 - 400114: LeftHandPinky3 - 400116: LeftHandPinky2 - 400118: LeftHandPinky1 - 400120: LeftHand - 400122: LeftForeArm - 400124: LeftArm - 400126: LeftShoulder - 400128: chestProxy_geo - 400130: r_clavicleProxy_geo - 400132: r_shourderProxy_geo - 400134: r_erbowProxy_geo - 400136: r_wristProxy_geo - 400138: r_thumbProxy_01_geo - 400140: r_thumbProxy_02_geo - 400142: r_thumbProxy_03_geo - 400144: LeftHandThumb17 - 400146: RightHandThumb3 - 400148: RightHandThumb2 - 400150: RightHandThumb1 - 400152: r_indexProxy_01_geo - 400154: r_indexProxy_02_geo - 400156: r_indexProxy_03_geo - 400158: LeftHandIndex17 - 400160: RightHandIndex3 - 400162: RightHandIndex2 - 400164: RightHandIndex1 - 400166: r_middleProxy_01_geo - 400168: r_middleProxy_02_geo - 400170: r_middleProxy_03_geo - 400172: LeftHandMiddle17 - 400174: RightHandMiddle3 - 400176: RightHandMiddle2 - 400178: RightHandMiddle1 - 400180: r_ringProxy_01_geo - 400182: r_ringProxy_02_geo - 400184: r_ringProxy_03_geo - 400186: LeftHandRing17 - 400188: RightHandRing3 - 400190: RightHandRing2 - 400192: RightHandRing1 - 400194: r_pinkyProxy_01_geo - 400196: r_pinkyProxy_02_geo - 400198: r_pinkyProxy_03_geo - 400200: LeftHandPinky17 - 400202: RightHandPinky3 - 400204: RightHandPinky2 - 400206: RightHandPinky1 - 400208: RightHand - 400210: RightForeArm - 400212: RightArm - 400214: RightShoulder - 400216: neckProxy_geo - 400218: UNI_01_Upper_teethProxy - 400220: headProxy_geo - 400222: RightLipUpper - 400224: RightNostril - 400226: RightCheek - 400228: RightEyelidLower - 400230: RightEyelidUpper - 400232: RightIOuterBrow - 400234: RightInnerBrow - 400236: LeftIOuterBrow - 400238: LeftInnerBrow - 400240: LeftEyelidUpper - 400242: LeftEyelidLower - 400244: LeftCheek - 400246: LeftNostril - 400248: LeftLipUpper - 400250: jawProxy_geo - 400252: UNI_01_Lower_teethProxy - 400254: LeftLipCorner - 400256: RightLipCorner - 400258: RightLipLower - 400260: JawEND - 400262: LeftLipLower - 400264: UNI_01_TongueTipProxy - 400266: TongueTip - 400268: UNI_01_TongueBaseProxy - 400270: TongueBack - 400272: Jaw - 400274: r_UNI_eye - 400276: RightEye - 400278: l_UNI_eye - 400280: LeftEye - 400282: HeadTop_End - 400284: Head - 400286: Neck - 400288: Chest - 400290: Spine - 400292: Hips - 400294: Reference - 2300000: l_hipProxy_geo - 2300002: l_kneeProxy_geo - 2300004: l_ankleProxy_geo - 2300006: l_ballProxy_geo - 2300008: pelvisProxy_geo - 2300010: r_hipProxy_geo - 2300012: r_kneeProxy_geo - 2300014: r_ankleProxy_geo - 2300016: r_ballProxy_geo - 2300018: spineProxy_geo - 2300020: l_clavicleProxy_geo - 2300022: l_shourderProxy_geo - 2300024: l_erbowProxy_geo - 2300026: l_wristProxy_geo - 2300028: l_thumbProxy_01_geo - 2300030: l_thumbProxy_02_geo - 2300032: l_thumbProxy_03_geo - 2300034: l_indexProxy_01_geo - 2300036: l_indexProxy_02_geo - 2300038: l_indexProxy_03_geo - 2300040: l_middleProxy_01_geo - 2300042: l_middleProxy_02_geo - 2300044: l_middleProxy_03_geo - 2300046: l_ringProxy_01_geo - 2300048: l_ringProxy_02_geo - 2300050: l_ringProxy_03_geo - 2300052: l_pinkyProxy_01_geo - 2300054: l_pinkyProxy_02_geo - 2300056: l_pinkyProxy_03_geo - 2300058: chestProxy_geo - 2300060: r_clavicleProxy_geo - 2300062: r_shourderProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_wristProxy_geo - 2300068: r_thumbProxy_01_geo - 2300070: r_thumbProxy_02_geo - 2300072: r_thumbProxy_03_geo - 2300074: r_indexProxy_01_geo - 2300076: r_indexProxy_02_geo - 2300078: r_indexProxy_03_geo - 2300080: r_middleProxy_01_geo - 2300082: r_middleProxy_02_geo - 2300084: r_middleProxy_03_geo - 2300086: r_ringProxy_01_geo - 2300088: r_ringProxy_02_geo - 2300090: r_ringProxy_03_geo - 2300092: r_pinkyProxy_01_geo - 2300094: r_pinkyProxy_02_geo - 2300096: r_pinkyProxy_03_geo - 2300098: neckProxy_geo - 2300100: UNI_01_Upper_teethProxy - 2300102: headProxy_geo - 2300104: jawProxy_geo - 2300106: UNI_01_Lower_teethProxy - 2300108: UNI_01_TongueTipProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: r_UNI_eye - 2300114: l_UNI_eye - 3300000: l_hipProxy_geo - 3300002: l_kneeProxy_geo - 3300004: l_ankleProxy_geo - 3300006: l_ballProxy_geo - 3300008: pelvisProxy_geo - 3300010: r_hipProxy_geo - 3300012: r_kneeProxy_geo - 3300014: r_ankleProxy_geo - 3300016: r_ballProxy_geo - 3300018: spineProxy_geo - 3300020: l_clavicleProxy_geo - 3300022: l_shourderProxy_geo - 3300024: l_erbowProxy_geo - 3300026: l_wristProxy_geo - 3300028: l_thumbProxy_01_geo - 3300030: l_thumbProxy_02_geo - 3300032: l_thumbProxy_03_geo - 3300034: l_indexProxy_01_geo - 3300036: l_indexProxy_02_geo - 3300038: l_indexProxy_03_geo - 3300040: l_middleProxy_01_geo - 3300042: l_middleProxy_02_geo - 3300044: l_middleProxy_03_geo - 3300046: l_ringProxy_01_geo - 3300048: l_ringProxy_02_geo - 3300050: l_ringProxy_03_geo - 3300052: l_pinkyProxy_01_geo - 3300054: l_pinkyProxy_02_geo - 3300056: l_pinkyProxy_03_geo - 3300058: chestProxy_geo - 3300060: r_clavicleProxy_geo - 3300062: r_shourderProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_wristProxy_geo - 3300068: r_thumbProxy_01_geo - 3300070: r_thumbProxy_02_geo - 3300072: r_thumbProxy_03_geo - 3300074: r_indexProxy_01_geo - 3300076: r_indexProxy_02_geo - 3300078: r_indexProxy_03_geo - 3300080: r_middleProxy_01_geo - 3300082: r_middleProxy_02_geo - 3300084: r_middleProxy_03_geo - 3300086: r_ringProxy_01_geo - 3300088: r_ringProxy_02_geo - 3300090: r_ringProxy_03_geo - 3300092: r_pinkyProxy_01_geo - 3300094: r_pinkyProxy_02_geo - 3300096: r_pinkyProxy_03_geo - 3300098: neckProxy_geo - 3300100: UNI_01_Upper_teethProxy - 3300102: headProxy_geo - 3300104: jawProxy_geo - 3300106: UNI_01_Lower_teethProxy - 3300108: UNI_01_TongueTipProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: r_UNI_eye - 3300114: l_UNI_eye - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: __preview___209_Run_JumpDownLow_Run - 7400002: HumanoidMidAirRight - 7400004: HumanoidMidAirLeft - 9500000: //RootNode - 11100000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: //RootNode + - first: + 1: 100002 + second: l_hipProxy_geo + - first: + 1: 100004 + second: l_kneeProxy_geo + - first: + 1: 100006 + second: l_ankleProxy_geo + - first: + 1: 100008 + second: l_ballProxy_geo + - first: + 1: 100010 + second: LToeBase_End2 + - first: + 1: 100012 + second: LeftToes + - first: + 1: 100014 + second: LeftFoot + - first: + 1: 100016 + second: LeftLeg + - first: + 1: 100018 + second: LeftUpLeg + - first: + 1: 100020 + second: pelvisProxy_geo + - first: + 1: 100022 + second: r_hipProxy_geo + - first: + 1: 100024 + second: r_kneeProxy_geo + - first: + 1: 100026 + second: r_ankleProxy_geo + - first: + 1: 100028 + second: r_ballProxy_geo + - first: + 1: 100030 + second: LToeBase_End3 + - first: + 1: 100032 + second: RightToes + - first: + 1: 100034 + second: RightFoot + - first: + 1: 100036 + second: RightLeg + - first: + 1: 100038 + second: RightUpLeg + - first: + 1: 100040 + second: spineProxy_geo + - first: + 1: 100042 + second: l_clavicleProxy_geo + - first: + 1: 100044 + second: l_shourderProxy_geo + - first: + 1: 100046 + second: l_erbowProxy_geo + - first: + 1: 100048 + second: l_wristProxy_geo + - first: + 1: 100050 + second: l_thumbProxy_01_geo + - first: + 1: 100052 + second: l_thumbProxy_02_geo + - first: + 1: 100054 + second: l_thumbProxy_03_geo + - first: + 1: 100056 + second: LeftHandThumb13 + - first: + 1: 100058 + second: LeftHandThumb3 + - first: + 1: 100060 + second: LeftHandThumb2 + - first: + 1: 100062 + second: LeftHandThumb1 + - first: + 1: 100064 + second: l_indexProxy_01_geo + - first: + 1: 100066 + second: l_indexProxy_02_geo + - first: + 1: 100068 + second: l_indexProxy_03_geo + - first: + 1: 100070 + second: LeftHandIndex13 + - first: + 1: 100072 + second: LeftHandIndex3 + - first: + 1: 100074 + second: LeftHandIndex2 + - first: + 1: 100076 + second: LeftHandIndex1 + - first: + 1: 100078 + second: l_middleProxy_01_geo + - first: + 1: 100080 + second: l_middleProxy_02_geo + - first: + 1: 100082 + second: l_middleProxy_03_geo + - first: + 1: 100084 + second: LeftHandMiddle13 + - first: + 1: 100086 + second: LeftHandMiddle3 + - first: + 1: 100088 + second: LeftHandMiddle2 + - first: + 1: 100090 + second: LeftHandMiddle1 + - first: + 1: 100092 + second: l_ringProxy_01_geo + - first: + 1: 100094 + second: l_ringProxy_02_geo + - first: + 1: 100096 + second: l_ringProxy_03_geo + - first: + 1: 100098 + second: LeftHandRing13 + - first: + 1: 100100 + second: LeftHandRing3 + - first: + 1: 100102 + second: LeftHandRing2 + - first: + 1: 100104 + second: LeftHandRing1 + - first: + 1: 100106 + second: l_pinkyProxy_01_geo + - first: + 1: 100108 + second: l_pinkyProxy_02_geo + - first: + 1: 100110 + second: l_pinkyProxy_03_geo + - first: + 1: 100112 + second: LeftHandPinky13 + - first: + 1: 100114 + second: LeftHandPinky3 + - first: + 1: 100116 + second: LeftHandPinky2 + - first: + 1: 100118 + second: LeftHandPinky1 + - first: + 1: 100120 + second: LeftHand + - first: + 1: 100122 + second: LeftForeArm + - first: + 1: 100124 + second: LeftArm + - first: + 1: 100126 + second: LeftShoulder + - first: + 1: 100128 + second: chestProxy_geo + - first: + 1: 100130 + second: r_clavicleProxy_geo + - first: + 1: 100132 + second: r_shourderProxy_geo + - first: + 1: 100134 + second: r_erbowProxy_geo + - first: + 1: 100136 + second: r_wristProxy_geo + - first: + 1: 100138 + second: r_thumbProxy_01_geo + - first: + 1: 100140 + second: r_thumbProxy_02_geo + - first: + 1: 100142 + second: r_thumbProxy_03_geo + - first: + 1: 100144 + second: LeftHandThumb17 + - first: + 1: 100146 + second: RightHandThumb3 + - first: + 1: 100148 + second: RightHandThumb2 + - first: + 1: 100150 + second: RightHandThumb1 + - first: + 1: 100152 + second: r_indexProxy_01_geo + - first: + 1: 100154 + second: r_indexProxy_02_geo + - first: + 1: 100156 + second: r_indexProxy_03_geo + - first: + 1: 100158 + second: LeftHandIndex17 + - first: + 1: 100160 + second: RightHandIndex3 + - first: + 1: 100162 + second: RightHandIndex2 + - first: + 1: 100164 + second: RightHandIndex1 + - first: + 1: 100166 + second: r_middleProxy_01_geo + - first: + 1: 100168 + second: r_middleProxy_02_geo + - first: + 1: 100170 + second: r_middleProxy_03_geo + - first: + 1: 100172 + second: LeftHandMiddle17 + - first: + 1: 100174 + second: RightHandMiddle3 + - first: + 1: 100176 + second: RightHandMiddle2 + - first: + 1: 100178 + second: RightHandMiddle1 + - first: + 1: 100180 + second: r_ringProxy_01_geo + - first: + 1: 100182 + second: r_ringProxy_02_geo + - first: + 1: 100184 + second: r_ringProxy_03_geo + - first: + 1: 100186 + second: LeftHandRing17 + - first: + 1: 100188 + second: RightHandRing3 + - first: + 1: 100190 + second: RightHandRing2 + - first: + 1: 100192 + second: RightHandRing1 + - first: + 1: 100194 + second: r_pinkyProxy_01_geo + - first: + 1: 100196 + second: r_pinkyProxy_02_geo + - first: + 1: 100198 + second: r_pinkyProxy_03_geo + - first: + 1: 100200 + second: LeftHandPinky17 + - first: + 1: 100202 + second: RightHandPinky3 + - first: + 1: 100204 + second: RightHandPinky2 + - first: + 1: 100206 + second: RightHandPinky1 + - first: + 1: 100208 + second: RightHand + - first: + 1: 100210 + second: RightForeArm + - first: + 1: 100212 + second: RightArm + - first: + 1: 100214 + second: RightShoulder + - first: + 1: 100216 + second: neckProxy_geo + - first: + 1: 100218 + second: UNI_01_Upper_teethProxy + - first: + 1: 100220 + second: headProxy_geo + - first: + 1: 100222 + second: RightLipUpper + - first: + 1: 100224 + second: RightNostril + - first: + 1: 100226 + second: RightCheek + - first: + 1: 100228 + second: RightEyelidLower + - first: + 1: 100230 + second: RightEyelidUpper + - first: + 1: 100232 + second: RightIOuterBrow + - first: + 1: 100234 + second: RightInnerBrow + - first: + 1: 100236 + second: LeftIOuterBrow + - first: + 1: 100238 + second: LeftInnerBrow + - first: + 1: 100240 + second: LeftEyelidUpper + - first: + 1: 100242 + second: LeftEyelidLower + - first: + 1: 100244 + second: LeftCheek + - first: + 1: 100246 + second: LeftNostril + - first: + 1: 100248 + second: LeftLipUpper + - first: + 1: 100250 + second: jawProxy_geo + - first: + 1: 100252 + second: UNI_01_Lower_teethProxy + - first: + 1: 100254 + second: LeftLipCorner + - first: + 1: 100256 + second: RightLipCorner + - first: + 1: 100258 + second: RightLipLower + - first: + 1: 100260 + second: JawEND + - first: + 1: 100262 + second: LeftLipLower + - first: + 1: 100264 + second: UNI_01_TongueTipProxy + - first: + 1: 100266 + second: TongueTip + - first: + 1: 100268 + second: UNI_01_TongueBaseProxy + - first: + 1: 100270 + second: TongueBack + - first: + 1: 100272 + second: Jaw + - first: + 1: 100274 + second: r_UNI_eye + - first: + 1: 100276 + second: RightEye + - first: + 1: 100278 + second: l_UNI_eye + - first: + 1: 100280 + second: LeftEye + - first: + 1: 100282 + second: HeadTop_End + - first: + 1: 100284 + second: Head + - first: + 1: 100286 + second: Neck + - first: + 1: 100288 + second: Chest + - first: + 1: 100290 + second: Spine + - first: + 1: 100292 + second: Hips + - first: + 1: 100294 + second: Reference + - first: + 4: 400000 + second: //RootNode + - first: + 4: 400002 + second: l_hipProxy_geo + - first: + 4: 400004 + second: l_kneeProxy_geo + - first: + 4: 400006 + second: l_ankleProxy_geo + - first: + 4: 400008 + second: l_ballProxy_geo + - first: + 4: 400010 + second: LToeBase_End2 + - first: + 4: 400012 + second: LeftToes + - first: + 4: 400014 + second: LeftFoot + - first: + 4: 400016 + second: LeftLeg + - first: + 4: 400018 + second: LeftUpLeg + - first: + 4: 400020 + second: pelvisProxy_geo + - first: + 4: 400022 + second: r_hipProxy_geo + - first: + 4: 400024 + second: r_kneeProxy_geo + - first: + 4: 400026 + second: r_ankleProxy_geo + - first: + 4: 400028 + second: r_ballProxy_geo + - first: + 4: 400030 + second: LToeBase_End3 + - first: + 4: 400032 + second: RightToes + - first: + 4: 400034 + second: RightFoot + - first: + 4: 400036 + second: RightLeg + - first: + 4: 400038 + second: RightUpLeg + - first: + 4: 400040 + second: spineProxy_geo + - first: + 4: 400042 + second: l_clavicleProxy_geo + - first: + 4: 400044 + second: l_shourderProxy_geo + - first: + 4: 400046 + second: l_erbowProxy_geo + - first: + 4: 400048 + second: l_wristProxy_geo + - first: + 4: 400050 + second: l_thumbProxy_01_geo + - first: + 4: 400052 + second: l_thumbProxy_02_geo + - first: + 4: 400054 + second: l_thumbProxy_03_geo + - first: + 4: 400056 + second: LeftHandThumb13 + - first: + 4: 400058 + second: LeftHandThumb3 + - first: + 4: 400060 + second: LeftHandThumb2 + - first: + 4: 400062 + second: LeftHandThumb1 + - first: + 4: 400064 + second: l_indexProxy_01_geo + - first: + 4: 400066 + second: l_indexProxy_02_geo + - first: + 4: 400068 + second: l_indexProxy_03_geo + - first: + 4: 400070 + second: LeftHandIndex13 + - first: + 4: 400072 + second: LeftHandIndex3 + - first: + 4: 400074 + second: LeftHandIndex2 + - first: + 4: 400076 + second: LeftHandIndex1 + - first: + 4: 400078 + second: l_middleProxy_01_geo + - first: + 4: 400080 + second: l_middleProxy_02_geo + - first: + 4: 400082 + second: l_middleProxy_03_geo + - first: + 4: 400084 + second: LeftHandMiddle13 + - first: + 4: 400086 + second: LeftHandMiddle3 + - first: + 4: 400088 + second: LeftHandMiddle2 + - first: + 4: 400090 + second: LeftHandMiddle1 + - first: + 4: 400092 + second: l_ringProxy_01_geo + - first: + 4: 400094 + second: l_ringProxy_02_geo + - first: + 4: 400096 + second: l_ringProxy_03_geo + - first: + 4: 400098 + second: LeftHandRing13 + - first: + 4: 400100 + second: LeftHandRing3 + - first: + 4: 400102 + second: LeftHandRing2 + - first: + 4: 400104 + second: LeftHandRing1 + - first: + 4: 400106 + second: l_pinkyProxy_01_geo + - first: + 4: 400108 + second: l_pinkyProxy_02_geo + - first: + 4: 400110 + second: l_pinkyProxy_03_geo + - first: + 4: 400112 + second: LeftHandPinky13 + - first: + 4: 400114 + second: LeftHandPinky3 + - first: + 4: 400116 + second: LeftHandPinky2 + - first: + 4: 400118 + second: LeftHandPinky1 + - first: + 4: 400120 + second: LeftHand + - first: + 4: 400122 + second: LeftForeArm + - first: + 4: 400124 + second: LeftArm + - first: + 4: 400126 + second: LeftShoulder + - first: + 4: 400128 + second: chestProxy_geo + - first: + 4: 400130 + second: r_clavicleProxy_geo + - first: + 4: 400132 + second: r_shourderProxy_geo + - first: + 4: 400134 + second: r_erbowProxy_geo + - first: + 4: 400136 + second: r_wristProxy_geo + - first: + 4: 400138 + second: r_thumbProxy_01_geo + - first: + 4: 400140 + second: r_thumbProxy_02_geo + - first: + 4: 400142 + second: r_thumbProxy_03_geo + - first: + 4: 400144 + second: LeftHandThumb17 + - first: + 4: 400146 + second: RightHandThumb3 + - first: + 4: 400148 + second: RightHandThumb2 + - first: + 4: 400150 + second: RightHandThumb1 + - first: + 4: 400152 + second: r_indexProxy_01_geo + - first: + 4: 400154 + second: r_indexProxy_02_geo + - first: + 4: 400156 + second: r_indexProxy_03_geo + - first: + 4: 400158 + second: LeftHandIndex17 + - first: + 4: 400160 + second: RightHandIndex3 + - first: + 4: 400162 + second: RightHandIndex2 + - first: + 4: 400164 + second: RightHandIndex1 + - first: + 4: 400166 + second: r_middleProxy_01_geo + - first: + 4: 400168 + second: r_middleProxy_02_geo + - first: + 4: 400170 + second: r_middleProxy_03_geo + - first: + 4: 400172 + second: LeftHandMiddle17 + - first: + 4: 400174 + second: RightHandMiddle3 + - first: + 4: 400176 + second: RightHandMiddle2 + - first: + 4: 400178 + second: RightHandMiddle1 + - first: + 4: 400180 + second: r_ringProxy_01_geo + - first: + 4: 400182 + second: r_ringProxy_02_geo + - first: + 4: 400184 + second: r_ringProxy_03_geo + - first: + 4: 400186 + second: LeftHandRing17 + - first: + 4: 400188 + second: RightHandRing3 + - first: + 4: 400190 + second: RightHandRing2 + - first: + 4: 400192 + second: RightHandRing1 + - first: + 4: 400194 + second: r_pinkyProxy_01_geo + - first: + 4: 400196 + second: r_pinkyProxy_02_geo + - first: + 4: 400198 + second: r_pinkyProxy_03_geo + - first: + 4: 400200 + second: LeftHandPinky17 + - first: + 4: 400202 + second: RightHandPinky3 + - first: + 4: 400204 + second: RightHandPinky2 + - first: + 4: 400206 + second: RightHandPinky1 + - first: + 4: 400208 + second: RightHand + - first: + 4: 400210 + second: RightForeArm + - first: + 4: 400212 + second: RightArm + - first: + 4: 400214 + second: RightShoulder + - first: + 4: 400216 + second: neckProxy_geo + - first: + 4: 400218 + second: UNI_01_Upper_teethProxy + - first: + 4: 400220 + second: headProxy_geo + - first: + 4: 400222 + second: RightLipUpper + - first: + 4: 400224 + second: RightNostril + - first: + 4: 400226 + second: RightCheek + - first: + 4: 400228 + second: RightEyelidLower + - first: + 4: 400230 + second: RightEyelidUpper + - first: + 4: 400232 + second: RightIOuterBrow + - first: + 4: 400234 + second: RightInnerBrow + - first: + 4: 400236 + second: LeftIOuterBrow + - first: + 4: 400238 + second: LeftInnerBrow + - first: + 4: 400240 + second: LeftEyelidUpper + - first: + 4: 400242 + second: LeftEyelidLower + - first: + 4: 400244 + second: LeftCheek + - first: + 4: 400246 + second: LeftNostril + - first: + 4: 400248 + second: LeftLipUpper + - first: + 4: 400250 + second: jawProxy_geo + - first: + 4: 400252 + second: UNI_01_Lower_teethProxy + - first: + 4: 400254 + second: LeftLipCorner + - first: + 4: 400256 + second: RightLipCorner + - first: + 4: 400258 + second: RightLipLower + - first: + 4: 400260 + second: JawEND + - first: + 4: 400262 + second: LeftLipLower + - first: + 4: 400264 + second: UNI_01_TongueTipProxy + - first: + 4: 400266 + second: TongueTip + - first: + 4: 400268 + second: UNI_01_TongueBaseProxy + - first: + 4: 400270 + second: TongueBack + - first: + 4: 400272 + second: Jaw + - first: + 4: 400274 + second: r_UNI_eye + - first: + 4: 400276 + second: RightEye + - first: + 4: 400278 + second: l_UNI_eye + - first: + 4: 400280 + second: LeftEye + - first: + 4: 400282 + second: HeadTop_End + - first: + 4: 400284 + second: Head + - first: + 4: 400286 + second: Neck + - first: + 4: 400288 + second: Chest + - first: + 4: 400290 + second: Spine + - first: + 4: 400292 + second: Hips + - first: + 4: 400294 + second: Reference + - first: + 23: 2300000 + second: l_hipProxy_geo + - first: + 23: 2300002 + second: l_kneeProxy_geo + - first: + 23: 2300004 + second: l_ankleProxy_geo + - first: + 23: 2300006 + second: l_ballProxy_geo + - first: + 23: 2300008 + second: pelvisProxy_geo + - first: + 23: 2300010 + second: r_hipProxy_geo + - first: + 23: 2300012 + second: r_kneeProxy_geo + - first: + 23: 2300014 + second: r_ankleProxy_geo + - first: + 23: 2300016 + second: r_ballProxy_geo + - first: + 23: 2300018 + second: spineProxy_geo + - first: + 23: 2300020 + second: l_clavicleProxy_geo + - first: + 23: 2300022 + second: l_shourderProxy_geo + - first: + 23: 2300024 + second: l_erbowProxy_geo + - first: + 23: 2300026 + second: l_wristProxy_geo + - first: + 23: 2300028 + second: l_thumbProxy_01_geo + - first: + 23: 2300030 + second: l_thumbProxy_02_geo + - first: + 23: 2300032 + second: l_thumbProxy_03_geo + - first: + 23: 2300034 + second: l_indexProxy_01_geo + - first: + 23: 2300036 + second: l_indexProxy_02_geo + - first: + 23: 2300038 + second: l_indexProxy_03_geo + - first: + 23: 2300040 + second: l_middleProxy_01_geo + - first: + 23: 2300042 + second: l_middleProxy_02_geo + - first: + 23: 2300044 + second: l_middleProxy_03_geo + - first: + 23: 2300046 + second: l_ringProxy_01_geo + - first: + 23: 2300048 + second: l_ringProxy_02_geo + - first: + 23: 2300050 + second: l_ringProxy_03_geo + - first: + 23: 2300052 + second: l_pinkyProxy_01_geo + - first: + 23: 2300054 + second: l_pinkyProxy_02_geo + - first: + 23: 2300056 + second: l_pinkyProxy_03_geo + - first: + 23: 2300058 + second: chestProxy_geo + - first: + 23: 2300060 + second: r_clavicleProxy_geo + - first: + 23: 2300062 + second: r_shourderProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_wristProxy_geo + - first: + 23: 2300068 + second: r_thumbProxy_01_geo + - first: + 23: 2300070 + second: r_thumbProxy_02_geo + - first: + 23: 2300072 + second: r_thumbProxy_03_geo + - first: + 23: 2300074 + second: r_indexProxy_01_geo + - first: + 23: 2300076 + second: r_indexProxy_02_geo + - first: + 23: 2300078 + second: r_indexProxy_03_geo + - first: + 23: 2300080 + second: r_middleProxy_01_geo + - first: + 23: 2300082 + second: r_middleProxy_02_geo + - first: + 23: 2300084 + second: r_middleProxy_03_geo + - first: + 23: 2300086 + second: r_ringProxy_01_geo + - first: + 23: 2300088 + second: r_ringProxy_02_geo + - first: + 23: 2300090 + second: r_ringProxy_03_geo + - first: + 23: 2300092 + second: r_pinkyProxy_01_geo + - first: + 23: 2300094 + second: r_pinkyProxy_02_geo + - first: + 23: 2300096 + second: r_pinkyProxy_03_geo + - first: + 23: 2300098 + second: neckProxy_geo + - first: + 23: 2300100 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300102 + second: headProxy_geo + - first: + 23: 2300104 + second: jawProxy_geo + - first: + 23: 2300106 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300108 + second: UNI_01_TongueTipProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: r_UNI_eye + - first: + 23: 2300114 + second: l_UNI_eye + - first: + 33: 3300000 + second: l_hipProxy_geo + - first: + 33: 3300002 + second: l_kneeProxy_geo + - first: + 33: 3300004 + second: l_ankleProxy_geo + - first: + 33: 3300006 + second: l_ballProxy_geo + - first: + 33: 3300008 + second: pelvisProxy_geo + - first: + 33: 3300010 + second: r_hipProxy_geo + - first: + 33: 3300012 + second: r_kneeProxy_geo + - first: + 33: 3300014 + second: r_ankleProxy_geo + - first: + 33: 3300016 + second: r_ballProxy_geo + - first: + 33: 3300018 + second: spineProxy_geo + - first: + 33: 3300020 + second: l_clavicleProxy_geo + - first: + 33: 3300022 + second: l_shourderProxy_geo + - first: + 33: 3300024 + second: l_erbowProxy_geo + - first: + 33: 3300026 + second: l_wristProxy_geo + - first: + 33: 3300028 + second: l_thumbProxy_01_geo + - first: + 33: 3300030 + second: l_thumbProxy_02_geo + - first: + 33: 3300032 + second: l_thumbProxy_03_geo + - first: + 33: 3300034 + second: l_indexProxy_01_geo + - first: + 33: 3300036 + second: l_indexProxy_02_geo + - first: + 33: 3300038 + second: l_indexProxy_03_geo + - first: + 33: 3300040 + second: l_middleProxy_01_geo + - first: + 33: 3300042 + second: l_middleProxy_02_geo + - first: + 33: 3300044 + second: l_middleProxy_03_geo + - first: + 33: 3300046 + second: l_ringProxy_01_geo + - first: + 33: 3300048 + second: l_ringProxy_02_geo + - first: + 33: 3300050 + second: l_ringProxy_03_geo + - first: + 33: 3300052 + second: l_pinkyProxy_01_geo + - first: + 33: 3300054 + second: l_pinkyProxy_02_geo + - first: + 33: 3300056 + second: l_pinkyProxy_03_geo + - first: + 33: 3300058 + second: chestProxy_geo + - first: + 33: 3300060 + second: r_clavicleProxy_geo + - first: + 33: 3300062 + second: r_shourderProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_wristProxy_geo + - first: + 33: 3300068 + second: r_thumbProxy_01_geo + - first: + 33: 3300070 + second: r_thumbProxy_02_geo + - first: + 33: 3300072 + second: r_thumbProxy_03_geo + - first: + 33: 3300074 + second: r_indexProxy_01_geo + - first: + 33: 3300076 + second: r_indexProxy_02_geo + - first: + 33: 3300078 + second: r_indexProxy_03_geo + - first: + 33: 3300080 + second: r_middleProxy_01_geo + - first: + 33: 3300082 + second: r_middleProxy_02_geo + - first: + 33: 3300084 + second: r_middleProxy_03_geo + - first: + 33: 3300086 + second: r_ringProxy_01_geo + - first: + 33: 3300088 + second: r_ringProxy_02_geo + - first: + 33: 3300090 + second: r_ringProxy_03_geo + - first: + 33: 3300092 + second: r_pinkyProxy_01_geo + - first: + 33: 3300094 + second: r_pinkyProxy_02_geo + - first: + 33: 3300096 + second: r_pinkyProxy_03_geo + - first: + 33: 3300098 + second: neckProxy_geo + - first: + 33: 3300100 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300102 + second: headProxy_geo + - first: + 33: 3300104 + second: jawProxy_geo + - first: + 33: 3300106 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300108 + second: UNI_01_TongueTipProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: r_UNI_eye + - first: + 33: 3300114 + second: l_UNI_eye + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: __preview___209_Run_JumpDownLow_Run + - first: + 74: 7400002 + second: HumanoidMidAirRight + - first: + 74: 7400004 + second: HumanoidMidAirLeft + - first: + 95: 9500000 + second: //RootNode + - first: + 111: 11100000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 3 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 3 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidMidAirRight takeName: _209_Run_JumpDownLow_Run + internalID: 0 firstFrame: 118 lastFrame: 120 wrapMode: 0 @@ -505,6 +1471,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 1 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -523,9 +1490,11 @@ ModelImporter: weight: 0 maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidMidAirLeft takeName: _209_Run_JumpDownLow_Run + internalID: 0 firstFrame: 118 lastFrame: 120 wrapMode: 0 @@ -533,6 +1502,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -727,18 +1697,31 @@ ModelImporter: weight: 1 maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -746,12 +1729,16 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -1187,460 +2174,468 @@ ModelImporter: modified: 0 skeleton: - name: HumanoidMidAir(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: 0, y: .978280783, z: 0} + parentName: + position: {x: 0, y: 0.9782808, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg - position: {x: -.0754494965, y: -.0456640199, z: 3.5527136e-17} + parentName: + position: {x: -0.0754495, y: -0.04566402, z: 3.5527136e-17} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg - position: {x: -.0205504987, y: -.409129977, z: -.000718647963} + parentName: + position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot - position: {x: -.00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes - position: {x: -.00748699997, y: -.0731673017, z: .145427123} + parentName: + position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: -0, z: -0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LToeBase_End2 - position: {x: .0126400003, y: -.0131357787, z: .0358933695} + parentName: + position: {x: 0.01264, y: -0.013135779, z: 0.03589337} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg - position: {x: .0754495338, y: -.0456639901, z: -7.1054272e-17} + parentName: + position: {x: 0.075449534, y: -0.04566399, z: -7.105427e-17} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg - position: {x: .0205504671, y: -.409130007, z: -.000718647963} + parentName: + position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot - position: {x: .00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes - position: {x: .00748699997, y: -.0731673017, z: .145427495} + parentName: + position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: -0, z: -0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LToeBase_End3 - position: {x: -.0126400003, y: -.0131357787, z: .0358929969} + parentName: + position: {x: -0.01264, y: -0.013135779, z: 0.035892997} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine - position: {x: -3.55271347e-16, y: .0922631845, z: .0157713313} + parentName: + position: {x: -3.5527135e-16, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest - position: {x: -0, y: .162540287, z: -.00165605545} + parentName: + position: {x: -0, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder - position: {x: -.0382859968, y: .221622497, z: -.017063085} - rotation: {x: -.0169460457, y: -.0529774576, z: .15200372, w: .986813664} + parentName: + position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} + rotation: {x: -0.016946046, y: -0.052977458, z: 0.15200372, w: 0.98681366} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm - position: {x: -.100502051, y: 8.52651264e-16, z: -1.91846525e-15} - rotation: {x: .303798467, y: .015646534, z: -.148740351, w: .940924048} + parentName: + position: {x: -0.10050205, y: 8.5265126e-16, z: -1.9184653e-15} + rotation: {x: 0.30379847, y: 0.015646534, z: -0.14874035, w: 0.94092405} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm - position: {x: -.254049301, y: -5.6772363e-14, z: -7.74633667e-13} - rotation: {x: .0051808483, y: .0260420516, z: -.0195699595, w: .999455869} + parentName: + position: {x: -0.2540493, y: -5.6772363e-14, z: -7.7463367e-13} + rotation: {x: 0.0051808483, y: 0.026042052, z: -0.01956996, w: 0.99945587} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand - position: {x: -.24638927, y: -1.34519945e-12, z: -1.48500223e-11} + parentName: + position: {x: -0.24638927, y: -1.3451995e-12, z: -1.4850022e-11} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 - position: {x: -.0751257986, y: -.00784140453, z: .0326526426} - rotation: {x: -.0308351107, y: .0179683305, z: .0871939808, w: .995551884} + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: -0.03083511, y: 0.01796833, z: 0.08719398, w: 0.9955519} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 - position: {x: -.03979728, y: 4.98084046e-05, z: .00118575036} - rotation: {x: -.0689609796, y: .0147136748, z: .0279580243, w: .997119009} + parentName: + position: {x: -0.03979728, y: 0.000049808405, z: 0.0011857504} + rotation: {x: -0.06896098, y: 0.014713675, z: 0.027958024, w: 0.997119} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 - position: {x: -.0279684775, y: -6.28308783e-09, z: -5.17217202e-08} - rotation: {x: 4.9360068e-08, y: .0757969022, z: .0863323957, w: .993378937} + parentName: + position: {x: -0.027968477, y: -0.000000006283088, z: -0.00000005172172} + rotation: {x: 0.000000049360068, y: 0.0757969, z: 0.086332396, w: 0.99337894} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex13 - position: {x: -.0186619665, y: .00437385263, z: -.00384002505} - rotation: {x: -.00472124433, y: -.101354174, z: -.0462910533, w: .993761659} + parentName: + position: {x: -0.018661967, y: 0.0043738526, z: -0.003840025} + rotation: {x: -0.0047212443, y: -0.101354174, z: -0.046291053, w: 0.99376166} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 - position: {x: -.0760238245, y: -.00188513438, z: .0101412293} - rotation: {x: -.0157171767, y: .053721305, z: .0864773318, w: .994680226} + parentName: + position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} + rotation: {x: -0.015717177, y: 0.053721305, z: 0.08647733, w: 0.9946802} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 - position: {x: -.0442804359, y: 4.79887376e-06, z: -.000425400125} - rotation: {x: -.0151028167, y: -.00648156414, z: .0269547533, w: .999501586} + parentName: + position: {x: -0.044280436, y: 0.0000047988738, z: -0.00042540013} + rotation: {x: -0.015102817, y: -0.006481564, z: 0.026954753, w: 0.9995016} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 - position: {x: -.0339648277, y: -1.2198452e-08, z: 3.7516088e-09} - rotation: {x: -1.01979772e-07, y: .00856075436, z: .0601487383, w: .998152792} + parentName: + position: {x: -0.033964828, y: -0.000000012198452, z: 0.000000003751609} + rotation: {x: -0.00000010197977, y: 0.008560754, z: 0.06014874, w: 0.9981528} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle13 - position: {x: -.0196715724, y: .00392557262, z: -.000558814383} - rotation: {x: -.000701564946, y: -.0125020025, z: -.0560236648, w: .998350918} + parentName: + position: {x: -0.019671572, y: 0.0039255726, z: -0.0005588144} + rotation: {x: -0.00070156495, y: -0.0125020025, z: -0.056023665, w: 0.9983509} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 - position: {x: -.0656599477, y: -.00782510638, z: -.0322512463} - rotation: {x: -.0464271381, y: .0757413954, z: .0861605853, w: .992312551} + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.04642714, y: 0.075741395, z: 0.086160585, w: 0.99231255} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 - position: {x: -.0308054481, y: -3.0874573e-05, z: -.0014480775} - rotation: {x: .0494193174, y: -.0217061825, z: .0329463966, w: .997998536} + parentName: + position: {x: -0.030805448, y: -0.000030874573, z: -0.0014480775} + rotation: {x: 0.049419317, y: -0.021706183, z: 0.032946397, w: 0.99799854} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 - position: {x: -.0230640266, y: -6.40258258e-06, z: 1.8330093e-08} - rotation: {x: 1.67766084e-05, y: -.0589505993, z: .0381766856, w: .997530639} + parentName: + position: {x: -0.023064027, y: -0.0000064025826, z: 0.000000018330093} + rotation: {x: 0.000016776608, y: -0.0589506, z: 0.038176686, w: 0.99753064} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky13 - position: {x: -.0169719923, y: .00202882662, z: .00314032286} - rotation: {x: .000580511638, y: .0944183916, z: -.00612070598, w: .995513618} + parentName: + position: {x: -0.016971992, y: 0.0020288266, z: 0.0031403229} + rotation: {x: 0.00058051164, y: 0.09441839, z: -0.006120706, w: 0.9955136} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 - position: {x: -.0703021064, y: -.00374530931, z: -.0114117917} - rotation: {x: -.0137468018, y: .0746479779, z: .0850574374, w: .993480802} + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: -0.013746802, y: 0.07464798, z: 0.08505744, w: 0.9934808} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 - position: {x: -.0431354567, y: -2.08823076e-05, z: -.00223517837} - rotation: {x: .0193584226, y: -.0256355982, z: .0290550962, w: .999061465} + parentName: + position: {x: -0.043135457, y: -0.000020882308, z: -0.0022351784} + rotation: {x: 0.019358423, y: -0.025635598, z: 0.029055096, w: 0.99906147} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 - position: {x: -.0308355652, y: 7.67334946e-11, z: -1.64974168e-08} - rotation: {x: -1.97207484e-07, y: -.0178757701, z: .0421713889, w: .998950541} + parentName: + position: {x: -0.030835565, y: 7.6733495e-11, z: -0.000000016497417} + rotation: {x: -0.00000019720748, y: -0.01787577, z: 0.04217139, w: 0.99895054} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing13 - position: {x: -.0205416381, y: .00325422082, z: .00137918338} - rotation: {x: .00240248861, y: .0378382765, z: -.063320443, w: .997272789} + parentName: + position: {x: -0.020541638, y: 0.0032542208, z: 0.0013791834} + rotation: {x: 0.0024024886, y: 0.037838276, z: -0.06332044, w: 0.9972728} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 - position: {x: -.0142312413, y: -.0123778246, z: .0255316682} - rotation: {x: -.158041775, y: -.0722015724, z: -.152828872, w: .972858191} + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.15804178, y: -0.07220157, z: -0.15282887, w: 0.9728582} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 - position: {x: -.0163739994, y: -.00528999977, z: .0234914087} - rotation: {x: -.0260618888, y: .0966887325, z: .00360755436, w: .994966924} + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.026061889, y: 0.09668873, z: 0.0036075544, w: 0.9949669} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 - position: {x: -.0254599992, y: -.00763999997, z: .0208330005} - rotation: {x: .00545194838, y: .000442996417, z: .00682530133, w: .999961793} + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} + rotation: {x: 0.0054519484, y: 0.00044299642, z: 0.0068253013, w: 0.9999618} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb13 - position: {x: -.031868957, y: -.0052999449, z: .0258005001} + parentName: + position: {x: -0.031868957, y: -0.005299945, z: 0.0258005} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck - position: {x: 4.26325632e-16, y: .259009302, z: -.0324132554} + parentName: + position: {x: 4.2632563e-16, y: 0.2590093, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head - position: {x: 1.27897687e-15, y: .0830703825, z: .0113267815} + parentName: + position: {x: 1.2789769e-15, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: HeadTop_End - position: {x: -5.17045827e-18, y: .188178778, z: .0121086892} + parentName: + position: {x: -5.1704583e-18, y: 0.18817878, z: 0.012108689} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw - position: {x: 1.73472344e-20, y: .0111267585, z: .0103275431} - rotation: {x: .219240054, y: -0, z: -0, w: .975670993} + parentName: + position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} + rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND - position: {x: -1.73472344e-20, y: -.0482887588, z: .071851708} + parentName: + position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner - position: {x: -.032843262, y: -.01657876, z: .0661217645} + parentName: + position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower - position: {x: -.0142508168, y: -.0216887593, z: .0822406337} + parentName: + position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner - position: {x: .0328399986, y: -.01657876, z: .0661187842} + parentName: + position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower - position: {x: .0142508168, y: -.0216887593, z: .0822387859} + parentName: + position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack - position: {x: -1.73472344e-20, y: -.022869369, z: .0100954091} + parentName: + position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip - position: {x: -1.73472344e-20, y: -.0232788119, z: .0383227095} + parentName: + position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440265, y: .0337019488, z: .0594304018} + parentName: + position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye - position: {x: -.0208482333, y: .0825027004, z: .0554274321} + parentName: + position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: -0, z: -0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower - position: {x: -.0356189571, y: .0650736615, z: .076234743} + parentName: + position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper - position: {x: -.0344068967, y: .10060814, z: .0802053064} + parentName: + position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow - position: {x: -.0120626912, y: .118765265, z: .0934668258} + parentName: + position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow - position: {x: -.0550398715, y: .114825293, z: .061777398} + parentName: + position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper - position: {x: -.0145013221, y: -.00511181122, z: .094618842} + parentName: + position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril - position: {x: -.0178999994, y: .0263128281, z: .0908674002} + parentName: + position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .033702828, z: .0594273992} + parentName: + position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye - position: {x: .020849999, y: .082502827, z: .0554273985} + parentName: + position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: -0, z: -0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower - position: {x: .0356200002, y: .065072827, z: .0762374029} + parentName: + position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper - position: {x: .0344099998, y: .100612827, z: .0802073926} + parentName: + position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow - position: {x: .0120626874, y: .118765265, z: .0934668258} + parentName: + position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow - position: {x: .0550400019, y: .114822827, z: .061777398} + parentName: + position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper - position: {x: .0145013221, y: -.00510717137, z: .094617404} + parentName: + position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril - position: {x: .0178999994, y: .0263089053, z: .0908706188} + parentName: + position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder - position: {x: .0382860154, y: .221621141, z: -.017063085} - rotation: {x: .148889691, y: .986841977, z: -.0191342514, w: -.0600721166} + parentName: + position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} + rotation: {x: 0.14888969, y: 0.986842, z: -0.019134251, w: -0.060072117} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm - position: {x: -.100501455, y: -2.49955224e-06, z: -5.15574072e-08} - rotation: {x: .12166404, y: .961327732, z: -.242588788, w: .0468774885} + parentName: + position: {x: -0.100501455, y: -0.0000024995522, z: -0.000000051557407} + rotation: {x: 0.12166404, y: 0.96132773, z: -0.24258879, w: 0.04687749} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm - position: {x: .253428251, y: .00601135287, z: -.0167045239} - rotation: {x: .0546663813, y: .0180182401, z: -.0126463044, w: .998261988} + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: 0.05466638, y: 0.01801824, z: -0.012646304, w: 0.998262} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand - position: {x: .245373696, y: .0216417722, z: .00555046508} + parentName: + position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 - position: {x: .0747694969, y: -.00124305359, z: .0343444981} - rotation: {x: -.0269991793, y: .134705037, z: -.0601718239, w: .988688529} + parentName: + position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} + rotation: {x: -0.02699918, y: 0.13470504, z: -0.060171824, w: 0.9886885} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 - position: {x: .0370584019, y: .00072612107, z: .0145388944} - rotation: {x: -.0803585127, y: .0230226964, z: .0437488221, w: .995539308} + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.08035851, y: 0.023022696, z: 0.043748822, w: 0.9955393} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 - position: {x: .0252250377, y: -.00496646529, z: .0110121462} - rotation: {x: .0205331407, y: -.0777122155, z: -.0820826665, w: .993378937} + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} + rotation: {x: 0.02053314, y: -0.077712215, z: -0.08208267, w: 0.99337894} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex17 - position: {x: .019119978, y: .000846308249, z: .00398164755} - rotation: {x: -.00472124433, y: -.101354174, z: -.0462910533, w: .993761659} + parentName: + position: {x: 0.019119978, y: 0.00084630825, z: 0.0039816475} + rotation: {x: -0.0047212443, y: -0.101354174, z: -0.046291053, w: 0.99376166} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 - position: {x: .0756476447, y: .00479140272, z: .0118531818} - rotation: {x: -.0139232948, y: .00904202927, z: -.0464321077, w: .998783469} + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.013923295, y: 0.009042029, z: -0.046432108, w: 0.99878347} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 - position: {x: .0438090637, y: .000194188149, z: .00645493623} - rotation: {x: -.0214098375, y: -.044567503, z: .0864230916, w: .99503088} + parentName: + position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} + rotation: {x: -0.021409838, y: -0.044567503, z: 0.08642309, w: 0.9950309} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 - position: {x: .0330724716, y: -.00754753686, z: .00168984616} - rotation: {x: .00108972914, y: -.00868750364, z: -.060128659, w: .998152256} + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} + rotation: {x: 0.0010897291, y: -0.008687504, z: -0.06012866, w: 0.99815226} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle17 - position: {x: .0200548954, y: -.000547108881, z: .000442590448} - rotation: {x: -.000701564946, y: -.0125020025, z: -.0560236648, w: .998350918} + parentName: + position: {x: 0.020054895, y: -0.0005471089, z: 0.00044259045} + rotation: {x: -0.00070156495, y: -0.0125020025, z: -0.056023665, w: 0.9983509} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 - position: {x: .0668033436, y: -.00199410878, z: -.0307561457} - rotation: {x: -.0533694737, y: -.255000681, z: -.0125761544, w: .96538502} + parentName: + position: {x: 0.06680334, y: -0.0019941088, z: -0.030756146} + rotation: {x: -0.053369474, y: -0.25500068, z: -0.012576154, w: 0.965385} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 - position: {x: .0285308417, y: -.001397143, z: -.0116237961} - rotation: {x: .0333825685, y: .00105689454, z: -.0586909167, w: .997717321} + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: 0.03338257, y: 0.0010568945, z: -0.058690917, w: 0.9977173} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 - position: {x: .0214268602, y: -.000553508929, z: -.00851660781} - rotation: {x: -.0126826987, y: .0591077842, z: -.0357496776, w: .997530639} + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} + rotation: {x: -0.012682699, y: 0.059107784, z: -0.035749678, w: 0.99753064} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky17 - position: {x: .016975116, y: .00161137758, z: -.00335797085} - rotation: {x: .000580511638, y: .0944183916, z: -.00612070598, w: .995513618} + parentName: + position: {x: 0.016975116, y: 0.0016113776, z: -0.0033579709} + rotation: {x: 0.00058051164, y: 0.09441839, z: -0.006120706, w: 0.9955136} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 - position: {x: .0705984756, y: .00245709647, z: -.00982145779} - rotation: {x: -.0145361852, y: -.117994301, z: -.0257451385, w: .992574036} + parentName: + position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} + rotation: {x: -0.014536185, y: -0.1179943, z: -0.025745139, w: 0.99257404} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 - position: {x: .0428871848, y: -.00137538207, z: -.00494585792} - rotation: {x: .0220804513, y: -.0216987785, z: .0796155706, w: .996344805} + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.004945858} + rotation: {x: 0.022080451, y: -0.021698778, z: 0.07961557, w: 0.9963448} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 - position: {x: .0295006037, y: -.00769293541, z: -.00462225592} - rotation: {x: -.00186288042, y: .0181126203, z: -.0420350544, w: .998950243} + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} + rotation: {x: -0.0018628804, y: 0.01811262, z: -0.042035054, w: 0.99895024} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing17 - position: {x: .0206709336, y: -.00200043293, z: -.00177803368} - rotation: {x: .00240248861, y: .0378382765, z: -.063320443, w: .997272789} + parentName: + position: {x: 0.020670934, y: -0.002000433, z: -0.0017780337} + rotation: {x: 0.0024024886, y: 0.037838276, z: -0.06332044, w: 0.9972728} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 - position: {x: .0146849155, y: -.0111049423, z: .0258580949} - rotation: {x: -.163419098, y: .0403524339, z: .173200503, w: .970395565} + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} + rotation: {x: -0.1634191, y: 0.040352434, z: 0.1732005, w: 0.97039557} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 - position: {x: .0163739994, y: -.00528999977, z: .0234913602} - rotation: {x: -.0260617808, y: -.0966900066, z: -.00360842934, w: .994966745} + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.02606178, y: -0.09669001, z: -0.0036084293, w: 0.99496675} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 - position: {x: .0254599992, y: -.00763999997, z: .0208330005} - rotation: {x: .00545424689, y: -.000443457626, z: -.00682825595, w: .999961734} + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} + rotation: {x: 0.005454247, y: -0.00044345763, z: -0.006828256, w: 0.99996173} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb17 - position: {x: .0318690389, y: -.00529994583, z: .0258005001} + parentName: + position: {x: 0.03186904, y: -0.005299946, z: 0.0258005} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta index cd192e305..301b3af29 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta @@ -1,660 +1,1920 @@ fileFormatVersion: 2 guid: 1cb8ed3cbba15f0479fbae54e0a963df +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 19 - fileIDToRecycleName: - 100000: Character_Ctrl:Reference - 100002: Chest - 100004: ChestEndEffector - 100006: ChestOriginEffector - 100008: chestProxy_geo - 100010: //RootNode - 100012: Head - 100014: Head 1 - 100016: HeadEffector - 100018: headProxy_geo - 100020: HeadTop_End - 100022: Hips - 100024: Hips 1 - 100026: HipsEffector - 100028: Jaw - 100030: JawEND - 100032: jawProxy_geo - 100034: l_ankleProxy_geo - 100036: l_ballProxy_geo - 100038: l_clavicleProxy_geo - 100040: l_erbowProxy_geo - 100042: l_hipProxy_geo - 100044: l_indexProxy_01_geo - 100046: l_indexProxy_02_geo - 100048: l_indexProxy_03_geo - 100050: l_kneeProxy_geo - 100052: l_middleProxy_01_geo - 100054: l_middleProxy_02_geo - 100056: l_middleProxy_03_geo - 100058: l_pinkyProxy_01_geo - 100060: l_pinkyProxy_02_geo - 100062: l_pinkyProxy_03_geo - 100064: l_ringProxy_01_geo - 100066: l_ringProxy_02_geo - 100068: l_ringProxy_03_geo - 100070: l_shourderProxy_geo - 100072: l_thumbProxy_01_geo - 100074: l_thumbProxy_02_geo - 100076: l_thumbProxy_03_geo - 100078: l_UNI_eye - 100080: l_wristProxy_geo - 100082: LeftAnkleEffector - 100084: LeftArm - 100086: LeftArm 1 - 100088: LeftCheek - 100090: LeftElbowEffector - 100092: LeftEye - 100094: LeftEyelidLower - 100096: LeftEyelidUpper - 100098: LeftFoot - 100100: LeftFoot 1 - 100102: LeftForeArm - 100104: LeftForeArm 1 - 100106: LeftHand - 100108: LeftHand 1 - 100110: LeftHandIndex1 - 100112: LeftHandIndex13 - 100114: LeftHandIndex17 - 100116: LeftHandIndex2 - 100118: LeftHandIndex3 - 100120: LeftHandIndex4 - 100122: LeftHandIndex5 - 100124: LeftHandIndex6 - 100126: LeftHandIndexEffector - 100128: LeftHandMiddle1 - 100130: LeftHandMiddle13 - 100132: LeftHandMiddle17 - 100134: LeftHandMiddle2 - 100136: LeftHandMiddle3 - 100138: LeftHandMiddle4 - 100140: LeftHandMiddle5 - 100142: LeftHandMiddle6 - 100144: LeftHandMiddleEffector - 100146: LeftHandPinky1 - 100148: LeftHandPinky13 - 100150: LeftHandPinky17 - 100152: LeftHandPinky2 - 100154: LeftHandPinky3 - 100156: LeftHandPinky4 - 100158: LeftHandPinky5 - 100160: LeftHandPinky6 - 100162: LeftHandPinkyEffector - 100164: LeftHandRing1 - 100166: LeftHandRing13 - 100168: LeftHandRing17 - 100170: LeftHandRing2 - 100172: LeftHandRing3 - 100174: LeftHandRing4 - 100176: LeftHandRing5 - 100178: LeftHandRing6 - 100180: LeftHandRingEffector - 100182: LeftHandThumb1 - 100184: LeftHandThumb13 - 100186: LeftHandThumb17 - 100188: LeftHandThumb2 - 100190: LeftHandThumb3 - 100192: LeftHandThumb4 - 100194: LeftHandThumb5 - 100196: LeftHandThumb6 - 100198: LeftHandThumbEffector - 100200: LeftHipEffector - 100202: LeftInnerBrow - 100204: LeftIOuterBrow - 100206: LeftKneeEffector - 100208: LeftLeg - 100210: LeftLeg 1 - 100212: LeftLipCorner - 100214: LeftLipLower - 100216: LeftLipUpper - 100218: LeftNostril - 100220: LeftShoulder - 100222: LeftShoulder 1 - 100224: LeftShoulderEffector - 100226: LeftToes - 100228: LeftUpLeg - 100230: LeftUpLeg 1 - 100232: LeftWristEffector - 100234: LToeBase_End2 - 100236: LToeBase_End3 - 100238: Neck - 100240: Neck 1 - 100242: neckProxy_geo - 100244: pelvisProxy_geo - 100246: r_ankleProxy_geo - 100248: r_ballProxy_geo - 100250: r_clavicleProxy_geo - 100252: r_erbowProxy_geo - 100254: r_hipProxy_geo - 100256: r_indexProxy_01_geo - 100258: r_indexProxy_02_geo - 100260: r_indexProxy_03_geo - 100262: r_kneeProxy_geo - 100264: r_middleProxy_01_geo - 100266: r_middleProxy_02_geo - 100268: r_middleProxy_03_geo - 100270: r_pinkyProxy_01_geo - 100272: r_pinkyProxy_02_geo - 100274: r_pinkyProxy_03_geo - 100276: r_ringProxy_01_geo - 100278: r_ringProxy_02_geo - 100280: r_ringProxy_03_geo - 100282: r_shourderProxy_geo - 100284: r_thumbProxy_01_geo - 100286: r_thumbProxy_02_geo - 100288: r_thumbProxy_03_geo - 100290: r_UNI_eye - 100292: r_wristProxy_geo - 100294: Reference - 100296: RightAnkleEffector - 100298: RightArm - 100300: RightArm 1 - 100302: RightCheek - 100304: RightElbowEffector - 100306: RightEye - 100308: RightEyelidLower - 100310: RightEyelidUpper - 100312: RightFoot - 100314: RightFoot 1 - 100316: RightForeArm - 100318: RightForeArm 1 - 100320: RightHand - 100322: RightHand 1 - 100324: RightHandIndex1 - 100326: RightHandIndex2 - 100328: RightHandIndex3 - 100330: RightHandIndex4 - 100332: RightHandIndex5 - 100334: RightHandIndex6 - 100336: RightHandIndexEffector - 100338: RightHandMiddle1 - 100340: RightHandMiddle2 - 100342: RightHandMiddle3 - 100344: RightHandMiddle4 - 100346: RightHandMiddle5 - 100348: RightHandMiddle6 - 100350: RightHandMiddleEffector - 100352: RightHandPinky1 - 100354: RightHandPinky2 - 100356: RightHandPinky3 - 100358: RightHandPinky4 - 100360: RightHandPinky5 - 100362: RightHandPinky6 - 100364: RightHandPinkyEffector - 100366: RightHandRing1 - 100368: RightHandRing2 - 100370: RightHandRing3 - 100372: RightHandRing4 - 100374: RightHandRing5 - 100376: RightHandRing6 - 100378: RightHandRingEffector - 100380: RightHandThumb1 - 100382: RightHandThumb2 - 100384: RightHandThumb3 - 100386: RightHandThumb4 - 100388: RightHandThumb5 - 100390: RightHandThumb6 - 100392: RightHandThumbEffector - 100394: RightHipEffector - 100396: RightInnerBrow - 100398: RightIOuterBrow - 100400: RightKneeEffector - 100402: RightLeg - 100404: RightLeg 1 - 100406: RightLipCorner - 100408: RightLipLower - 100410: RightLipUpper - 100412: RightNostril - 100414: RightShoulder - 100416: RightShoulder 1 - 100418: RightShoulderEffector - 100420: RightToes - 100422: RightUpLeg - 100424: RightUpLeg 1 - 100426: RightWristEffector - 100428: Spine - 100430: Spine 1 - 100432: Spine1 - 100434: spineProxy_geo - 100436: TongueBack - 100438: TongueTip - 100440: UNI_01_Lower_teethProxy - 100442: UNI_01_TongueBaseProxy - 100444: UNI_01_TongueTipProxy - 100446: UNI_01_Upper_teethProxy - 400000: Character_Ctrl:Reference - 400002: Chest - 400004: ChestEndEffector - 400006: ChestOriginEffector - 400008: chestProxy_geo - 400010: //RootNode - 400012: Head - 400014: Head 1 - 400016: HeadEffector - 400018: headProxy_geo - 400020: HeadTop_End - 400022: Hips - 400024: Hips 1 - 400026: HipsEffector - 400028: Jaw - 400030: JawEND - 400032: jawProxy_geo - 400034: l_ankleProxy_geo - 400036: l_ballProxy_geo - 400038: l_clavicleProxy_geo - 400040: l_erbowProxy_geo - 400042: l_hipProxy_geo - 400044: l_indexProxy_01_geo - 400046: l_indexProxy_02_geo - 400048: l_indexProxy_03_geo - 400050: l_kneeProxy_geo - 400052: l_middleProxy_01_geo - 400054: l_middleProxy_02_geo - 400056: l_middleProxy_03_geo - 400058: l_pinkyProxy_01_geo - 400060: l_pinkyProxy_02_geo - 400062: l_pinkyProxy_03_geo - 400064: l_ringProxy_01_geo - 400066: l_ringProxy_02_geo - 400068: l_ringProxy_03_geo - 400070: l_shourderProxy_geo - 400072: l_thumbProxy_01_geo - 400074: l_thumbProxy_02_geo - 400076: l_thumbProxy_03_geo - 400078: l_UNI_eye - 400080: l_wristProxy_geo - 400082: LeftAnkleEffector - 400084: LeftArm - 400086: LeftArm 1 - 400088: LeftCheek - 400090: LeftElbowEffector - 400092: LeftEye - 400094: LeftEyelidLower - 400096: LeftEyelidUpper - 400098: LeftFoot - 400100: LeftFoot 1 - 400102: LeftForeArm - 400104: LeftForeArm 1 - 400106: LeftHand - 400108: LeftHand 1 - 400110: LeftHandIndex1 - 400112: LeftHandIndex13 - 400114: LeftHandIndex17 - 400116: LeftHandIndex2 - 400118: LeftHandIndex3 - 400120: LeftHandIndex4 - 400122: LeftHandIndex5 - 400124: LeftHandIndex6 - 400126: LeftHandIndexEffector - 400128: LeftHandMiddle1 - 400130: LeftHandMiddle13 - 400132: LeftHandMiddle17 - 400134: LeftHandMiddle2 - 400136: LeftHandMiddle3 - 400138: LeftHandMiddle4 - 400140: LeftHandMiddle5 - 400142: LeftHandMiddle6 - 400144: LeftHandMiddleEffector - 400146: LeftHandPinky1 - 400148: LeftHandPinky13 - 400150: LeftHandPinky17 - 400152: LeftHandPinky2 - 400154: LeftHandPinky3 - 400156: LeftHandPinky4 - 400158: LeftHandPinky5 - 400160: LeftHandPinky6 - 400162: LeftHandPinkyEffector - 400164: LeftHandRing1 - 400166: LeftHandRing13 - 400168: LeftHandRing17 - 400170: LeftHandRing2 - 400172: LeftHandRing3 - 400174: LeftHandRing4 - 400176: LeftHandRing5 - 400178: LeftHandRing6 - 400180: LeftHandRingEffector - 400182: LeftHandThumb1 - 400184: LeftHandThumb13 - 400186: LeftHandThumb17 - 400188: LeftHandThumb2 - 400190: LeftHandThumb3 - 400192: LeftHandThumb4 - 400194: LeftHandThumb5 - 400196: LeftHandThumb6 - 400198: LeftHandThumbEffector - 400200: LeftHipEffector - 400202: LeftInnerBrow - 400204: LeftIOuterBrow - 400206: LeftKneeEffector - 400208: LeftLeg - 400210: LeftLeg 1 - 400212: LeftLipCorner - 400214: LeftLipLower - 400216: LeftLipUpper - 400218: LeftNostril - 400220: LeftShoulder - 400222: LeftShoulder 1 - 400224: LeftShoulderEffector - 400226: LeftToes - 400228: LeftUpLeg - 400230: LeftUpLeg 1 - 400232: LeftWristEffector - 400234: LToeBase_End2 - 400236: LToeBase_End3 - 400238: Neck - 400240: Neck 1 - 400242: neckProxy_geo - 400244: pelvisProxy_geo - 400246: r_ankleProxy_geo - 400248: r_ballProxy_geo - 400250: r_clavicleProxy_geo - 400252: r_erbowProxy_geo - 400254: r_hipProxy_geo - 400256: r_indexProxy_01_geo - 400258: r_indexProxy_02_geo - 400260: r_indexProxy_03_geo - 400262: r_kneeProxy_geo - 400264: r_middleProxy_01_geo - 400266: r_middleProxy_02_geo - 400268: r_middleProxy_03_geo - 400270: r_pinkyProxy_01_geo - 400272: r_pinkyProxy_02_geo - 400274: r_pinkyProxy_03_geo - 400276: r_ringProxy_01_geo - 400278: r_ringProxy_02_geo - 400280: r_ringProxy_03_geo - 400282: r_shourderProxy_geo - 400284: r_thumbProxy_01_geo - 400286: r_thumbProxy_02_geo - 400288: r_thumbProxy_03_geo - 400290: r_UNI_eye - 400292: r_wristProxy_geo - 400294: Reference - 400296: RightAnkleEffector - 400298: RightArm - 400300: RightArm 1 - 400302: RightCheek - 400304: RightElbowEffector - 400306: RightEye - 400308: RightEyelidLower - 400310: RightEyelidUpper - 400312: RightFoot - 400314: RightFoot 1 - 400316: RightForeArm - 400318: RightForeArm 1 - 400320: RightHand - 400322: RightHand 1 - 400324: RightHandIndex1 - 400326: RightHandIndex2 - 400328: RightHandIndex3 - 400330: RightHandIndex4 - 400332: RightHandIndex5 - 400334: RightHandIndex6 - 400336: RightHandIndexEffector - 400338: RightHandMiddle1 - 400340: RightHandMiddle2 - 400342: RightHandMiddle3 - 400344: RightHandMiddle4 - 400346: RightHandMiddle5 - 400348: RightHandMiddle6 - 400350: RightHandMiddleEffector - 400352: RightHandPinky1 - 400354: RightHandPinky2 - 400356: RightHandPinky3 - 400358: RightHandPinky4 - 400360: RightHandPinky5 - 400362: RightHandPinky6 - 400364: RightHandPinkyEffector - 400366: RightHandRing1 - 400368: RightHandRing2 - 400370: RightHandRing3 - 400372: RightHandRing4 - 400374: RightHandRing5 - 400376: RightHandRing6 - 400378: RightHandRingEffector - 400380: RightHandThumb1 - 400382: RightHandThumb2 - 400384: RightHandThumb3 - 400386: RightHandThumb4 - 400388: RightHandThumb5 - 400390: RightHandThumb6 - 400392: RightHandThumbEffector - 400394: RightHipEffector - 400396: RightInnerBrow - 400398: RightIOuterBrow - 400400: RightKneeEffector - 400402: RightLeg - 400404: RightLeg 1 - 400406: RightLipCorner - 400408: RightLipLower - 400410: RightLipUpper - 400412: RightNostril - 400414: RightShoulder - 400416: RightShoulder 1 - 400418: RightShoulderEffector - 400420: RightToes - 400422: RightUpLeg - 400424: RightUpLeg 1 - 400426: RightWristEffector - 400428: Spine - 400430: Spine 1 - 400432: Spine1 - 400434: spineProxy_geo - 400436: TongueBack - 400438: TongueTip - 400440: UNI_01_Lower_teethProxy - 400442: UNI_01_TongueBaseProxy - 400444: UNI_01_TongueTipProxy - 400446: UNI_01_Upper_teethProxy - 2300000: chestProxy_geo - 2300002: headProxy_geo - 2300004: jawProxy_geo - 2300006: l_ankleProxy_geo - 2300008: l_ballProxy_geo - 2300010: l_clavicleProxy_geo - 2300012: l_erbowProxy_geo - 2300014: l_hipProxy_geo - 2300016: l_indexProxy_01_geo - 2300018: l_indexProxy_02_geo - 2300020: l_indexProxy_03_geo - 2300022: l_kneeProxy_geo - 2300024: l_middleProxy_01_geo - 2300026: l_middleProxy_02_geo - 2300028: l_middleProxy_03_geo - 2300030: l_pinkyProxy_01_geo - 2300032: l_pinkyProxy_02_geo - 2300034: l_pinkyProxy_03_geo - 2300036: l_ringProxy_01_geo - 2300038: l_ringProxy_02_geo - 2300040: l_ringProxy_03_geo - 2300042: l_shourderProxy_geo - 2300044: l_thumbProxy_01_geo - 2300046: l_thumbProxy_02_geo - 2300048: l_thumbProxy_03_geo - 2300050: l_UNI_eye - 2300052: l_wristProxy_geo - 2300054: neckProxy_geo - 2300056: pelvisProxy_geo - 2300058: r_ankleProxy_geo - 2300060: r_ballProxy_geo - 2300062: r_clavicleProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_hipProxy_geo - 2300068: r_indexProxy_01_geo - 2300070: r_indexProxy_02_geo - 2300072: r_indexProxy_03_geo - 2300074: r_kneeProxy_geo - 2300076: r_middleProxy_01_geo - 2300078: r_middleProxy_02_geo - 2300080: r_middleProxy_03_geo - 2300082: r_pinkyProxy_01_geo - 2300084: r_pinkyProxy_02_geo - 2300086: r_pinkyProxy_03_geo - 2300088: r_ringProxy_01_geo - 2300090: r_ringProxy_02_geo - 2300092: r_ringProxy_03_geo - 2300094: r_shourderProxy_geo - 2300096: r_thumbProxy_01_geo - 2300098: r_thumbProxy_02_geo - 2300100: r_thumbProxy_03_geo - 2300102: r_UNI_eye - 2300104: r_wristProxy_geo - 2300106: spineProxy_geo - 2300108: UNI_01_Lower_teethProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: UNI_01_TongueTipProxy - 2300114: UNI_01_Upper_teethProxy - 3300000: chestProxy_geo - 3300002: headProxy_geo - 3300004: jawProxy_geo - 3300006: l_ankleProxy_geo - 3300008: l_ballProxy_geo - 3300010: l_clavicleProxy_geo - 3300012: l_erbowProxy_geo - 3300014: l_hipProxy_geo - 3300016: l_indexProxy_01_geo - 3300018: l_indexProxy_02_geo - 3300020: l_indexProxy_03_geo - 3300022: l_kneeProxy_geo - 3300024: l_middleProxy_01_geo - 3300026: l_middleProxy_02_geo - 3300028: l_middleProxy_03_geo - 3300030: l_pinkyProxy_01_geo - 3300032: l_pinkyProxy_02_geo - 3300034: l_pinkyProxy_03_geo - 3300036: l_ringProxy_01_geo - 3300038: l_ringProxy_02_geo - 3300040: l_ringProxy_03_geo - 3300042: l_shourderProxy_geo - 3300044: l_thumbProxy_01_geo - 3300046: l_thumbProxy_02_geo - 3300048: l_thumbProxy_03_geo - 3300050: l_UNI_eye - 3300052: l_wristProxy_geo - 3300054: neckProxy_geo - 3300056: pelvisProxy_geo - 3300058: r_ankleProxy_geo - 3300060: r_ballProxy_geo - 3300062: r_clavicleProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_hipProxy_geo - 3300068: r_indexProxy_01_geo - 3300070: r_indexProxy_02_geo - 3300072: r_indexProxy_03_geo - 3300074: r_kneeProxy_geo - 3300076: r_middleProxy_01_geo - 3300078: r_middleProxy_02_geo - 3300080: r_middleProxy_03_geo - 3300082: r_pinkyProxy_01_geo - 3300084: r_pinkyProxy_02_geo - 3300086: r_pinkyProxy_03_geo - 3300088: r_ringProxy_01_geo - 3300090: r_ringProxy_02_geo - 3300092: r_ringProxy_03_geo - 3300094: r_shourderProxy_geo - 3300096: r_thumbProxy_01_geo - 3300098: r_thumbProxy_02_geo - 3300100: r_thumbProxy_03_geo - 3300102: r_UNI_eye - 3300104: r_wristProxy_geo - 3300106: spineProxy_geo - 3300108: UNI_01_Lower_teethProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: UNI_01_TongueTipProxy - 3300114: UNI_01_Upper_teethProxy - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: HumanoidRun - 9500000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Character_Ctrl:Reference + - first: + 1: 100002 + second: Chest + - first: + 1: 100004 + second: ChestEndEffector + - first: + 1: 100006 + second: ChestOriginEffector + - first: + 1: 100008 + second: chestProxy_geo + - first: + 1: 100010 + second: //RootNode + - first: + 1: 100012 + second: Head + - first: + 1: 100014 + second: Head 1 + - first: + 1: 100016 + second: HeadEffector + - first: + 1: 100018 + second: headProxy_geo + - first: + 1: 100020 + second: HeadTop_End + - first: + 1: 100022 + second: Hips + - first: + 1: 100024 + second: Hips 1 + - first: + 1: 100026 + second: HipsEffector + - first: + 1: 100028 + second: Jaw + - first: + 1: 100030 + second: JawEND + - first: + 1: 100032 + second: jawProxy_geo + - first: + 1: 100034 + second: l_ankleProxy_geo + - first: + 1: 100036 + second: l_ballProxy_geo + - first: + 1: 100038 + second: l_clavicleProxy_geo + - first: + 1: 100040 + second: l_erbowProxy_geo + - first: + 1: 100042 + second: l_hipProxy_geo + - first: + 1: 100044 + second: l_indexProxy_01_geo + - first: + 1: 100046 + second: l_indexProxy_02_geo + - first: + 1: 100048 + second: l_indexProxy_03_geo + - first: + 1: 100050 + second: l_kneeProxy_geo + - first: + 1: 100052 + second: l_middleProxy_01_geo + - first: + 1: 100054 + second: l_middleProxy_02_geo + - first: + 1: 100056 + second: l_middleProxy_03_geo + - first: + 1: 100058 + second: l_pinkyProxy_01_geo + - first: + 1: 100060 + second: l_pinkyProxy_02_geo + - first: + 1: 100062 + second: l_pinkyProxy_03_geo + - first: + 1: 100064 + second: l_ringProxy_01_geo + - first: + 1: 100066 + second: l_ringProxy_02_geo + - first: + 1: 100068 + second: l_ringProxy_03_geo + - first: + 1: 100070 + second: l_shourderProxy_geo + - first: + 1: 100072 + second: l_thumbProxy_01_geo + - first: + 1: 100074 + second: l_thumbProxy_02_geo + - first: + 1: 100076 + second: l_thumbProxy_03_geo + - first: + 1: 100078 + second: l_UNI_eye + - first: + 1: 100080 + second: l_wristProxy_geo + - first: + 1: 100082 + second: LeftAnkleEffector + - first: + 1: 100084 + second: LeftArm + - first: + 1: 100086 + second: LeftArm 1 + - first: + 1: 100088 + second: LeftCheek + - first: + 1: 100090 + second: LeftElbowEffector + - first: + 1: 100092 + second: LeftEye + - first: + 1: 100094 + second: LeftEyelidLower + - first: + 1: 100096 + second: LeftEyelidUpper + - first: + 1: 100098 + second: LeftFoot + - first: + 1: 100100 + second: LeftFoot 1 + - first: + 1: 100102 + second: LeftForeArm + - first: + 1: 100104 + second: LeftForeArm 1 + - first: + 1: 100106 + second: LeftHand + - first: + 1: 100108 + second: LeftHand 1 + - first: + 1: 100110 + second: LeftHandIndex1 + - first: + 1: 100112 + second: LeftHandIndex13 + - first: + 1: 100114 + second: LeftHandIndex17 + - first: + 1: 100116 + second: LeftHandIndex2 + - first: + 1: 100118 + second: LeftHandIndex3 + - first: + 1: 100120 + second: LeftHandIndex4 + - first: + 1: 100122 + second: LeftHandIndex5 + - first: + 1: 100124 + second: LeftHandIndex6 + - first: + 1: 100126 + second: LeftHandIndexEffector + - first: + 1: 100128 + second: LeftHandMiddle1 + - first: + 1: 100130 + second: LeftHandMiddle13 + - first: + 1: 100132 + second: LeftHandMiddle17 + - first: + 1: 100134 + second: LeftHandMiddle2 + - first: + 1: 100136 + second: LeftHandMiddle3 + - first: + 1: 100138 + second: LeftHandMiddle4 + - first: + 1: 100140 + second: LeftHandMiddle5 + - first: + 1: 100142 + second: LeftHandMiddle6 + - first: + 1: 100144 + second: LeftHandMiddleEffector + - first: + 1: 100146 + second: LeftHandPinky1 + - first: + 1: 100148 + second: LeftHandPinky13 + - first: + 1: 100150 + second: LeftHandPinky17 + - first: + 1: 100152 + second: LeftHandPinky2 + - first: + 1: 100154 + second: LeftHandPinky3 + - first: + 1: 100156 + second: LeftHandPinky4 + - first: + 1: 100158 + second: LeftHandPinky5 + - first: + 1: 100160 + second: LeftHandPinky6 + - first: + 1: 100162 + second: LeftHandPinkyEffector + - first: + 1: 100164 + second: LeftHandRing1 + - first: + 1: 100166 + second: LeftHandRing13 + - first: + 1: 100168 + second: LeftHandRing17 + - first: + 1: 100170 + second: LeftHandRing2 + - first: + 1: 100172 + second: LeftHandRing3 + - first: + 1: 100174 + second: LeftHandRing4 + - first: + 1: 100176 + second: LeftHandRing5 + - first: + 1: 100178 + second: LeftHandRing6 + - first: + 1: 100180 + second: LeftHandRingEffector + - first: + 1: 100182 + second: LeftHandThumb1 + - first: + 1: 100184 + second: LeftHandThumb13 + - first: + 1: 100186 + second: LeftHandThumb17 + - first: + 1: 100188 + second: LeftHandThumb2 + - first: + 1: 100190 + second: LeftHandThumb3 + - first: + 1: 100192 + second: LeftHandThumb4 + - first: + 1: 100194 + second: LeftHandThumb5 + - first: + 1: 100196 + second: LeftHandThumb6 + - first: + 1: 100198 + second: LeftHandThumbEffector + - first: + 1: 100200 + second: LeftHipEffector + - first: + 1: 100202 + second: LeftInnerBrow + - first: + 1: 100204 + second: LeftIOuterBrow + - first: + 1: 100206 + second: LeftKneeEffector + - first: + 1: 100208 + second: LeftLeg + - first: + 1: 100210 + second: LeftLeg 1 + - first: + 1: 100212 + second: LeftLipCorner + - first: + 1: 100214 + second: LeftLipLower + - first: + 1: 100216 + second: LeftLipUpper + - first: + 1: 100218 + second: LeftNostril + - first: + 1: 100220 + second: LeftShoulder + - first: + 1: 100222 + second: LeftShoulder 1 + - first: + 1: 100224 + second: LeftShoulderEffector + - first: + 1: 100226 + second: LeftToes + - first: + 1: 100228 + second: LeftUpLeg + - first: + 1: 100230 + second: LeftUpLeg 1 + - first: + 1: 100232 + second: LeftWristEffector + - first: + 1: 100234 + second: LToeBase_End2 + - first: + 1: 100236 + second: LToeBase_End3 + - first: + 1: 100238 + second: Neck + - first: + 1: 100240 + second: Neck 1 + - first: + 1: 100242 + second: neckProxy_geo + - first: + 1: 100244 + second: pelvisProxy_geo + - first: + 1: 100246 + second: r_ankleProxy_geo + - first: + 1: 100248 + second: r_ballProxy_geo + - first: + 1: 100250 + second: r_clavicleProxy_geo + - first: + 1: 100252 + second: r_erbowProxy_geo + - first: + 1: 100254 + second: r_hipProxy_geo + - first: + 1: 100256 + second: r_indexProxy_01_geo + - first: + 1: 100258 + second: r_indexProxy_02_geo + - first: + 1: 100260 + second: r_indexProxy_03_geo + - first: + 1: 100262 + second: r_kneeProxy_geo + - first: + 1: 100264 + second: r_middleProxy_01_geo + - first: + 1: 100266 + second: r_middleProxy_02_geo + - first: + 1: 100268 + second: r_middleProxy_03_geo + - first: + 1: 100270 + second: r_pinkyProxy_01_geo + - first: + 1: 100272 + second: r_pinkyProxy_02_geo + - first: + 1: 100274 + second: r_pinkyProxy_03_geo + - first: + 1: 100276 + second: r_ringProxy_01_geo + - first: + 1: 100278 + second: r_ringProxy_02_geo + - first: + 1: 100280 + second: r_ringProxy_03_geo + - first: + 1: 100282 + second: r_shourderProxy_geo + - first: + 1: 100284 + second: r_thumbProxy_01_geo + - first: + 1: 100286 + second: r_thumbProxy_02_geo + - first: + 1: 100288 + second: r_thumbProxy_03_geo + - first: + 1: 100290 + second: r_UNI_eye + - first: + 1: 100292 + second: r_wristProxy_geo + - first: + 1: 100294 + second: Reference + - first: + 1: 100296 + second: RightAnkleEffector + - first: + 1: 100298 + second: RightArm + - first: + 1: 100300 + second: RightArm 1 + - first: + 1: 100302 + second: RightCheek + - first: + 1: 100304 + second: RightElbowEffector + - first: + 1: 100306 + second: RightEye + - first: + 1: 100308 + second: RightEyelidLower + - first: + 1: 100310 + second: RightEyelidUpper + - first: + 1: 100312 + second: RightFoot + - first: + 1: 100314 + second: RightFoot 1 + - first: + 1: 100316 + second: RightForeArm + - first: + 1: 100318 + second: RightForeArm 1 + - first: + 1: 100320 + second: RightHand + - first: + 1: 100322 + second: RightHand 1 + - first: + 1: 100324 + second: RightHandIndex1 + - first: + 1: 100326 + second: RightHandIndex2 + - first: + 1: 100328 + second: RightHandIndex3 + - first: + 1: 100330 + second: RightHandIndex4 + - first: + 1: 100332 + second: RightHandIndex5 + - first: + 1: 100334 + second: RightHandIndex6 + - first: + 1: 100336 + second: RightHandIndexEffector + - first: + 1: 100338 + second: RightHandMiddle1 + - first: + 1: 100340 + second: RightHandMiddle2 + - first: + 1: 100342 + second: RightHandMiddle3 + - first: + 1: 100344 + second: RightHandMiddle4 + - first: + 1: 100346 + second: RightHandMiddle5 + - first: + 1: 100348 + second: RightHandMiddle6 + - first: + 1: 100350 + second: RightHandMiddleEffector + - first: + 1: 100352 + second: RightHandPinky1 + - first: + 1: 100354 + second: RightHandPinky2 + - first: + 1: 100356 + second: RightHandPinky3 + - first: + 1: 100358 + second: RightHandPinky4 + - first: + 1: 100360 + second: RightHandPinky5 + - first: + 1: 100362 + second: RightHandPinky6 + - first: + 1: 100364 + second: RightHandPinkyEffector + - first: + 1: 100366 + second: RightHandRing1 + - first: + 1: 100368 + second: RightHandRing2 + - first: + 1: 100370 + second: RightHandRing3 + - first: + 1: 100372 + second: RightHandRing4 + - first: + 1: 100374 + second: RightHandRing5 + - first: + 1: 100376 + second: RightHandRing6 + - first: + 1: 100378 + second: RightHandRingEffector + - first: + 1: 100380 + second: RightHandThumb1 + - first: + 1: 100382 + second: RightHandThumb2 + - first: + 1: 100384 + second: RightHandThumb3 + - first: + 1: 100386 + second: RightHandThumb4 + - first: + 1: 100388 + second: RightHandThumb5 + - first: + 1: 100390 + second: RightHandThumb6 + - first: + 1: 100392 + second: RightHandThumbEffector + - first: + 1: 100394 + second: RightHipEffector + - first: + 1: 100396 + second: RightInnerBrow + - first: + 1: 100398 + second: RightIOuterBrow + - first: + 1: 100400 + second: RightKneeEffector + - first: + 1: 100402 + second: RightLeg + - first: + 1: 100404 + second: RightLeg 1 + - first: + 1: 100406 + second: RightLipCorner + - first: + 1: 100408 + second: RightLipLower + - first: + 1: 100410 + second: RightLipUpper + - first: + 1: 100412 + second: RightNostril + - first: + 1: 100414 + second: RightShoulder + - first: + 1: 100416 + second: RightShoulder 1 + - first: + 1: 100418 + second: RightShoulderEffector + - first: + 1: 100420 + second: RightToes + - first: + 1: 100422 + second: RightUpLeg + - first: + 1: 100424 + second: RightUpLeg 1 + - first: + 1: 100426 + second: RightWristEffector + - first: + 1: 100428 + second: Spine + - first: + 1: 100430 + second: Spine 1 + - first: + 1: 100432 + second: Spine1 + - first: + 1: 100434 + second: spineProxy_geo + - first: + 1: 100436 + second: TongueBack + - first: + 1: 100438 + second: TongueTip + - first: + 1: 100440 + second: UNI_01_Lower_teethProxy + - first: + 1: 100442 + second: UNI_01_TongueBaseProxy + - first: + 1: 100444 + second: UNI_01_TongueTipProxy + - first: + 1: 100446 + second: UNI_01_Upper_teethProxy + - first: + 4: 400000 + second: Character_Ctrl:Reference + - first: + 4: 400002 + second: Chest + - first: + 4: 400004 + second: ChestEndEffector + - first: + 4: 400006 + second: ChestOriginEffector + - first: + 4: 400008 + second: chestProxy_geo + - first: + 4: 400010 + second: //RootNode + - first: + 4: 400012 + second: Head + - first: + 4: 400014 + second: Head 1 + - first: + 4: 400016 + second: HeadEffector + - first: + 4: 400018 + second: headProxy_geo + - first: + 4: 400020 + second: HeadTop_End + - first: + 4: 400022 + second: Hips + - first: + 4: 400024 + second: Hips 1 + - first: + 4: 400026 + second: HipsEffector + - first: + 4: 400028 + second: Jaw + - first: + 4: 400030 + second: JawEND + - first: + 4: 400032 + second: jawProxy_geo + - first: + 4: 400034 + second: l_ankleProxy_geo + - first: + 4: 400036 + second: l_ballProxy_geo + - first: + 4: 400038 + second: l_clavicleProxy_geo + - first: + 4: 400040 + second: l_erbowProxy_geo + - first: + 4: 400042 + second: l_hipProxy_geo + - first: + 4: 400044 + second: l_indexProxy_01_geo + - first: + 4: 400046 + second: l_indexProxy_02_geo + - first: + 4: 400048 + second: l_indexProxy_03_geo + - first: + 4: 400050 + second: l_kneeProxy_geo + - first: + 4: 400052 + second: l_middleProxy_01_geo + - first: + 4: 400054 + second: l_middleProxy_02_geo + - first: + 4: 400056 + second: l_middleProxy_03_geo + - first: + 4: 400058 + second: l_pinkyProxy_01_geo + - first: + 4: 400060 + second: l_pinkyProxy_02_geo + - first: + 4: 400062 + second: l_pinkyProxy_03_geo + - first: + 4: 400064 + second: l_ringProxy_01_geo + - first: + 4: 400066 + second: l_ringProxy_02_geo + - first: + 4: 400068 + second: l_ringProxy_03_geo + - first: + 4: 400070 + second: l_shourderProxy_geo + - first: + 4: 400072 + second: l_thumbProxy_01_geo + - first: + 4: 400074 + second: l_thumbProxy_02_geo + - first: + 4: 400076 + second: l_thumbProxy_03_geo + - first: + 4: 400078 + second: l_UNI_eye + - first: + 4: 400080 + second: l_wristProxy_geo + - first: + 4: 400082 + second: LeftAnkleEffector + - first: + 4: 400084 + second: LeftArm + - first: + 4: 400086 + second: LeftArm 1 + - first: + 4: 400088 + second: LeftCheek + - first: + 4: 400090 + second: LeftElbowEffector + - first: + 4: 400092 + second: LeftEye + - first: + 4: 400094 + second: LeftEyelidLower + - first: + 4: 400096 + second: LeftEyelidUpper + - first: + 4: 400098 + second: LeftFoot + - first: + 4: 400100 + second: LeftFoot 1 + - first: + 4: 400102 + second: LeftForeArm + - first: + 4: 400104 + second: LeftForeArm 1 + - first: + 4: 400106 + second: LeftHand + - first: + 4: 400108 + second: LeftHand 1 + - first: + 4: 400110 + second: LeftHandIndex1 + - first: + 4: 400112 + second: LeftHandIndex13 + - first: + 4: 400114 + second: LeftHandIndex17 + - first: + 4: 400116 + second: LeftHandIndex2 + - first: + 4: 400118 + second: LeftHandIndex3 + - first: + 4: 400120 + second: LeftHandIndex4 + - first: + 4: 400122 + second: LeftHandIndex5 + - first: + 4: 400124 + second: LeftHandIndex6 + - first: + 4: 400126 + second: LeftHandIndexEffector + - first: + 4: 400128 + second: LeftHandMiddle1 + - first: + 4: 400130 + second: LeftHandMiddle13 + - first: + 4: 400132 + second: LeftHandMiddle17 + - first: + 4: 400134 + second: LeftHandMiddle2 + - first: + 4: 400136 + second: LeftHandMiddle3 + - first: + 4: 400138 + second: LeftHandMiddle4 + - first: + 4: 400140 + second: LeftHandMiddle5 + - first: + 4: 400142 + second: LeftHandMiddle6 + - first: + 4: 400144 + second: LeftHandMiddleEffector + - first: + 4: 400146 + second: LeftHandPinky1 + - first: + 4: 400148 + second: LeftHandPinky13 + - first: + 4: 400150 + second: LeftHandPinky17 + - first: + 4: 400152 + second: LeftHandPinky2 + - first: + 4: 400154 + second: LeftHandPinky3 + - first: + 4: 400156 + second: LeftHandPinky4 + - first: + 4: 400158 + second: LeftHandPinky5 + - first: + 4: 400160 + second: LeftHandPinky6 + - first: + 4: 400162 + second: LeftHandPinkyEffector + - first: + 4: 400164 + second: LeftHandRing1 + - first: + 4: 400166 + second: LeftHandRing13 + - first: + 4: 400168 + second: LeftHandRing17 + - first: + 4: 400170 + second: LeftHandRing2 + - first: + 4: 400172 + second: LeftHandRing3 + - first: + 4: 400174 + second: LeftHandRing4 + - first: + 4: 400176 + second: LeftHandRing5 + - first: + 4: 400178 + second: LeftHandRing6 + - first: + 4: 400180 + second: LeftHandRingEffector + - first: + 4: 400182 + second: LeftHandThumb1 + - first: + 4: 400184 + second: LeftHandThumb13 + - first: + 4: 400186 + second: LeftHandThumb17 + - first: + 4: 400188 + second: LeftHandThumb2 + - first: + 4: 400190 + second: LeftHandThumb3 + - first: + 4: 400192 + second: LeftHandThumb4 + - first: + 4: 400194 + second: LeftHandThumb5 + - first: + 4: 400196 + second: LeftHandThumb6 + - first: + 4: 400198 + second: LeftHandThumbEffector + - first: + 4: 400200 + second: LeftHipEffector + - first: + 4: 400202 + second: LeftInnerBrow + - first: + 4: 400204 + second: LeftIOuterBrow + - first: + 4: 400206 + second: LeftKneeEffector + - first: + 4: 400208 + second: LeftLeg + - first: + 4: 400210 + second: LeftLeg 1 + - first: + 4: 400212 + second: LeftLipCorner + - first: + 4: 400214 + second: LeftLipLower + - first: + 4: 400216 + second: LeftLipUpper + - first: + 4: 400218 + second: LeftNostril + - first: + 4: 400220 + second: LeftShoulder + - first: + 4: 400222 + second: LeftShoulder 1 + - first: + 4: 400224 + second: LeftShoulderEffector + - first: + 4: 400226 + second: LeftToes + - first: + 4: 400228 + second: LeftUpLeg + - first: + 4: 400230 + second: LeftUpLeg 1 + - first: + 4: 400232 + second: LeftWristEffector + - first: + 4: 400234 + second: LToeBase_End2 + - first: + 4: 400236 + second: LToeBase_End3 + - first: + 4: 400238 + second: Neck + - first: + 4: 400240 + second: Neck 1 + - first: + 4: 400242 + second: neckProxy_geo + - first: + 4: 400244 + second: pelvisProxy_geo + - first: + 4: 400246 + second: r_ankleProxy_geo + - first: + 4: 400248 + second: r_ballProxy_geo + - first: + 4: 400250 + second: r_clavicleProxy_geo + - first: + 4: 400252 + second: r_erbowProxy_geo + - first: + 4: 400254 + second: r_hipProxy_geo + - first: + 4: 400256 + second: r_indexProxy_01_geo + - first: + 4: 400258 + second: r_indexProxy_02_geo + - first: + 4: 400260 + second: r_indexProxy_03_geo + - first: + 4: 400262 + second: r_kneeProxy_geo + - first: + 4: 400264 + second: r_middleProxy_01_geo + - first: + 4: 400266 + second: r_middleProxy_02_geo + - first: + 4: 400268 + second: r_middleProxy_03_geo + - first: + 4: 400270 + second: r_pinkyProxy_01_geo + - first: + 4: 400272 + second: r_pinkyProxy_02_geo + - first: + 4: 400274 + second: r_pinkyProxy_03_geo + - first: + 4: 400276 + second: r_ringProxy_01_geo + - first: + 4: 400278 + second: r_ringProxy_02_geo + - first: + 4: 400280 + second: r_ringProxy_03_geo + - first: + 4: 400282 + second: r_shourderProxy_geo + - first: + 4: 400284 + second: r_thumbProxy_01_geo + - first: + 4: 400286 + second: r_thumbProxy_02_geo + - first: + 4: 400288 + second: r_thumbProxy_03_geo + - first: + 4: 400290 + second: r_UNI_eye + - first: + 4: 400292 + second: r_wristProxy_geo + - first: + 4: 400294 + second: Reference + - first: + 4: 400296 + second: RightAnkleEffector + - first: + 4: 400298 + second: RightArm + - first: + 4: 400300 + second: RightArm 1 + - first: + 4: 400302 + second: RightCheek + - first: + 4: 400304 + second: RightElbowEffector + - first: + 4: 400306 + second: RightEye + - first: + 4: 400308 + second: RightEyelidLower + - first: + 4: 400310 + second: RightEyelidUpper + - first: + 4: 400312 + second: RightFoot + - first: + 4: 400314 + second: RightFoot 1 + - first: + 4: 400316 + second: RightForeArm + - first: + 4: 400318 + second: RightForeArm 1 + - first: + 4: 400320 + second: RightHand + - first: + 4: 400322 + second: RightHand 1 + - first: + 4: 400324 + second: RightHandIndex1 + - first: + 4: 400326 + second: RightHandIndex2 + - first: + 4: 400328 + second: RightHandIndex3 + - first: + 4: 400330 + second: RightHandIndex4 + - first: + 4: 400332 + second: RightHandIndex5 + - first: + 4: 400334 + second: RightHandIndex6 + - first: + 4: 400336 + second: RightHandIndexEffector + - first: + 4: 400338 + second: RightHandMiddle1 + - first: + 4: 400340 + second: RightHandMiddle2 + - first: + 4: 400342 + second: RightHandMiddle3 + - first: + 4: 400344 + second: RightHandMiddle4 + - first: + 4: 400346 + second: RightHandMiddle5 + - first: + 4: 400348 + second: RightHandMiddle6 + - first: + 4: 400350 + second: RightHandMiddleEffector + - first: + 4: 400352 + second: RightHandPinky1 + - first: + 4: 400354 + second: RightHandPinky2 + - first: + 4: 400356 + second: RightHandPinky3 + - first: + 4: 400358 + second: RightHandPinky4 + - first: + 4: 400360 + second: RightHandPinky5 + - first: + 4: 400362 + second: RightHandPinky6 + - first: + 4: 400364 + second: RightHandPinkyEffector + - first: + 4: 400366 + second: RightHandRing1 + - first: + 4: 400368 + second: RightHandRing2 + - first: + 4: 400370 + second: RightHandRing3 + - first: + 4: 400372 + second: RightHandRing4 + - first: + 4: 400374 + second: RightHandRing5 + - first: + 4: 400376 + second: RightHandRing6 + - first: + 4: 400378 + second: RightHandRingEffector + - first: + 4: 400380 + second: RightHandThumb1 + - first: + 4: 400382 + second: RightHandThumb2 + - first: + 4: 400384 + second: RightHandThumb3 + - first: + 4: 400386 + second: RightHandThumb4 + - first: + 4: 400388 + second: RightHandThumb5 + - first: + 4: 400390 + second: RightHandThumb6 + - first: + 4: 400392 + second: RightHandThumbEffector + - first: + 4: 400394 + second: RightHipEffector + - first: + 4: 400396 + second: RightInnerBrow + - first: + 4: 400398 + second: RightIOuterBrow + - first: + 4: 400400 + second: RightKneeEffector + - first: + 4: 400402 + second: RightLeg + - first: + 4: 400404 + second: RightLeg 1 + - first: + 4: 400406 + second: RightLipCorner + - first: + 4: 400408 + second: RightLipLower + - first: + 4: 400410 + second: RightLipUpper + - first: + 4: 400412 + second: RightNostril + - first: + 4: 400414 + second: RightShoulder + - first: + 4: 400416 + second: RightShoulder 1 + - first: + 4: 400418 + second: RightShoulderEffector + - first: + 4: 400420 + second: RightToes + - first: + 4: 400422 + second: RightUpLeg + - first: + 4: 400424 + second: RightUpLeg 1 + - first: + 4: 400426 + second: RightWristEffector + - first: + 4: 400428 + second: Spine + - first: + 4: 400430 + second: Spine 1 + - first: + 4: 400432 + second: Spine1 + - first: + 4: 400434 + second: spineProxy_geo + - first: + 4: 400436 + second: TongueBack + - first: + 4: 400438 + second: TongueTip + - first: + 4: 400440 + second: UNI_01_Lower_teethProxy + - first: + 4: 400442 + second: UNI_01_TongueBaseProxy + - first: + 4: 400444 + second: UNI_01_TongueTipProxy + - first: + 4: 400446 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300000 + second: chestProxy_geo + - first: + 23: 2300002 + second: headProxy_geo + - first: + 23: 2300004 + second: jawProxy_geo + - first: + 23: 2300006 + second: l_ankleProxy_geo + - first: + 23: 2300008 + second: l_ballProxy_geo + - first: + 23: 2300010 + second: l_clavicleProxy_geo + - first: + 23: 2300012 + second: l_erbowProxy_geo + - first: + 23: 2300014 + second: l_hipProxy_geo + - first: + 23: 2300016 + second: l_indexProxy_01_geo + - first: + 23: 2300018 + second: l_indexProxy_02_geo + - first: + 23: 2300020 + second: l_indexProxy_03_geo + - first: + 23: 2300022 + second: l_kneeProxy_geo + - first: + 23: 2300024 + second: l_middleProxy_01_geo + - first: + 23: 2300026 + second: l_middleProxy_02_geo + - first: + 23: 2300028 + second: l_middleProxy_03_geo + - first: + 23: 2300030 + second: l_pinkyProxy_01_geo + - first: + 23: 2300032 + second: l_pinkyProxy_02_geo + - first: + 23: 2300034 + second: l_pinkyProxy_03_geo + - first: + 23: 2300036 + second: l_ringProxy_01_geo + - first: + 23: 2300038 + second: l_ringProxy_02_geo + - first: + 23: 2300040 + second: l_ringProxy_03_geo + - first: + 23: 2300042 + second: l_shourderProxy_geo + - first: + 23: 2300044 + second: l_thumbProxy_01_geo + - first: + 23: 2300046 + second: l_thumbProxy_02_geo + - first: + 23: 2300048 + second: l_thumbProxy_03_geo + - first: + 23: 2300050 + second: l_UNI_eye + - first: + 23: 2300052 + second: l_wristProxy_geo + - first: + 23: 2300054 + second: neckProxy_geo + - first: + 23: 2300056 + second: pelvisProxy_geo + - first: + 23: 2300058 + second: r_ankleProxy_geo + - first: + 23: 2300060 + second: r_ballProxy_geo + - first: + 23: 2300062 + second: r_clavicleProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_hipProxy_geo + - first: + 23: 2300068 + second: r_indexProxy_01_geo + - first: + 23: 2300070 + second: r_indexProxy_02_geo + - first: + 23: 2300072 + second: r_indexProxy_03_geo + - first: + 23: 2300074 + second: r_kneeProxy_geo + - first: + 23: 2300076 + second: r_middleProxy_01_geo + - first: + 23: 2300078 + second: r_middleProxy_02_geo + - first: + 23: 2300080 + second: r_middleProxy_03_geo + - first: + 23: 2300082 + second: r_pinkyProxy_01_geo + - first: + 23: 2300084 + second: r_pinkyProxy_02_geo + - first: + 23: 2300086 + second: r_pinkyProxy_03_geo + - first: + 23: 2300088 + second: r_ringProxy_01_geo + - first: + 23: 2300090 + second: r_ringProxy_02_geo + - first: + 23: 2300092 + second: r_ringProxy_03_geo + - first: + 23: 2300094 + second: r_shourderProxy_geo + - first: + 23: 2300096 + second: r_thumbProxy_01_geo + - first: + 23: 2300098 + second: r_thumbProxy_02_geo + - first: + 23: 2300100 + second: r_thumbProxy_03_geo + - first: + 23: 2300102 + second: r_UNI_eye + - first: + 23: 2300104 + second: r_wristProxy_geo + - first: + 23: 2300106 + second: spineProxy_geo + - first: + 23: 2300108 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: UNI_01_TongueTipProxy + - first: + 23: 2300114 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300000 + second: chestProxy_geo + - first: + 33: 3300002 + second: headProxy_geo + - first: + 33: 3300004 + second: jawProxy_geo + - first: + 33: 3300006 + second: l_ankleProxy_geo + - first: + 33: 3300008 + second: l_ballProxy_geo + - first: + 33: 3300010 + second: l_clavicleProxy_geo + - first: + 33: 3300012 + second: l_erbowProxy_geo + - first: + 33: 3300014 + second: l_hipProxy_geo + - first: + 33: 3300016 + second: l_indexProxy_01_geo + - first: + 33: 3300018 + second: l_indexProxy_02_geo + - first: + 33: 3300020 + second: l_indexProxy_03_geo + - first: + 33: 3300022 + second: l_kneeProxy_geo + - first: + 33: 3300024 + second: l_middleProxy_01_geo + - first: + 33: 3300026 + second: l_middleProxy_02_geo + - first: + 33: 3300028 + second: l_middleProxy_03_geo + - first: + 33: 3300030 + second: l_pinkyProxy_01_geo + - first: + 33: 3300032 + second: l_pinkyProxy_02_geo + - first: + 33: 3300034 + second: l_pinkyProxy_03_geo + - first: + 33: 3300036 + second: l_ringProxy_01_geo + - first: + 33: 3300038 + second: l_ringProxy_02_geo + - first: + 33: 3300040 + second: l_ringProxy_03_geo + - first: + 33: 3300042 + second: l_shourderProxy_geo + - first: + 33: 3300044 + second: l_thumbProxy_01_geo + - first: + 33: 3300046 + second: l_thumbProxy_02_geo + - first: + 33: 3300048 + second: l_thumbProxy_03_geo + - first: + 33: 3300050 + second: l_UNI_eye + - first: + 33: 3300052 + second: l_wristProxy_geo + - first: + 33: 3300054 + second: neckProxy_geo + - first: + 33: 3300056 + second: pelvisProxy_geo + - first: + 33: 3300058 + second: r_ankleProxy_geo + - first: + 33: 3300060 + second: r_ballProxy_geo + - first: + 33: 3300062 + second: r_clavicleProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_hipProxy_geo + - first: + 33: 3300068 + second: r_indexProxy_01_geo + - first: + 33: 3300070 + second: r_indexProxy_02_geo + - first: + 33: 3300072 + second: r_indexProxy_03_geo + - first: + 33: 3300074 + second: r_kneeProxy_geo + - first: + 33: 3300076 + second: r_middleProxy_01_geo + - first: + 33: 3300078 + second: r_middleProxy_02_geo + - first: + 33: 3300080 + second: r_middleProxy_03_geo + - first: + 33: 3300082 + second: r_pinkyProxy_01_geo + - first: + 33: 3300084 + second: r_pinkyProxy_02_geo + - first: + 33: 3300086 + second: r_pinkyProxy_03_geo + - first: + 33: 3300088 + second: r_ringProxy_01_geo + - first: + 33: 3300090 + second: r_ringProxy_02_geo + - first: + 33: 3300092 + second: r_ringProxy_03_geo + - first: + 33: 3300094 + second: r_shourderProxy_geo + - first: + 33: 3300096 + second: r_thumbProxy_01_geo + - first: + 33: 3300098 + second: r_thumbProxy_02_geo + - first: + 33: 3300100 + second: r_thumbProxy_03_geo + - first: + 33: 3300102 + second: r_UNI_eye + - first: + 33: 3300104 + second: r_wristProxy_geo + - first: + 33: 3300106 + second: spineProxy_geo + - first: + 33: 3300108 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: UNI_01_TongueTipProxy + - first: + 33: 3300114 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: HumanoidRun + - first: + 95: 9500000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 - resampleRotations: 1 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: + rigImportErrors: + rigImportWarnings: animationImportErrors: animationImportWarnings: animationRetargetingWarnings: animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 0 animationRotationError: 0.5 animationPositionError: 0.5 animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidRun takeName: _24_a_U1_M_P_RunForward_NtrlFaceFwd__Fb_p0_No_0_PJ_10 + internalID: 0 firstFrame: 335.9 lastFrame: 353.7 wrapMode: 0 - orientationOffsetY: -1.2 + orientationOffsetY: -0.0975 level: 0 cycleOffset: 0 loop: 0 @@ -675,20 +1935,31 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} - additiveReferencePoseFrame: 88 + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -698,9 +1969,14 @@ ModelImporter: normalSmoothAngle: 60 normalImportMode: 0 tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -1136,385 +2412,385 @@ ModelImporter: modified: 0 skeleton: - name: Run(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips + parentName: position: {x: -0.000000020489097, y: 0.958501, z: 0.059998296} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg + parentName: position: {x: -0.0754495, y: -0.04566402, z: -6.217249e-17} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg + parentName: position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot + parentName: position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes + parentName: position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg + parentName: position: {x: 0.075449534, y: -0.04566399, z: -6.217249e-17} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg + parentName: position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot + parentName: position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes + parentName: position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine + parentName: position: {x: -4.7739588e-17, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest + parentName: position: {x: 3.5527136e-17, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder + parentName: position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} rotation: {x: -0.02901484, y: -0.07803791, z: 0.1478155, w: 0.9855044} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm + parentName: position: {x: -0.10050205, y: 0.000000001125083, z: -1.9039074e-10} rotation: {x: 0.0065737762, y: 0.07236942, z: -0.1361931, w: 0.9880137} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm + parentName: position: {x: -0.2540493, y: -1.0551325e-10, z: 1.09112684e-10} rotation: {x: 0.37014812, y: 0.03247756, z: -0.006699631, w: 0.9283807} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand + parentName: position: {x: -0.24638927, y: -1.1574698e-10, z: 1.1358061e-11} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 + parentName: position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} rotation: {x: 0.042805295, y: 0.05632816, z: 0.06901114, w: 0.99510425} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 + parentName: position: {x: -0.03979728, y: 0.000049808412, z: 0.0011857506} rotation: {x: -0.11841995, y: 0.01500381, z: 0.016670156, w: 0.99271035} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 + parentName: position: {x: -0.027968477, y: -0.000000006416276, z: -0.000000051434675} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 + parentName: position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} rotation: {x: -0.033341967, y: 0.07042229, z: 0.07230802, w: 0.9943342} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 + parentName: position: {x: -0.044280436, y: 0.00000479887, z: -0.00042540036} rotation: {x: -0.033172157, y: -0.0051259603, z: 0.011490114, w: 0.9993705} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 + parentName: position: {x: -0.033964828, y: -0.000000012184439, z: 0.000000003753109} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 + parentName: position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} rotation: {x: -0.110300295, y: 0.079448596, z: 0.0742732, w: 0.9879298} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 + parentName: position: {x: -0.030805448, y: -0.000030874577, z: -0.0014480774} rotation: {x: -0.072170265, y: -0.026308026, z: 0.013470372, w: 0.9969544} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 + parentName: position: {x: -0.023064027, y: -0.0000064025903, z: 0.000000018201217} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 + parentName: position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} rotation: {x: 0.015795682, y: 0.09177202, z: 0.06791128, w: 0.9933361} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 + parentName: position: {x: -0.043135457, y: -0.000020882291, z: -0.0022351781} rotation: {x: -0.13446514, y: -0.026096364, z: 0.008734329, w: 0.9905361} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 + parentName: position: {x: -0.030835565, y: 1.5784053e-10, z: -0.000000016455102} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 + parentName: position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} rotation: {x: -0.2238929, y: -0.0758366, z: -0.1291156, w: 0.9630421} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 + parentName: position: {x: -0.016374, y: -0.00529, z: 0.023491409} rotation: {x: -0.0260623, y: 0.09668697, z: 0.0036068659, w: 0.9949671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 + parentName: position: {x: -0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck + parentName: position: {x: -0, y: 0.2590093, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head + parentName: position: {x: 5.7731595e-17, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw + parentName: position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND + parentName: position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner + parentName: position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower + parentName: position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner + parentName: position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower + parentName: position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack + parentName: position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip + parentName: position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek + parentName: position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye + parentName: position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower + parentName: position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper + parentName: position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow + parentName: position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow + parentName: position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper + parentName: position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril + parentName: position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek + parentName: position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye + parentName: position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower + parentName: position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper + parentName: position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow + parentName: position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow + parentName: position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper + parentName: position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril + parentName: position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder + parentName: position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} rotation: {x: 0.1579978, y: 0.9867513, z: -0.013299583, w: -0.034375474} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm + parentName: position: {x: -0.100501455, y: -0.0000024966455, z: -0.00000005228366} rotation: {x: 0.13541101, y: 0.98766977, z: -0.004818486, w: 0.07841701} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm + parentName: position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} rotation: {x: 0.25265744, y: 0.024327299, z: -0.026384478, w: 0.96689} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand + parentName: position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 + parentName: position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} rotation: {x: 0.050132476, y: 0.10633009, z: -0.025096685, w: 0.99274915} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 + parentName: position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} rotation: {x: -0.12210108, y: 0.026184548, z: 0.03848509, w: 0.99142563} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 + parentName: position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 + parentName: position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} rotation: {x: -0.026879195, y: -0.0053047896, z: -0.033220712, w: 0.99907243} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 + parentName: position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} rotation: {x: -0.039818257, y: -0.04374049, z: 0.09885875, w: 0.993342} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 + parentName: position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 + parentName: position: {x: 0.06680334, y: -0.0019941085, z: -0.030756146} rotation: {x: -0.11187588, y: -0.25872952, z: 0.0088018915, w: 0.9594088} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 + parentName: position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} rotation: {x: -0.07357618, y: 0.009609909, z: 0.0022198618, w: 0.9972409} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 + parentName: position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 + parentName: position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} rotation: {x: 0.01820465, y: -0.13375518, z: -0.008969554, w: 0.9908066} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 + parentName: position: {x: 0.042887185, y: -0.0013753821, z: -0.0049458584} rotation: {x: -0.12681748, y: 0.0007345817, z: 0.115031, w: 0.98523337} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 + parentName: position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 + parentName: position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} rotation: {x: -0.16873905, y: 0.028051713, z: 0.11700559, w: 0.9782893} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 + parentName: position: {x: 0.016374, y: -0.00529, z: 0.02349136} rotation: {x: -0.026062516, y: -0.09668957, z: -0.003607418, w: 0.99496675} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 + parentName: position: {x: 0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 armTwist: 0.5 foreArmTwist: 0.5 upperLegTwist: 0.5 @@ -1522,12 +2798,16 @@ ModelImporter: armStretch: 0.05 legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: hasTranslationDoF: 0 - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e8914d097ece7cc48a83d5fccd4098c0, - type: 3} + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta index 2564c29a4..1bba047aa 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta @@ -1,512 +1,1483 @@ fileFormatVersion: 2 guid: 1062212255550964e974f3ffb3cbaae3 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: Chest - 100002: chestProxy_geo - 100004: //RootNode - 100006: Head - 100008: headProxy_geo - 100010: HeadTop_End - 100012: Hips - 100014: Jaw - 100016: JawEND - 100018: jawProxy_geo - 100020: l_ankleProxy_geo - 100022: l_ballProxy_geo - 100024: l_clavicleProxy_geo - 100026: l_erbowProxy_geo - 100028: l_hipProxy_geo - 100030: l_indexProxy_01_geo - 100032: l_indexProxy_02_geo - 100034: l_indexProxy_03_geo - 100036: l_kneeProxy_geo - 100038: l_middleProxy_01_geo - 100040: l_middleProxy_02_geo - 100042: l_middleProxy_03_geo - 100044: l_pinkyProxy_01_geo - 100046: l_pinkyProxy_02_geo - 100048: l_pinkyProxy_03_geo - 100050: l_ringProxy_01_geo - 100052: l_ringProxy_02_geo - 100054: l_ringProxy_03_geo - 100056: l_shourderProxy_geo - 100058: l_thumbProxy_01_geo - 100060: l_thumbProxy_02_geo - 100062: l_thumbProxy_03_geo - 100064: l_UNI_eye - 100066: l_wristProxy_geo - 100068: LeftArm - 100070: LeftCheek - 100072: LeftEye - 100074: LeftEyelidLower - 100076: LeftEyelidUpper - 100078: LeftFoot - 100080: LeftForeArm - 100082: LeftHand - 100084: LeftHandIndex1 - 100086: LeftHandIndex13 - 100088: LeftHandIndex17 - 100090: LeftHandIndex2 - 100092: LeftHandIndex3 - 100094: LeftHandMiddle1 - 100096: LeftHandMiddle13 - 100098: LeftHandMiddle17 - 100100: LeftHandMiddle2 - 100102: LeftHandMiddle3 - 100104: LeftHandPinky1 - 100106: LeftHandPinky13 - 100108: LeftHandPinky17 - 100110: LeftHandPinky2 - 100112: LeftHandPinky3 - 100114: LeftHandRing1 - 100116: LeftHandRing13 - 100118: LeftHandRing17 - 100120: LeftHandRing2 - 100122: LeftHandRing3 - 100124: LeftHandThumb1 - 100126: LeftHandThumb13 - 100128: LeftHandThumb17 - 100130: LeftHandThumb2 - 100132: LeftHandThumb3 - 100134: LeftInnerBrow - 100136: LeftIOuterBrow - 100138: LeftLeg - 100140: LeftLipCorner - 100142: LeftLipLower - 100144: LeftLipUpper - 100146: LeftNostril - 100148: LeftShoulder - 100150: LeftToes - 100152: LeftUpLeg - 100154: LToeBase_End2 - 100156: LToeBase_End3 - 100158: Neck - 100160: neckProxy_geo - 100162: pelvisProxy_geo - 100164: Pivot - 100166: r_ankleProxy_geo - 100168: r_ballProxy_geo - 100170: r_clavicleProxy_geo - 100172: r_erbowProxy_geo - 100174: r_hipProxy_geo - 100176: r_indexProxy_01_geo - 100178: r_indexProxy_02_geo - 100180: r_indexProxy_03_geo - 100182: r_kneeProxy_geo - 100184: r_middleProxy_01_geo - 100186: r_middleProxy_02_geo - 100188: r_middleProxy_03_geo - 100190: r_pinkyProxy_01_geo - 100192: r_pinkyProxy_02_geo - 100194: r_pinkyProxy_03_geo - 100196: r_ringProxy_01_geo - 100198: r_ringProxy_02_geo - 100200: r_ringProxy_03_geo - 100202: r_shourderProxy_geo - 100204: r_thumbProxy_01_geo - 100206: r_thumbProxy_02_geo - 100208: r_thumbProxy_03_geo - 100210: r_UNI_eye - 100212: r_wristProxy_geo - 100214: Reference - 100216: RightArm - 100218: RightCheek - 100220: RightEye - 100222: RightEyelidLower - 100224: RightEyelidUpper - 100226: RightFoot - 100228: RightForeArm - 100230: RightHand - 100232: RightHandIndex1 - 100234: RightHandIndex2 - 100236: RightHandIndex3 - 100238: RightHandMiddle1 - 100240: RightHandMiddle2 - 100242: RightHandMiddle3 - 100244: RightHandPinky1 - 100246: RightHandPinky2 - 100248: RightHandPinky3 - 100250: RightHandRing1 - 100252: RightHandRing2 - 100254: RightHandRing3 - 100256: RightHandThumb1 - 100258: RightHandThumb2 - 100260: RightHandThumb3 - 100262: RightInnerBrow - 100264: RightIOuterBrow - 100266: RightLeg - 100268: RightLipCorner - 100270: RightLipLower - 100272: RightLipUpper - 100274: RightNostril - 100276: RightShoulder - 100278: RightToes - 100280: RightUpLeg - 100282: Root - 100284: Spine - 100286: spineProxy_geo - 100288: TongueBack - 100290: TongueTip - 100292: UNI_01_Lower_teethProxy - 100294: UNI_01_TongueBaseProxy - 100296: UNI_01_TongueTipProxy - 100298: UNI_01_Upper_teethProxy - 400000: Chest - 400002: chestProxy_geo - 400004: //RootNode - 400006: Head - 400008: headProxy_geo - 400010: HeadTop_End - 400012: Hips - 400014: Jaw - 400016: JawEND - 400018: jawProxy_geo - 400020: l_ankleProxy_geo - 400022: l_ballProxy_geo - 400024: l_clavicleProxy_geo - 400026: l_erbowProxy_geo - 400028: l_hipProxy_geo - 400030: l_indexProxy_01_geo - 400032: l_indexProxy_02_geo - 400034: l_indexProxy_03_geo - 400036: l_kneeProxy_geo - 400038: l_middleProxy_01_geo - 400040: l_middleProxy_02_geo - 400042: l_middleProxy_03_geo - 400044: l_pinkyProxy_01_geo - 400046: l_pinkyProxy_02_geo - 400048: l_pinkyProxy_03_geo - 400050: l_ringProxy_01_geo - 400052: l_ringProxy_02_geo - 400054: l_ringProxy_03_geo - 400056: l_shourderProxy_geo - 400058: l_thumbProxy_01_geo - 400060: l_thumbProxy_02_geo - 400062: l_thumbProxy_03_geo - 400064: l_UNI_eye - 400066: l_wristProxy_geo - 400068: LeftArm - 400070: LeftCheek - 400072: LeftEye - 400074: LeftEyelidLower - 400076: LeftEyelidUpper - 400078: LeftFoot - 400080: LeftForeArm - 400082: LeftHand - 400084: LeftHandIndex1 - 400086: LeftHandIndex13 - 400088: LeftHandIndex17 - 400090: LeftHandIndex2 - 400092: LeftHandIndex3 - 400094: LeftHandMiddle1 - 400096: LeftHandMiddle13 - 400098: LeftHandMiddle17 - 400100: LeftHandMiddle2 - 400102: LeftHandMiddle3 - 400104: LeftHandPinky1 - 400106: LeftHandPinky13 - 400108: LeftHandPinky17 - 400110: LeftHandPinky2 - 400112: LeftHandPinky3 - 400114: LeftHandRing1 - 400116: LeftHandRing13 - 400118: LeftHandRing17 - 400120: LeftHandRing2 - 400122: LeftHandRing3 - 400124: LeftHandThumb1 - 400126: LeftHandThumb13 - 400128: LeftHandThumb17 - 400130: LeftHandThumb2 - 400132: LeftHandThumb3 - 400134: LeftInnerBrow - 400136: LeftIOuterBrow - 400138: LeftLeg - 400140: LeftLipCorner - 400142: LeftLipLower - 400144: LeftLipUpper - 400146: LeftNostril - 400148: LeftShoulder - 400150: LeftToes - 400152: LeftUpLeg - 400154: LToeBase_End2 - 400156: LToeBase_End3 - 400158: Neck - 400160: neckProxy_geo - 400162: pelvisProxy_geo - 400164: Pivot - 400166: r_ankleProxy_geo - 400168: r_ballProxy_geo - 400170: r_clavicleProxy_geo - 400172: r_erbowProxy_geo - 400174: r_hipProxy_geo - 400176: r_indexProxy_01_geo - 400178: r_indexProxy_02_geo - 400180: r_indexProxy_03_geo - 400182: r_kneeProxy_geo - 400184: r_middleProxy_01_geo - 400186: r_middleProxy_02_geo - 400188: r_middleProxy_03_geo - 400190: r_pinkyProxy_01_geo - 400192: r_pinkyProxy_02_geo - 400194: r_pinkyProxy_03_geo - 400196: r_ringProxy_01_geo - 400198: r_ringProxy_02_geo - 400200: r_ringProxy_03_geo - 400202: r_shourderProxy_geo - 400204: r_thumbProxy_01_geo - 400206: r_thumbProxy_02_geo - 400208: r_thumbProxy_03_geo - 400210: r_UNI_eye - 400212: r_wristProxy_geo - 400214: Reference - 400216: RightArm - 400218: RightCheek - 400220: RightEye - 400222: RightEyelidLower - 400224: RightEyelidUpper - 400226: RightFoot - 400228: RightForeArm - 400230: RightHand - 400232: RightHandIndex1 - 400234: RightHandIndex2 - 400236: RightHandIndex3 - 400238: RightHandMiddle1 - 400240: RightHandMiddle2 - 400242: RightHandMiddle3 - 400244: RightHandPinky1 - 400246: RightHandPinky2 - 400248: RightHandPinky3 - 400250: RightHandRing1 - 400252: RightHandRing2 - 400254: RightHandRing3 - 400256: RightHandThumb1 - 400258: RightHandThumb2 - 400260: RightHandThumb3 - 400262: RightInnerBrow - 400264: RightIOuterBrow - 400266: RightLeg - 400268: RightLipCorner - 400270: RightLipLower - 400272: RightLipUpper - 400274: RightNostril - 400276: RightShoulder - 400278: RightToes - 400280: RightUpLeg - 400282: Root - 400284: Spine - 400286: spineProxy_geo - 400288: TongueBack - 400290: TongueTip - 400292: UNI_01_Lower_teethProxy - 400294: UNI_01_TongueBaseProxy - 400296: UNI_01_TongueTipProxy - 400298: UNI_01_Upper_teethProxy - 2300000: chestProxy_geo - 2300002: headProxy_geo - 2300004: jawProxy_geo - 2300006: l_ankleProxy_geo - 2300008: l_ballProxy_geo - 2300010: l_clavicleProxy_geo - 2300012: l_erbowProxy_geo - 2300014: l_hipProxy_geo - 2300016: l_indexProxy_01_geo - 2300018: l_indexProxy_02_geo - 2300020: l_indexProxy_03_geo - 2300022: l_kneeProxy_geo - 2300024: l_middleProxy_01_geo - 2300026: l_middleProxy_02_geo - 2300028: l_middleProxy_03_geo - 2300030: l_pinkyProxy_01_geo - 2300032: l_pinkyProxy_02_geo - 2300034: l_pinkyProxy_03_geo - 2300036: l_ringProxy_01_geo - 2300038: l_ringProxy_02_geo - 2300040: l_ringProxy_03_geo - 2300042: l_shourderProxy_geo - 2300044: l_thumbProxy_01_geo - 2300046: l_thumbProxy_02_geo - 2300048: l_thumbProxy_03_geo - 2300050: l_UNI_eye - 2300052: l_wristProxy_geo - 2300054: neckProxy_geo - 2300056: pelvisProxy_geo - 2300058: r_ankleProxy_geo - 2300060: r_ballProxy_geo - 2300062: r_clavicleProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_hipProxy_geo - 2300068: r_indexProxy_01_geo - 2300070: r_indexProxy_02_geo - 2300072: r_indexProxy_03_geo - 2300074: r_kneeProxy_geo - 2300076: r_middleProxy_01_geo - 2300078: r_middleProxy_02_geo - 2300080: r_middleProxy_03_geo - 2300082: r_pinkyProxy_01_geo - 2300084: r_pinkyProxy_02_geo - 2300086: r_pinkyProxy_03_geo - 2300088: r_ringProxy_01_geo - 2300090: r_ringProxy_02_geo - 2300092: r_ringProxy_03_geo - 2300094: r_shourderProxy_geo - 2300096: r_thumbProxy_01_geo - 2300098: r_thumbProxy_02_geo - 2300100: r_thumbProxy_03_geo - 2300102: r_UNI_eye - 2300104: r_wristProxy_geo - 2300106: spineProxy_geo - 2300108: UNI_01_Lower_teethProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: UNI_01_TongueTipProxy - 2300114: UNI_01_Upper_teethProxy - 3300000: chestProxy_geo - 3300002: headProxy_geo - 3300004: jawProxy_geo - 3300006: l_ankleProxy_geo - 3300008: l_ballProxy_geo - 3300010: l_clavicleProxy_geo - 3300012: l_erbowProxy_geo - 3300014: l_hipProxy_geo - 3300016: l_indexProxy_01_geo - 3300018: l_indexProxy_02_geo - 3300020: l_indexProxy_03_geo - 3300022: l_kneeProxy_geo - 3300024: l_middleProxy_01_geo - 3300026: l_middleProxy_02_geo - 3300028: l_middleProxy_03_geo - 3300030: l_pinkyProxy_01_geo - 3300032: l_pinkyProxy_02_geo - 3300034: l_pinkyProxy_03_geo - 3300036: l_ringProxy_01_geo - 3300038: l_ringProxy_02_geo - 3300040: l_ringProxy_03_geo - 3300042: l_shourderProxy_geo - 3300044: l_thumbProxy_01_geo - 3300046: l_thumbProxy_02_geo - 3300048: l_thumbProxy_03_geo - 3300050: l_UNI_eye - 3300052: l_wristProxy_geo - 3300054: neckProxy_geo - 3300056: pelvisProxy_geo - 3300058: r_ankleProxy_geo - 3300060: r_ballProxy_geo - 3300062: r_clavicleProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_hipProxy_geo - 3300068: r_indexProxy_01_geo - 3300070: r_indexProxy_02_geo - 3300072: r_indexProxy_03_geo - 3300074: r_kneeProxy_geo - 3300076: r_middleProxy_01_geo - 3300078: r_middleProxy_02_geo - 3300080: r_middleProxy_03_geo - 3300082: r_pinkyProxy_01_geo - 3300084: r_pinkyProxy_02_geo - 3300086: r_pinkyProxy_03_geo - 3300088: r_ringProxy_01_geo - 3300090: r_ringProxy_02_geo - 3300092: r_ringProxy_03_geo - 3300094: r_shourderProxy_geo - 3300096: r_thumbProxy_01_geo - 3300098: r_thumbProxy_02_geo - 3300100: r_thumbProxy_03_geo - 3300102: r_UNI_eye - 3300104: r_wristProxy_geo - 3300106: spineProxy_geo - 3300108: UNI_01_Lower_teethProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: UNI_01_TongueTipProxy - 3300114: UNI_01_Upper_teethProxy - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: HumanoidRunRight - 7400002: HumanoidRunLeft - 9500000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Chest + - first: + 1: 100002 + second: chestProxy_geo + - first: + 1: 100004 + second: //RootNode + - first: + 1: 100006 + second: Head + - first: + 1: 100008 + second: headProxy_geo + - first: + 1: 100010 + second: HeadTop_End + - first: + 1: 100012 + second: Hips + - first: + 1: 100014 + second: Jaw + - first: + 1: 100016 + second: JawEND + - first: + 1: 100018 + second: jawProxy_geo + - first: + 1: 100020 + second: l_ankleProxy_geo + - first: + 1: 100022 + second: l_ballProxy_geo + - first: + 1: 100024 + second: l_clavicleProxy_geo + - first: + 1: 100026 + second: l_erbowProxy_geo + - first: + 1: 100028 + second: l_hipProxy_geo + - first: + 1: 100030 + second: l_indexProxy_01_geo + - first: + 1: 100032 + second: l_indexProxy_02_geo + - first: + 1: 100034 + second: l_indexProxy_03_geo + - first: + 1: 100036 + second: l_kneeProxy_geo + - first: + 1: 100038 + second: l_middleProxy_01_geo + - first: + 1: 100040 + second: l_middleProxy_02_geo + - first: + 1: 100042 + second: l_middleProxy_03_geo + - first: + 1: 100044 + second: l_pinkyProxy_01_geo + - first: + 1: 100046 + second: l_pinkyProxy_02_geo + - first: + 1: 100048 + second: l_pinkyProxy_03_geo + - first: + 1: 100050 + second: l_ringProxy_01_geo + - first: + 1: 100052 + second: l_ringProxy_02_geo + - first: + 1: 100054 + second: l_ringProxy_03_geo + - first: + 1: 100056 + second: l_shourderProxy_geo + - first: + 1: 100058 + second: l_thumbProxy_01_geo + - first: + 1: 100060 + second: l_thumbProxy_02_geo + - first: + 1: 100062 + second: l_thumbProxy_03_geo + - first: + 1: 100064 + second: l_UNI_eye + - first: + 1: 100066 + second: l_wristProxy_geo + - first: + 1: 100068 + second: LeftArm + - first: + 1: 100070 + second: LeftCheek + - first: + 1: 100072 + second: LeftEye + - first: + 1: 100074 + second: LeftEyelidLower + - first: + 1: 100076 + second: LeftEyelidUpper + - first: + 1: 100078 + second: LeftFoot + - first: + 1: 100080 + second: LeftForeArm + - first: + 1: 100082 + second: LeftHand + - first: + 1: 100084 + second: LeftHandIndex1 + - first: + 1: 100086 + second: LeftHandIndex13 + - first: + 1: 100088 + second: LeftHandIndex17 + - first: + 1: 100090 + second: LeftHandIndex2 + - first: + 1: 100092 + second: LeftHandIndex3 + - first: + 1: 100094 + second: LeftHandMiddle1 + - first: + 1: 100096 + second: LeftHandMiddle13 + - first: + 1: 100098 + second: LeftHandMiddle17 + - first: + 1: 100100 + second: LeftHandMiddle2 + - first: + 1: 100102 + second: LeftHandMiddle3 + - first: + 1: 100104 + second: LeftHandPinky1 + - first: + 1: 100106 + second: LeftHandPinky13 + - first: + 1: 100108 + second: LeftHandPinky17 + - first: + 1: 100110 + second: LeftHandPinky2 + - first: + 1: 100112 + second: LeftHandPinky3 + - first: + 1: 100114 + second: LeftHandRing1 + - first: + 1: 100116 + second: LeftHandRing13 + - first: + 1: 100118 + second: LeftHandRing17 + - first: + 1: 100120 + second: LeftHandRing2 + - first: + 1: 100122 + second: LeftHandRing3 + - first: + 1: 100124 + second: LeftHandThumb1 + - first: + 1: 100126 + second: LeftHandThumb13 + - first: + 1: 100128 + second: LeftHandThumb17 + - first: + 1: 100130 + second: LeftHandThumb2 + - first: + 1: 100132 + second: LeftHandThumb3 + - first: + 1: 100134 + second: LeftInnerBrow + - first: + 1: 100136 + second: LeftIOuterBrow + - first: + 1: 100138 + second: LeftLeg + - first: + 1: 100140 + second: LeftLipCorner + - first: + 1: 100142 + second: LeftLipLower + - first: + 1: 100144 + second: LeftLipUpper + - first: + 1: 100146 + second: LeftNostril + - first: + 1: 100148 + second: LeftShoulder + - first: + 1: 100150 + second: LeftToes + - first: + 1: 100152 + second: LeftUpLeg + - first: + 1: 100154 + second: LToeBase_End2 + - first: + 1: 100156 + second: LToeBase_End3 + - first: + 1: 100158 + second: Neck + - first: + 1: 100160 + second: neckProxy_geo + - first: + 1: 100162 + second: pelvisProxy_geo + - first: + 1: 100164 + second: Pivot + - first: + 1: 100166 + second: r_ankleProxy_geo + - first: + 1: 100168 + second: r_ballProxy_geo + - first: + 1: 100170 + second: r_clavicleProxy_geo + - first: + 1: 100172 + second: r_erbowProxy_geo + - first: + 1: 100174 + second: r_hipProxy_geo + - first: + 1: 100176 + second: r_indexProxy_01_geo + - first: + 1: 100178 + second: r_indexProxy_02_geo + - first: + 1: 100180 + second: r_indexProxy_03_geo + - first: + 1: 100182 + second: r_kneeProxy_geo + - first: + 1: 100184 + second: r_middleProxy_01_geo + - first: + 1: 100186 + second: r_middleProxy_02_geo + - first: + 1: 100188 + second: r_middleProxy_03_geo + - first: + 1: 100190 + second: r_pinkyProxy_01_geo + - first: + 1: 100192 + second: r_pinkyProxy_02_geo + - first: + 1: 100194 + second: r_pinkyProxy_03_geo + - first: + 1: 100196 + second: r_ringProxy_01_geo + - first: + 1: 100198 + second: r_ringProxy_02_geo + - first: + 1: 100200 + second: r_ringProxy_03_geo + - first: + 1: 100202 + second: r_shourderProxy_geo + - first: + 1: 100204 + second: r_thumbProxy_01_geo + - first: + 1: 100206 + second: r_thumbProxy_02_geo + - first: + 1: 100208 + second: r_thumbProxy_03_geo + - first: + 1: 100210 + second: r_UNI_eye + - first: + 1: 100212 + second: r_wristProxy_geo + - first: + 1: 100214 + second: Reference + - first: + 1: 100216 + second: RightArm + - first: + 1: 100218 + second: RightCheek + - first: + 1: 100220 + second: RightEye + - first: + 1: 100222 + second: RightEyelidLower + - first: + 1: 100224 + second: RightEyelidUpper + - first: + 1: 100226 + second: RightFoot + - first: + 1: 100228 + second: RightForeArm + - first: + 1: 100230 + second: RightHand + - first: + 1: 100232 + second: RightHandIndex1 + - first: + 1: 100234 + second: RightHandIndex2 + - first: + 1: 100236 + second: RightHandIndex3 + - first: + 1: 100238 + second: RightHandMiddle1 + - first: + 1: 100240 + second: RightHandMiddle2 + - first: + 1: 100242 + second: RightHandMiddle3 + - first: + 1: 100244 + second: RightHandPinky1 + - first: + 1: 100246 + second: RightHandPinky2 + - first: + 1: 100248 + second: RightHandPinky3 + - first: + 1: 100250 + second: RightHandRing1 + - first: + 1: 100252 + second: RightHandRing2 + - first: + 1: 100254 + second: RightHandRing3 + - first: + 1: 100256 + second: RightHandThumb1 + - first: + 1: 100258 + second: RightHandThumb2 + - first: + 1: 100260 + second: RightHandThumb3 + - first: + 1: 100262 + second: RightInnerBrow + - first: + 1: 100264 + second: RightIOuterBrow + - first: + 1: 100266 + second: RightLeg + - first: + 1: 100268 + second: RightLipCorner + - first: + 1: 100270 + second: RightLipLower + - first: + 1: 100272 + second: RightLipUpper + - first: + 1: 100274 + second: RightNostril + - first: + 1: 100276 + second: RightShoulder + - first: + 1: 100278 + second: RightToes + - first: + 1: 100280 + second: RightUpLeg + - first: + 1: 100282 + second: Root + - first: + 1: 100284 + second: Spine + - first: + 1: 100286 + second: spineProxy_geo + - first: + 1: 100288 + second: TongueBack + - first: + 1: 100290 + second: TongueTip + - first: + 1: 100292 + second: UNI_01_Lower_teethProxy + - first: + 1: 100294 + second: UNI_01_TongueBaseProxy + - first: + 1: 100296 + second: UNI_01_TongueTipProxy + - first: + 1: 100298 + second: UNI_01_Upper_teethProxy + - first: + 4: 400000 + second: Chest + - first: + 4: 400002 + second: chestProxy_geo + - first: + 4: 400004 + second: //RootNode + - first: + 4: 400006 + second: Head + - first: + 4: 400008 + second: headProxy_geo + - first: + 4: 400010 + second: HeadTop_End + - first: + 4: 400012 + second: Hips + - first: + 4: 400014 + second: Jaw + - first: + 4: 400016 + second: JawEND + - first: + 4: 400018 + second: jawProxy_geo + - first: + 4: 400020 + second: l_ankleProxy_geo + - first: + 4: 400022 + second: l_ballProxy_geo + - first: + 4: 400024 + second: l_clavicleProxy_geo + - first: + 4: 400026 + second: l_erbowProxy_geo + - first: + 4: 400028 + second: l_hipProxy_geo + - first: + 4: 400030 + second: l_indexProxy_01_geo + - first: + 4: 400032 + second: l_indexProxy_02_geo + - first: + 4: 400034 + second: l_indexProxy_03_geo + - first: + 4: 400036 + second: l_kneeProxy_geo + - first: + 4: 400038 + second: l_middleProxy_01_geo + - first: + 4: 400040 + second: l_middleProxy_02_geo + - first: + 4: 400042 + second: l_middleProxy_03_geo + - first: + 4: 400044 + second: l_pinkyProxy_01_geo + - first: + 4: 400046 + second: l_pinkyProxy_02_geo + - first: + 4: 400048 + second: l_pinkyProxy_03_geo + - first: + 4: 400050 + second: l_ringProxy_01_geo + - first: + 4: 400052 + second: l_ringProxy_02_geo + - first: + 4: 400054 + second: l_ringProxy_03_geo + - first: + 4: 400056 + second: l_shourderProxy_geo + - first: + 4: 400058 + second: l_thumbProxy_01_geo + - first: + 4: 400060 + second: l_thumbProxy_02_geo + - first: + 4: 400062 + second: l_thumbProxy_03_geo + - first: + 4: 400064 + second: l_UNI_eye + - first: + 4: 400066 + second: l_wristProxy_geo + - first: + 4: 400068 + second: LeftArm + - first: + 4: 400070 + second: LeftCheek + - first: + 4: 400072 + second: LeftEye + - first: + 4: 400074 + second: LeftEyelidLower + - first: + 4: 400076 + second: LeftEyelidUpper + - first: + 4: 400078 + second: LeftFoot + - first: + 4: 400080 + second: LeftForeArm + - first: + 4: 400082 + second: LeftHand + - first: + 4: 400084 + second: LeftHandIndex1 + - first: + 4: 400086 + second: LeftHandIndex13 + - first: + 4: 400088 + second: LeftHandIndex17 + - first: + 4: 400090 + second: LeftHandIndex2 + - first: + 4: 400092 + second: LeftHandIndex3 + - first: + 4: 400094 + second: LeftHandMiddle1 + - first: + 4: 400096 + second: LeftHandMiddle13 + - first: + 4: 400098 + second: LeftHandMiddle17 + - first: + 4: 400100 + second: LeftHandMiddle2 + - first: + 4: 400102 + second: LeftHandMiddle3 + - first: + 4: 400104 + second: LeftHandPinky1 + - first: + 4: 400106 + second: LeftHandPinky13 + - first: + 4: 400108 + second: LeftHandPinky17 + - first: + 4: 400110 + second: LeftHandPinky2 + - first: + 4: 400112 + second: LeftHandPinky3 + - first: + 4: 400114 + second: LeftHandRing1 + - first: + 4: 400116 + second: LeftHandRing13 + - first: + 4: 400118 + second: LeftHandRing17 + - first: + 4: 400120 + second: LeftHandRing2 + - first: + 4: 400122 + second: LeftHandRing3 + - first: + 4: 400124 + second: LeftHandThumb1 + - first: + 4: 400126 + second: LeftHandThumb13 + - first: + 4: 400128 + second: LeftHandThumb17 + - first: + 4: 400130 + second: LeftHandThumb2 + - first: + 4: 400132 + second: LeftHandThumb3 + - first: + 4: 400134 + second: LeftInnerBrow + - first: + 4: 400136 + second: LeftIOuterBrow + - first: + 4: 400138 + second: LeftLeg + - first: + 4: 400140 + second: LeftLipCorner + - first: + 4: 400142 + second: LeftLipLower + - first: + 4: 400144 + second: LeftLipUpper + - first: + 4: 400146 + second: LeftNostril + - first: + 4: 400148 + second: LeftShoulder + - first: + 4: 400150 + second: LeftToes + - first: + 4: 400152 + second: LeftUpLeg + - first: + 4: 400154 + second: LToeBase_End2 + - first: + 4: 400156 + second: LToeBase_End3 + - first: + 4: 400158 + second: Neck + - first: + 4: 400160 + second: neckProxy_geo + - first: + 4: 400162 + second: pelvisProxy_geo + - first: + 4: 400164 + second: Pivot + - first: + 4: 400166 + second: r_ankleProxy_geo + - first: + 4: 400168 + second: r_ballProxy_geo + - first: + 4: 400170 + second: r_clavicleProxy_geo + - first: + 4: 400172 + second: r_erbowProxy_geo + - first: + 4: 400174 + second: r_hipProxy_geo + - first: + 4: 400176 + second: r_indexProxy_01_geo + - first: + 4: 400178 + second: r_indexProxy_02_geo + - first: + 4: 400180 + second: r_indexProxy_03_geo + - first: + 4: 400182 + second: r_kneeProxy_geo + - first: + 4: 400184 + second: r_middleProxy_01_geo + - first: + 4: 400186 + second: r_middleProxy_02_geo + - first: + 4: 400188 + second: r_middleProxy_03_geo + - first: + 4: 400190 + second: r_pinkyProxy_01_geo + - first: + 4: 400192 + second: r_pinkyProxy_02_geo + - first: + 4: 400194 + second: r_pinkyProxy_03_geo + - first: + 4: 400196 + second: r_ringProxy_01_geo + - first: + 4: 400198 + second: r_ringProxy_02_geo + - first: + 4: 400200 + second: r_ringProxy_03_geo + - first: + 4: 400202 + second: r_shourderProxy_geo + - first: + 4: 400204 + second: r_thumbProxy_01_geo + - first: + 4: 400206 + second: r_thumbProxy_02_geo + - first: + 4: 400208 + second: r_thumbProxy_03_geo + - first: + 4: 400210 + second: r_UNI_eye + - first: + 4: 400212 + second: r_wristProxy_geo + - first: + 4: 400214 + second: Reference + - first: + 4: 400216 + second: RightArm + - first: + 4: 400218 + second: RightCheek + - first: + 4: 400220 + second: RightEye + - first: + 4: 400222 + second: RightEyelidLower + - first: + 4: 400224 + second: RightEyelidUpper + - first: + 4: 400226 + second: RightFoot + - first: + 4: 400228 + second: RightForeArm + - first: + 4: 400230 + second: RightHand + - first: + 4: 400232 + second: RightHandIndex1 + - first: + 4: 400234 + second: RightHandIndex2 + - first: + 4: 400236 + second: RightHandIndex3 + - first: + 4: 400238 + second: RightHandMiddle1 + - first: + 4: 400240 + second: RightHandMiddle2 + - first: + 4: 400242 + second: RightHandMiddle3 + - first: + 4: 400244 + second: RightHandPinky1 + - first: + 4: 400246 + second: RightHandPinky2 + - first: + 4: 400248 + second: RightHandPinky3 + - first: + 4: 400250 + second: RightHandRing1 + - first: + 4: 400252 + second: RightHandRing2 + - first: + 4: 400254 + second: RightHandRing3 + - first: + 4: 400256 + second: RightHandThumb1 + - first: + 4: 400258 + second: RightHandThumb2 + - first: + 4: 400260 + second: RightHandThumb3 + - first: + 4: 400262 + second: RightInnerBrow + - first: + 4: 400264 + second: RightIOuterBrow + - first: + 4: 400266 + second: RightLeg + - first: + 4: 400268 + second: RightLipCorner + - first: + 4: 400270 + second: RightLipLower + - first: + 4: 400272 + second: RightLipUpper + - first: + 4: 400274 + second: RightNostril + - first: + 4: 400276 + second: RightShoulder + - first: + 4: 400278 + second: RightToes + - first: + 4: 400280 + second: RightUpLeg + - first: + 4: 400282 + second: Root + - first: + 4: 400284 + second: Spine + - first: + 4: 400286 + second: spineProxy_geo + - first: + 4: 400288 + second: TongueBack + - first: + 4: 400290 + second: TongueTip + - first: + 4: 400292 + second: UNI_01_Lower_teethProxy + - first: + 4: 400294 + second: UNI_01_TongueBaseProxy + - first: + 4: 400296 + second: UNI_01_TongueTipProxy + - first: + 4: 400298 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300000 + second: chestProxy_geo + - first: + 23: 2300002 + second: headProxy_geo + - first: + 23: 2300004 + second: jawProxy_geo + - first: + 23: 2300006 + second: l_ankleProxy_geo + - first: + 23: 2300008 + second: l_ballProxy_geo + - first: + 23: 2300010 + second: l_clavicleProxy_geo + - first: + 23: 2300012 + second: l_erbowProxy_geo + - first: + 23: 2300014 + second: l_hipProxy_geo + - first: + 23: 2300016 + second: l_indexProxy_01_geo + - first: + 23: 2300018 + second: l_indexProxy_02_geo + - first: + 23: 2300020 + second: l_indexProxy_03_geo + - first: + 23: 2300022 + second: l_kneeProxy_geo + - first: + 23: 2300024 + second: l_middleProxy_01_geo + - first: + 23: 2300026 + second: l_middleProxy_02_geo + - first: + 23: 2300028 + second: l_middleProxy_03_geo + - first: + 23: 2300030 + second: l_pinkyProxy_01_geo + - first: + 23: 2300032 + second: l_pinkyProxy_02_geo + - first: + 23: 2300034 + second: l_pinkyProxy_03_geo + - first: + 23: 2300036 + second: l_ringProxy_01_geo + - first: + 23: 2300038 + second: l_ringProxy_02_geo + - first: + 23: 2300040 + second: l_ringProxy_03_geo + - first: + 23: 2300042 + second: l_shourderProxy_geo + - first: + 23: 2300044 + second: l_thumbProxy_01_geo + - first: + 23: 2300046 + second: l_thumbProxy_02_geo + - first: + 23: 2300048 + second: l_thumbProxy_03_geo + - first: + 23: 2300050 + second: l_UNI_eye + - first: + 23: 2300052 + second: l_wristProxy_geo + - first: + 23: 2300054 + second: neckProxy_geo + - first: + 23: 2300056 + second: pelvisProxy_geo + - first: + 23: 2300058 + second: r_ankleProxy_geo + - first: + 23: 2300060 + second: r_ballProxy_geo + - first: + 23: 2300062 + second: r_clavicleProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_hipProxy_geo + - first: + 23: 2300068 + second: r_indexProxy_01_geo + - first: + 23: 2300070 + second: r_indexProxy_02_geo + - first: + 23: 2300072 + second: r_indexProxy_03_geo + - first: + 23: 2300074 + second: r_kneeProxy_geo + - first: + 23: 2300076 + second: r_middleProxy_01_geo + - first: + 23: 2300078 + second: r_middleProxy_02_geo + - first: + 23: 2300080 + second: r_middleProxy_03_geo + - first: + 23: 2300082 + second: r_pinkyProxy_01_geo + - first: + 23: 2300084 + second: r_pinkyProxy_02_geo + - first: + 23: 2300086 + second: r_pinkyProxy_03_geo + - first: + 23: 2300088 + second: r_ringProxy_01_geo + - first: + 23: 2300090 + second: r_ringProxy_02_geo + - first: + 23: 2300092 + second: r_ringProxy_03_geo + - first: + 23: 2300094 + second: r_shourderProxy_geo + - first: + 23: 2300096 + second: r_thumbProxy_01_geo + - first: + 23: 2300098 + second: r_thumbProxy_02_geo + - first: + 23: 2300100 + second: r_thumbProxy_03_geo + - first: + 23: 2300102 + second: r_UNI_eye + - first: + 23: 2300104 + second: r_wristProxy_geo + - first: + 23: 2300106 + second: spineProxy_geo + - first: + 23: 2300108 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: UNI_01_TongueTipProxy + - first: + 23: 2300114 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300000 + second: chestProxy_geo + - first: + 33: 3300002 + second: headProxy_geo + - first: + 33: 3300004 + second: jawProxy_geo + - first: + 33: 3300006 + second: l_ankleProxy_geo + - first: + 33: 3300008 + second: l_ballProxy_geo + - first: + 33: 3300010 + second: l_clavicleProxy_geo + - first: + 33: 3300012 + second: l_erbowProxy_geo + - first: + 33: 3300014 + second: l_hipProxy_geo + - first: + 33: 3300016 + second: l_indexProxy_01_geo + - first: + 33: 3300018 + second: l_indexProxy_02_geo + - first: + 33: 3300020 + second: l_indexProxy_03_geo + - first: + 33: 3300022 + second: l_kneeProxy_geo + - first: + 33: 3300024 + second: l_middleProxy_01_geo + - first: + 33: 3300026 + second: l_middleProxy_02_geo + - first: + 33: 3300028 + second: l_middleProxy_03_geo + - first: + 33: 3300030 + second: l_pinkyProxy_01_geo + - first: + 33: 3300032 + second: l_pinkyProxy_02_geo + - first: + 33: 3300034 + second: l_pinkyProxy_03_geo + - first: + 33: 3300036 + second: l_ringProxy_01_geo + - first: + 33: 3300038 + second: l_ringProxy_02_geo + - first: + 33: 3300040 + second: l_ringProxy_03_geo + - first: + 33: 3300042 + second: l_shourderProxy_geo + - first: + 33: 3300044 + second: l_thumbProxy_01_geo + - first: + 33: 3300046 + second: l_thumbProxy_02_geo + - first: + 33: 3300048 + second: l_thumbProxy_03_geo + - first: + 33: 3300050 + second: l_UNI_eye + - first: + 33: 3300052 + second: l_wristProxy_geo + - first: + 33: 3300054 + second: neckProxy_geo + - first: + 33: 3300056 + second: pelvisProxy_geo + - first: + 33: 3300058 + second: r_ankleProxy_geo + - first: + 33: 3300060 + second: r_ballProxy_geo + - first: + 33: 3300062 + second: r_clavicleProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_hipProxy_geo + - first: + 33: 3300068 + second: r_indexProxy_01_geo + - first: + 33: 3300070 + second: r_indexProxy_02_geo + - first: + 33: 3300072 + second: r_indexProxy_03_geo + - first: + 33: 3300074 + second: r_kneeProxy_geo + - first: + 33: 3300076 + second: r_middleProxy_01_geo + - first: + 33: 3300078 + second: r_middleProxy_02_geo + - first: + 33: 3300080 + second: r_middleProxy_03_geo + - first: + 33: 3300082 + second: r_pinkyProxy_01_geo + - first: + 33: 3300084 + second: r_pinkyProxy_02_geo + - first: + 33: 3300086 + second: r_pinkyProxy_03_geo + - first: + 33: 3300088 + second: r_ringProxy_01_geo + - first: + 33: 3300090 + second: r_ringProxy_02_geo + - first: + 33: 3300092 + second: r_ringProxy_03_geo + - first: + 33: 3300094 + second: r_shourderProxy_geo + - first: + 33: 3300096 + second: r_thumbProxy_01_geo + - first: + 33: 3300098 + second: r_thumbProxy_02_geo + - first: + 33: 3300100 + second: r_thumbProxy_03_geo + - first: + 33: 3300102 + second: r_UNI_eye + - first: + 33: 3300104 + second: r_wristProxy_geo + - first: + 33: 3300106 + second: spineProxy_geo + - first: + 33: 3300108 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: UNI_01_TongueTipProxy + - first: + 33: 3300114 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: HumanoidRunRight + - first: + 74: 7400002 + second: HumanoidRunLeft + - first: + 95: 9500000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 0 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidRunRight takeName: _30_a_U1_M_P_RunForwardTurnRight_NtrlWide__Fb_Dia3m_No_0_PJ_4 + internalID: 0 firstFrame: 98.5 - lastFrame: 115.699997 + lastFrame: 115.7 wrapMode: 0 orientationOffsetY: 0 level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -523,16 +1494,19 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidRunLeft takeName: _30_a_U1_M_P_RunForwardTurnRight_NtrlWide__Fb_Dia3m_No_0_PJ_4 + internalID: 0 firstFrame: 98.5 - lastFrame: 115.699997 + lastFrame: 115.7 wrapMode: 0 orientationOffsetY: 0 level: 0 - cycleOffset: .5 + cycleOffset: 0.5 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -549,18 +1523,31 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -568,12 +1555,16 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -1009,461 +2000,468 @@ ModelImporter: modified: 0 skeleton: - name: HumanoidRunTurn(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: 0, y: .957496524, z: -.0550467446} + parentName: + position: {x: 0, y: 0.9574965, z: -0.055046745} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg - position: {x: -.0754494965, y: -.0456640199, z: -1.1546319e-16} + parentName: + position: {x: -0.0754495, y: -0.04566402, z: -1.1546319e-16} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg - position: {x: -.0205504987, y: -.409129977, z: -.000718647963} + parentName: + position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot - position: {x: -.00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes - position: {x: -.00748699997, y: -.0731673017, z: .145427123} + parentName: + position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LToeBase_End2 - position: {x: .0126400003, y: -.0131357787, z: .0358933695} + parentName: + position: {x: 0.01264, y: -0.013135779, z: 0.03589337} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg - position: {x: .0754495338, y: -.0456639901, z: -6.21724896e-17} + parentName: + position: {x: 0.075449534, y: -0.04566399, z: -6.217249e-17} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg - position: {x: .0205504671, y: -.409130007, z: -.000718647963} + parentName: + position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot - position: {x: .00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes - position: {x: .00748699997, y: -.0731673017, z: .145427495} + parentName: + position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LToeBase_End3 - position: {x: -.0126400003, y: -.0131357787, z: .0358929969} + parentName: + position: {x: -0.01264, y: -0.013135779, z: 0.035892997} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine - position: {x: -3.97903934e-15, y: .0922631845, z: .0157713313} + parentName: + position: {x: -3.9790393e-15, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest - position: {x: -1.13686835e-15, y: .162540287, z: -.00165605545} + parentName: + position: {x: -1.1368684e-15, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder - position: {x: -.0382859968, y: .221622497, z: -.017063085} - rotation: {x: -.0352291651, y: -.0970438123, z: .134997442, w: .985452831} + parentName: + position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} + rotation: {x: -0.035229165, y: -0.09704381, z: 0.13499744, w: 0.98545283} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm - position: {x: -.100502051, y: 1.12508469e-09, z: -1.90390342e-10} - rotation: {x: -.0375410952, y: .102647617, z: -.11081282, w: .987813115} + parentName: + position: {x: -0.10050205, y: 0.0000000011250847, z: -1.9039034e-10} + rotation: {x: -0.037541095, y: 0.10264762, z: -0.11081282, w: 0.9878131} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm - position: {x: -.254049301, y: -1.05943622e-10, z: 1.09253259e-10} - rotation: {x: .116439298, y: .0291142799, z: -.0214416683, w: .992539465} + parentName: + position: {x: -0.2540493, y: -1.0594362e-10, z: 1.0925326e-10} + rotation: {x: 0.1164393, y: 0.02911428, z: -0.021441668, w: 0.99253947} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand - position: {x: -.24638927, y: -1.22168442e-10, z: 1.6358968e-11} + parentName: + position: {x: -0.24638927, y: -1.2216844e-10, z: 1.6358968e-11} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 - position: {x: -.0751257986, y: -.00784140453, z: .0326526426} - rotation: {x: .0428046882, y: .0563275144, z: .0690078288, w: .995104432} + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: 0.04280469, y: 0.056327514, z: 0.06900783, w: 0.99510443} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 - position: {x: -.03979728, y: 4.98084119e-05, z: .00118575059} - rotation: {x: -.118420318, y: .0150028728, z: .0166708156, w: .992710233} + parentName: + position: {x: -0.03979728, y: 0.000049808412, z: 0.0011857506} + rotation: {x: -0.11842032, y: 0.015002873, z: 0.016670816, w: 0.99271023} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 - position: {x: -.0279684775, y: -6.41564535e-09, z: -5.14344407e-08} - rotation: {x: 1.22934537e-07, y: .0757973641, z: .0863341093, w: .993378758} + parentName: + position: {x: -0.027968477, y: -0.0000000064156453, z: -0.00000005143444} + rotation: {x: 0.00000012293454, y: 0.075797364, z: 0.08633411, w: 0.99337876} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex13 - position: {x: -.0186619665, y: .00437385263, z: -.00384002505} - rotation: {x: -.00472124433, y: -.101354174, z: -.0462910533, w: .993761659} + parentName: + position: {x: -0.018661967, y: 0.0043738526, z: -0.003840025} + rotation: {x: -0.0047212443, y: -0.101354174, z: -0.046291053, w: 0.99376166} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 - position: {x: -.0760238245, y: -.00188513438, z: .0101412293} - rotation: {x: -.0333416462, y: .0704228282, z: .072310105, w: .994334102} + parentName: + position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} + rotation: {x: -0.033341646, y: 0.07042283, z: 0.072310105, w: 0.9943341} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 - position: {x: -.0442804359, y: 4.79887103e-06, z: -.000425400329} - rotation: {x: -.0331908464, y: -.00512672728, z: .0114875734, w: .999369919} + parentName: + position: {x: -0.044280436, y: 0.000004798871, z: -0.00042540033} + rotation: {x: -0.033190846, y: -0.0051267273, z: 0.011487573, w: 0.9993699} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 - position: {x: -.0339648277, y: -1.21844321e-08, z: 3.75247122e-09} - rotation: {x: 7.72997311e-08, y: .00856341887, z: .0601519793, w: .998152494} + parentName: + position: {x: -0.033964828, y: -0.000000012184432, z: 0.0000000037524712} + rotation: {x: 0.00000007729973, y: 0.008563419, z: 0.06015198, w: 0.9981525} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle13 - position: {x: -.0196715724, y: .00392557262, z: -.000558814383} - rotation: {x: -.000701564946, y: -.0125020025, z: -.0560236648, w: .998350918} + parentName: + position: {x: -0.019671572, y: 0.0039255726, z: -0.0005588144} + rotation: {x: -0.00070156495, y: -0.0125020025, z: -0.056023665, w: 0.9983509} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 - position: {x: -.0656599477, y: -.00782510638, z: -.0322512463} - rotation: {x: -.110300235, y: .0794490576, z: .0742729455, w: .987929761} + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.110300235, y: 0.07944906, z: 0.074272946, w: 0.98792976} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 - position: {x: -.0308054481, y: -3.08745766e-05, z: -.00144807738} - rotation: {x: -.0721698627, y: -.026309045, z: .0134672271, w: .996954381} + parentName: + position: {x: -0.030805448, y: -0.000030874577, z: -0.0014480774} + rotation: {x: -0.07216986, y: -0.026309045, z: 0.013467227, w: 0.9969544} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 - position: {x: -.0230640266, y: -6.40258941e-06, z: 1.8200554e-08} - rotation: {x: 1.64017492e-05, y: -.0589518994, z: .0381753892, w: .997530639} + parentName: + position: {x: -0.023064027, y: -0.0000064025894, z: 0.000000018200554} + rotation: {x: 0.00001640175, y: -0.0589519, z: 0.03817539, w: 0.99753064} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky13 - position: {x: -.0169719923, y: .00202882662, z: .00314032286} - rotation: {x: .000580511638, y: .0944183916, z: -.00612070598, w: .995513618} + parentName: + position: {x: -0.016971992, y: 0.0020288266, z: 0.0031403229} + rotation: {x: 0.00058051164, y: 0.09441839, z: -0.006120706, w: 0.9955136} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 - position: {x: -.0703021064, y: -.00374530931, z: -.0114117917} - rotation: {x: .0157954507, y: .0917719901, z: .067911014, w: .993336082} + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: 0.01579545, y: 0.09177199, z: 0.067911014, w: 0.9933361} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 - position: {x: -.0431354567, y: -2.08822912e-05, z: -.00223517814} - rotation: {x: -.134465992, y: -.0260964297, z: .00873295218, w: .990535975} + parentName: + position: {x: -0.043135457, y: -0.000020882291, z: -0.0022351781} + rotation: {x: -0.13446599, y: -0.02609643, z: 0.008732952, w: 0.990536} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 - position: {x: -.0308355652, y: 1.57836272e-10, z: -1.64560099e-08} - rotation: {x: -1.07102087e-08, y: -.0178772155, z: .0421802364, w: .998950064} + parentName: + position: {x: -0.030835565, y: 1.5783627e-10, z: -0.00000001645601} + rotation: {x: -0.000000010710209, y: -0.017877216, z: 0.042180236, w: 0.99895006} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing13 - position: {x: -.0205416381, y: .00325422082, z: .00137918338} - rotation: {x: .00240248861, y: .0378382765, z: -.063320443, w: .997272789} + parentName: + position: {x: -0.020541638, y: 0.0032542208, z: 0.0013791834} + rotation: {x: 0.0024024886, y: 0.037838276, z: -0.06332044, w: 0.9972728} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 - position: {x: -.0142312413, y: -.0123778246, z: .0255316682} - rotation: {x: -.0538494885, y: -.0280063953, z: .0134390658, w: .998065829} + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.05384949, y: -0.028006395, z: 0.013439066, w: 0.9980658} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 - position: {x: -.0163739994, y: -.00528999977, z: .0234914087} - rotation: {x: -.0260635093, y: .0966894701, z: .00360631011, w: .994966745} + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.02606351, y: 0.09668947, z: 0.00360631, w: 0.99496675} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 - position: {x: -.0254599992, y: -.00763999997, z: .0208330005} - rotation: {x: .00545505155, y: .000442162534, z: .00682885339, w: .999961793} + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} + rotation: {x: 0.0054550515, y: 0.00044216253, z: 0.0068288534, w: 0.9999618} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb13 - position: {x: -.031868957, y: -.0052999449, z: .0258005001} + parentName: + position: {x: -0.031868957, y: -0.005299945, z: 0.0258005} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck - position: {x: -2.2737367e-15, y: .259009302, z: -.0324132554} + parentName: + position: {x: -2.2737367e-15, y: 0.2590093, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head - position: {x: 1.42108539e-15, y: .0830703825, z: .0113267815} + parentName: + position: {x: 1.4210854e-15, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: HeadTop_End - position: {x: -5.17045827e-18, y: .188178778, z: .0121086892} + parentName: + position: {x: -5.1704583e-18, y: 0.18817878, z: 0.012108689} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw - position: {x: 1.73472344e-20, y: .0111267585, z: .0103275431} - rotation: {x: .219240054, y: -0, z: -0, w: .975670993} + parentName: + position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} + rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND - position: {x: -1.73472344e-20, y: -.0482887588, z: .071851708} + parentName: + position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner - position: {x: -.032843262, y: -.01657876, z: .0661217645} + parentName: + position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower - position: {x: -.0142508168, y: -.0216887593, z: .0822406337} + parentName: + position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner - position: {x: .0328399986, y: -.01657876, z: .0661187842} + parentName: + position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower - position: {x: .0142508168, y: -.0216887593, z: .0822387859} + parentName: + position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack - position: {x: -1.73472344e-20, y: -.022869369, z: .0100954091} + parentName: + position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip - position: {x: -1.73472344e-20, y: -.0232788119, z: .0383227095} + parentName: + position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440265, y: .0337019488, z: .0594304018} + parentName: + position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye - position: {x: -.0208482333, y: .0825027004, z: .0554274321} + parentName: + position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower - position: {x: -.0356189571, y: .0650736615, z: .076234743} + parentName: + position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper - position: {x: -.0344068967, y: .10060814, z: .0802053064} + parentName: + position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow - position: {x: -.0120626912, y: .118765265, z: .0934668258} + parentName: + position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow - position: {x: -.0550398715, y: .114825293, z: .061777398} + parentName: + position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper - position: {x: -.0145013221, y: -.00511181122, z: .094618842} + parentName: + position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril - position: {x: -.0178999994, y: .0263128281, z: .0908674002} + parentName: + position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .033702828, z: .0594273992} + parentName: + position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye - position: {x: .020849999, y: .082502827, z: .0554273985} + parentName: + position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower - position: {x: .0356200002, y: .065072827, z: .0762374029} + parentName: + position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper - position: {x: .0344099998, y: .100612827, z: .0802073926} + parentName: + position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow - position: {x: .0120626874, y: .118765265, z: .0934668258} + parentName: + position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow - position: {x: .0550400019, y: .114822827, z: .061777398} + parentName: + position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper - position: {x: .0145013221, y: -.00510717137, z: .094617404} + parentName: + position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril - position: {x: .0178999994, y: .0263089053, z: .0908706188} + parentName: + position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder - position: {x: .0382860154, y: .221621141, z: -.017063085} - rotation: {x: .141828939, y: .986314952, z: -.0280099791, w: -.0792641193} + parentName: + position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} + rotation: {x: 0.14182894, y: 0.98631495, z: -0.028009979, w: -0.07926412} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm - position: {x: -.100501455, y: -2.49664549e-06, z: -5.22836601e-08} - rotation: {x: .111637808, y: .986949325, z: -.0212962627, w: .114081413} + parentName: + position: {x: -0.100501455, y: -0.0000024966455, z: -0.00000005228366} + rotation: {x: 0.11163781, y: 0.9869493, z: -0.021296263, w: 0.11408141} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm - position: {x: .253428251, y: .00601135287, z: -.0167045239} - rotation: {x: .0631985143, y: .018642433, z: -.015235032, w: .997710526} + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: 0.063198514, y: 0.018642433, z: -0.015235032, w: 0.9977105} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand - position: {x: .245373696, y: .0216417722, z: .00555046508} + parentName: + position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 - position: {x: .0747694969, y: -.00124305359, z: .0343444981} - rotation: {x: .0501321293, y: .106331095, z: -.0250961073, w: .992749035} + parentName: + position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} + rotation: {x: 0.05013213, y: 0.106331095, z: -0.025096107, w: 0.99274904} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 - position: {x: .0370584019, y: .00072612107, z: .0145388944} - rotation: {x: -.122100979, y: .0261854436, z: .0384845696, w: .991425633} + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.12210098, y: 0.026185444, z: 0.03848457, w: 0.99142563} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 - position: {x: .0252250377, y: -.00496646529, z: .0110121462} - rotation: {x: .020532662, y: -.0777138621, z: -.0820816681, w: .993378878} + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} + rotation: {x: 0.020532662, y: -0.07771386, z: -0.08208167, w: 0.9933789} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex17 - position: {x: .019119978, y: .000846308249, z: .00398164755} - rotation: {x: -.00472124433, y: -.101354174, z: -.0462910533, w: .993761659} + parentName: + position: {x: 0.019119978, y: 0.00084630825, z: 0.0039816475} + rotation: {x: -0.0047212443, y: -0.101354174, z: -0.046291053, w: 0.99376166} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 - position: {x: .0756476447, y: .00479140272, z: .0118531818} - rotation: {x: -.0268788524, y: -.00530444877, z: -.0332211144, w: .999072492} + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.026878852, y: -0.005304449, z: -0.033221114, w: 0.9990725} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 - position: {x: .0438090637, y: .000194188149, z: .00645493623} - rotation: {x: -.0398189314, y: -.0437413193, z: .0988601372, w: .993341804} + parentName: + position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} + rotation: {x: -0.03981893, y: -0.04374132, z: 0.09886014, w: 0.9933418} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 - position: {x: .0330724716, y: -.00754753686, z: .00168984616} - rotation: {x: .00109003088, y: -.00868621655, z: -.0601307005, w: .998152137} + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} + rotation: {x: 0.0010900309, y: -0.008686217, z: -0.0601307, w: 0.99815214} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle17 - position: {x: .0200548954, y: -.000547108881, z: .000442590448} - rotation: {x: -.000701564946, y: -.0125020025, z: -.0560236648, w: .998350918} + parentName: + position: {x: 0.020054895, y: -0.0005471089, z: 0.00044259045} + rotation: {x: -0.00070156495, y: -0.0125020025, z: -0.056023665, w: 0.9983509} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 - position: {x: .0668033436, y: -.00199410855, z: -.0307561457} - rotation: {x: -.111875884, y: -.258728623, z: .008804827, w: .959409058} + parentName: + position: {x: 0.06680334, y: -0.0019941085, z: -0.030756146} + rotation: {x: -0.111875884, y: -0.25872862, z: 0.008804827, w: 0.95940906} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 - position: {x: .0285308417, y: -.001397143, z: -.0116237961} - rotation: {x: .0333822668, y: .00105798536, z: -.0586918108, w: .997717321} + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: 0.033382267, y: 0.0010579854, z: -0.05869181, w: 0.9977173} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 - position: {x: .0214268602, y: -.000553508929, z: -.00851660781} - rotation: {x: -.0126830824, y: .0591105223, z: -.0357504971, w: .99753046} + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} + rotation: {x: -0.012683082, y: 0.059110522, z: -0.035750497, w: 0.99753046} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky17 - position: {x: .016975116, y: .00161137758, z: -.00335797085} - rotation: {x: .000580511638, y: .0944183916, z: -.00612070598, w: .995513618} + parentName: + position: {x: 0.016975116, y: 0.0016113776, z: -0.0033579709} + rotation: {x: 0.00058051164, y: 0.09441839, z: -0.006120706, w: 0.9955136} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 - position: {x: .0705984756, y: .00245709647, z: -.00982145779} - rotation: {x: .0182051547, y: -.133755058, z: -.008971164, w: .990806639} + parentName: + position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} + rotation: {x: 0.018205155, y: -0.13375506, z: -0.008971164, w: 0.99080664} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 - position: {x: .0428871848, y: -.00137538207, z: -.00494585838} - rotation: {x: .0220806412, y: -.02169968, z: .0796146914, w: .996344924} + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.0049458584} + rotation: {x: 0.022080641, y: -0.02169968, z: 0.07961469, w: 0.9963449} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 - position: {x: .0295006037, y: -.00769293541, z: -.00462225592} - rotation: {x: -.00186249381, y: .0181122273, z: -.0420316532, w: .998950422} + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} + rotation: {x: -0.0018624938, y: 0.018112227, z: -0.042031653, w: 0.9989504} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing17 - position: {x: .0206709336, y: -.00200043293, z: -.00177803368} - rotation: {x: .00240248861, y: .0378382765, z: -.063320443, w: .997272789} + parentName: + position: {x: 0.020670934, y: -0.002000433, z: -0.0017780337} + rotation: {x: 0.0024024886, y: 0.037838276, z: -0.06332044, w: 0.9972728} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 - position: {x: .0146849155, y: -.0111049423, z: .0258580949} - rotation: {x: -.0592598654, y: .0142422384, z: .0330153108, w: .997594833} + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} + rotation: {x: -0.059259865, y: 0.014242238, z: 0.03301531, w: 0.99759483} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 - position: {x: .0163739994, y: -.00528999977, z: .0234913602} - rotation: {x: -.0260627531, y: -.0966902673, z: -.00360747217, w: .994966745} + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.026062753, y: -0.09669027, z: -0.0036074722, w: 0.99496675} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 - position: {x: .0254599992, y: -.00763999997, z: .0208330005} - rotation: {x: .0054546264, y: -.000443699653, z: -.00682877563, w: .999961793} + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} + rotation: {x: 0.0054546264, y: -0.00044369965, z: -0.0068287756, w: 0.9999618} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb17 - position: {x: .0318690389, y: -.00529994583, z: .0258005001} + parentName: + position: {x: 0.03186904, y: -0.005299946, z: 0.0258005} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e8914d097ece7cc48a83d5fccd4098c0, - type: 3} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta index 0042b10cf..38843bb5f 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta @@ -1,512 +1,1483 @@ fileFormatVersion: 2 guid: f2bed5dc5afacff44a00de8daae9703b +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: Chest - 100002: chestProxy_geo - 100004: //RootNode - 100006: Head - 100008: headProxy_geo - 100010: HeadTop_End - 100012: Hips - 100014: Jaw - 100016: JawEND - 100018: jawProxy_geo - 100020: l_ankleProxy_geo - 100022: l_ballProxy_geo - 100024: l_clavicleProxy_geo - 100026: l_erbowProxy_geo - 100028: l_hipProxy_geo - 100030: l_indexProxy_01_geo - 100032: l_indexProxy_02_geo - 100034: l_indexProxy_03_geo - 100036: l_kneeProxy_geo - 100038: l_middleProxy_01_geo - 100040: l_middleProxy_02_geo - 100042: l_middleProxy_03_geo - 100044: l_pinkyProxy_01_geo - 100046: l_pinkyProxy_02_geo - 100048: l_pinkyProxy_03_geo - 100050: l_ringProxy_01_geo - 100052: l_ringProxy_02_geo - 100054: l_ringProxy_03_geo - 100056: l_shourderProxy_geo - 100058: l_thumbProxy_01_geo - 100060: l_thumbProxy_02_geo - 100062: l_thumbProxy_03_geo - 100064: l_UNI_eye - 100066: l_wristProxy_geo - 100068: LeftArm - 100070: LeftCheek - 100072: LeftEye - 100074: LeftEyelidLower - 100076: LeftEyelidUpper - 100078: LeftFoot - 100080: LeftForeArm - 100082: LeftHand - 100084: LeftHandIndex1 - 100086: LeftHandIndex13 - 100088: LeftHandIndex17 - 100090: LeftHandIndex2 - 100092: LeftHandIndex3 - 100094: LeftHandMiddle1 - 100096: LeftHandMiddle13 - 100098: LeftHandMiddle17 - 100100: LeftHandMiddle2 - 100102: LeftHandMiddle3 - 100104: LeftHandPinky1 - 100106: LeftHandPinky13 - 100108: LeftHandPinky17 - 100110: LeftHandPinky2 - 100112: LeftHandPinky3 - 100114: LeftHandRing1 - 100116: LeftHandRing13 - 100118: LeftHandRing17 - 100120: LeftHandRing2 - 100122: LeftHandRing3 - 100124: LeftHandThumb1 - 100126: LeftHandThumb13 - 100128: LeftHandThumb17 - 100130: LeftHandThumb2 - 100132: LeftHandThumb3 - 100134: LeftInnerBrow - 100136: LeftIOuterBrow - 100138: LeftLeg - 100140: LeftLipCorner - 100142: LeftLipLower - 100144: LeftLipUpper - 100146: LeftNostril - 100148: LeftShoulder - 100150: LeftToes - 100152: LeftUpLeg - 100154: LToeBase_End2 - 100156: LToeBase_End3 - 100158: Neck - 100160: neckProxy_geo - 100162: pelvisProxy_geo - 100164: Pivot - 100166: r_ankleProxy_geo - 100168: r_ballProxy_geo - 100170: r_clavicleProxy_geo - 100172: r_erbowProxy_geo - 100174: r_hipProxy_geo - 100176: r_indexProxy_01_geo - 100178: r_indexProxy_02_geo - 100180: r_indexProxy_03_geo - 100182: r_kneeProxy_geo - 100184: r_middleProxy_01_geo - 100186: r_middleProxy_02_geo - 100188: r_middleProxy_03_geo - 100190: r_pinkyProxy_01_geo - 100192: r_pinkyProxy_02_geo - 100194: r_pinkyProxy_03_geo - 100196: r_ringProxy_01_geo - 100198: r_ringProxy_02_geo - 100200: r_ringProxy_03_geo - 100202: r_shourderProxy_geo - 100204: r_thumbProxy_01_geo - 100206: r_thumbProxy_02_geo - 100208: r_thumbProxy_03_geo - 100210: r_UNI_eye - 100212: r_wristProxy_geo - 100214: Reference - 100216: RightArm - 100218: RightCheek - 100220: RightEye - 100222: RightEyelidLower - 100224: RightEyelidUpper - 100226: RightFoot - 100228: RightForeArm - 100230: RightHand - 100232: RightHandIndex1 - 100234: RightHandIndex2 - 100236: RightHandIndex3 - 100238: RightHandMiddle1 - 100240: RightHandMiddle2 - 100242: RightHandMiddle3 - 100244: RightHandPinky1 - 100246: RightHandPinky2 - 100248: RightHandPinky3 - 100250: RightHandRing1 - 100252: RightHandRing2 - 100254: RightHandRing3 - 100256: RightHandThumb1 - 100258: RightHandThumb2 - 100260: RightHandThumb3 - 100262: RightInnerBrow - 100264: RightIOuterBrow - 100266: RightLeg - 100268: RightLipCorner - 100270: RightLipLower - 100272: RightLipUpper - 100274: RightNostril - 100276: RightShoulder - 100278: RightToes - 100280: RightUpLeg - 100282: Root - 100284: Spine - 100286: spineProxy_geo - 100288: TongueBack - 100290: TongueTip - 100292: UNI_01_Lower_teethProxy - 100294: UNI_01_TongueBaseProxy - 100296: UNI_01_TongueTipProxy - 100298: UNI_01_Upper_teethProxy - 400000: Chest - 400002: chestProxy_geo - 400004: //RootNode - 400006: Head - 400008: headProxy_geo - 400010: HeadTop_End - 400012: Hips - 400014: Jaw - 400016: JawEND - 400018: jawProxy_geo - 400020: l_ankleProxy_geo - 400022: l_ballProxy_geo - 400024: l_clavicleProxy_geo - 400026: l_erbowProxy_geo - 400028: l_hipProxy_geo - 400030: l_indexProxy_01_geo - 400032: l_indexProxy_02_geo - 400034: l_indexProxy_03_geo - 400036: l_kneeProxy_geo - 400038: l_middleProxy_01_geo - 400040: l_middleProxy_02_geo - 400042: l_middleProxy_03_geo - 400044: l_pinkyProxy_01_geo - 400046: l_pinkyProxy_02_geo - 400048: l_pinkyProxy_03_geo - 400050: l_ringProxy_01_geo - 400052: l_ringProxy_02_geo - 400054: l_ringProxy_03_geo - 400056: l_shourderProxy_geo - 400058: l_thumbProxy_01_geo - 400060: l_thumbProxy_02_geo - 400062: l_thumbProxy_03_geo - 400064: l_UNI_eye - 400066: l_wristProxy_geo - 400068: LeftArm - 400070: LeftCheek - 400072: LeftEye - 400074: LeftEyelidLower - 400076: LeftEyelidUpper - 400078: LeftFoot - 400080: LeftForeArm - 400082: LeftHand - 400084: LeftHandIndex1 - 400086: LeftHandIndex13 - 400088: LeftHandIndex17 - 400090: LeftHandIndex2 - 400092: LeftHandIndex3 - 400094: LeftHandMiddle1 - 400096: LeftHandMiddle13 - 400098: LeftHandMiddle17 - 400100: LeftHandMiddle2 - 400102: LeftHandMiddle3 - 400104: LeftHandPinky1 - 400106: LeftHandPinky13 - 400108: LeftHandPinky17 - 400110: LeftHandPinky2 - 400112: LeftHandPinky3 - 400114: LeftHandRing1 - 400116: LeftHandRing13 - 400118: LeftHandRing17 - 400120: LeftHandRing2 - 400122: LeftHandRing3 - 400124: LeftHandThumb1 - 400126: LeftHandThumb13 - 400128: LeftHandThumb17 - 400130: LeftHandThumb2 - 400132: LeftHandThumb3 - 400134: LeftInnerBrow - 400136: LeftIOuterBrow - 400138: LeftLeg - 400140: LeftLipCorner - 400142: LeftLipLower - 400144: LeftLipUpper - 400146: LeftNostril - 400148: LeftShoulder - 400150: LeftToes - 400152: LeftUpLeg - 400154: LToeBase_End2 - 400156: LToeBase_End3 - 400158: Neck - 400160: neckProxy_geo - 400162: pelvisProxy_geo - 400164: Pivot - 400166: r_ankleProxy_geo - 400168: r_ballProxy_geo - 400170: r_clavicleProxy_geo - 400172: r_erbowProxy_geo - 400174: r_hipProxy_geo - 400176: r_indexProxy_01_geo - 400178: r_indexProxy_02_geo - 400180: r_indexProxy_03_geo - 400182: r_kneeProxy_geo - 400184: r_middleProxy_01_geo - 400186: r_middleProxy_02_geo - 400188: r_middleProxy_03_geo - 400190: r_pinkyProxy_01_geo - 400192: r_pinkyProxy_02_geo - 400194: r_pinkyProxy_03_geo - 400196: r_ringProxy_01_geo - 400198: r_ringProxy_02_geo - 400200: r_ringProxy_03_geo - 400202: r_shourderProxy_geo - 400204: r_thumbProxy_01_geo - 400206: r_thumbProxy_02_geo - 400208: r_thumbProxy_03_geo - 400210: r_UNI_eye - 400212: r_wristProxy_geo - 400214: Reference - 400216: RightArm - 400218: RightCheek - 400220: RightEye - 400222: RightEyelidLower - 400224: RightEyelidUpper - 400226: RightFoot - 400228: RightForeArm - 400230: RightHand - 400232: RightHandIndex1 - 400234: RightHandIndex2 - 400236: RightHandIndex3 - 400238: RightHandMiddle1 - 400240: RightHandMiddle2 - 400242: RightHandMiddle3 - 400244: RightHandPinky1 - 400246: RightHandPinky2 - 400248: RightHandPinky3 - 400250: RightHandRing1 - 400252: RightHandRing2 - 400254: RightHandRing3 - 400256: RightHandThumb1 - 400258: RightHandThumb2 - 400260: RightHandThumb3 - 400262: RightInnerBrow - 400264: RightIOuterBrow - 400266: RightLeg - 400268: RightLipCorner - 400270: RightLipLower - 400272: RightLipUpper - 400274: RightNostril - 400276: RightShoulder - 400278: RightToes - 400280: RightUpLeg - 400282: Root - 400284: Spine - 400286: spineProxy_geo - 400288: TongueBack - 400290: TongueTip - 400292: UNI_01_Lower_teethProxy - 400294: UNI_01_TongueBaseProxy - 400296: UNI_01_TongueTipProxy - 400298: UNI_01_Upper_teethProxy - 2300000: chestProxy_geo - 2300002: headProxy_geo - 2300004: jawProxy_geo - 2300006: l_ankleProxy_geo - 2300008: l_ballProxy_geo - 2300010: l_clavicleProxy_geo - 2300012: l_erbowProxy_geo - 2300014: l_hipProxy_geo - 2300016: l_indexProxy_01_geo - 2300018: l_indexProxy_02_geo - 2300020: l_indexProxy_03_geo - 2300022: l_kneeProxy_geo - 2300024: l_middleProxy_01_geo - 2300026: l_middleProxy_02_geo - 2300028: l_middleProxy_03_geo - 2300030: l_pinkyProxy_01_geo - 2300032: l_pinkyProxy_02_geo - 2300034: l_pinkyProxy_03_geo - 2300036: l_ringProxy_01_geo - 2300038: l_ringProxy_02_geo - 2300040: l_ringProxy_03_geo - 2300042: l_shourderProxy_geo - 2300044: l_thumbProxy_01_geo - 2300046: l_thumbProxy_02_geo - 2300048: l_thumbProxy_03_geo - 2300050: l_UNI_eye - 2300052: l_wristProxy_geo - 2300054: neckProxy_geo - 2300056: pelvisProxy_geo - 2300058: r_ankleProxy_geo - 2300060: r_ballProxy_geo - 2300062: r_clavicleProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_hipProxy_geo - 2300068: r_indexProxy_01_geo - 2300070: r_indexProxy_02_geo - 2300072: r_indexProxy_03_geo - 2300074: r_kneeProxy_geo - 2300076: r_middleProxy_01_geo - 2300078: r_middleProxy_02_geo - 2300080: r_middleProxy_03_geo - 2300082: r_pinkyProxy_01_geo - 2300084: r_pinkyProxy_02_geo - 2300086: r_pinkyProxy_03_geo - 2300088: r_ringProxy_01_geo - 2300090: r_ringProxy_02_geo - 2300092: r_ringProxy_03_geo - 2300094: r_shourderProxy_geo - 2300096: r_thumbProxy_01_geo - 2300098: r_thumbProxy_02_geo - 2300100: r_thumbProxy_03_geo - 2300102: r_UNI_eye - 2300104: r_wristProxy_geo - 2300106: spineProxy_geo - 2300108: UNI_01_Lower_teethProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: UNI_01_TongueTipProxy - 2300114: UNI_01_Upper_teethProxy - 3300000: chestProxy_geo - 3300002: headProxy_geo - 3300004: jawProxy_geo - 3300006: l_ankleProxy_geo - 3300008: l_ballProxy_geo - 3300010: l_clavicleProxy_geo - 3300012: l_erbowProxy_geo - 3300014: l_hipProxy_geo - 3300016: l_indexProxy_01_geo - 3300018: l_indexProxy_02_geo - 3300020: l_indexProxy_03_geo - 3300022: l_kneeProxy_geo - 3300024: l_middleProxy_01_geo - 3300026: l_middleProxy_02_geo - 3300028: l_middleProxy_03_geo - 3300030: l_pinkyProxy_01_geo - 3300032: l_pinkyProxy_02_geo - 3300034: l_pinkyProxy_03_geo - 3300036: l_ringProxy_01_geo - 3300038: l_ringProxy_02_geo - 3300040: l_ringProxy_03_geo - 3300042: l_shourderProxy_geo - 3300044: l_thumbProxy_01_geo - 3300046: l_thumbProxy_02_geo - 3300048: l_thumbProxy_03_geo - 3300050: l_UNI_eye - 3300052: l_wristProxy_geo - 3300054: neckProxy_geo - 3300056: pelvisProxy_geo - 3300058: r_ankleProxy_geo - 3300060: r_ballProxy_geo - 3300062: r_clavicleProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_hipProxy_geo - 3300068: r_indexProxy_01_geo - 3300070: r_indexProxy_02_geo - 3300072: r_indexProxy_03_geo - 3300074: r_kneeProxy_geo - 3300076: r_middleProxy_01_geo - 3300078: r_middleProxy_02_geo - 3300080: r_middleProxy_03_geo - 3300082: r_pinkyProxy_01_geo - 3300084: r_pinkyProxy_02_geo - 3300086: r_pinkyProxy_03_geo - 3300088: r_ringProxy_01_geo - 3300090: r_ringProxy_02_geo - 3300092: r_ringProxy_03_geo - 3300094: r_shourderProxy_geo - 3300096: r_thumbProxy_01_geo - 3300098: r_thumbProxy_02_geo - 3300100: r_thumbProxy_03_geo - 3300102: r_UNI_eye - 3300104: r_wristProxy_geo - 3300106: spineProxy_geo - 3300108: UNI_01_Lower_teethProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: UNI_01_TongueTipProxy - 3300114: UNI_01_Upper_teethProxy - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: HumanoidRunRightSharp - 7400002: HumanoidRunLeftSharp - 9500000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Chest + - first: + 1: 100002 + second: chestProxy_geo + - first: + 1: 100004 + second: //RootNode + - first: + 1: 100006 + second: Head + - first: + 1: 100008 + second: headProxy_geo + - first: + 1: 100010 + second: HeadTop_End + - first: + 1: 100012 + second: Hips + - first: + 1: 100014 + second: Jaw + - first: + 1: 100016 + second: JawEND + - first: + 1: 100018 + second: jawProxy_geo + - first: + 1: 100020 + second: l_ankleProxy_geo + - first: + 1: 100022 + second: l_ballProxy_geo + - first: + 1: 100024 + second: l_clavicleProxy_geo + - first: + 1: 100026 + second: l_erbowProxy_geo + - first: + 1: 100028 + second: l_hipProxy_geo + - first: + 1: 100030 + second: l_indexProxy_01_geo + - first: + 1: 100032 + second: l_indexProxy_02_geo + - first: + 1: 100034 + second: l_indexProxy_03_geo + - first: + 1: 100036 + second: l_kneeProxy_geo + - first: + 1: 100038 + second: l_middleProxy_01_geo + - first: + 1: 100040 + second: l_middleProxy_02_geo + - first: + 1: 100042 + second: l_middleProxy_03_geo + - first: + 1: 100044 + second: l_pinkyProxy_01_geo + - first: + 1: 100046 + second: l_pinkyProxy_02_geo + - first: + 1: 100048 + second: l_pinkyProxy_03_geo + - first: + 1: 100050 + second: l_ringProxy_01_geo + - first: + 1: 100052 + second: l_ringProxy_02_geo + - first: + 1: 100054 + second: l_ringProxy_03_geo + - first: + 1: 100056 + second: l_shourderProxy_geo + - first: + 1: 100058 + second: l_thumbProxy_01_geo + - first: + 1: 100060 + second: l_thumbProxy_02_geo + - first: + 1: 100062 + second: l_thumbProxy_03_geo + - first: + 1: 100064 + second: l_UNI_eye + - first: + 1: 100066 + second: l_wristProxy_geo + - first: + 1: 100068 + second: LeftArm + - first: + 1: 100070 + second: LeftCheek + - first: + 1: 100072 + second: LeftEye + - first: + 1: 100074 + second: LeftEyelidLower + - first: + 1: 100076 + second: LeftEyelidUpper + - first: + 1: 100078 + second: LeftFoot + - first: + 1: 100080 + second: LeftForeArm + - first: + 1: 100082 + second: LeftHand + - first: + 1: 100084 + second: LeftHandIndex1 + - first: + 1: 100086 + second: LeftHandIndex13 + - first: + 1: 100088 + second: LeftHandIndex17 + - first: + 1: 100090 + second: LeftHandIndex2 + - first: + 1: 100092 + second: LeftHandIndex3 + - first: + 1: 100094 + second: LeftHandMiddle1 + - first: + 1: 100096 + second: LeftHandMiddle13 + - first: + 1: 100098 + second: LeftHandMiddle17 + - first: + 1: 100100 + second: LeftHandMiddle2 + - first: + 1: 100102 + second: LeftHandMiddle3 + - first: + 1: 100104 + second: LeftHandPinky1 + - first: + 1: 100106 + second: LeftHandPinky13 + - first: + 1: 100108 + second: LeftHandPinky17 + - first: + 1: 100110 + second: LeftHandPinky2 + - first: + 1: 100112 + second: LeftHandPinky3 + - first: + 1: 100114 + second: LeftHandRing1 + - first: + 1: 100116 + second: LeftHandRing13 + - first: + 1: 100118 + second: LeftHandRing17 + - first: + 1: 100120 + second: LeftHandRing2 + - first: + 1: 100122 + second: LeftHandRing3 + - first: + 1: 100124 + second: LeftHandThumb1 + - first: + 1: 100126 + second: LeftHandThumb13 + - first: + 1: 100128 + second: LeftHandThumb17 + - first: + 1: 100130 + second: LeftHandThumb2 + - first: + 1: 100132 + second: LeftHandThumb3 + - first: + 1: 100134 + second: LeftInnerBrow + - first: + 1: 100136 + second: LeftIOuterBrow + - first: + 1: 100138 + second: LeftLeg + - first: + 1: 100140 + second: LeftLipCorner + - first: + 1: 100142 + second: LeftLipLower + - first: + 1: 100144 + second: LeftLipUpper + - first: + 1: 100146 + second: LeftNostril + - first: + 1: 100148 + second: LeftShoulder + - first: + 1: 100150 + second: LeftToes + - first: + 1: 100152 + second: LeftUpLeg + - first: + 1: 100154 + second: LToeBase_End2 + - first: + 1: 100156 + second: LToeBase_End3 + - first: + 1: 100158 + second: Neck + - first: + 1: 100160 + second: neckProxy_geo + - first: + 1: 100162 + second: pelvisProxy_geo + - first: + 1: 100164 + second: Pivot + - first: + 1: 100166 + second: r_ankleProxy_geo + - first: + 1: 100168 + second: r_ballProxy_geo + - first: + 1: 100170 + second: r_clavicleProxy_geo + - first: + 1: 100172 + second: r_erbowProxy_geo + - first: + 1: 100174 + second: r_hipProxy_geo + - first: + 1: 100176 + second: r_indexProxy_01_geo + - first: + 1: 100178 + second: r_indexProxy_02_geo + - first: + 1: 100180 + second: r_indexProxy_03_geo + - first: + 1: 100182 + second: r_kneeProxy_geo + - first: + 1: 100184 + second: r_middleProxy_01_geo + - first: + 1: 100186 + second: r_middleProxy_02_geo + - first: + 1: 100188 + second: r_middleProxy_03_geo + - first: + 1: 100190 + second: r_pinkyProxy_01_geo + - first: + 1: 100192 + second: r_pinkyProxy_02_geo + - first: + 1: 100194 + second: r_pinkyProxy_03_geo + - first: + 1: 100196 + second: r_ringProxy_01_geo + - first: + 1: 100198 + second: r_ringProxy_02_geo + - first: + 1: 100200 + second: r_ringProxy_03_geo + - first: + 1: 100202 + second: r_shourderProxy_geo + - first: + 1: 100204 + second: r_thumbProxy_01_geo + - first: + 1: 100206 + second: r_thumbProxy_02_geo + - first: + 1: 100208 + second: r_thumbProxy_03_geo + - first: + 1: 100210 + second: r_UNI_eye + - first: + 1: 100212 + second: r_wristProxy_geo + - first: + 1: 100214 + second: Reference + - first: + 1: 100216 + second: RightArm + - first: + 1: 100218 + second: RightCheek + - first: + 1: 100220 + second: RightEye + - first: + 1: 100222 + second: RightEyelidLower + - first: + 1: 100224 + second: RightEyelidUpper + - first: + 1: 100226 + second: RightFoot + - first: + 1: 100228 + second: RightForeArm + - first: + 1: 100230 + second: RightHand + - first: + 1: 100232 + second: RightHandIndex1 + - first: + 1: 100234 + second: RightHandIndex2 + - first: + 1: 100236 + second: RightHandIndex3 + - first: + 1: 100238 + second: RightHandMiddle1 + - first: + 1: 100240 + second: RightHandMiddle2 + - first: + 1: 100242 + second: RightHandMiddle3 + - first: + 1: 100244 + second: RightHandPinky1 + - first: + 1: 100246 + second: RightHandPinky2 + - first: + 1: 100248 + second: RightHandPinky3 + - first: + 1: 100250 + second: RightHandRing1 + - first: + 1: 100252 + second: RightHandRing2 + - first: + 1: 100254 + second: RightHandRing3 + - first: + 1: 100256 + second: RightHandThumb1 + - first: + 1: 100258 + second: RightHandThumb2 + - first: + 1: 100260 + second: RightHandThumb3 + - first: + 1: 100262 + second: RightInnerBrow + - first: + 1: 100264 + second: RightIOuterBrow + - first: + 1: 100266 + second: RightLeg + - first: + 1: 100268 + second: RightLipCorner + - first: + 1: 100270 + second: RightLipLower + - first: + 1: 100272 + second: RightLipUpper + - first: + 1: 100274 + second: RightNostril + - first: + 1: 100276 + second: RightShoulder + - first: + 1: 100278 + second: RightToes + - first: + 1: 100280 + second: RightUpLeg + - first: + 1: 100282 + second: Root + - first: + 1: 100284 + second: Spine + - first: + 1: 100286 + second: spineProxy_geo + - first: + 1: 100288 + second: TongueBack + - first: + 1: 100290 + second: TongueTip + - first: + 1: 100292 + second: UNI_01_Lower_teethProxy + - first: + 1: 100294 + second: UNI_01_TongueBaseProxy + - first: + 1: 100296 + second: UNI_01_TongueTipProxy + - first: + 1: 100298 + second: UNI_01_Upper_teethProxy + - first: + 4: 400000 + second: Chest + - first: + 4: 400002 + second: chestProxy_geo + - first: + 4: 400004 + second: //RootNode + - first: + 4: 400006 + second: Head + - first: + 4: 400008 + second: headProxy_geo + - first: + 4: 400010 + second: HeadTop_End + - first: + 4: 400012 + second: Hips + - first: + 4: 400014 + second: Jaw + - first: + 4: 400016 + second: JawEND + - first: + 4: 400018 + second: jawProxy_geo + - first: + 4: 400020 + second: l_ankleProxy_geo + - first: + 4: 400022 + second: l_ballProxy_geo + - first: + 4: 400024 + second: l_clavicleProxy_geo + - first: + 4: 400026 + second: l_erbowProxy_geo + - first: + 4: 400028 + second: l_hipProxy_geo + - first: + 4: 400030 + second: l_indexProxy_01_geo + - first: + 4: 400032 + second: l_indexProxy_02_geo + - first: + 4: 400034 + second: l_indexProxy_03_geo + - first: + 4: 400036 + second: l_kneeProxy_geo + - first: + 4: 400038 + second: l_middleProxy_01_geo + - first: + 4: 400040 + second: l_middleProxy_02_geo + - first: + 4: 400042 + second: l_middleProxy_03_geo + - first: + 4: 400044 + second: l_pinkyProxy_01_geo + - first: + 4: 400046 + second: l_pinkyProxy_02_geo + - first: + 4: 400048 + second: l_pinkyProxy_03_geo + - first: + 4: 400050 + second: l_ringProxy_01_geo + - first: + 4: 400052 + second: l_ringProxy_02_geo + - first: + 4: 400054 + second: l_ringProxy_03_geo + - first: + 4: 400056 + second: l_shourderProxy_geo + - first: + 4: 400058 + second: l_thumbProxy_01_geo + - first: + 4: 400060 + second: l_thumbProxy_02_geo + - first: + 4: 400062 + second: l_thumbProxy_03_geo + - first: + 4: 400064 + second: l_UNI_eye + - first: + 4: 400066 + second: l_wristProxy_geo + - first: + 4: 400068 + second: LeftArm + - first: + 4: 400070 + second: LeftCheek + - first: + 4: 400072 + second: LeftEye + - first: + 4: 400074 + second: LeftEyelidLower + - first: + 4: 400076 + second: LeftEyelidUpper + - first: + 4: 400078 + second: LeftFoot + - first: + 4: 400080 + second: LeftForeArm + - first: + 4: 400082 + second: LeftHand + - first: + 4: 400084 + second: LeftHandIndex1 + - first: + 4: 400086 + second: LeftHandIndex13 + - first: + 4: 400088 + second: LeftHandIndex17 + - first: + 4: 400090 + second: LeftHandIndex2 + - first: + 4: 400092 + second: LeftHandIndex3 + - first: + 4: 400094 + second: LeftHandMiddle1 + - first: + 4: 400096 + second: LeftHandMiddle13 + - first: + 4: 400098 + second: LeftHandMiddle17 + - first: + 4: 400100 + second: LeftHandMiddle2 + - first: + 4: 400102 + second: LeftHandMiddle3 + - first: + 4: 400104 + second: LeftHandPinky1 + - first: + 4: 400106 + second: LeftHandPinky13 + - first: + 4: 400108 + second: LeftHandPinky17 + - first: + 4: 400110 + second: LeftHandPinky2 + - first: + 4: 400112 + second: LeftHandPinky3 + - first: + 4: 400114 + second: LeftHandRing1 + - first: + 4: 400116 + second: LeftHandRing13 + - first: + 4: 400118 + second: LeftHandRing17 + - first: + 4: 400120 + second: LeftHandRing2 + - first: + 4: 400122 + second: LeftHandRing3 + - first: + 4: 400124 + second: LeftHandThumb1 + - first: + 4: 400126 + second: LeftHandThumb13 + - first: + 4: 400128 + second: LeftHandThumb17 + - first: + 4: 400130 + second: LeftHandThumb2 + - first: + 4: 400132 + second: LeftHandThumb3 + - first: + 4: 400134 + second: LeftInnerBrow + - first: + 4: 400136 + second: LeftIOuterBrow + - first: + 4: 400138 + second: LeftLeg + - first: + 4: 400140 + second: LeftLipCorner + - first: + 4: 400142 + second: LeftLipLower + - first: + 4: 400144 + second: LeftLipUpper + - first: + 4: 400146 + second: LeftNostril + - first: + 4: 400148 + second: LeftShoulder + - first: + 4: 400150 + second: LeftToes + - first: + 4: 400152 + second: LeftUpLeg + - first: + 4: 400154 + second: LToeBase_End2 + - first: + 4: 400156 + second: LToeBase_End3 + - first: + 4: 400158 + second: Neck + - first: + 4: 400160 + second: neckProxy_geo + - first: + 4: 400162 + second: pelvisProxy_geo + - first: + 4: 400164 + second: Pivot + - first: + 4: 400166 + second: r_ankleProxy_geo + - first: + 4: 400168 + second: r_ballProxy_geo + - first: + 4: 400170 + second: r_clavicleProxy_geo + - first: + 4: 400172 + second: r_erbowProxy_geo + - first: + 4: 400174 + second: r_hipProxy_geo + - first: + 4: 400176 + second: r_indexProxy_01_geo + - first: + 4: 400178 + second: r_indexProxy_02_geo + - first: + 4: 400180 + second: r_indexProxy_03_geo + - first: + 4: 400182 + second: r_kneeProxy_geo + - first: + 4: 400184 + second: r_middleProxy_01_geo + - first: + 4: 400186 + second: r_middleProxy_02_geo + - first: + 4: 400188 + second: r_middleProxy_03_geo + - first: + 4: 400190 + second: r_pinkyProxy_01_geo + - first: + 4: 400192 + second: r_pinkyProxy_02_geo + - first: + 4: 400194 + second: r_pinkyProxy_03_geo + - first: + 4: 400196 + second: r_ringProxy_01_geo + - first: + 4: 400198 + second: r_ringProxy_02_geo + - first: + 4: 400200 + second: r_ringProxy_03_geo + - first: + 4: 400202 + second: r_shourderProxy_geo + - first: + 4: 400204 + second: r_thumbProxy_01_geo + - first: + 4: 400206 + second: r_thumbProxy_02_geo + - first: + 4: 400208 + second: r_thumbProxy_03_geo + - first: + 4: 400210 + second: r_UNI_eye + - first: + 4: 400212 + second: r_wristProxy_geo + - first: + 4: 400214 + second: Reference + - first: + 4: 400216 + second: RightArm + - first: + 4: 400218 + second: RightCheek + - first: + 4: 400220 + second: RightEye + - first: + 4: 400222 + second: RightEyelidLower + - first: + 4: 400224 + second: RightEyelidUpper + - first: + 4: 400226 + second: RightFoot + - first: + 4: 400228 + second: RightForeArm + - first: + 4: 400230 + second: RightHand + - first: + 4: 400232 + second: RightHandIndex1 + - first: + 4: 400234 + second: RightHandIndex2 + - first: + 4: 400236 + second: RightHandIndex3 + - first: + 4: 400238 + second: RightHandMiddle1 + - first: + 4: 400240 + second: RightHandMiddle2 + - first: + 4: 400242 + second: RightHandMiddle3 + - first: + 4: 400244 + second: RightHandPinky1 + - first: + 4: 400246 + second: RightHandPinky2 + - first: + 4: 400248 + second: RightHandPinky3 + - first: + 4: 400250 + second: RightHandRing1 + - first: + 4: 400252 + second: RightHandRing2 + - first: + 4: 400254 + second: RightHandRing3 + - first: + 4: 400256 + second: RightHandThumb1 + - first: + 4: 400258 + second: RightHandThumb2 + - first: + 4: 400260 + second: RightHandThumb3 + - first: + 4: 400262 + second: RightInnerBrow + - first: + 4: 400264 + second: RightIOuterBrow + - first: + 4: 400266 + second: RightLeg + - first: + 4: 400268 + second: RightLipCorner + - first: + 4: 400270 + second: RightLipLower + - first: + 4: 400272 + second: RightLipUpper + - first: + 4: 400274 + second: RightNostril + - first: + 4: 400276 + second: RightShoulder + - first: + 4: 400278 + second: RightToes + - first: + 4: 400280 + second: RightUpLeg + - first: + 4: 400282 + second: Root + - first: + 4: 400284 + second: Spine + - first: + 4: 400286 + second: spineProxy_geo + - first: + 4: 400288 + second: TongueBack + - first: + 4: 400290 + second: TongueTip + - first: + 4: 400292 + second: UNI_01_Lower_teethProxy + - first: + 4: 400294 + second: UNI_01_TongueBaseProxy + - first: + 4: 400296 + second: UNI_01_TongueTipProxy + - first: + 4: 400298 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300000 + second: chestProxy_geo + - first: + 23: 2300002 + second: headProxy_geo + - first: + 23: 2300004 + second: jawProxy_geo + - first: + 23: 2300006 + second: l_ankleProxy_geo + - first: + 23: 2300008 + second: l_ballProxy_geo + - first: + 23: 2300010 + second: l_clavicleProxy_geo + - first: + 23: 2300012 + second: l_erbowProxy_geo + - first: + 23: 2300014 + second: l_hipProxy_geo + - first: + 23: 2300016 + second: l_indexProxy_01_geo + - first: + 23: 2300018 + second: l_indexProxy_02_geo + - first: + 23: 2300020 + second: l_indexProxy_03_geo + - first: + 23: 2300022 + second: l_kneeProxy_geo + - first: + 23: 2300024 + second: l_middleProxy_01_geo + - first: + 23: 2300026 + second: l_middleProxy_02_geo + - first: + 23: 2300028 + second: l_middleProxy_03_geo + - first: + 23: 2300030 + second: l_pinkyProxy_01_geo + - first: + 23: 2300032 + second: l_pinkyProxy_02_geo + - first: + 23: 2300034 + second: l_pinkyProxy_03_geo + - first: + 23: 2300036 + second: l_ringProxy_01_geo + - first: + 23: 2300038 + second: l_ringProxy_02_geo + - first: + 23: 2300040 + second: l_ringProxy_03_geo + - first: + 23: 2300042 + second: l_shourderProxy_geo + - first: + 23: 2300044 + second: l_thumbProxy_01_geo + - first: + 23: 2300046 + second: l_thumbProxy_02_geo + - first: + 23: 2300048 + second: l_thumbProxy_03_geo + - first: + 23: 2300050 + second: l_UNI_eye + - first: + 23: 2300052 + second: l_wristProxy_geo + - first: + 23: 2300054 + second: neckProxy_geo + - first: + 23: 2300056 + second: pelvisProxy_geo + - first: + 23: 2300058 + second: r_ankleProxy_geo + - first: + 23: 2300060 + second: r_ballProxy_geo + - first: + 23: 2300062 + second: r_clavicleProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_hipProxy_geo + - first: + 23: 2300068 + second: r_indexProxy_01_geo + - first: + 23: 2300070 + second: r_indexProxy_02_geo + - first: + 23: 2300072 + second: r_indexProxy_03_geo + - first: + 23: 2300074 + second: r_kneeProxy_geo + - first: + 23: 2300076 + second: r_middleProxy_01_geo + - first: + 23: 2300078 + second: r_middleProxy_02_geo + - first: + 23: 2300080 + second: r_middleProxy_03_geo + - first: + 23: 2300082 + second: r_pinkyProxy_01_geo + - first: + 23: 2300084 + second: r_pinkyProxy_02_geo + - first: + 23: 2300086 + second: r_pinkyProxy_03_geo + - first: + 23: 2300088 + second: r_ringProxy_01_geo + - first: + 23: 2300090 + second: r_ringProxy_02_geo + - first: + 23: 2300092 + second: r_ringProxy_03_geo + - first: + 23: 2300094 + second: r_shourderProxy_geo + - first: + 23: 2300096 + second: r_thumbProxy_01_geo + - first: + 23: 2300098 + second: r_thumbProxy_02_geo + - first: + 23: 2300100 + second: r_thumbProxy_03_geo + - first: + 23: 2300102 + second: r_UNI_eye + - first: + 23: 2300104 + second: r_wristProxy_geo + - first: + 23: 2300106 + second: spineProxy_geo + - first: + 23: 2300108 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: UNI_01_TongueTipProxy + - first: + 23: 2300114 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300000 + second: chestProxy_geo + - first: + 33: 3300002 + second: headProxy_geo + - first: + 33: 3300004 + second: jawProxy_geo + - first: + 33: 3300006 + second: l_ankleProxy_geo + - first: + 33: 3300008 + second: l_ballProxy_geo + - first: + 33: 3300010 + second: l_clavicleProxy_geo + - first: + 33: 3300012 + second: l_erbowProxy_geo + - first: + 33: 3300014 + second: l_hipProxy_geo + - first: + 33: 3300016 + second: l_indexProxy_01_geo + - first: + 33: 3300018 + second: l_indexProxy_02_geo + - first: + 33: 3300020 + second: l_indexProxy_03_geo + - first: + 33: 3300022 + second: l_kneeProxy_geo + - first: + 33: 3300024 + second: l_middleProxy_01_geo + - first: + 33: 3300026 + second: l_middleProxy_02_geo + - first: + 33: 3300028 + second: l_middleProxy_03_geo + - first: + 33: 3300030 + second: l_pinkyProxy_01_geo + - first: + 33: 3300032 + second: l_pinkyProxy_02_geo + - first: + 33: 3300034 + second: l_pinkyProxy_03_geo + - first: + 33: 3300036 + second: l_ringProxy_01_geo + - first: + 33: 3300038 + second: l_ringProxy_02_geo + - first: + 33: 3300040 + second: l_ringProxy_03_geo + - first: + 33: 3300042 + second: l_shourderProxy_geo + - first: + 33: 3300044 + second: l_thumbProxy_01_geo + - first: + 33: 3300046 + second: l_thumbProxy_02_geo + - first: + 33: 3300048 + second: l_thumbProxy_03_geo + - first: + 33: 3300050 + second: l_UNI_eye + - first: + 33: 3300052 + second: l_wristProxy_geo + - first: + 33: 3300054 + second: neckProxy_geo + - first: + 33: 3300056 + second: pelvisProxy_geo + - first: + 33: 3300058 + second: r_ankleProxy_geo + - first: + 33: 3300060 + second: r_ballProxy_geo + - first: + 33: 3300062 + second: r_clavicleProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_hipProxy_geo + - first: + 33: 3300068 + second: r_indexProxy_01_geo + - first: + 33: 3300070 + second: r_indexProxy_02_geo + - first: + 33: 3300072 + second: r_indexProxy_03_geo + - first: + 33: 3300074 + second: r_kneeProxy_geo + - first: + 33: 3300076 + second: r_middleProxy_01_geo + - first: + 33: 3300078 + second: r_middleProxy_02_geo + - first: + 33: 3300080 + second: r_middleProxy_03_geo + - first: + 33: 3300082 + second: r_pinkyProxy_01_geo + - first: + 33: 3300084 + second: r_pinkyProxy_02_geo + - first: + 33: 3300086 + second: r_pinkyProxy_03_geo + - first: + 33: 3300088 + second: r_ringProxy_01_geo + - first: + 33: 3300090 + second: r_ringProxy_02_geo + - first: + 33: 3300092 + second: r_ringProxy_03_geo + - first: + 33: 3300094 + second: r_shourderProxy_geo + - first: + 33: 3300096 + second: r_thumbProxy_01_geo + - first: + 33: 3300098 + second: r_thumbProxy_02_geo + - first: + 33: 3300100 + second: r_thumbProxy_03_geo + - first: + 33: 3300102 + second: r_UNI_eye + - first: + 33: 3300104 + second: r_wristProxy_geo + - first: + 33: 3300106 + second: spineProxy_geo + - first: + 33: 3300108 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: UNI_01_TongueTipProxy + - first: + 33: 3300114 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: HumanoidRunRightSharp + - first: + 74: 7400002 + second: HumanoidRunLeftSharp + - first: + 95: 9500000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 0 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidRunRightSharp takeName: _31_a_U1_M_P_RunForwardTurnRight_NtrlMedium__Fb_Dia2m_No_0_PJ_4 - firstFrame: 76.4000015 - lastFrame: 91.5999985 + internalID: 0 + firstFrame: 76.4 + lastFrame: 91.6 wrapMode: 0 orientationOffsetY: 0 level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -523,16 +1494,19 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidRunLeftSharp takeName: _31_a_U1_M_P_RunForwardTurnRight_NtrlMedium__Fb_Dia2m_No_0_PJ_4 - firstFrame: 76.4000015 - lastFrame: 91.5999985 + internalID: 0 + firstFrame: 76.4 + lastFrame: 91.6 wrapMode: 0 orientationOffsetY: 0 level: 0 - cycleOffset: .5 + cycleOffset: 0.5 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -549,18 +1523,31 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -568,12 +1555,16 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -1009,396 +2000,403 @@ ModelImporter: modified: 0 skeleton: - name: HumanoidRunTurnSharp(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: -1.1920929e-07, y: .978280783, z: 0} + parentName: + position: {x: -0.00000011920929, y: 0.9782808, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg - position: {x: -.0754494965, y: -.0456640199, z: 7.1054272e-17} + parentName: + position: {x: -0.0754495, y: -0.04566402, z: 7.105427e-17} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg - position: {x: -.0205504987, y: -.409129977, z: -.000718647963} + parentName: + position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot - position: {x: -.00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes - position: {x: -.00748699997, y: -.0731673017, z: .145427123} + parentName: + position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg - position: {x: .0754495338, y: -.0456639901, z: -1.06581408e-16} + parentName: + position: {x: 0.075449534, y: -0.04566399, z: -1.0658141e-16} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg - position: {x: .0205504671, y: -.409130007, z: -.000718647963} + parentName: + position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot - position: {x: .00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes - position: {x: .00748699997, y: -.0731673017, z: .145427495} + parentName: + position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine - position: {x: -3.41060506e-15, y: .0922631845, z: .0157713313} + parentName: + position: {x: -3.410605e-15, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest - position: {x: 2.84217088e-16, y: .162540287, z: -.00165605545} + parentName: + position: {x: 2.842171e-16, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder - position: {x: -.0382859968, y: .221622497, z: -.017063085} - rotation: {x: -.0214740429, y: -.0649306327, z: .149301186, w: .98642391} + parentName: + position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} + rotation: {x: -0.021474043, y: -0.06493063, z: 0.14930119, w: 0.9864239} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm - position: {x: -.100502051, y: 1.12508303e-09, z: -1.90391064e-10} - rotation: {x: .0582441725, y: .0541966818, z: -.143146858, w: .986498594} + parentName: + position: {x: -0.10050205, y: 0.000000001125083, z: -1.9039106e-10} + rotation: {x: 0.058244172, y: 0.05419668, z: -0.14314686, w: 0.9864986} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm - position: {x: -.254049301, y: -1.05876266e-10, z: 1.09272799e-10} - rotation: {x: .370735109, y: .0307997242, z: -.00505082868, w: .928214133} + parentName: + position: {x: -0.2540493, y: -1.05876266e-10, z: 1.092728e-10} + rotation: {x: 0.3707351, y: 0.030799724, z: -0.0050508287, w: 0.92821413} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand - position: {x: -.24638927, y: -1.18688351e-10, z: 1.88802567e-11} + parentName: + position: {x: -0.24638927, y: -1.1868835e-10, z: 1.8880257e-11} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 - position: {x: -.0751257986, y: -.00784140453, z: .0326526426} - rotation: {x: .0285248309, y: .0622748137, z: .0811907127, w: .994342148} + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: 0.028524831, y: 0.062274814, z: 0.08119071, w: 0.99434215} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 - position: {x: -.03979728, y: 4.98084119e-05, z: .00118575059} - rotation: {x: -.112918295, y: .0147299161, z: .0200799461, w: .993292153} + parentName: + position: {x: -0.03979728, y: 0.000049808412, z: 0.0011857506} + rotation: {x: -0.112918295, y: 0.014729916, z: 0.020079946, w: 0.99329215} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 - position: {x: -.0279684775, y: -6.41415321e-09, z: -5.14323091e-08} + parentName: + position: {x: -0.027968477, y: -0.000000006414153, z: -0.00000005143231} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 - position: {x: -.0760238245, y: -.00188513438, z: .0101412293} - rotation: {x: -.0297813602, y: .0698117316, z: .0790310055, w: .99397862} + parentName: + position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} + rotation: {x: -0.02978136, y: 0.06981173, z: 0.079031006, w: 0.9939786} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 - position: {x: -.0442804359, y: 4.79885148e-06, z: -.000425400329} - rotation: {x: -.03165837, y: -.00521096354, z: .0131377848, w: .999398887} + parentName: + position: {x: -0.044280436, y: 0.0000047988515, z: -0.00042540033} + rotation: {x: -0.03165837, y: -0.0052109635, z: 0.013137785, w: 0.9993989} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 - position: {x: -.0339648277, y: -1.21832722e-08, z: 3.75169362e-09} + parentName: + position: {x: -0.033964828, y: -0.000000012183272, z: 0.0000000037516936} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 - position: {x: -.0656599477, y: -.00782510638, z: -.0322512463} - rotation: {x: -.0942266807, y: .0761036873, z: .0781878233, w: .989553571} + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.09422668, y: 0.07610369, z: 0.07818782, w: 0.9895536} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 - position: {x: -.0308054481, y: -3.08745803e-05, z: -.00144807738} - rotation: {x: -.0721703544, y: -.0263085775, z: .0134690031, w: .996954322} + parentName: + position: {x: -0.030805448, y: -0.00003087458, z: -0.0014480774} + rotation: {x: -0.072170354, y: -0.026308578, z: 0.013469003, w: 0.9969543} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 - position: {x: -.0230640266, y: -6.40258941e-06, z: 1.81994846e-08} + parentName: + position: {x: -0.023064027, y: -0.0000064025894, z: 0.000000018199485} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 - position: {x: -.0703021064, y: -.00374530931, z: -.0114117917} - rotation: {x: .0153381936, y: .0918124318, z: .0732276663, w: .992961764} + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: 0.015338194, y: 0.09181243, z: 0.07322767, w: 0.99296176} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 - position: {x: -.0431354567, y: -2.0882293e-05, z: -.00223517814} - rotation: {x: -.134465471, y: -.0260947198, z: .00873644277, w: .990536094} + parentName: + position: {x: -0.043135457, y: -0.000020882293, z: -0.0022351781} + rotation: {x: -0.13446547, y: -0.02609472, z: 0.008736443, w: 0.9905361} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 - position: {x: -.0308355652, y: 1.59126615e-10, z: -1.64565179e-08} + parentName: + position: {x: -0.030835565, y: 1.5912661e-10, z: -0.000000016456518} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 - position: {x: -.0142312413, y: -.0123778246, z: .0255316682} - rotation: {x: -.264946133, y: -.078369908, z: -.144285843, w: .950180709} + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.26494613, y: -0.07836991, z: -0.14428584, w: 0.9501807} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 - position: {x: -.0163739994, y: -.00528999977, z: .0234914087} - rotation: {x: -.0260620788, y: .0966867208, z: .00360709406, w: .994967103} + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.026062079, y: 0.09668672, z: 0.003607094, w: 0.9949671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 - position: {x: -.0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck - position: {x: -0, y: .259009302, z: -.0324132554} + parentName: + position: {x: -0, y: 0.2590093, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head - position: {x: 5.68434176e-16, y: .0830703825, z: .0113267815} + parentName: + position: {x: 5.684342e-16, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw - position: {x: 1.73472344e-20, y: .0111267585, z: .0103275431} - rotation: {x: .219240054, y: -0, z: -0, w: .975670993} + parentName: + position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} + rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND - position: {x: -1.73472344e-20, y: -.0482887588, z: .071851708} + parentName: + position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner - position: {x: -.032843262, y: -.01657876, z: .0661217645} + parentName: + position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower - position: {x: -.0142508168, y: -.0216887593, z: .0822406337} + parentName: + position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner - position: {x: .0328399986, y: -.01657876, z: .0661187842} + parentName: + position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower - position: {x: .0142508168, y: -.0216887593, z: .0822387859} + parentName: + position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack - position: {x: -1.73472344e-20, y: -.022869369, z: .0100954091} + parentName: + position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip - position: {x: -1.73472344e-20, y: -.0232788119, z: .0383227095} + parentName: + position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440265, y: .0337019488, z: .0594304018} + parentName: + position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye - position: {x: -.0208482333, y: .0825027004, z: .0554274321} + parentName: + position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower - position: {x: -.0356189571, y: .0650736615, z: .076234743} + parentName: + position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper - position: {x: -.0344068967, y: .10060814, z: .0802053064} + parentName: + position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow - position: {x: -.0120626912, y: .118765265, z: .0934668258} + parentName: + position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow - position: {x: -.0550398715, y: .114825293, z: .061777398} + parentName: + position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper - position: {x: -.0145013221, y: -.00511181122, z: .094618842} + parentName: + position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril - position: {x: -.0178999994, y: .0263128281, z: .0908674002} + parentName: + position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .033702828, z: .0594273992} + parentName: + position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye - position: {x: .020849999, y: .082502827, z: .0554273985} + parentName: + position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower - position: {x: .0356200002, y: .065072827, z: .0762374029} + parentName: + position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper - position: {x: .0344099998, y: .100612827, z: .0802073926} + parentName: + position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow - position: {x: .0120626874, y: .118765265, z: .0934668258} + parentName: + position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow - position: {x: .0550400019, y: .114822827, z: .061777398} + parentName: + position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper - position: {x: .0145013221, y: -.00510717137, z: .094617404} + parentName: + position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril - position: {x: .0178999994, y: .0263089053, z: .0908706188} + parentName: + position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder - position: {x: .0382860154, y: .221621141, z: -.017063085} - rotation: {x: .161830962, y: .986479342, z: -.00653582299, w: -.0250314958} + parentName: + position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} + rotation: {x: 0.16183096, y: 0.98647934, z: -0.006535823, w: -0.025031496} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm - position: {x: -.100501455, y: -2.49664549e-06, z: -5.22836601e-08} - rotation: {x: .140205517, y: .987173378, z: -.0505189113, w: .0572623983} + parentName: + position: {x: -0.100501455, y: -0.0000024966455, z: -0.00000005228366} + rotation: {x: 0.14020552, y: 0.9871734, z: -0.05051891, w: 0.0572624} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm - position: {x: .253428251, y: .00601135287, z: -.0167045239} - rotation: {x: .225095123, y: .0257679857, z: -.0287355334, w: .973572075} + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: 0.22509512, y: 0.025767986, z: -0.028735533, w: 0.9735721} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand - position: {x: .245373696, y: .0216417722, z: .00555046508} + parentName: + position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 - position: {x: .0747694969, y: -.00124305382, z: .0343444981} - rotation: {x: .0386432037, y: .0996977985, z: -.0396457911, w: .993476391} + parentName: + position: {x: 0.0747695, y: -0.0012430538, z: 0.034344498} + rotation: {x: 0.038643204, y: 0.0996978, z: -0.03964579, w: 0.9934764} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 - position: {x: .0370584019, y: .00072612107, z: .0145388944} - rotation: {x: -.115742981, y: .0259806179, z: .0374040864, w: .992234588} + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.11574298, y: 0.025980618, z: 0.037404086, w: 0.9922346} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 - position: {x: .0252250377, y: -.00496646529, z: .0110121462} + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 - position: {x: .0756476447, y: .00479140272, z: .0118531818} - rotation: {x: -.022765018, y: -.00453316933, z: -.0396077782, w: .998945653} + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.022765018, y: -0.0045331693, z: -0.03960778, w: 0.99894565} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 - position: {x: .0438090637, y: .000194188149, z: .00645493623} - rotation: {x: -.0381342135, y: -.0438377894, z: .0973902121, w: .99354881} + parentName: + position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} + rotation: {x: -0.038134214, y: -0.04383779, z: 0.09739021, w: 0.9935488} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 - position: {x: .0330724716, y: -.00754753686, z: .00168984616} + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 - position: {x: .0668033436, y: -.00199410855, z: -.0307561457} - rotation: {x: -.0966819078, y: -.255429536, z: .00254705478, w: .961978137} + parentName: + position: {x: 0.06680334, y: -0.0019941085, z: -0.030756146} + rotation: {x: -0.09668191, y: -0.25542954, z: 0.0025470548, w: 0.96197814} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 - position: {x: .0285308417, y: -.001397143, z: -.0116237961} - rotation: {x: -.000170628467, y: -.00966134761, z: -.00536240125, w: .999938965} + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: -0.00017062847, y: -0.009661348, z: -0.0053624013, w: 0.99993896} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 - position: {x: .0214268602, y: -.000553508929, z: -.00851660781} + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 - position: {x: .0705984756, y: .00245709647, z: -.00982145779} - rotation: {x: .0176409222, y: -.133800521, z: -.0142867193, w: .990748286} + parentName: + position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} + rotation: {x: 0.017640922, y: -0.13380052, z: -0.014286719, w: 0.9907483} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 - position: {x: .0428871848, y: -.00137538207, z: -.00494585838} - rotation: {x: .000484485121, y: -.021289764, z: .0698614791, w: .997329414} + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.0049458584} + rotation: {x: 0.00048448512, y: -0.021289764, z: 0.06986148, w: 0.9973294} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 - position: {x: .0295006037, y: -.00769293541, z: -.00462225592} + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 - position: {x: .0146849155, y: -.0111049423, z: .0258580968} - rotation: {x: -.189051896, y: .0108967666, z: .125017971, w: .973915398} + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858097} + rotation: {x: -0.1890519, y: 0.010896767, z: 0.12501797, w: 0.9739154} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 - position: {x: .0163739994, y: -.00528999977, z: .0234913602} - rotation: {x: -.0260628108, y: -.0966901109, z: -.00360712246, w: .994966745} + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.02606281, y: -0.09669011, z: -0.0036071225, w: 0.99496675} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 - position: {x: .0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e8914d097ece7cc48a83d5fccd4098c0, - type: 3} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta index cc3e089f0..06779db0c 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta @@ -1,659 +1,1937 @@ fileFormatVersion: 2 guid: 6fb3851da6a6f5948ab6892bee8ba920 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: //RootNode - 100002: Character_Ctrl:Reference - 100004: Chest - 100006: ChestEndEffector - 100008: ChestOriginEffector - 100010: chestProxy_geo - 100012: Head - 100014: Head 1 - 100016: HeadEffector - 100018: headProxy_geo - 100020: HeadTop_End - 100022: Hips - 100024: Hips 1 - 100026: HipsEffector - 100028: Jaw - 100030: JawEND - 100032: jawProxy_geo - 100034: l_ankleProxy_geo - 100036: l_ballProxy_geo - 100038: l_clavicleProxy_geo - 100040: l_erbowProxy_geo - 100042: l_hipProxy_geo - 100044: l_indexProxy_01_geo - 100046: l_indexProxy_02_geo - 100048: l_indexProxy_03_geo - 100050: l_kneeProxy_geo - 100052: l_middleProxy_01_geo - 100054: l_middleProxy_02_geo - 100056: l_middleProxy_03_geo - 100058: l_pinkyProxy_01_geo - 100060: l_pinkyProxy_02_geo - 100062: l_pinkyProxy_03_geo - 100064: l_ringProxy_01_geo - 100066: l_ringProxy_02_geo - 100068: l_ringProxy_03_geo - 100070: l_shourderProxy_geo - 100072: l_thumbProxy_01_geo - 100074: l_thumbProxy_02_geo - 100076: l_thumbProxy_03_geo - 100078: l_UNI_eye - 100080: l_wristProxy_geo - 100082: LeftAnkleEffector - 100084: LeftArm - 100086: LeftArm 1 - 100088: LeftCheek - 100090: LeftElbowEffector - 100092: LeftEye - 100094: LeftEyelidLower - 100096: LeftEyelidUpper - 100098: LeftFoot - 100100: LeftFoot 1 - 100102: LeftForeArm - 100104: LeftForeArm 1 - 100106: LeftHand - 100108: LeftHand 1 - 100110: LeftHandIndex1 - 100112: LeftHandIndex13 - 100114: LeftHandIndex17 - 100116: LeftHandIndex2 - 100118: LeftHandIndex3 - 100120: LeftHandIndex4 - 100122: LeftHandIndex5 - 100124: LeftHandIndex6 - 100126: LeftHandIndexEffector - 100128: LeftHandMiddle1 - 100130: LeftHandMiddle13 - 100132: LeftHandMiddle17 - 100134: LeftHandMiddle2 - 100136: LeftHandMiddle3 - 100138: LeftHandMiddle4 - 100140: LeftHandMiddle5 - 100142: LeftHandMiddle6 - 100144: LeftHandMiddleEffector - 100146: LeftHandPinky1 - 100148: LeftHandPinky13 - 100150: LeftHandPinky17 - 100152: LeftHandPinky2 - 100154: LeftHandPinky3 - 100156: LeftHandPinky4 - 100158: LeftHandPinky5 - 100160: LeftHandPinky6 - 100162: LeftHandPinkyEffector - 100164: LeftHandRing1 - 100166: LeftHandRing13 - 100168: LeftHandRing17 - 100170: LeftHandRing2 - 100172: LeftHandRing3 - 100174: LeftHandRing4 - 100176: LeftHandRing5 - 100178: LeftHandRing6 - 100180: LeftHandRingEffector - 100182: LeftHandThumb1 - 100184: LeftHandThumb13 - 100186: LeftHandThumb17 - 100188: LeftHandThumb2 - 100190: LeftHandThumb3 - 100192: LeftHandThumb4 - 100194: LeftHandThumb5 - 100196: LeftHandThumb6 - 100198: LeftHandThumbEffector - 100200: LeftHipEffector - 100202: LeftInnerBrow - 100204: LeftIOuterBrow - 100206: LeftKneeEffector - 100208: LeftLeg - 100210: LeftLeg 1 - 100212: LeftLipCorner - 100214: LeftLipLower - 100216: LeftLipUpper - 100218: LeftNostril - 100220: LeftShoulder - 100222: LeftShoulder 1 - 100224: LeftShoulderEffector - 100226: LeftToes - 100228: LeftUpLeg - 100230: LeftUpLeg 1 - 100232: LeftWristEffector - 100234: LToeBase_End2 - 100236: LToeBase_End3 - 100238: Neck - 100240: Neck 1 - 100242: neckProxy_geo - 100244: pelvisProxy_geo - 100246: r_ankleProxy_geo - 100248: r_ballProxy_geo - 100250: r_clavicleProxy_geo - 100252: r_erbowProxy_geo - 100254: r_hipProxy_geo - 100256: r_indexProxy_01_geo - 100258: r_indexProxy_02_geo - 100260: r_indexProxy_03_geo - 100262: r_kneeProxy_geo - 100264: r_middleProxy_01_geo - 100266: r_middleProxy_02_geo - 100268: r_middleProxy_03_geo - 100270: r_pinkyProxy_01_geo - 100272: r_pinkyProxy_02_geo - 100274: r_pinkyProxy_03_geo - 100276: r_ringProxy_01_geo - 100278: r_ringProxy_02_geo - 100280: r_ringProxy_03_geo - 100282: r_shourderProxy_geo - 100284: r_thumbProxy_01_geo - 100286: r_thumbProxy_02_geo - 100288: r_thumbProxy_03_geo - 100290: r_UNI_eye - 100292: r_wristProxy_geo - 100294: Reference - 100296: RightAnkleEffector - 100298: RightArm - 100300: RightArm 1 - 100302: RightCheek - 100304: RightElbowEffector - 100306: RightEye - 100308: RightEyelidLower - 100310: RightEyelidUpper - 100312: RightFoot - 100314: RightFoot 1 - 100316: RightForeArm - 100318: RightForeArm 1 - 100320: RightHand - 100322: RightHand 1 - 100324: RightHandIndex1 - 100326: RightHandIndex2 - 100328: RightHandIndex3 - 100330: RightHandIndex4 - 100332: RightHandIndex5 - 100334: RightHandIndex6 - 100336: RightHandIndexEffector - 100338: RightHandMiddle1 - 100340: RightHandMiddle2 - 100342: RightHandMiddle3 - 100344: RightHandMiddle4 - 100346: RightHandMiddle5 - 100348: RightHandMiddle6 - 100350: RightHandMiddleEffector - 100352: RightHandPinky1 - 100354: RightHandPinky2 - 100356: RightHandPinky3 - 100358: RightHandPinky4 - 100360: RightHandPinky5 - 100362: RightHandPinky6 - 100364: RightHandPinkyEffector - 100366: RightHandRing1 - 100368: RightHandRing2 - 100370: RightHandRing3 - 100372: RightHandRing4 - 100374: RightHandRing5 - 100376: RightHandRing6 - 100378: RightHandRingEffector - 100380: RightHandThumb1 - 100382: RightHandThumb2 - 100384: RightHandThumb3 - 100386: RightHandThumb4 - 100388: RightHandThumb5 - 100390: RightHandThumb6 - 100392: RightHandThumbEffector - 100394: RightHipEffector - 100396: RightInnerBrow - 100398: RightIOuterBrow - 100400: RightKneeEffector - 100402: RightLeg - 100404: RightLeg 1 - 100406: RightLipCorner - 100408: RightLipLower - 100410: RightLipUpper - 100412: RightNostril - 100414: RightShoulder - 100416: RightShoulder 1 - 100418: RightShoulderEffector - 100420: RightToes - 100422: RightUpLeg - 100424: RightUpLeg 1 - 100426: RightWristEffector - 100428: Spine - 100430: Spine 1 - 100432: Spine1 - 100434: spineProxy_geo - 100436: TongueBack - 100438: TongueTip - 100440: UNI_01_Lower_teethProxy - 100442: UNI_01_TongueBaseProxy - 100444: UNI_01_TongueTipProxy - 100446: UNI_01_Upper_teethProxy - 400000: //RootNode - 400002: Character_Ctrl:Reference - 400004: Chest - 400006: ChestEndEffector - 400008: ChestOriginEffector - 400010: chestProxy_geo - 400012: Head - 400014: Head 1 - 400016: HeadEffector - 400018: headProxy_geo - 400020: HeadTop_End - 400022: Hips - 400024: Hips 1 - 400026: HipsEffector - 400028: Jaw - 400030: JawEND - 400032: jawProxy_geo - 400034: l_ankleProxy_geo - 400036: l_ballProxy_geo - 400038: l_clavicleProxy_geo - 400040: l_erbowProxy_geo - 400042: l_hipProxy_geo - 400044: l_indexProxy_01_geo - 400046: l_indexProxy_02_geo - 400048: l_indexProxy_03_geo - 400050: l_kneeProxy_geo - 400052: l_middleProxy_01_geo - 400054: l_middleProxy_02_geo - 400056: l_middleProxy_03_geo - 400058: l_pinkyProxy_01_geo - 400060: l_pinkyProxy_02_geo - 400062: l_pinkyProxy_03_geo - 400064: l_ringProxy_01_geo - 400066: l_ringProxy_02_geo - 400068: l_ringProxy_03_geo - 400070: l_shourderProxy_geo - 400072: l_thumbProxy_01_geo - 400074: l_thumbProxy_02_geo - 400076: l_thumbProxy_03_geo - 400078: l_UNI_eye - 400080: l_wristProxy_geo - 400082: LeftAnkleEffector - 400084: LeftArm - 400086: LeftArm 1 - 400088: LeftCheek - 400090: LeftElbowEffector - 400092: LeftEye - 400094: LeftEyelidLower - 400096: LeftEyelidUpper - 400098: LeftFoot - 400100: LeftFoot 1 - 400102: LeftForeArm - 400104: LeftForeArm 1 - 400106: LeftHand - 400108: LeftHand 1 - 400110: LeftHandIndex1 - 400112: LeftHandIndex13 - 400114: LeftHandIndex17 - 400116: LeftHandIndex2 - 400118: LeftHandIndex3 - 400120: LeftHandIndex4 - 400122: LeftHandIndex5 - 400124: LeftHandIndex6 - 400126: LeftHandIndexEffector - 400128: LeftHandMiddle1 - 400130: LeftHandMiddle13 - 400132: LeftHandMiddle17 - 400134: LeftHandMiddle2 - 400136: LeftHandMiddle3 - 400138: LeftHandMiddle4 - 400140: LeftHandMiddle5 - 400142: LeftHandMiddle6 - 400144: LeftHandMiddleEffector - 400146: LeftHandPinky1 - 400148: LeftHandPinky13 - 400150: LeftHandPinky17 - 400152: LeftHandPinky2 - 400154: LeftHandPinky3 - 400156: LeftHandPinky4 - 400158: LeftHandPinky5 - 400160: LeftHandPinky6 - 400162: LeftHandPinkyEffector - 400164: LeftHandRing1 - 400166: LeftHandRing13 - 400168: LeftHandRing17 - 400170: LeftHandRing2 - 400172: LeftHandRing3 - 400174: LeftHandRing4 - 400176: LeftHandRing5 - 400178: LeftHandRing6 - 400180: LeftHandRingEffector - 400182: LeftHandThumb1 - 400184: LeftHandThumb13 - 400186: LeftHandThumb17 - 400188: LeftHandThumb2 - 400190: LeftHandThumb3 - 400192: LeftHandThumb4 - 400194: LeftHandThumb5 - 400196: LeftHandThumb6 - 400198: LeftHandThumbEffector - 400200: LeftHipEffector - 400202: LeftInnerBrow - 400204: LeftIOuterBrow - 400206: LeftKneeEffector - 400208: LeftLeg - 400210: LeftLeg 1 - 400212: LeftLipCorner - 400214: LeftLipLower - 400216: LeftLipUpper - 400218: LeftNostril - 400220: LeftShoulder - 400222: LeftShoulder 1 - 400224: LeftShoulderEffector - 400226: LeftToes - 400228: LeftUpLeg - 400230: LeftUpLeg 1 - 400232: LeftWristEffector - 400234: LToeBase_End2 - 400236: LToeBase_End3 - 400238: Neck - 400240: Neck 1 - 400242: neckProxy_geo - 400244: pelvisProxy_geo - 400246: r_ankleProxy_geo - 400248: r_ballProxy_geo - 400250: r_clavicleProxy_geo - 400252: r_erbowProxy_geo - 400254: r_hipProxy_geo - 400256: r_indexProxy_01_geo - 400258: r_indexProxy_02_geo - 400260: r_indexProxy_03_geo - 400262: r_kneeProxy_geo - 400264: r_middleProxy_01_geo - 400266: r_middleProxy_02_geo - 400268: r_middleProxy_03_geo - 400270: r_pinkyProxy_01_geo - 400272: r_pinkyProxy_02_geo - 400274: r_pinkyProxy_03_geo - 400276: r_ringProxy_01_geo - 400278: r_ringProxy_02_geo - 400280: r_ringProxy_03_geo - 400282: r_shourderProxy_geo - 400284: r_thumbProxy_01_geo - 400286: r_thumbProxy_02_geo - 400288: r_thumbProxy_03_geo - 400290: r_UNI_eye - 400292: r_wristProxy_geo - 400294: Reference - 400296: RightAnkleEffector - 400298: RightArm - 400300: RightArm 1 - 400302: RightCheek - 400304: RightElbowEffector - 400306: RightEye - 400308: RightEyelidLower - 400310: RightEyelidUpper - 400312: RightFoot - 400314: RightFoot 1 - 400316: RightForeArm - 400318: RightForeArm 1 - 400320: RightHand - 400322: RightHand 1 - 400324: RightHandIndex1 - 400326: RightHandIndex2 - 400328: RightHandIndex3 - 400330: RightHandIndex4 - 400332: RightHandIndex5 - 400334: RightHandIndex6 - 400336: RightHandIndexEffector - 400338: RightHandMiddle1 - 400340: RightHandMiddle2 - 400342: RightHandMiddle3 - 400344: RightHandMiddle4 - 400346: RightHandMiddle5 - 400348: RightHandMiddle6 - 400350: RightHandMiddleEffector - 400352: RightHandPinky1 - 400354: RightHandPinky2 - 400356: RightHandPinky3 - 400358: RightHandPinky4 - 400360: RightHandPinky5 - 400362: RightHandPinky6 - 400364: RightHandPinkyEffector - 400366: RightHandRing1 - 400368: RightHandRing2 - 400370: RightHandRing3 - 400372: RightHandRing4 - 400374: RightHandRing5 - 400376: RightHandRing6 - 400378: RightHandRingEffector - 400380: RightHandThumb1 - 400382: RightHandThumb2 - 400384: RightHandThumb3 - 400386: RightHandThumb4 - 400388: RightHandThumb5 - 400390: RightHandThumb6 - 400392: RightHandThumbEffector - 400394: RightHipEffector - 400396: RightInnerBrow - 400398: RightIOuterBrow - 400400: RightKneeEffector - 400402: RightLeg - 400404: RightLeg 1 - 400406: RightLipCorner - 400408: RightLipLower - 400410: RightLipUpper - 400412: RightNostril - 400414: RightShoulder - 400416: RightShoulder 1 - 400418: RightShoulderEffector - 400420: RightToes - 400422: RightUpLeg - 400424: RightUpLeg 1 - 400426: RightWristEffector - 400428: Spine - 400430: Spine 1 - 400432: Spine1 - 400434: spineProxy_geo - 400436: TongueBack - 400438: TongueTip - 400440: UNI_01_Lower_teethProxy - 400442: UNI_01_TongueBaseProxy - 400444: UNI_01_TongueTipProxy - 400446: UNI_01_Upper_teethProxy - 2300000: chestProxy_geo - 2300002: headProxy_geo - 2300004: jawProxy_geo - 2300006: l_ankleProxy_geo - 2300008: l_ballProxy_geo - 2300010: l_clavicleProxy_geo - 2300012: l_erbowProxy_geo - 2300014: l_hipProxy_geo - 2300016: l_indexProxy_01_geo - 2300018: l_indexProxy_02_geo - 2300020: l_indexProxy_03_geo - 2300022: l_kneeProxy_geo - 2300024: l_middleProxy_01_geo - 2300026: l_middleProxy_02_geo - 2300028: l_middleProxy_03_geo - 2300030: l_pinkyProxy_01_geo - 2300032: l_pinkyProxy_02_geo - 2300034: l_pinkyProxy_03_geo - 2300036: l_ringProxy_01_geo - 2300038: l_ringProxy_02_geo - 2300040: l_ringProxy_03_geo - 2300042: l_shourderProxy_geo - 2300044: l_thumbProxy_01_geo - 2300046: l_thumbProxy_02_geo - 2300048: l_thumbProxy_03_geo - 2300050: l_UNI_eye - 2300052: l_wristProxy_geo - 2300054: neckProxy_geo - 2300056: pelvisProxy_geo - 2300058: r_ankleProxy_geo - 2300060: r_ballProxy_geo - 2300062: r_clavicleProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_hipProxy_geo - 2300068: r_indexProxy_01_geo - 2300070: r_indexProxy_02_geo - 2300072: r_indexProxy_03_geo - 2300074: r_kneeProxy_geo - 2300076: r_middleProxy_01_geo - 2300078: r_middleProxy_02_geo - 2300080: r_middleProxy_03_geo - 2300082: r_pinkyProxy_01_geo - 2300084: r_pinkyProxy_02_geo - 2300086: r_pinkyProxy_03_geo - 2300088: r_ringProxy_01_geo - 2300090: r_ringProxy_02_geo - 2300092: r_ringProxy_03_geo - 2300094: r_shourderProxy_geo - 2300096: r_thumbProxy_01_geo - 2300098: r_thumbProxy_02_geo - 2300100: r_thumbProxy_03_geo - 2300102: r_UNI_eye - 2300104: r_wristProxy_geo - 2300106: spineProxy_geo - 2300108: UNI_01_Lower_teethProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: UNI_01_TongueTipProxy - 2300114: UNI_01_Upper_teethProxy - 3300000: chestProxy_geo - 3300002: headProxy_geo - 3300004: jawProxy_geo - 3300006: l_ankleProxy_geo - 3300008: l_ballProxy_geo - 3300010: l_clavicleProxy_geo - 3300012: l_erbowProxy_geo - 3300014: l_hipProxy_geo - 3300016: l_indexProxy_01_geo - 3300018: l_indexProxy_02_geo - 3300020: l_indexProxy_03_geo - 3300022: l_kneeProxy_geo - 3300024: l_middleProxy_01_geo - 3300026: l_middleProxy_02_geo - 3300028: l_middleProxy_03_geo - 3300030: l_pinkyProxy_01_geo - 3300032: l_pinkyProxy_02_geo - 3300034: l_pinkyProxy_03_geo - 3300036: l_ringProxy_01_geo - 3300038: l_ringProxy_02_geo - 3300040: l_ringProxy_03_geo - 3300042: l_shourderProxy_geo - 3300044: l_thumbProxy_01_geo - 3300046: l_thumbProxy_02_geo - 3300048: l_thumbProxy_03_geo - 3300050: l_UNI_eye - 3300052: l_wristProxy_geo - 3300054: neckProxy_geo - 3300056: pelvisProxy_geo - 3300058: r_ankleProxy_geo - 3300060: r_ballProxy_geo - 3300062: r_clavicleProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_hipProxy_geo - 3300068: r_indexProxy_01_geo - 3300070: r_indexProxy_02_geo - 3300072: r_indexProxy_03_geo - 3300074: r_kneeProxy_geo - 3300076: r_middleProxy_01_geo - 3300078: r_middleProxy_02_geo - 3300080: r_middleProxy_03_geo - 3300082: r_pinkyProxy_01_geo - 3300084: r_pinkyProxy_02_geo - 3300086: r_pinkyProxy_03_geo - 3300088: r_ringProxy_01_geo - 3300090: r_ringProxy_02_geo - 3300092: r_ringProxy_03_geo - 3300094: r_shourderProxy_geo - 3300096: r_thumbProxy_01_geo - 3300098: r_thumbProxy_02_geo - 3300100: r_thumbProxy_03_geo - 3300102: r_UNI_eye - 3300104: r_wristProxy_geo - 3300106: spineProxy_geo - 3300108: UNI_01_Lower_teethProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: UNI_01_TongueTipProxy - 3300114: UNI_01_Upper_teethProxy - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: StandQuarterTurnRight - 7400002: Stand Turn Right A - 7400004: Stand Turn Right C - 7400006: StandHalfTurnRight - 7400008: Stand Turn Left A - 7400010: StandQuarterTurnLeft - 7400012: Stand Turn Left C - 7400014: StandHalfTurnLeft - 9500000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: //RootNode + - first: + 1: 100002 + second: Character_Ctrl:Reference + - first: + 1: 100004 + second: Chest + - first: + 1: 100006 + second: ChestEndEffector + - first: + 1: 100008 + second: ChestOriginEffector + - first: + 1: 100010 + second: chestProxy_geo + - first: + 1: 100012 + second: Head + - first: + 1: 100014 + second: Head 1 + - first: + 1: 100016 + second: HeadEffector + - first: + 1: 100018 + second: headProxy_geo + - first: + 1: 100020 + second: HeadTop_End + - first: + 1: 100022 + second: Hips + - first: + 1: 100024 + second: Hips 1 + - first: + 1: 100026 + second: HipsEffector + - first: + 1: 100028 + second: Jaw + - first: + 1: 100030 + second: JawEND + - first: + 1: 100032 + second: jawProxy_geo + - first: + 1: 100034 + second: l_ankleProxy_geo + - first: + 1: 100036 + second: l_ballProxy_geo + - first: + 1: 100038 + second: l_clavicleProxy_geo + - first: + 1: 100040 + second: l_erbowProxy_geo + - first: + 1: 100042 + second: l_hipProxy_geo + - first: + 1: 100044 + second: l_indexProxy_01_geo + - first: + 1: 100046 + second: l_indexProxy_02_geo + - first: + 1: 100048 + second: l_indexProxy_03_geo + - first: + 1: 100050 + second: l_kneeProxy_geo + - first: + 1: 100052 + second: l_middleProxy_01_geo + - first: + 1: 100054 + second: l_middleProxy_02_geo + - first: + 1: 100056 + second: l_middleProxy_03_geo + - first: + 1: 100058 + second: l_pinkyProxy_01_geo + - first: + 1: 100060 + second: l_pinkyProxy_02_geo + - first: + 1: 100062 + second: l_pinkyProxy_03_geo + - first: + 1: 100064 + second: l_ringProxy_01_geo + - first: + 1: 100066 + second: l_ringProxy_02_geo + - first: + 1: 100068 + second: l_ringProxy_03_geo + - first: + 1: 100070 + second: l_shourderProxy_geo + - first: + 1: 100072 + second: l_thumbProxy_01_geo + - first: + 1: 100074 + second: l_thumbProxy_02_geo + - first: + 1: 100076 + second: l_thumbProxy_03_geo + - first: + 1: 100078 + second: l_UNI_eye + - first: + 1: 100080 + second: l_wristProxy_geo + - first: + 1: 100082 + second: LeftAnkleEffector + - first: + 1: 100084 + second: LeftArm + - first: + 1: 100086 + second: LeftArm 1 + - first: + 1: 100088 + second: LeftCheek + - first: + 1: 100090 + second: LeftElbowEffector + - first: + 1: 100092 + second: LeftEye + - first: + 1: 100094 + second: LeftEyelidLower + - first: + 1: 100096 + second: LeftEyelidUpper + - first: + 1: 100098 + second: LeftFoot + - first: + 1: 100100 + second: LeftFoot 1 + - first: + 1: 100102 + second: LeftForeArm + - first: + 1: 100104 + second: LeftForeArm 1 + - first: + 1: 100106 + second: LeftHand + - first: + 1: 100108 + second: LeftHand 1 + - first: + 1: 100110 + second: LeftHandIndex1 + - first: + 1: 100112 + second: LeftHandIndex13 + - first: + 1: 100114 + second: LeftHandIndex17 + - first: + 1: 100116 + second: LeftHandIndex2 + - first: + 1: 100118 + second: LeftHandIndex3 + - first: + 1: 100120 + second: LeftHandIndex4 + - first: + 1: 100122 + second: LeftHandIndex5 + - first: + 1: 100124 + second: LeftHandIndex6 + - first: + 1: 100126 + second: LeftHandIndexEffector + - first: + 1: 100128 + second: LeftHandMiddle1 + - first: + 1: 100130 + second: LeftHandMiddle13 + - first: + 1: 100132 + second: LeftHandMiddle17 + - first: + 1: 100134 + second: LeftHandMiddle2 + - first: + 1: 100136 + second: LeftHandMiddle3 + - first: + 1: 100138 + second: LeftHandMiddle4 + - first: + 1: 100140 + second: LeftHandMiddle5 + - first: + 1: 100142 + second: LeftHandMiddle6 + - first: + 1: 100144 + second: LeftHandMiddleEffector + - first: + 1: 100146 + second: LeftHandPinky1 + - first: + 1: 100148 + second: LeftHandPinky13 + - first: + 1: 100150 + second: LeftHandPinky17 + - first: + 1: 100152 + second: LeftHandPinky2 + - first: + 1: 100154 + second: LeftHandPinky3 + - first: + 1: 100156 + second: LeftHandPinky4 + - first: + 1: 100158 + second: LeftHandPinky5 + - first: + 1: 100160 + second: LeftHandPinky6 + - first: + 1: 100162 + second: LeftHandPinkyEffector + - first: + 1: 100164 + second: LeftHandRing1 + - first: + 1: 100166 + second: LeftHandRing13 + - first: + 1: 100168 + second: LeftHandRing17 + - first: + 1: 100170 + second: LeftHandRing2 + - first: + 1: 100172 + second: LeftHandRing3 + - first: + 1: 100174 + second: LeftHandRing4 + - first: + 1: 100176 + second: LeftHandRing5 + - first: + 1: 100178 + second: LeftHandRing6 + - first: + 1: 100180 + second: LeftHandRingEffector + - first: + 1: 100182 + second: LeftHandThumb1 + - first: + 1: 100184 + second: LeftHandThumb13 + - first: + 1: 100186 + second: LeftHandThumb17 + - first: + 1: 100188 + second: LeftHandThumb2 + - first: + 1: 100190 + second: LeftHandThumb3 + - first: + 1: 100192 + second: LeftHandThumb4 + - first: + 1: 100194 + second: LeftHandThumb5 + - first: + 1: 100196 + second: LeftHandThumb6 + - first: + 1: 100198 + second: LeftHandThumbEffector + - first: + 1: 100200 + second: LeftHipEffector + - first: + 1: 100202 + second: LeftInnerBrow + - first: + 1: 100204 + second: LeftIOuterBrow + - first: + 1: 100206 + second: LeftKneeEffector + - first: + 1: 100208 + second: LeftLeg + - first: + 1: 100210 + second: LeftLeg 1 + - first: + 1: 100212 + second: LeftLipCorner + - first: + 1: 100214 + second: LeftLipLower + - first: + 1: 100216 + second: LeftLipUpper + - first: + 1: 100218 + second: LeftNostril + - first: + 1: 100220 + second: LeftShoulder + - first: + 1: 100222 + second: LeftShoulder 1 + - first: + 1: 100224 + second: LeftShoulderEffector + - first: + 1: 100226 + second: LeftToes + - first: + 1: 100228 + second: LeftUpLeg + - first: + 1: 100230 + second: LeftUpLeg 1 + - first: + 1: 100232 + second: LeftWristEffector + - first: + 1: 100234 + second: LToeBase_End2 + - first: + 1: 100236 + second: LToeBase_End3 + - first: + 1: 100238 + second: Neck + - first: + 1: 100240 + second: Neck 1 + - first: + 1: 100242 + second: neckProxy_geo + - first: + 1: 100244 + second: pelvisProxy_geo + - first: + 1: 100246 + second: r_ankleProxy_geo + - first: + 1: 100248 + second: r_ballProxy_geo + - first: + 1: 100250 + second: r_clavicleProxy_geo + - first: + 1: 100252 + second: r_erbowProxy_geo + - first: + 1: 100254 + second: r_hipProxy_geo + - first: + 1: 100256 + second: r_indexProxy_01_geo + - first: + 1: 100258 + second: r_indexProxy_02_geo + - first: + 1: 100260 + second: r_indexProxy_03_geo + - first: + 1: 100262 + second: r_kneeProxy_geo + - first: + 1: 100264 + second: r_middleProxy_01_geo + - first: + 1: 100266 + second: r_middleProxy_02_geo + - first: + 1: 100268 + second: r_middleProxy_03_geo + - first: + 1: 100270 + second: r_pinkyProxy_01_geo + - first: + 1: 100272 + second: r_pinkyProxy_02_geo + - first: + 1: 100274 + second: r_pinkyProxy_03_geo + - first: + 1: 100276 + second: r_ringProxy_01_geo + - first: + 1: 100278 + second: r_ringProxy_02_geo + - first: + 1: 100280 + second: r_ringProxy_03_geo + - first: + 1: 100282 + second: r_shourderProxy_geo + - first: + 1: 100284 + second: r_thumbProxy_01_geo + - first: + 1: 100286 + second: r_thumbProxy_02_geo + - first: + 1: 100288 + second: r_thumbProxy_03_geo + - first: + 1: 100290 + second: r_UNI_eye + - first: + 1: 100292 + second: r_wristProxy_geo + - first: + 1: 100294 + second: Reference + - first: + 1: 100296 + second: RightAnkleEffector + - first: + 1: 100298 + second: RightArm + - first: + 1: 100300 + second: RightArm 1 + - first: + 1: 100302 + second: RightCheek + - first: + 1: 100304 + second: RightElbowEffector + - first: + 1: 100306 + second: RightEye + - first: + 1: 100308 + second: RightEyelidLower + - first: + 1: 100310 + second: RightEyelidUpper + - first: + 1: 100312 + second: RightFoot + - first: + 1: 100314 + second: RightFoot 1 + - first: + 1: 100316 + second: RightForeArm + - first: + 1: 100318 + second: RightForeArm 1 + - first: + 1: 100320 + second: RightHand + - first: + 1: 100322 + second: RightHand 1 + - first: + 1: 100324 + second: RightHandIndex1 + - first: + 1: 100326 + second: RightHandIndex2 + - first: + 1: 100328 + second: RightHandIndex3 + - first: + 1: 100330 + second: RightHandIndex4 + - first: + 1: 100332 + second: RightHandIndex5 + - first: + 1: 100334 + second: RightHandIndex6 + - first: + 1: 100336 + second: RightHandIndexEffector + - first: + 1: 100338 + second: RightHandMiddle1 + - first: + 1: 100340 + second: RightHandMiddle2 + - first: + 1: 100342 + second: RightHandMiddle3 + - first: + 1: 100344 + second: RightHandMiddle4 + - first: + 1: 100346 + second: RightHandMiddle5 + - first: + 1: 100348 + second: RightHandMiddle6 + - first: + 1: 100350 + second: RightHandMiddleEffector + - first: + 1: 100352 + second: RightHandPinky1 + - first: + 1: 100354 + second: RightHandPinky2 + - first: + 1: 100356 + second: RightHandPinky3 + - first: + 1: 100358 + second: RightHandPinky4 + - first: + 1: 100360 + second: RightHandPinky5 + - first: + 1: 100362 + second: RightHandPinky6 + - first: + 1: 100364 + second: RightHandPinkyEffector + - first: + 1: 100366 + second: RightHandRing1 + - first: + 1: 100368 + second: RightHandRing2 + - first: + 1: 100370 + second: RightHandRing3 + - first: + 1: 100372 + second: RightHandRing4 + - first: + 1: 100374 + second: RightHandRing5 + - first: + 1: 100376 + second: RightHandRing6 + - first: + 1: 100378 + second: RightHandRingEffector + - first: + 1: 100380 + second: RightHandThumb1 + - first: + 1: 100382 + second: RightHandThumb2 + - first: + 1: 100384 + second: RightHandThumb3 + - first: + 1: 100386 + second: RightHandThumb4 + - first: + 1: 100388 + second: RightHandThumb5 + - first: + 1: 100390 + second: RightHandThumb6 + - first: + 1: 100392 + second: RightHandThumbEffector + - first: + 1: 100394 + second: RightHipEffector + - first: + 1: 100396 + second: RightInnerBrow + - first: + 1: 100398 + second: RightIOuterBrow + - first: + 1: 100400 + second: RightKneeEffector + - first: + 1: 100402 + second: RightLeg + - first: + 1: 100404 + second: RightLeg 1 + - first: + 1: 100406 + second: RightLipCorner + - first: + 1: 100408 + second: RightLipLower + - first: + 1: 100410 + second: RightLipUpper + - first: + 1: 100412 + second: RightNostril + - first: + 1: 100414 + second: RightShoulder + - first: + 1: 100416 + second: RightShoulder 1 + - first: + 1: 100418 + second: RightShoulderEffector + - first: + 1: 100420 + second: RightToes + - first: + 1: 100422 + second: RightUpLeg + - first: + 1: 100424 + second: RightUpLeg 1 + - first: + 1: 100426 + second: RightWristEffector + - first: + 1: 100428 + second: Spine + - first: + 1: 100430 + second: Spine 1 + - first: + 1: 100432 + second: Spine1 + - first: + 1: 100434 + second: spineProxy_geo + - first: + 1: 100436 + second: TongueBack + - first: + 1: 100438 + second: TongueTip + - first: + 1: 100440 + second: UNI_01_Lower_teethProxy + - first: + 1: 100442 + second: UNI_01_TongueBaseProxy + - first: + 1: 100444 + second: UNI_01_TongueTipProxy + - first: + 1: 100446 + second: UNI_01_Upper_teethProxy + - first: + 4: 400000 + second: //RootNode + - first: + 4: 400002 + second: Character_Ctrl:Reference + - first: + 4: 400004 + second: Chest + - first: + 4: 400006 + second: ChestEndEffector + - first: + 4: 400008 + second: ChestOriginEffector + - first: + 4: 400010 + second: chestProxy_geo + - first: + 4: 400012 + second: Head + - first: + 4: 400014 + second: Head 1 + - first: + 4: 400016 + second: HeadEffector + - first: + 4: 400018 + second: headProxy_geo + - first: + 4: 400020 + second: HeadTop_End + - first: + 4: 400022 + second: Hips + - first: + 4: 400024 + second: Hips 1 + - first: + 4: 400026 + second: HipsEffector + - first: + 4: 400028 + second: Jaw + - first: + 4: 400030 + second: JawEND + - first: + 4: 400032 + second: jawProxy_geo + - first: + 4: 400034 + second: l_ankleProxy_geo + - first: + 4: 400036 + second: l_ballProxy_geo + - first: + 4: 400038 + second: l_clavicleProxy_geo + - first: + 4: 400040 + second: l_erbowProxy_geo + - first: + 4: 400042 + second: l_hipProxy_geo + - first: + 4: 400044 + second: l_indexProxy_01_geo + - first: + 4: 400046 + second: l_indexProxy_02_geo + - first: + 4: 400048 + second: l_indexProxy_03_geo + - first: + 4: 400050 + second: l_kneeProxy_geo + - first: + 4: 400052 + second: l_middleProxy_01_geo + - first: + 4: 400054 + second: l_middleProxy_02_geo + - first: + 4: 400056 + second: l_middleProxy_03_geo + - first: + 4: 400058 + second: l_pinkyProxy_01_geo + - first: + 4: 400060 + second: l_pinkyProxy_02_geo + - first: + 4: 400062 + second: l_pinkyProxy_03_geo + - first: + 4: 400064 + second: l_ringProxy_01_geo + - first: + 4: 400066 + second: l_ringProxy_02_geo + - first: + 4: 400068 + second: l_ringProxy_03_geo + - first: + 4: 400070 + second: l_shourderProxy_geo + - first: + 4: 400072 + second: l_thumbProxy_01_geo + - first: + 4: 400074 + second: l_thumbProxy_02_geo + - first: + 4: 400076 + second: l_thumbProxy_03_geo + - first: + 4: 400078 + second: l_UNI_eye + - first: + 4: 400080 + second: l_wristProxy_geo + - first: + 4: 400082 + second: LeftAnkleEffector + - first: + 4: 400084 + second: LeftArm + - first: + 4: 400086 + second: LeftArm 1 + - first: + 4: 400088 + second: LeftCheek + - first: + 4: 400090 + second: LeftElbowEffector + - first: + 4: 400092 + second: LeftEye + - first: + 4: 400094 + second: LeftEyelidLower + - first: + 4: 400096 + second: LeftEyelidUpper + - first: + 4: 400098 + second: LeftFoot + - first: + 4: 400100 + second: LeftFoot 1 + - first: + 4: 400102 + second: LeftForeArm + - first: + 4: 400104 + second: LeftForeArm 1 + - first: + 4: 400106 + second: LeftHand + - first: + 4: 400108 + second: LeftHand 1 + - first: + 4: 400110 + second: LeftHandIndex1 + - first: + 4: 400112 + second: LeftHandIndex13 + - first: + 4: 400114 + second: LeftHandIndex17 + - first: + 4: 400116 + second: LeftHandIndex2 + - first: + 4: 400118 + second: LeftHandIndex3 + - first: + 4: 400120 + second: LeftHandIndex4 + - first: + 4: 400122 + second: LeftHandIndex5 + - first: + 4: 400124 + second: LeftHandIndex6 + - first: + 4: 400126 + second: LeftHandIndexEffector + - first: + 4: 400128 + second: LeftHandMiddle1 + - first: + 4: 400130 + second: LeftHandMiddle13 + - first: + 4: 400132 + second: LeftHandMiddle17 + - first: + 4: 400134 + second: LeftHandMiddle2 + - first: + 4: 400136 + second: LeftHandMiddle3 + - first: + 4: 400138 + second: LeftHandMiddle4 + - first: + 4: 400140 + second: LeftHandMiddle5 + - first: + 4: 400142 + second: LeftHandMiddle6 + - first: + 4: 400144 + second: LeftHandMiddleEffector + - first: + 4: 400146 + second: LeftHandPinky1 + - first: + 4: 400148 + second: LeftHandPinky13 + - first: + 4: 400150 + second: LeftHandPinky17 + - first: + 4: 400152 + second: LeftHandPinky2 + - first: + 4: 400154 + second: LeftHandPinky3 + - first: + 4: 400156 + second: LeftHandPinky4 + - first: + 4: 400158 + second: LeftHandPinky5 + - first: + 4: 400160 + second: LeftHandPinky6 + - first: + 4: 400162 + second: LeftHandPinkyEffector + - first: + 4: 400164 + second: LeftHandRing1 + - first: + 4: 400166 + second: LeftHandRing13 + - first: + 4: 400168 + second: LeftHandRing17 + - first: + 4: 400170 + second: LeftHandRing2 + - first: + 4: 400172 + second: LeftHandRing3 + - first: + 4: 400174 + second: LeftHandRing4 + - first: + 4: 400176 + second: LeftHandRing5 + - first: + 4: 400178 + second: LeftHandRing6 + - first: + 4: 400180 + second: LeftHandRingEffector + - first: + 4: 400182 + second: LeftHandThumb1 + - first: + 4: 400184 + second: LeftHandThumb13 + - first: + 4: 400186 + second: LeftHandThumb17 + - first: + 4: 400188 + second: LeftHandThumb2 + - first: + 4: 400190 + second: LeftHandThumb3 + - first: + 4: 400192 + second: LeftHandThumb4 + - first: + 4: 400194 + second: LeftHandThumb5 + - first: + 4: 400196 + second: LeftHandThumb6 + - first: + 4: 400198 + second: LeftHandThumbEffector + - first: + 4: 400200 + second: LeftHipEffector + - first: + 4: 400202 + second: LeftInnerBrow + - first: + 4: 400204 + second: LeftIOuterBrow + - first: + 4: 400206 + second: LeftKneeEffector + - first: + 4: 400208 + second: LeftLeg + - first: + 4: 400210 + second: LeftLeg 1 + - first: + 4: 400212 + second: LeftLipCorner + - first: + 4: 400214 + second: LeftLipLower + - first: + 4: 400216 + second: LeftLipUpper + - first: + 4: 400218 + second: LeftNostril + - first: + 4: 400220 + second: LeftShoulder + - first: + 4: 400222 + second: LeftShoulder 1 + - first: + 4: 400224 + second: LeftShoulderEffector + - first: + 4: 400226 + second: LeftToes + - first: + 4: 400228 + second: LeftUpLeg + - first: + 4: 400230 + second: LeftUpLeg 1 + - first: + 4: 400232 + second: LeftWristEffector + - first: + 4: 400234 + second: LToeBase_End2 + - first: + 4: 400236 + second: LToeBase_End3 + - first: + 4: 400238 + second: Neck + - first: + 4: 400240 + second: Neck 1 + - first: + 4: 400242 + second: neckProxy_geo + - first: + 4: 400244 + second: pelvisProxy_geo + - first: + 4: 400246 + second: r_ankleProxy_geo + - first: + 4: 400248 + second: r_ballProxy_geo + - first: + 4: 400250 + second: r_clavicleProxy_geo + - first: + 4: 400252 + second: r_erbowProxy_geo + - first: + 4: 400254 + second: r_hipProxy_geo + - first: + 4: 400256 + second: r_indexProxy_01_geo + - first: + 4: 400258 + second: r_indexProxy_02_geo + - first: + 4: 400260 + second: r_indexProxy_03_geo + - first: + 4: 400262 + second: r_kneeProxy_geo + - first: + 4: 400264 + second: r_middleProxy_01_geo + - first: + 4: 400266 + second: r_middleProxy_02_geo + - first: + 4: 400268 + second: r_middleProxy_03_geo + - first: + 4: 400270 + second: r_pinkyProxy_01_geo + - first: + 4: 400272 + second: r_pinkyProxy_02_geo + - first: + 4: 400274 + second: r_pinkyProxy_03_geo + - first: + 4: 400276 + second: r_ringProxy_01_geo + - first: + 4: 400278 + second: r_ringProxy_02_geo + - first: + 4: 400280 + second: r_ringProxy_03_geo + - first: + 4: 400282 + second: r_shourderProxy_geo + - first: + 4: 400284 + second: r_thumbProxy_01_geo + - first: + 4: 400286 + second: r_thumbProxy_02_geo + - first: + 4: 400288 + second: r_thumbProxy_03_geo + - first: + 4: 400290 + second: r_UNI_eye + - first: + 4: 400292 + second: r_wristProxy_geo + - first: + 4: 400294 + second: Reference + - first: + 4: 400296 + second: RightAnkleEffector + - first: + 4: 400298 + second: RightArm + - first: + 4: 400300 + second: RightArm 1 + - first: + 4: 400302 + second: RightCheek + - first: + 4: 400304 + second: RightElbowEffector + - first: + 4: 400306 + second: RightEye + - first: + 4: 400308 + second: RightEyelidLower + - first: + 4: 400310 + second: RightEyelidUpper + - first: + 4: 400312 + second: RightFoot + - first: + 4: 400314 + second: RightFoot 1 + - first: + 4: 400316 + second: RightForeArm + - first: + 4: 400318 + second: RightForeArm 1 + - first: + 4: 400320 + second: RightHand + - first: + 4: 400322 + second: RightHand 1 + - first: + 4: 400324 + second: RightHandIndex1 + - first: + 4: 400326 + second: RightHandIndex2 + - first: + 4: 400328 + second: RightHandIndex3 + - first: + 4: 400330 + second: RightHandIndex4 + - first: + 4: 400332 + second: RightHandIndex5 + - first: + 4: 400334 + second: RightHandIndex6 + - first: + 4: 400336 + second: RightHandIndexEffector + - first: + 4: 400338 + second: RightHandMiddle1 + - first: + 4: 400340 + second: RightHandMiddle2 + - first: + 4: 400342 + second: RightHandMiddle3 + - first: + 4: 400344 + second: RightHandMiddle4 + - first: + 4: 400346 + second: RightHandMiddle5 + - first: + 4: 400348 + second: RightHandMiddle6 + - first: + 4: 400350 + second: RightHandMiddleEffector + - first: + 4: 400352 + second: RightHandPinky1 + - first: + 4: 400354 + second: RightHandPinky2 + - first: + 4: 400356 + second: RightHandPinky3 + - first: + 4: 400358 + second: RightHandPinky4 + - first: + 4: 400360 + second: RightHandPinky5 + - first: + 4: 400362 + second: RightHandPinky6 + - first: + 4: 400364 + second: RightHandPinkyEffector + - first: + 4: 400366 + second: RightHandRing1 + - first: + 4: 400368 + second: RightHandRing2 + - first: + 4: 400370 + second: RightHandRing3 + - first: + 4: 400372 + second: RightHandRing4 + - first: + 4: 400374 + second: RightHandRing5 + - first: + 4: 400376 + second: RightHandRing6 + - first: + 4: 400378 + second: RightHandRingEffector + - first: + 4: 400380 + second: RightHandThumb1 + - first: + 4: 400382 + second: RightHandThumb2 + - first: + 4: 400384 + second: RightHandThumb3 + - first: + 4: 400386 + second: RightHandThumb4 + - first: + 4: 400388 + second: RightHandThumb5 + - first: + 4: 400390 + second: RightHandThumb6 + - first: + 4: 400392 + second: RightHandThumbEffector + - first: + 4: 400394 + second: RightHipEffector + - first: + 4: 400396 + second: RightInnerBrow + - first: + 4: 400398 + second: RightIOuterBrow + - first: + 4: 400400 + second: RightKneeEffector + - first: + 4: 400402 + second: RightLeg + - first: + 4: 400404 + second: RightLeg 1 + - first: + 4: 400406 + second: RightLipCorner + - first: + 4: 400408 + second: RightLipLower + - first: + 4: 400410 + second: RightLipUpper + - first: + 4: 400412 + second: RightNostril + - first: + 4: 400414 + second: RightShoulder + - first: + 4: 400416 + second: RightShoulder 1 + - first: + 4: 400418 + second: RightShoulderEffector + - first: + 4: 400420 + second: RightToes + - first: + 4: 400422 + second: RightUpLeg + - first: + 4: 400424 + second: RightUpLeg 1 + - first: + 4: 400426 + second: RightWristEffector + - first: + 4: 400428 + second: Spine + - first: + 4: 400430 + second: Spine 1 + - first: + 4: 400432 + second: Spine1 + - first: + 4: 400434 + second: spineProxy_geo + - first: + 4: 400436 + second: TongueBack + - first: + 4: 400438 + second: TongueTip + - first: + 4: 400440 + second: UNI_01_Lower_teethProxy + - first: + 4: 400442 + second: UNI_01_TongueBaseProxy + - first: + 4: 400444 + second: UNI_01_TongueTipProxy + - first: + 4: 400446 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300000 + second: chestProxy_geo + - first: + 23: 2300002 + second: headProxy_geo + - first: + 23: 2300004 + second: jawProxy_geo + - first: + 23: 2300006 + second: l_ankleProxy_geo + - first: + 23: 2300008 + second: l_ballProxy_geo + - first: + 23: 2300010 + second: l_clavicleProxy_geo + - first: + 23: 2300012 + second: l_erbowProxy_geo + - first: + 23: 2300014 + second: l_hipProxy_geo + - first: + 23: 2300016 + second: l_indexProxy_01_geo + - first: + 23: 2300018 + second: l_indexProxy_02_geo + - first: + 23: 2300020 + second: l_indexProxy_03_geo + - first: + 23: 2300022 + second: l_kneeProxy_geo + - first: + 23: 2300024 + second: l_middleProxy_01_geo + - first: + 23: 2300026 + second: l_middleProxy_02_geo + - first: + 23: 2300028 + second: l_middleProxy_03_geo + - first: + 23: 2300030 + second: l_pinkyProxy_01_geo + - first: + 23: 2300032 + second: l_pinkyProxy_02_geo + - first: + 23: 2300034 + second: l_pinkyProxy_03_geo + - first: + 23: 2300036 + second: l_ringProxy_01_geo + - first: + 23: 2300038 + second: l_ringProxy_02_geo + - first: + 23: 2300040 + second: l_ringProxy_03_geo + - first: + 23: 2300042 + second: l_shourderProxy_geo + - first: + 23: 2300044 + second: l_thumbProxy_01_geo + - first: + 23: 2300046 + second: l_thumbProxy_02_geo + - first: + 23: 2300048 + second: l_thumbProxy_03_geo + - first: + 23: 2300050 + second: l_UNI_eye + - first: + 23: 2300052 + second: l_wristProxy_geo + - first: + 23: 2300054 + second: neckProxy_geo + - first: + 23: 2300056 + second: pelvisProxy_geo + - first: + 23: 2300058 + second: r_ankleProxy_geo + - first: + 23: 2300060 + second: r_ballProxy_geo + - first: + 23: 2300062 + second: r_clavicleProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_hipProxy_geo + - first: + 23: 2300068 + second: r_indexProxy_01_geo + - first: + 23: 2300070 + second: r_indexProxy_02_geo + - first: + 23: 2300072 + second: r_indexProxy_03_geo + - first: + 23: 2300074 + second: r_kneeProxy_geo + - first: + 23: 2300076 + second: r_middleProxy_01_geo + - first: + 23: 2300078 + second: r_middleProxy_02_geo + - first: + 23: 2300080 + second: r_middleProxy_03_geo + - first: + 23: 2300082 + second: r_pinkyProxy_01_geo + - first: + 23: 2300084 + second: r_pinkyProxy_02_geo + - first: + 23: 2300086 + second: r_pinkyProxy_03_geo + - first: + 23: 2300088 + second: r_ringProxy_01_geo + - first: + 23: 2300090 + second: r_ringProxy_02_geo + - first: + 23: 2300092 + second: r_ringProxy_03_geo + - first: + 23: 2300094 + second: r_shourderProxy_geo + - first: + 23: 2300096 + second: r_thumbProxy_01_geo + - first: + 23: 2300098 + second: r_thumbProxy_02_geo + - first: + 23: 2300100 + second: r_thumbProxy_03_geo + - first: + 23: 2300102 + second: r_UNI_eye + - first: + 23: 2300104 + second: r_wristProxy_geo + - first: + 23: 2300106 + second: spineProxy_geo + - first: + 23: 2300108 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: UNI_01_TongueTipProxy + - first: + 23: 2300114 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300000 + second: chestProxy_geo + - first: + 33: 3300002 + second: headProxy_geo + - first: + 33: 3300004 + second: jawProxy_geo + - first: + 33: 3300006 + second: l_ankleProxy_geo + - first: + 33: 3300008 + second: l_ballProxy_geo + - first: + 33: 3300010 + second: l_clavicleProxy_geo + - first: + 33: 3300012 + second: l_erbowProxy_geo + - first: + 33: 3300014 + second: l_hipProxy_geo + - first: + 33: 3300016 + second: l_indexProxy_01_geo + - first: + 33: 3300018 + second: l_indexProxy_02_geo + - first: + 33: 3300020 + second: l_indexProxy_03_geo + - first: + 33: 3300022 + second: l_kneeProxy_geo + - first: + 33: 3300024 + second: l_middleProxy_01_geo + - first: + 33: 3300026 + second: l_middleProxy_02_geo + - first: + 33: 3300028 + second: l_middleProxy_03_geo + - first: + 33: 3300030 + second: l_pinkyProxy_01_geo + - first: + 33: 3300032 + second: l_pinkyProxy_02_geo + - first: + 33: 3300034 + second: l_pinkyProxy_03_geo + - first: + 33: 3300036 + second: l_ringProxy_01_geo + - first: + 33: 3300038 + second: l_ringProxy_02_geo + - first: + 33: 3300040 + second: l_ringProxy_03_geo + - first: + 33: 3300042 + second: l_shourderProxy_geo + - first: + 33: 3300044 + second: l_thumbProxy_01_geo + - first: + 33: 3300046 + second: l_thumbProxy_02_geo + - first: + 33: 3300048 + second: l_thumbProxy_03_geo + - first: + 33: 3300050 + second: l_UNI_eye + - first: + 33: 3300052 + second: l_wristProxy_geo + - first: + 33: 3300054 + second: neckProxy_geo + - first: + 33: 3300056 + second: pelvisProxy_geo + - first: + 33: 3300058 + second: r_ankleProxy_geo + - first: + 33: 3300060 + second: r_ballProxy_geo + - first: + 33: 3300062 + second: r_clavicleProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_hipProxy_geo + - first: + 33: 3300068 + second: r_indexProxy_01_geo + - first: + 33: 3300070 + second: r_indexProxy_02_geo + - first: + 33: 3300072 + second: r_indexProxy_03_geo + - first: + 33: 3300074 + second: r_kneeProxy_geo + - first: + 33: 3300076 + second: r_middleProxy_01_geo + - first: + 33: 3300078 + second: r_middleProxy_02_geo + - first: + 33: 3300080 + second: r_middleProxy_03_geo + - first: + 33: 3300082 + second: r_pinkyProxy_01_geo + - first: + 33: 3300084 + second: r_pinkyProxy_02_geo + - first: + 33: 3300086 + second: r_pinkyProxy_03_geo + - first: + 33: 3300088 + second: r_ringProxy_01_geo + - first: + 33: 3300090 + second: r_ringProxy_02_geo + - first: + 33: 3300092 + second: r_ringProxy_03_geo + - first: + 33: 3300094 + second: r_shourderProxy_geo + - first: + 33: 3300096 + second: r_thumbProxy_01_geo + - first: + 33: 3300098 + second: r_thumbProxy_02_geo + - first: + 33: 3300100 + second: r_thumbProxy_03_geo + - first: + 33: 3300102 + second: r_UNI_eye + - first: + 33: 3300104 + second: r_wristProxy_geo + - first: + 33: 3300106 + second: spineProxy_geo + - first: + 33: 3300108 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: UNI_01_TongueTipProxy + - first: + 33: 3300114 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: StandQuarterTurnRight + - first: + 74: 7400002 + second: Stand Turn Right A + - first: + 74: 7400004 + second: Stand Turn Right C + - first: + 74: 7400006 + second: StandHalfTurnRight + - first: + 74: 7400008 + second: Stand Turn Left A + - first: + 74: 7400010 + second: StandQuarterTurnLeft + - first: + 74: 7400012 + second: Stand Turn Left C + - first: + 74: 7400014 + second: StandHalfTurnLeft + - first: + 95: 9500000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 0 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: StandQuarterTurnRight takeName: _97_TO_100_a_U1_M_P_idle_NeutralTO45IdleTONeutralIdle__Fb_p45_No_0_PJ_2 + internalID: 0 firstFrame: 284 lastFrame: 315 wrapMode: 0 @@ -661,6 +1939,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -677,9 +1956,11 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: StandHalfTurnRight takeName: _97_TO_100_a_U1_M_P_idle_NeutralTO45IdleTONeutralIdle__Fb_p45_No_0_PJ_2 + internalID: 0 firstFrame: 622 lastFrame: 659 wrapMode: 0 @@ -687,6 +1968,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -703,9 +1985,11 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: StandQuarterTurnLeft takeName: _97_TO_100_a_U1_M_P_idle_NeutralTO45IdleTONeutralIdle__Fb_p45_No_0_PJ_2 + internalID: 0 firstFrame: 284 lastFrame: 315 wrapMode: 0 @@ -713,6 +1997,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -729,9 +2014,11 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: StandHalfTurnLeft takeName: _97_TO_100_a_U1_M_P_idle_NeutralTO45IdleTONeutralIdle__Fb_p45_No_0_PJ_2 + internalID: 0 firstFrame: 622 lastFrame: 659 wrapMode: 0 @@ -739,6 +2026,7 @@ ModelImporter: level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -755,18 +2043,31 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -774,12 +2075,16 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -1215,396 +2520,403 @@ ModelImporter: modified: 0 skeleton: - name: HumanoidStandTurn(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: .00221104478, y: .960555851, z: .00774985878} + parentName: + position: {x: 0.0022110448, y: 0.96055585, z: 0.007749859} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg - position: {x: -.0754494965, y: -.0456640199, z: 0} + parentName: + position: {x: -0.0754495, y: -0.04566402, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg - position: {x: -.0205504987, y: -.409129977, z: -.000718647963} + parentName: + position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot - position: {x: -.00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes - position: {x: -.00748699997, y: -.0731673017, z: .145427123} + parentName: + position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg - position: {x: .0754495338, y: -.0456639901, z: 0} + parentName: + position: {x: 0.075449534, y: -0.04566399, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg - position: {x: .0205504671, y: -.409130007, z: -.000718647963} + parentName: + position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot - position: {x: .00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes - position: {x: .00748699997, y: -.0731673017, z: .145427495} + parentName: + position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine - position: {x: 2.6469779e-25, y: .0922631845, z: .0157713313} + parentName: + position: {x: 2.646978e-25, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest - position: {x: -0, y: .162540287, z: -.00165605545} + parentName: + position: {x: -0, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder - position: {x: -.0382859968, y: .221622497, z: -.017063085} - rotation: {x: -.0231811199, y: -.0412411205, z: .155462235, w: .986708343} + parentName: + position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} + rotation: {x: -0.02318112, y: -0.04124112, z: 0.15546224, w: 0.98670834} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm - position: {x: -.100502051, y: 5.68434176e-16, z: -3.330669e-18} - rotation: {x: .088617675, y: .0276518222, z: -.142930418, w: .985369623} + parentName: + position: {x: -0.10050205, y: 5.684342e-16, z: -3.330669e-18} + rotation: {x: 0.088617675, y: 0.027651822, z: -0.14293042, w: 0.9853696} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm - position: {x: -.254049301, y: 5.68434176e-16, z: 1.11022296e-17} - rotation: {x: .124834083, y: .0313581899, z: .00281256856, w: .991677999} + parentName: + position: {x: -0.2540493, y: 5.684342e-16, z: 1.11022296e-17} + rotation: {x: 0.12483408, y: 0.03135819, z: 0.0028125686, w: 0.991678} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand - position: {x: -.24638927, y: 0, z: -1.99840139e-16} + parentName: + position: {x: -0.24638927, y: 0, z: -1.9984014e-16} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 - position: {x: -.0751257986, y: -.00784140453, z: .0326526426} - rotation: {x: .00607836014, y: -.0167527385, z: .0568730906, w: .998222351} + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: 0.00607836, y: -0.016752739, z: 0.05687309, w: 0.99822235} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 - position: {x: -.03979728, y: 4.98084046e-05, z: .00118575036} - rotation: {x: -.0675409213, y: .0152366757, z: .0327178091, w: .997063518} + parentName: + position: {x: -0.03979728, y: 0.000049808405, z: 0.0011857504} + rotation: {x: -0.06754092, y: 0.015236676, z: 0.03271781, w: 0.9970635} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 - position: {x: -.0279684775, y: -6.28122487e-09, z: -5.17186614e-08} + parentName: + position: {x: -0.027968477, y: -0.000000006281225, z: -0.00000005171866} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 - position: {x: -.0760238245, y: -.00188513438, z: .0101412293} - rotation: {x: -.00378268166, y: .0447947718, z: .0881895795, w: .995088816} + parentName: + position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} + rotation: {x: -0.0037826817, y: 0.04479477, z: 0.08818958, w: 0.9950888} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 - position: {x: -.0442804359, y: 4.79887422e-06, z: -.000425400125} - rotation: {x: -.0125990948, y: -.00755135808, z: .0314779356, w: .999396563} + parentName: + position: {x: -0.044280436, y: 0.000004798874, z: -0.00042540013} + rotation: {x: -0.012599095, y: -0.007551358, z: 0.031477936, w: 0.99939656} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 - position: {x: -.0339648277, y: -1.21979289e-08, z: 3.75648268e-09} + parentName: + position: {x: -0.033964828, y: -0.000000012197929, z: 0.0000000037564827} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 - position: {x: -.0656599477, y: -.00782510638, z: -.0322512463} - rotation: {x: -.0661177263, y: .0816951618, z: .0931271091, w: .990091801} + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.066117726, y: 0.08169516, z: 0.09312711, w: 0.9900918} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 - position: {x: -.0308054481, y: -3.0874573e-05, z: -.0014480775} - rotation: {x: .0469475128, y: -.0211696289, z: .0376872718, w: .9979617} + parentName: + position: {x: -0.030805448, y: -0.000030874573, z: -0.0014480775} + rotation: {x: 0.046947513, y: -0.021169629, z: 0.03768727, w: 0.9979617} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 - position: {x: -.0230640266, y: -6.40258077e-06, z: 1.8332095e-08} + parentName: + position: {x: -0.023064027, y: -0.0000064025808, z: 0.000000018332095} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 - position: {x: -.0703021064, y: -.00374530931, z: -.0114117917} - rotation: {x: -.0201800391, y: .0723013356, z: .0900597498, w: .993103564} + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: -0.02018004, y: 0.072301336, z: 0.09005975, w: 0.99310356} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 - position: {x: -.0431354567, y: -2.08823076e-05, z: -.00223517837} - rotation: {x: .0182891581, y: -.0256066062, z: .0339722671, w: .998927355} + parentName: + position: {x: -0.043135457, y: -0.000020882308, z: -0.0022351784} + rotation: {x: 0.018289158, y: -0.025606606, z: 0.033972267, w: 0.99892735} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 - position: {x: -.0308355652, y: 7.71035458e-11, z: -1.64932707e-08} + parentName: + position: {x: -0.030835565, y: 7.7103546e-11, z: -0.00000001649327} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 - position: {x: -.0142312413, y: -.0123778246, z: .0255316682} - rotation: {x: -.102118149, y: -.0509434976, z: -.10264302, w: .988150299} + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.10211815, y: -0.050943498, z: -0.10264302, w: 0.9881503} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 - position: {x: -.0163739994, y: -.00528999977, z: .0234914087} - rotation: {x: -.0260635857, y: .0966900364, z: .00360634457, w: .994966686} + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.026063586, y: 0.09669004, z: 0.0036063446, w: 0.9949667} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 - position: {x: -.0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck - position: {x: -0, y: .259009302, z: -.0324132554} + parentName: + position: {x: -0, y: 0.2590093, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head - position: {x: -2.6469779e-25, y: .0830703825, z: .0113267815} + parentName: + position: {x: -2.646978e-25, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw - position: {x: 1.73472344e-20, y: .0111267585, z: .0103275431} - rotation: {x: .219240054, y: -0, z: -0, w: .975670993} + parentName: + position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} + rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND - position: {x: -1.73472344e-20, y: -.0482887588, z: .071851708} + parentName: + position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner - position: {x: -.032843262, y: -.01657876, z: .0661217645} + parentName: + position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower - position: {x: -.0142508168, y: -.0216887593, z: .0822406337} + parentName: + position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner - position: {x: .0328399986, y: -.01657876, z: .0661187842} + parentName: + position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower - position: {x: .0142508168, y: -.0216887593, z: .0822387859} + parentName: + position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack - position: {x: -1.73472344e-20, y: -.022869369, z: .0100954091} + parentName: + position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip - position: {x: -1.73472344e-20, y: -.0232788119, z: .0383227095} + parentName: + position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440265, y: .0337019488, z: .0594304018} + parentName: + position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye - position: {x: -.0208482333, y: .0825027004, z: .0554274321} + parentName: + position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower - position: {x: -.0356189571, y: .0650736615, z: .076234743} + parentName: + position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper - position: {x: -.0344068967, y: .10060814, z: .0802053064} + parentName: + position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow - position: {x: -.0120626912, y: .118765265, z: .0934668258} + parentName: + position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow - position: {x: -.0550398715, y: .114825293, z: .061777398} + parentName: + position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper - position: {x: -.0145013221, y: -.00511181122, z: .094618842} + parentName: + position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril - position: {x: -.0178999994, y: .0263128281, z: .0908674002} + parentName: + position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .033702828, z: .0594273992} + parentName: + position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye - position: {x: .020849999, y: .082502827, z: .0554273985} + parentName: + position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower - position: {x: .0356200002, y: .065072827, z: .0762374029} + parentName: + position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper - position: {x: .0344099998, y: .100612827, z: .0802073926} + parentName: + position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow - position: {x: .0120626874, y: .118765265, z: .0934668258} + parentName: + position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow - position: {x: .0550400019, y: .114822827, z: .061777398} + parentName: + position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper - position: {x: .0145013221, y: -.00510717137, z: .094617404} + parentName: + position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril - position: {x: .0178999994, y: .0263089053, z: .0908706188} + parentName: + position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder - position: {x: .0382860154, y: .221621141, z: -.017063085} - rotation: {x: .156615227, y: .987296224, z: -.0141432397, w: -.022756584} + parentName: + position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} + rotation: {x: 0.15661523, y: 0.9872962, z: -0.01414324, w: -0.022756584} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm - position: {x: -.100501455, y: -2.49955224e-06, z: -5.15574072e-08} - rotation: {x: .128958672, y: .988591135, z: -.0591317825, w: .0506032445} + parentName: + position: {x: -0.100501455, y: -0.0000024995522, z: -0.000000051557407} + rotation: {x: 0.12895867, y: 0.98859113, z: -0.059131783, w: 0.050603244} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm - position: {x: .253428251, y: .00601135287, z: -.0167045239} - rotation: {x: .173002318, y: .0184977558, z: -.0264102723, w: .984393537} + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: 0.17300232, y: 0.018497756, z: -0.026410272, w: 0.98439354} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand - position: {x: .245373696, y: .0216417722, z: .00555046508} + parentName: + position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 - position: {x: .0747694969, y: -.00124305359, z: .0343444981} - rotation: {x: -.00423200894, y: .162119269, z: -.0406824313, w: .985923171} + parentName: + position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} + rotation: {x: -0.004232009, y: 0.16211927, z: -0.04068243, w: 0.9859232} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 - position: {x: .0370584019, y: .00072612107, z: .0145388944} - rotation: {x: -.0775835961, y: .0223498475, z: .040921364, w: .995894969} + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.077583596, y: 0.022349847, z: 0.040921364, w: 0.99589497} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 - position: {x: .0252250377, y: -.00496646529, z: .0110121462} + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 - position: {x: .0756476447, y: .00479140272, z: .0118531818} - rotation: {x: -.00177398103, y: .0143492613, z: -.047807496, w: .998751998} + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.001773981, y: 0.014349261, z: -0.047807496, w: 0.998752} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 - position: {x: .0438090637, y: .000194188149, z: .00645493623} - rotation: {x: -.0188719332, y: -.0441113934, z: .082947962, w: .995398283} + parentName: + position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} + rotation: {x: -0.018871933, y: -0.044111393, z: 0.08294796, w: 0.9953983} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 - position: {x: .0330724716, y: -.00754753686, z: .00168984616} + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 - position: {x: .0668033436, y: -.00199410878, z: -.0307561457} - rotation: {x: -.0620294139, y: -.258612514, z: -.016704157, w: .963842809} + parentName: + position: {x: 0.06680334, y: -0.0019941088, z: -0.030756146} + rotation: {x: -0.062029414, y: -0.2586125, z: -0.016704157, w: 0.9638428} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 - position: {x: .0285308417, y: -.001397143, z: -.0116237961} - rotation: {x: .0298576318, y: .000797908462, z: -.0616652891, w: .997649908} + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: 0.029857632, y: 0.00079790846, z: -0.06166529, w: 0.9976499} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 - position: {x: .0214268602, y: -.000553508929, z: -.00851660781} + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 - position: {x: .0705984756, y: .00245709647, z: -.00982145779} - rotation: {x: -.0147603918, y: -.11599648, z: -.0297171939, w: .992695272} + parentName: + position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} + rotation: {x: -0.014760392, y: -0.11599648, z: -0.029717194, w: 0.9926953} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 - position: {x: .0428871848, y: -.00137538207, z: -.00494585792} - rotation: {x: .0207646266, y: -.0215577111, z: .0755871385, w: .996689916} + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.004945858} + rotation: {x: 0.020764627, y: -0.021557711, z: 0.07558714, w: 0.9966899} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 - position: {x: .0295006037, y: -.00769293541, z: -.00462225592} + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 - position: {x: .0146849155, y: -.0111049423, z: .0258580949} - rotation: {x: -.119986929, y: .0336791351, z: .148827791, w: .980978668} + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} + rotation: {x: -0.11998693, y: 0.033679135, z: 0.14882779, w: 0.98097867} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 - position: {x: .0163739994, y: -.00528999977, z: .0234913602} - rotation: {x: -.0260633472, y: -.0966907069, z: -.00360694295, w: .994966686} + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.026063347, y: -0.09669071, z: -0.003606943, w: 0.9949667} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 - position: {x: .0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e8914d097ece7cc48a83d5fccd4098c0, - type: 3} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta index f15891792..9a171ad57 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta @@ -1,515 +1,1471 @@ fileFormatVersion: 2 guid: b1a5e04ae51004842aba06704a6c2903 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 19 - fileIDToRecycleName: - 100000: Chest - 100002: chestProxy_geo - 100004: //RootNode - 100006: Head - 100008: headProxy_geo - 100010: HeadTop_End - 100012: Hips - 100014: Jaw - 100016: JawEND - 100018: jawProxy_geo - 100020: l_ankleProxy_geo - 100022: l_ballProxy_geo - 100024: l_clavicleProxy_geo - 100026: l_erbowProxy_geo - 100028: l_hipProxy_geo - 100030: l_indexProxy_01_geo - 100032: l_indexProxy_02_geo - 100034: l_indexProxy_03_geo - 100036: l_kneeProxy_geo - 100038: l_middleProxy_01_geo - 100040: l_middleProxy_02_geo - 100042: l_middleProxy_03_geo - 100044: l_pinkyProxy_01_geo - 100046: l_pinkyProxy_02_geo - 100048: l_pinkyProxy_03_geo - 100050: l_ringProxy_01_geo - 100052: l_ringProxy_02_geo - 100054: l_ringProxy_03_geo - 100056: l_shourderProxy_geo - 100058: l_thumbProxy_01_geo - 100060: l_thumbProxy_02_geo - 100062: l_thumbProxy_03_geo - 100064: l_UNI_eye - 100066: l_wristProxy_geo - 100068: LeftArm - 100070: LeftCheek - 100072: LeftEye - 100074: LeftEyelidLower - 100076: LeftEyelidUpper - 100078: LeftFoot - 100080: LeftForeArm - 100082: LeftHand - 100084: LeftHandIndex1 - 100086: LeftHandIndex13 - 100088: LeftHandIndex17 - 100090: LeftHandIndex2 - 100092: LeftHandIndex3 - 100094: LeftHandMiddle1 - 100096: LeftHandMiddle13 - 100098: LeftHandMiddle17 - 100100: LeftHandMiddle2 - 100102: LeftHandMiddle3 - 100104: LeftHandPinky1 - 100106: LeftHandPinky13 - 100108: LeftHandPinky17 - 100110: LeftHandPinky2 - 100112: LeftHandPinky3 - 100114: LeftHandRing1 - 100116: LeftHandRing13 - 100118: LeftHandRing17 - 100120: LeftHandRing2 - 100122: LeftHandRing3 - 100124: LeftHandThumb1 - 100126: LeftHandThumb13 - 100128: LeftHandThumb17 - 100130: LeftHandThumb2 - 100132: LeftHandThumb3 - 100134: LeftInnerBrow - 100136: LeftIOuterBrow - 100138: LeftLeg - 100140: LeftLipCorner - 100142: LeftLipLower - 100144: LeftLipUpper - 100146: LeftNostril - 100148: LeftShoulder - 100150: LeftToes - 100152: LeftUpLeg - 100154: LToeBase_End2 - 100156: LToeBase_End3 - 100158: Neck - 100160: neckProxy_geo - 100162: pelvisProxy_geo - 100164: r_ankleProxy_geo - 100166: r_ballProxy_geo - 100168: r_clavicleProxy_geo - 100170: r_erbowProxy_geo - 100172: r_hipProxy_geo - 100174: r_indexProxy_01_geo - 100176: r_indexProxy_02_geo - 100178: r_indexProxy_03_geo - 100180: r_kneeProxy_geo - 100182: r_middleProxy_01_geo - 100184: r_middleProxy_02_geo - 100186: r_middleProxy_03_geo - 100188: r_pinkyProxy_01_geo - 100190: r_pinkyProxy_02_geo - 100192: r_pinkyProxy_03_geo - 100194: r_ringProxy_01_geo - 100196: r_ringProxy_02_geo - 100198: r_ringProxy_03_geo - 100200: r_shourderProxy_geo - 100202: r_thumbProxy_01_geo - 100204: r_thumbProxy_02_geo - 100206: r_thumbProxy_03_geo - 100208: r_UNI_eye - 100210: r_wristProxy_geo - 100212: Reference - 100214: RightArm - 100216: RightCheek - 100218: RightEye - 100220: RightEyelidLower - 100222: RightEyelidUpper - 100224: RightFoot - 100226: RightForeArm - 100228: RightHand - 100230: RightHandIndex1 - 100232: RightHandIndex2 - 100234: RightHandIndex3 - 100236: RightHandMiddle1 - 100238: RightHandMiddle2 - 100240: RightHandMiddle3 - 100242: RightHandPinky1 - 100244: RightHandPinky2 - 100246: RightHandPinky3 - 100248: RightHandRing1 - 100250: RightHandRing2 - 100252: RightHandRing3 - 100254: RightHandThumb1 - 100256: RightHandThumb2 - 100258: RightHandThumb3 - 100260: RightInnerBrow - 100262: RightIOuterBrow - 100264: RightLeg - 100266: RightLipCorner - 100268: RightLipLower - 100270: RightLipUpper - 100272: RightNostril - 100274: RightShoulder - 100276: RightToes - 100278: RightUpLeg - 100280: Spine - 100282: spineProxy_geo - 100284: TongueBack - 100286: TongueTip - 100288: UNI_01_Lower_teethProxy - 100290: UNI_01_TongueBaseProxy - 100292: UNI_01_TongueTipProxy - 100294: UNI_01_Upper_teethProxy - 400000: Chest - 400002: chestProxy_geo - 400004: //RootNode - 400006: Head - 400008: headProxy_geo - 400010: HeadTop_End - 400012: Hips - 400014: Jaw - 400016: JawEND - 400018: jawProxy_geo - 400020: l_ankleProxy_geo - 400022: l_ballProxy_geo - 400024: l_clavicleProxy_geo - 400026: l_erbowProxy_geo - 400028: l_hipProxy_geo - 400030: l_indexProxy_01_geo - 400032: l_indexProxy_02_geo - 400034: l_indexProxy_03_geo - 400036: l_kneeProxy_geo - 400038: l_middleProxy_01_geo - 400040: l_middleProxy_02_geo - 400042: l_middleProxy_03_geo - 400044: l_pinkyProxy_01_geo - 400046: l_pinkyProxy_02_geo - 400048: l_pinkyProxy_03_geo - 400050: l_ringProxy_01_geo - 400052: l_ringProxy_02_geo - 400054: l_ringProxy_03_geo - 400056: l_shourderProxy_geo - 400058: l_thumbProxy_01_geo - 400060: l_thumbProxy_02_geo - 400062: l_thumbProxy_03_geo - 400064: l_UNI_eye - 400066: l_wristProxy_geo - 400068: LeftArm - 400070: LeftCheek - 400072: LeftEye - 400074: LeftEyelidLower - 400076: LeftEyelidUpper - 400078: LeftFoot - 400080: LeftForeArm - 400082: LeftHand - 400084: LeftHandIndex1 - 400086: LeftHandIndex13 - 400088: LeftHandIndex17 - 400090: LeftHandIndex2 - 400092: LeftHandIndex3 - 400094: LeftHandMiddle1 - 400096: LeftHandMiddle13 - 400098: LeftHandMiddle17 - 400100: LeftHandMiddle2 - 400102: LeftHandMiddle3 - 400104: LeftHandPinky1 - 400106: LeftHandPinky13 - 400108: LeftHandPinky17 - 400110: LeftHandPinky2 - 400112: LeftHandPinky3 - 400114: LeftHandRing1 - 400116: LeftHandRing13 - 400118: LeftHandRing17 - 400120: LeftHandRing2 - 400122: LeftHandRing3 - 400124: LeftHandThumb1 - 400126: LeftHandThumb13 - 400128: LeftHandThumb17 - 400130: LeftHandThumb2 - 400132: LeftHandThumb3 - 400134: LeftInnerBrow - 400136: LeftIOuterBrow - 400138: LeftLeg - 400140: LeftLipCorner - 400142: LeftLipLower - 400144: LeftLipUpper - 400146: LeftNostril - 400148: LeftShoulder - 400150: LeftToes - 400152: LeftUpLeg - 400154: LToeBase_End2 - 400156: LToeBase_End3 - 400158: Neck - 400160: neckProxy_geo - 400162: pelvisProxy_geo - 400164: r_ankleProxy_geo - 400166: r_ballProxy_geo - 400168: r_clavicleProxy_geo - 400170: r_erbowProxy_geo - 400172: r_hipProxy_geo - 400174: r_indexProxy_01_geo - 400176: r_indexProxy_02_geo - 400178: r_indexProxy_03_geo - 400180: r_kneeProxy_geo - 400182: r_middleProxy_01_geo - 400184: r_middleProxy_02_geo - 400186: r_middleProxy_03_geo - 400188: r_pinkyProxy_01_geo - 400190: r_pinkyProxy_02_geo - 400192: r_pinkyProxy_03_geo - 400194: r_ringProxy_01_geo - 400196: r_ringProxy_02_geo - 400198: r_ringProxy_03_geo - 400200: r_shourderProxy_geo - 400202: r_thumbProxy_01_geo - 400204: r_thumbProxy_02_geo - 400206: r_thumbProxy_03_geo - 400208: r_UNI_eye - 400210: r_wristProxy_geo - 400212: Reference - 400214: RightArm - 400216: RightCheek - 400218: RightEye - 400220: RightEyelidLower - 400222: RightEyelidUpper - 400224: RightFoot - 400226: RightForeArm - 400228: RightHand - 400230: RightHandIndex1 - 400232: RightHandIndex2 - 400234: RightHandIndex3 - 400236: RightHandMiddle1 - 400238: RightHandMiddle2 - 400240: RightHandMiddle3 - 400242: RightHandPinky1 - 400244: RightHandPinky2 - 400246: RightHandPinky3 - 400248: RightHandRing1 - 400250: RightHandRing2 - 400252: RightHandRing3 - 400254: RightHandThumb1 - 400256: RightHandThumb2 - 400258: RightHandThumb3 - 400260: RightInnerBrow - 400262: RightIOuterBrow - 400264: RightLeg - 400266: RightLipCorner - 400268: RightLipLower - 400270: RightLipUpper - 400272: RightNostril - 400274: RightShoulder - 400276: RightToes - 400278: RightUpLeg - 400280: Spine - 400282: spineProxy_geo - 400284: TongueBack - 400286: TongueTip - 400288: UNI_01_Lower_teethProxy - 400290: UNI_01_TongueBaseProxy - 400292: UNI_01_TongueTipProxy - 400294: UNI_01_Upper_teethProxy - 2300000: chestProxy_geo - 2300002: headProxy_geo - 2300004: jawProxy_geo - 2300006: l_ankleProxy_geo - 2300008: l_ballProxy_geo - 2300010: l_clavicleProxy_geo - 2300012: l_erbowProxy_geo - 2300014: l_hipProxy_geo - 2300016: l_indexProxy_01_geo - 2300018: l_indexProxy_02_geo - 2300020: l_indexProxy_03_geo - 2300022: l_kneeProxy_geo - 2300024: l_middleProxy_01_geo - 2300026: l_middleProxy_02_geo - 2300028: l_middleProxy_03_geo - 2300030: l_pinkyProxy_01_geo - 2300032: l_pinkyProxy_02_geo - 2300034: l_pinkyProxy_03_geo - 2300036: l_ringProxy_01_geo - 2300038: l_ringProxy_02_geo - 2300040: l_ringProxy_03_geo - 2300042: l_shourderProxy_geo - 2300044: l_thumbProxy_01_geo - 2300046: l_thumbProxy_02_geo - 2300048: l_thumbProxy_03_geo - 2300050: l_UNI_eye - 2300052: l_wristProxy_geo - 2300054: neckProxy_geo - 2300056: pelvisProxy_geo - 2300058: r_ankleProxy_geo - 2300060: r_ballProxy_geo - 2300062: r_clavicleProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_hipProxy_geo - 2300068: r_indexProxy_01_geo - 2300070: r_indexProxy_02_geo - 2300072: r_indexProxy_03_geo - 2300074: r_kneeProxy_geo - 2300076: r_middleProxy_01_geo - 2300078: r_middleProxy_02_geo - 2300080: r_middleProxy_03_geo - 2300082: r_pinkyProxy_01_geo - 2300084: r_pinkyProxy_02_geo - 2300086: r_pinkyProxy_03_geo - 2300088: r_ringProxy_01_geo - 2300090: r_ringProxy_02_geo - 2300092: r_ringProxy_03_geo - 2300094: r_shourderProxy_geo - 2300096: r_thumbProxy_01_geo - 2300098: r_thumbProxy_02_geo - 2300100: r_thumbProxy_03_geo - 2300102: r_UNI_eye - 2300104: r_wristProxy_geo - 2300106: spineProxy_geo - 2300108: UNI_01_Lower_teethProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: UNI_01_TongueTipProxy - 2300114: UNI_01_Upper_teethProxy - 3300000: chestProxy_geo - 3300002: headProxy_geo - 3300004: jawProxy_geo - 3300006: l_ankleProxy_geo - 3300008: l_ballProxy_geo - 3300010: l_clavicleProxy_geo - 3300012: l_erbowProxy_geo - 3300014: l_hipProxy_geo - 3300016: l_indexProxy_01_geo - 3300018: l_indexProxy_02_geo - 3300020: l_indexProxy_03_geo - 3300022: l_kneeProxy_geo - 3300024: l_middleProxy_01_geo - 3300026: l_middleProxy_02_geo - 3300028: l_middleProxy_03_geo - 3300030: l_pinkyProxy_01_geo - 3300032: l_pinkyProxy_02_geo - 3300034: l_pinkyProxy_03_geo - 3300036: l_ringProxy_01_geo - 3300038: l_ringProxy_02_geo - 3300040: l_ringProxy_03_geo - 3300042: l_shourderProxy_geo - 3300044: l_thumbProxy_01_geo - 3300046: l_thumbProxy_02_geo - 3300048: l_thumbProxy_03_geo - 3300050: l_UNI_eye - 3300052: l_wristProxy_geo - 3300054: neckProxy_geo - 3300056: pelvisProxy_geo - 3300058: r_ankleProxy_geo - 3300060: r_ballProxy_geo - 3300062: r_clavicleProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_hipProxy_geo - 3300068: r_indexProxy_01_geo - 3300070: r_indexProxy_02_geo - 3300072: r_indexProxy_03_geo - 3300074: r_kneeProxy_geo - 3300076: r_middleProxy_01_geo - 3300078: r_middleProxy_02_geo - 3300080: r_middleProxy_03_geo - 3300082: r_pinkyProxy_01_geo - 3300084: r_pinkyProxy_02_geo - 3300086: r_pinkyProxy_03_geo - 3300088: r_ringProxy_01_geo - 3300090: r_ringProxy_02_geo - 3300092: r_ringProxy_03_geo - 3300094: r_shourderProxy_geo - 3300096: r_thumbProxy_01_geo - 3300098: r_thumbProxy_02_geo - 3300100: r_thumbProxy_03_geo - 3300102: r_UNI_eye - 3300104: r_wristProxy_geo - 3300106: spineProxy_geo - 3300108: UNI_01_Lower_teethProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: UNI_01_TongueTipProxy - 3300114: UNI_01_Upper_teethProxy - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: HumanoidWalk - 9500000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Chest + - first: + 1: 100002 + second: chestProxy_geo + - first: + 1: 100004 + second: //RootNode + - first: + 1: 100006 + second: Head + - first: + 1: 100008 + second: headProxy_geo + - first: + 1: 100010 + second: HeadTop_End + - first: + 1: 100012 + second: Hips + - first: + 1: 100014 + second: Jaw + - first: + 1: 100016 + second: JawEND + - first: + 1: 100018 + second: jawProxy_geo + - first: + 1: 100020 + second: l_ankleProxy_geo + - first: + 1: 100022 + second: l_ballProxy_geo + - first: + 1: 100024 + second: l_clavicleProxy_geo + - first: + 1: 100026 + second: l_erbowProxy_geo + - first: + 1: 100028 + second: l_hipProxy_geo + - first: + 1: 100030 + second: l_indexProxy_01_geo + - first: + 1: 100032 + second: l_indexProxy_02_geo + - first: + 1: 100034 + second: l_indexProxy_03_geo + - first: + 1: 100036 + second: l_kneeProxy_geo + - first: + 1: 100038 + second: l_middleProxy_01_geo + - first: + 1: 100040 + second: l_middleProxy_02_geo + - first: + 1: 100042 + second: l_middleProxy_03_geo + - first: + 1: 100044 + second: l_pinkyProxy_01_geo + - first: + 1: 100046 + second: l_pinkyProxy_02_geo + - first: + 1: 100048 + second: l_pinkyProxy_03_geo + - first: + 1: 100050 + second: l_ringProxy_01_geo + - first: + 1: 100052 + second: l_ringProxy_02_geo + - first: + 1: 100054 + second: l_ringProxy_03_geo + - first: + 1: 100056 + second: l_shourderProxy_geo + - first: + 1: 100058 + second: l_thumbProxy_01_geo + - first: + 1: 100060 + second: l_thumbProxy_02_geo + - first: + 1: 100062 + second: l_thumbProxy_03_geo + - first: + 1: 100064 + second: l_UNI_eye + - first: + 1: 100066 + second: l_wristProxy_geo + - first: + 1: 100068 + second: LeftArm + - first: + 1: 100070 + second: LeftCheek + - first: + 1: 100072 + second: LeftEye + - first: + 1: 100074 + second: LeftEyelidLower + - first: + 1: 100076 + second: LeftEyelidUpper + - first: + 1: 100078 + second: LeftFoot + - first: + 1: 100080 + second: LeftForeArm + - first: + 1: 100082 + second: LeftHand + - first: + 1: 100084 + second: LeftHandIndex1 + - first: + 1: 100086 + second: LeftHandIndex13 + - first: + 1: 100088 + second: LeftHandIndex17 + - first: + 1: 100090 + second: LeftHandIndex2 + - first: + 1: 100092 + second: LeftHandIndex3 + - first: + 1: 100094 + second: LeftHandMiddle1 + - first: + 1: 100096 + second: LeftHandMiddle13 + - first: + 1: 100098 + second: LeftHandMiddle17 + - first: + 1: 100100 + second: LeftHandMiddle2 + - first: + 1: 100102 + second: LeftHandMiddle3 + - first: + 1: 100104 + second: LeftHandPinky1 + - first: + 1: 100106 + second: LeftHandPinky13 + - first: + 1: 100108 + second: LeftHandPinky17 + - first: + 1: 100110 + second: LeftHandPinky2 + - first: + 1: 100112 + second: LeftHandPinky3 + - first: + 1: 100114 + second: LeftHandRing1 + - first: + 1: 100116 + second: LeftHandRing13 + - first: + 1: 100118 + second: LeftHandRing17 + - first: + 1: 100120 + second: LeftHandRing2 + - first: + 1: 100122 + second: LeftHandRing3 + - first: + 1: 100124 + second: LeftHandThumb1 + - first: + 1: 100126 + second: LeftHandThumb13 + - first: + 1: 100128 + second: LeftHandThumb17 + - first: + 1: 100130 + second: LeftHandThumb2 + - first: + 1: 100132 + second: LeftHandThumb3 + - first: + 1: 100134 + second: LeftInnerBrow + - first: + 1: 100136 + second: LeftIOuterBrow + - first: + 1: 100138 + second: LeftLeg + - first: + 1: 100140 + second: LeftLipCorner + - first: + 1: 100142 + second: LeftLipLower + - first: + 1: 100144 + second: LeftLipUpper + - first: + 1: 100146 + second: LeftNostril + - first: + 1: 100148 + second: LeftShoulder + - first: + 1: 100150 + second: LeftToes + - first: + 1: 100152 + second: LeftUpLeg + - first: + 1: 100154 + second: LToeBase_End2 + - first: + 1: 100156 + second: LToeBase_End3 + - first: + 1: 100158 + second: Neck + - first: + 1: 100160 + second: neckProxy_geo + - first: + 1: 100162 + second: pelvisProxy_geo + - first: + 1: 100164 + second: r_ankleProxy_geo + - first: + 1: 100166 + second: r_ballProxy_geo + - first: + 1: 100168 + second: r_clavicleProxy_geo + - first: + 1: 100170 + second: r_erbowProxy_geo + - first: + 1: 100172 + second: r_hipProxy_geo + - first: + 1: 100174 + second: r_indexProxy_01_geo + - first: + 1: 100176 + second: r_indexProxy_02_geo + - first: + 1: 100178 + second: r_indexProxy_03_geo + - first: + 1: 100180 + second: r_kneeProxy_geo + - first: + 1: 100182 + second: r_middleProxy_01_geo + - first: + 1: 100184 + second: r_middleProxy_02_geo + - first: + 1: 100186 + second: r_middleProxy_03_geo + - first: + 1: 100188 + second: r_pinkyProxy_01_geo + - first: + 1: 100190 + second: r_pinkyProxy_02_geo + - first: + 1: 100192 + second: r_pinkyProxy_03_geo + - first: + 1: 100194 + second: r_ringProxy_01_geo + - first: + 1: 100196 + second: r_ringProxy_02_geo + - first: + 1: 100198 + second: r_ringProxy_03_geo + - first: + 1: 100200 + second: r_shourderProxy_geo + - first: + 1: 100202 + second: r_thumbProxy_01_geo + - first: + 1: 100204 + second: r_thumbProxy_02_geo + - first: + 1: 100206 + second: r_thumbProxy_03_geo + - first: + 1: 100208 + second: r_UNI_eye + - first: + 1: 100210 + second: r_wristProxy_geo + - first: + 1: 100212 + second: Reference + - first: + 1: 100214 + second: RightArm + - first: + 1: 100216 + second: RightCheek + - first: + 1: 100218 + second: RightEye + - first: + 1: 100220 + second: RightEyelidLower + - first: + 1: 100222 + second: RightEyelidUpper + - first: + 1: 100224 + second: RightFoot + - first: + 1: 100226 + second: RightForeArm + - first: + 1: 100228 + second: RightHand + - first: + 1: 100230 + second: RightHandIndex1 + - first: + 1: 100232 + second: RightHandIndex2 + - first: + 1: 100234 + second: RightHandIndex3 + - first: + 1: 100236 + second: RightHandMiddle1 + - first: + 1: 100238 + second: RightHandMiddle2 + - first: + 1: 100240 + second: RightHandMiddle3 + - first: + 1: 100242 + second: RightHandPinky1 + - first: + 1: 100244 + second: RightHandPinky2 + - first: + 1: 100246 + second: RightHandPinky3 + - first: + 1: 100248 + second: RightHandRing1 + - first: + 1: 100250 + second: RightHandRing2 + - first: + 1: 100252 + second: RightHandRing3 + - first: + 1: 100254 + second: RightHandThumb1 + - first: + 1: 100256 + second: RightHandThumb2 + - first: + 1: 100258 + second: RightHandThumb3 + - first: + 1: 100260 + second: RightInnerBrow + - first: + 1: 100262 + second: RightIOuterBrow + - first: + 1: 100264 + second: RightLeg + - first: + 1: 100266 + second: RightLipCorner + - first: + 1: 100268 + second: RightLipLower + - first: + 1: 100270 + second: RightLipUpper + - first: + 1: 100272 + second: RightNostril + - first: + 1: 100274 + second: RightShoulder + - first: + 1: 100276 + second: RightToes + - first: + 1: 100278 + second: RightUpLeg + - first: + 1: 100280 + second: Spine + - first: + 1: 100282 + second: spineProxy_geo + - first: + 1: 100284 + second: TongueBack + - first: + 1: 100286 + second: TongueTip + - first: + 1: 100288 + second: UNI_01_Lower_teethProxy + - first: + 1: 100290 + second: UNI_01_TongueBaseProxy + - first: + 1: 100292 + second: UNI_01_TongueTipProxy + - first: + 1: 100294 + second: UNI_01_Upper_teethProxy + - first: + 4: 400000 + second: Chest + - first: + 4: 400002 + second: chestProxy_geo + - first: + 4: 400004 + second: //RootNode + - first: + 4: 400006 + second: Head + - first: + 4: 400008 + second: headProxy_geo + - first: + 4: 400010 + second: HeadTop_End + - first: + 4: 400012 + second: Hips + - first: + 4: 400014 + second: Jaw + - first: + 4: 400016 + second: JawEND + - first: + 4: 400018 + second: jawProxy_geo + - first: + 4: 400020 + second: l_ankleProxy_geo + - first: + 4: 400022 + second: l_ballProxy_geo + - first: + 4: 400024 + second: l_clavicleProxy_geo + - first: + 4: 400026 + second: l_erbowProxy_geo + - first: + 4: 400028 + second: l_hipProxy_geo + - first: + 4: 400030 + second: l_indexProxy_01_geo + - first: + 4: 400032 + second: l_indexProxy_02_geo + - first: + 4: 400034 + second: l_indexProxy_03_geo + - first: + 4: 400036 + second: l_kneeProxy_geo + - first: + 4: 400038 + second: l_middleProxy_01_geo + - first: + 4: 400040 + second: l_middleProxy_02_geo + - first: + 4: 400042 + second: l_middleProxy_03_geo + - first: + 4: 400044 + second: l_pinkyProxy_01_geo + - first: + 4: 400046 + second: l_pinkyProxy_02_geo + - first: + 4: 400048 + second: l_pinkyProxy_03_geo + - first: + 4: 400050 + second: l_ringProxy_01_geo + - first: + 4: 400052 + second: l_ringProxy_02_geo + - first: + 4: 400054 + second: l_ringProxy_03_geo + - first: + 4: 400056 + second: l_shourderProxy_geo + - first: + 4: 400058 + second: l_thumbProxy_01_geo + - first: + 4: 400060 + second: l_thumbProxy_02_geo + - first: + 4: 400062 + second: l_thumbProxy_03_geo + - first: + 4: 400064 + second: l_UNI_eye + - first: + 4: 400066 + second: l_wristProxy_geo + - first: + 4: 400068 + second: LeftArm + - first: + 4: 400070 + second: LeftCheek + - first: + 4: 400072 + second: LeftEye + - first: + 4: 400074 + second: LeftEyelidLower + - first: + 4: 400076 + second: LeftEyelidUpper + - first: + 4: 400078 + second: LeftFoot + - first: + 4: 400080 + second: LeftForeArm + - first: + 4: 400082 + second: LeftHand + - first: + 4: 400084 + second: LeftHandIndex1 + - first: + 4: 400086 + second: LeftHandIndex13 + - first: + 4: 400088 + second: LeftHandIndex17 + - first: + 4: 400090 + second: LeftHandIndex2 + - first: + 4: 400092 + second: LeftHandIndex3 + - first: + 4: 400094 + second: LeftHandMiddle1 + - first: + 4: 400096 + second: LeftHandMiddle13 + - first: + 4: 400098 + second: LeftHandMiddle17 + - first: + 4: 400100 + second: LeftHandMiddle2 + - first: + 4: 400102 + second: LeftHandMiddle3 + - first: + 4: 400104 + second: LeftHandPinky1 + - first: + 4: 400106 + second: LeftHandPinky13 + - first: + 4: 400108 + second: LeftHandPinky17 + - first: + 4: 400110 + second: LeftHandPinky2 + - first: + 4: 400112 + second: LeftHandPinky3 + - first: + 4: 400114 + second: LeftHandRing1 + - first: + 4: 400116 + second: LeftHandRing13 + - first: + 4: 400118 + second: LeftHandRing17 + - first: + 4: 400120 + second: LeftHandRing2 + - first: + 4: 400122 + second: LeftHandRing3 + - first: + 4: 400124 + second: LeftHandThumb1 + - first: + 4: 400126 + second: LeftHandThumb13 + - first: + 4: 400128 + second: LeftHandThumb17 + - first: + 4: 400130 + second: LeftHandThumb2 + - first: + 4: 400132 + second: LeftHandThumb3 + - first: + 4: 400134 + second: LeftInnerBrow + - first: + 4: 400136 + second: LeftIOuterBrow + - first: + 4: 400138 + second: LeftLeg + - first: + 4: 400140 + second: LeftLipCorner + - first: + 4: 400142 + second: LeftLipLower + - first: + 4: 400144 + second: LeftLipUpper + - first: + 4: 400146 + second: LeftNostril + - first: + 4: 400148 + second: LeftShoulder + - first: + 4: 400150 + second: LeftToes + - first: + 4: 400152 + second: LeftUpLeg + - first: + 4: 400154 + second: LToeBase_End2 + - first: + 4: 400156 + second: LToeBase_End3 + - first: + 4: 400158 + second: Neck + - first: + 4: 400160 + second: neckProxy_geo + - first: + 4: 400162 + second: pelvisProxy_geo + - first: + 4: 400164 + second: r_ankleProxy_geo + - first: + 4: 400166 + second: r_ballProxy_geo + - first: + 4: 400168 + second: r_clavicleProxy_geo + - first: + 4: 400170 + second: r_erbowProxy_geo + - first: + 4: 400172 + second: r_hipProxy_geo + - first: + 4: 400174 + second: r_indexProxy_01_geo + - first: + 4: 400176 + second: r_indexProxy_02_geo + - first: + 4: 400178 + second: r_indexProxy_03_geo + - first: + 4: 400180 + second: r_kneeProxy_geo + - first: + 4: 400182 + second: r_middleProxy_01_geo + - first: + 4: 400184 + second: r_middleProxy_02_geo + - first: + 4: 400186 + second: r_middleProxy_03_geo + - first: + 4: 400188 + second: r_pinkyProxy_01_geo + - first: + 4: 400190 + second: r_pinkyProxy_02_geo + - first: + 4: 400192 + second: r_pinkyProxy_03_geo + - first: + 4: 400194 + second: r_ringProxy_01_geo + - first: + 4: 400196 + second: r_ringProxy_02_geo + - first: + 4: 400198 + second: r_ringProxy_03_geo + - first: + 4: 400200 + second: r_shourderProxy_geo + - first: + 4: 400202 + second: r_thumbProxy_01_geo + - first: + 4: 400204 + second: r_thumbProxy_02_geo + - first: + 4: 400206 + second: r_thumbProxy_03_geo + - first: + 4: 400208 + second: r_UNI_eye + - first: + 4: 400210 + second: r_wristProxy_geo + - first: + 4: 400212 + second: Reference + - first: + 4: 400214 + second: RightArm + - first: + 4: 400216 + second: RightCheek + - first: + 4: 400218 + second: RightEye + - first: + 4: 400220 + second: RightEyelidLower + - first: + 4: 400222 + second: RightEyelidUpper + - first: + 4: 400224 + second: RightFoot + - first: + 4: 400226 + second: RightForeArm + - first: + 4: 400228 + second: RightHand + - first: + 4: 400230 + second: RightHandIndex1 + - first: + 4: 400232 + second: RightHandIndex2 + - first: + 4: 400234 + second: RightHandIndex3 + - first: + 4: 400236 + second: RightHandMiddle1 + - first: + 4: 400238 + second: RightHandMiddle2 + - first: + 4: 400240 + second: RightHandMiddle3 + - first: + 4: 400242 + second: RightHandPinky1 + - first: + 4: 400244 + second: RightHandPinky2 + - first: + 4: 400246 + second: RightHandPinky3 + - first: + 4: 400248 + second: RightHandRing1 + - first: + 4: 400250 + second: RightHandRing2 + - first: + 4: 400252 + second: RightHandRing3 + - first: + 4: 400254 + second: RightHandThumb1 + - first: + 4: 400256 + second: RightHandThumb2 + - first: + 4: 400258 + second: RightHandThumb3 + - first: + 4: 400260 + second: RightInnerBrow + - first: + 4: 400262 + second: RightIOuterBrow + - first: + 4: 400264 + second: RightLeg + - first: + 4: 400266 + second: RightLipCorner + - first: + 4: 400268 + second: RightLipLower + - first: + 4: 400270 + second: RightLipUpper + - first: + 4: 400272 + second: RightNostril + - first: + 4: 400274 + second: RightShoulder + - first: + 4: 400276 + second: RightToes + - first: + 4: 400278 + second: RightUpLeg + - first: + 4: 400280 + second: Spine + - first: + 4: 400282 + second: spineProxy_geo + - first: + 4: 400284 + second: TongueBack + - first: + 4: 400286 + second: TongueTip + - first: + 4: 400288 + second: UNI_01_Lower_teethProxy + - first: + 4: 400290 + second: UNI_01_TongueBaseProxy + - first: + 4: 400292 + second: UNI_01_TongueTipProxy + - first: + 4: 400294 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300000 + second: chestProxy_geo + - first: + 23: 2300002 + second: headProxy_geo + - first: + 23: 2300004 + second: jawProxy_geo + - first: + 23: 2300006 + second: l_ankleProxy_geo + - first: + 23: 2300008 + second: l_ballProxy_geo + - first: + 23: 2300010 + second: l_clavicleProxy_geo + - first: + 23: 2300012 + second: l_erbowProxy_geo + - first: + 23: 2300014 + second: l_hipProxy_geo + - first: + 23: 2300016 + second: l_indexProxy_01_geo + - first: + 23: 2300018 + second: l_indexProxy_02_geo + - first: + 23: 2300020 + second: l_indexProxy_03_geo + - first: + 23: 2300022 + second: l_kneeProxy_geo + - first: + 23: 2300024 + second: l_middleProxy_01_geo + - first: + 23: 2300026 + second: l_middleProxy_02_geo + - first: + 23: 2300028 + second: l_middleProxy_03_geo + - first: + 23: 2300030 + second: l_pinkyProxy_01_geo + - first: + 23: 2300032 + second: l_pinkyProxy_02_geo + - first: + 23: 2300034 + second: l_pinkyProxy_03_geo + - first: + 23: 2300036 + second: l_ringProxy_01_geo + - first: + 23: 2300038 + second: l_ringProxy_02_geo + - first: + 23: 2300040 + second: l_ringProxy_03_geo + - first: + 23: 2300042 + second: l_shourderProxy_geo + - first: + 23: 2300044 + second: l_thumbProxy_01_geo + - first: + 23: 2300046 + second: l_thumbProxy_02_geo + - first: + 23: 2300048 + second: l_thumbProxy_03_geo + - first: + 23: 2300050 + second: l_UNI_eye + - first: + 23: 2300052 + second: l_wristProxy_geo + - first: + 23: 2300054 + second: neckProxy_geo + - first: + 23: 2300056 + second: pelvisProxy_geo + - first: + 23: 2300058 + second: r_ankleProxy_geo + - first: + 23: 2300060 + second: r_ballProxy_geo + - first: + 23: 2300062 + second: r_clavicleProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_hipProxy_geo + - first: + 23: 2300068 + second: r_indexProxy_01_geo + - first: + 23: 2300070 + second: r_indexProxy_02_geo + - first: + 23: 2300072 + second: r_indexProxy_03_geo + - first: + 23: 2300074 + second: r_kneeProxy_geo + - first: + 23: 2300076 + second: r_middleProxy_01_geo + - first: + 23: 2300078 + second: r_middleProxy_02_geo + - first: + 23: 2300080 + second: r_middleProxy_03_geo + - first: + 23: 2300082 + second: r_pinkyProxy_01_geo + - first: + 23: 2300084 + second: r_pinkyProxy_02_geo + - first: + 23: 2300086 + second: r_pinkyProxy_03_geo + - first: + 23: 2300088 + second: r_ringProxy_01_geo + - first: + 23: 2300090 + second: r_ringProxy_02_geo + - first: + 23: 2300092 + second: r_ringProxy_03_geo + - first: + 23: 2300094 + second: r_shourderProxy_geo + - first: + 23: 2300096 + second: r_thumbProxy_01_geo + - first: + 23: 2300098 + second: r_thumbProxy_02_geo + - first: + 23: 2300100 + second: r_thumbProxy_03_geo + - first: + 23: 2300102 + second: r_UNI_eye + - first: + 23: 2300104 + second: r_wristProxy_geo + - first: + 23: 2300106 + second: spineProxy_geo + - first: + 23: 2300108 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: UNI_01_TongueTipProxy + - first: + 23: 2300114 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300000 + second: chestProxy_geo + - first: + 33: 3300002 + second: headProxy_geo + - first: + 33: 3300004 + second: jawProxy_geo + - first: + 33: 3300006 + second: l_ankleProxy_geo + - first: + 33: 3300008 + second: l_ballProxy_geo + - first: + 33: 3300010 + second: l_clavicleProxy_geo + - first: + 33: 3300012 + second: l_erbowProxy_geo + - first: + 33: 3300014 + second: l_hipProxy_geo + - first: + 33: 3300016 + second: l_indexProxy_01_geo + - first: + 33: 3300018 + second: l_indexProxy_02_geo + - first: + 33: 3300020 + second: l_indexProxy_03_geo + - first: + 33: 3300022 + second: l_kneeProxy_geo + - first: + 33: 3300024 + second: l_middleProxy_01_geo + - first: + 33: 3300026 + second: l_middleProxy_02_geo + - first: + 33: 3300028 + second: l_middleProxy_03_geo + - first: + 33: 3300030 + second: l_pinkyProxy_01_geo + - first: + 33: 3300032 + second: l_pinkyProxy_02_geo + - first: + 33: 3300034 + second: l_pinkyProxy_03_geo + - first: + 33: 3300036 + second: l_ringProxy_01_geo + - first: + 33: 3300038 + second: l_ringProxy_02_geo + - first: + 33: 3300040 + second: l_ringProxy_03_geo + - first: + 33: 3300042 + second: l_shourderProxy_geo + - first: + 33: 3300044 + second: l_thumbProxy_01_geo + - first: + 33: 3300046 + second: l_thumbProxy_02_geo + - first: + 33: 3300048 + second: l_thumbProxy_03_geo + - first: + 33: 3300050 + second: l_UNI_eye + - first: + 33: 3300052 + second: l_wristProxy_geo + - first: + 33: 3300054 + second: neckProxy_geo + - first: + 33: 3300056 + second: pelvisProxy_geo + - first: + 33: 3300058 + second: r_ankleProxy_geo + - first: + 33: 3300060 + second: r_ballProxy_geo + - first: + 33: 3300062 + second: r_clavicleProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_hipProxy_geo + - first: + 33: 3300068 + second: r_indexProxy_01_geo + - first: + 33: 3300070 + second: r_indexProxy_02_geo + - first: + 33: 3300072 + second: r_indexProxy_03_geo + - first: + 33: 3300074 + second: r_kneeProxy_geo + - first: + 33: 3300076 + second: r_middleProxy_01_geo + - first: + 33: 3300078 + second: r_middleProxy_02_geo + - first: + 33: 3300080 + second: r_middleProxy_03_geo + - first: + 33: 3300082 + second: r_pinkyProxy_01_geo + - first: + 33: 3300084 + second: r_pinkyProxy_02_geo + - first: + 33: 3300086 + second: r_pinkyProxy_03_geo + - first: + 33: 3300088 + second: r_ringProxy_01_geo + - first: + 33: 3300090 + second: r_ringProxy_02_geo + - first: + 33: 3300092 + second: r_ringProxy_03_geo + - first: + 33: 3300094 + second: r_shourderProxy_geo + - first: + 33: 3300096 + second: r_thumbProxy_01_geo + - first: + 33: 3300098 + second: r_thumbProxy_02_geo + - first: + 33: 3300100 + second: r_thumbProxy_03_geo + - first: + 33: 3300102 + second: r_UNI_eye + - first: + 33: 3300104 + second: r_wristProxy_geo + - first: + 33: 3300106 + second: spineProxy_geo + - first: + 33: 3300108 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: UNI_01_TongueTipProxy + - first: + 33: 3300114 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: HumanoidWalk + - first: + 95: 9500000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 - resampleRotations: 1 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: + rigImportErrors: + rigImportWarnings: animationImportErrors: animationImportWarnings: animationRetargetingWarnings: animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 0 animationRotationError: 0.5 animationPositionError: 0.5 animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidWalk takeName: _1_a_U1_M_P_WalkForward_NtrlFaceFwd__Fb_p0_No_0_PJ_3 + internalID: 0 firstFrame: 215.2 lastFrame: 244.9 wrapMode: 0 - orientationOffsetY: 2.88 + orientationOffsetY: 3.3 level: 0 cycleOffset: -0 loop: 0 hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 - loopBlendOrientation: 1 + loopBlendOrientation: 0 loopBlendPositionY: 1 loopBlendPositionXZ: 0 keepOriginalOrientation: 0 @@ -530,13 +1486,24 @@ ModelImporter: globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -546,9 +1513,14 @@ ModelImporter: normalSmoothAngle: 60 normalImportMode: 0 tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -984,385 +1956,385 @@ ModelImporter: modified: 0 skeleton: - name: HumanoidWalk(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips + parentName: position: {x: -0.000000016763806, y: 0.9555335, z: 0.07758622} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg + parentName: position: {x: -0.0754495, y: -0.04566402, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg + parentName: position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot + parentName: position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes + parentName: position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg + parentName: position: {x: 0.075449534, y: -0.04566399, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg + parentName: position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot + parentName: position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes + parentName: position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine + parentName: position: {x: 2.646978e-25, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest + parentName: position: {x: -0, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder + parentName: position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} rotation: {x: -0.030223321, y: -0.07990193, z: 0.14446756, w: 0.9858151} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm + parentName: position: {x: -0.10050205, y: 5.684342e-16, z: -3.330669e-18} rotation: {x: 0.008133877, y: 0.0757869, z: -0.1321358, w: 0.98829675} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm + parentName: position: {x: -0.2540493, y: 5.684342e-16, z: 1.11022296e-17} rotation: {x: 0.2781269, y: 0.03635174, z: -0.015607543, w: 0.9597293} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand + parentName: position: {x: -0.24638927, y: 0, z: -1.9984014e-16} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 + parentName: position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} rotation: {x: 0.06495643, y: 0.05091051, z: 0.058088716, w: 0.9948942} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 + parentName: position: {x: -0.03979728, y: 0.000049808405, z: 0.0011857504} rotation: {x: -0.06737132, y: 0.015346782, z: 0.033307686, w: 0.9970538} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 + parentName: position: {x: -0.027968477, y: -0.000000006281225, z: -0.00000005171866} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 + parentName: position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} rotation: {x: -0.09939486, y: 0.04107085, z: 0.09351314, w: 0.9897925} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 + parentName: position: {x: -0.044280436, y: 0.000004798874, z: -0.00042540013} rotation: {x: -0.012435689, y: -0.0076595433, z: 0.031807605, w: 0.9993873} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 + parentName: position: {x: -0.033964828, y: -0.000000012197929, z: 0.0000000037564827} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 + parentName: position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} rotation: {x: -0.28387696, y: 0.036568172, z: 0.087664604, w: 0.95414436} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 + parentName: position: {x: -0.030805448, y: -0.000030874573, z: -0.0014480775} rotation: {x: 0.047048137, y: -0.021200087, z: 0.037495792, w: 0.9979635} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 + parentName: position: {x: -0.023064027, y: -0.0000064025808, z: 0.000000018332095} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 + parentName: position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} rotation: {x: -0.10562233, y: 0.056129266, z: 0.08703209, w: 0.988999} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 + parentName: position: {x: -0.043135457, y: -0.000020882308, z: -0.0022351784} rotation: {x: 0.018426064, y: -0.02561071, z: 0.033295766, w: 0.99894744} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 + parentName: position: {x: -0.030835565, y: 7.7103546e-11, z: -0.00000001649327} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 + parentName: position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} rotation: {x: -0.14225604, y: -0.055378057, z: -0.12830889, w: 0.979915} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 + parentName: position: {x: -0.016374, y: -0.00529, z: 0.023491409} rotation: {x: -0.02606398, y: 0.096689634, z: 0.003605904, w: 0.9949668} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 + parentName: position: {x: -0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck + parentName: position: {x: -0, y: 0.2590093, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head + parentName: position: {x: -2.646978e-25, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw + parentName: position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND + parentName: position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner + parentName: position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower + parentName: position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner + parentName: position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower + parentName: position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack + parentName: position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip + parentName: position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek + parentName: position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye + parentName: position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower + parentName: position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper + parentName: position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow + parentName: position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow + parentName: position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper + parentName: position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril + parentName: position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek + parentName: position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye + parentName: position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower + parentName: position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper + parentName: position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow + parentName: position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow + parentName: position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper + parentName: position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril + parentName: position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder + parentName: position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} rotation: {x: 0.15105928, y: 0.98671633, z: -0.021163033, w: -0.055894263} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm + parentName: position: {x: -0.100501455, y: -0.0000024995522, z: -0.000000051557407} rotation: {x: 0.12567478, y: 0.98442847, z: 0.062543266, w: 0.105805375} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm + parentName: position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} rotation: {x: 0.26110226, y: 0.01888748, z: -0.030674139, w: 0.96463877} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand + parentName: position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 + parentName: position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} rotation: {x: 0.06961239, y: 0.11270627, z: -0.010377135, w: 0.99113256} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 + parentName: position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} rotation: {x: -0.068798974, y: 0.021605203, z: 0.042188462, w: 0.99650395} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 + parentName: position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 + parentName: position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} rotation: {x: -0.092045546, y: 0.020684198, z: -0.060492296, w: 0.9937004} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 + parentName: position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} rotation: {x: -0.016959926, y: -0.04367115, z: 0.0809238, w: 0.99561864} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 + parentName: position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 + parentName: position: {x: 0.06680334, y: -0.0019941088, z: -0.030756146} rotation: {x: -0.28647894, y: -0.21416986, z: 0.021083327, w: 0.9336042} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 + parentName: position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} rotation: {x: 0.029356524, y: 0.0005622971, z: -0.062125385, w: 0.99763644} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 + parentName: position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 + parentName: position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} rotation: {x: -0.10453735, y: -0.1014307, z: -0.025803583, w: 0.9889985} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 + parentName: position: {x: 0.042887185, y: -0.0013753821, z: -0.004945858} rotation: {x: 0.020977763, y: -0.021642664, z: 0.07535203, w: 0.9967014} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 + parentName: position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 + parentName: position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} rotation: {x: -0.09941147, y: 0.023245553, z: 0.13084193, w: 0.98613256} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 + parentName: position: {x: 0.016374, y: -0.00529, z: 0.02349136} rotation: {x: -0.02606267, y: -0.09668537, z: -0.0036059343, w: 0.9949672} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 + parentName: position: {x: 0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 armTwist: 0.5 foreArmTwist: 0.5 upperLegTwist: 0.5 @@ -1370,12 +2342,16 @@ ModelImporter: armStretch: 0.05 legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: hasTranslationDoF: 0 - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e8914d097ece7cc48a83d5fccd4098c0, - type: 3} + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta index f90ca1540..e961c46db 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta @@ -1,508 +1,1471 @@ fileFormatVersion: 2 guid: 1c52c953c83c2254a9fa72d50250f028 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: Chest - 100002: chestProxy_geo - 100004: //RootNode - 100006: Head - 100008: headProxy_geo - 100010: HeadTop_End - 100012: Hips - 100014: Jaw - 100016: JawEND - 100018: jawProxy_geo - 100020: l_ankleProxy_geo - 100022: l_ballProxy_geo - 100024: l_clavicleProxy_geo - 100026: l_erbowProxy_geo - 100028: l_hipProxy_geo - 100030: l_indexProxy_01_geo - 100032: l_indexProxy_02_geo - 100034: l_indexProxy_03_geo - 100036: l_kneeProxy_geo - 100038: l_middleProxy_01_geo - 100040: l_middleProxy_02_geo - 100042: l_middleProxy_03_geo - 100044: l_pinkyProxy_01_geo - 100046: l_pinkyProxy_02_geo - 100048: l_pinkyProxy_03_geo - 100050: l_ringProxy_01_geo - 100052: l_ringProxy_02_geo - 100054: l_ringProxy_03_geo - 100056: l_shourderProxy_geo - 100058: l_thumbProxy_01_geo - 100060: l_thumbProxy_02_geo - 100062: l_thumbProxy_03_geo - 100064: l_UNI_eye - 100066: l_wristProxy_geo - 100068: LeftArm - 100070: LeftCheek - 100072: LeftEye - 100074: LeftEyelidLower - 100076: LeftEyelidUpper - 100078: LeftFoot - 100080: LeftForeArm - 100082: LeftHand - 100084: LeftHandIndex1 - 100086: LeftHandIndex13 - 100088: LeftHandIndex17 - 100090: LeftHandIndex2 - 100092: LeftHandIndex3 - 100094: LeftHandMiddle1 - 100096: LeftHandMiddle13 - 100098: LeftHandMiddle17 - 100100: LeftHandMiddle2 - 100102: LeftHandMiddle3 - 100104: LeftHandPinky1 - 100106: LeftHandPinky13 - 100108: LeftHandPinky17 - 100110: LeftHandPinky2 - 100112: LeftHandPinky3 - 100114: LeftHandRing1 - 100116: LeftHandRing13 - 100118: LeftHandRing17 - 100120: LeftHandRing2 - 100122: LeftHandRing3 - 100124: LeftHandThumb1 - 100126: LeftHandThumb13 - 100128: LeftHandThumb17 - 100130: LeftHandThumb2 - 100132: LeftHandThumb3 - 100134: LeftInnerBrow - 100136: LeftIOuterBrow - 100138: LeftLeg - 100140: LeftLipCorner - 100142: LeftLipLower - 100144: LeftLipUpper - 100146: LeftNostril - 100148: LeftShoulder - 100150: LeftToes - 100152: LeftUpLeg - 100154: LToeBase_End2 - 100156: LToeBase_End3 - 100158: Neck - 100160: neckProxy_geo - 100162: pelvisProxy_geo - 100164: r_ankleProxy_geo - 100166: r_ballProxy_geo - 100168: r_clavicleProxy_geo - 100170: r_erbowProxy_geo - 100172: r_hipProxy_geo - 100174: r_indexProxy_01_geo - 100176: r_indexProxy_02_geo - 100178: r_indexProxy_03_geo - 100180: r_kneeProxy_geo - 100182: r_middleProxy_01_geo - 100184: r_middleProxy_02_geo - 100186: r_middleProxy_03_geo - 100188: r_pinkyProxy_01_geo - 100190: r_pinkyProxy_02_geo - 100192: r_pinkyProxy_03_geo - 100194: r_ringProxy_01_geo - 100196: r_ringProxy_02_geo - 100198: r_ringProxy_03_geo - 100200: r_shourderProxy_geo - 100202: r_thumbProxy_01_geo - 100204: r_thumbProxy_02_geo - 100206: r_thumbProxy_03_geo - 100208: r_UNI_eye - 100210: r_wristProxy_geo - 100212: Reference - 100214: RightArm - 100216: RightCheek - 100218: RightEye - 100220: RightEyelidLower - 100222: RightEyelidUpper - 100224: RightFoot - 100226: RightForeArm - 100228: RightHand - 100230: RightHandIndex1 - 100232: RightHandIndex2 - 100234: RightHandIndex3 - 100236: RightHandMiddle1 - 100238: RightHandMiddle2 - 100240: RightHandMiddle3 - 100242: RightHandPinky1 - 100244: RightHandPinky2 - 100246: RightHandPinky3 - 100248: RightHandRing1 - 100250: RightHandRing2 - 100252: RightHandRing3 - 100254: RightHandThumb1 - 100256: RightHandThumb2 - 100258: RightHandThumb3 - 100260: RightInnerBrow - 100262: RightIOuterBrow - 100264: RightLeg - 100266: RightLipCorner - 100268: RightLipLower - 100270: RightLipUpper - 100272: RightNostril - 100274: RightShoulder - 100276: RightToes - 100278: RightUpLeg - 100280: Spine - 100282: spineProxy_geo - 100284: TongueBack - 100286: TongueTip - 100288: UNI_01_Lower_teethProxy - 100290: UNI_01_TongueBaseProxy - 100292: UNI_01_TongueTipProxy - 100294: UNI_01_Upper_teethProxy - 400000: Chest - 400002: chestProxy_geo - 400004: //RootNode - 400006: Head - 400008: headProxy_geo - 400010: HeadTop_End - 400012: Hips - 400014: Jaw - 400016: JawEND - 400018: jawProxy_geo - 400020: l_ankleProxy_geo - 400022: l_ballProxy_geo - 400024: l_clavicleProxy_geo - 400026: l_erbowProxy_geo - 400028: l_hipProxy_geo - 400030: l_indexProxy_01_geo - 400032: l_indexProxy_02_geo - 400034: l_indexProxy_03_geo - 400036: l_kneeProxy_geo - 400038: l_middleProxy_01_geo - 400040: l_middleProxy_02_geo - 400042: l_middleProxy_03_geo - 400044: l_pinkyProxy_01_geo - 400046: l_pinkyProxy_02_geo - 400048: l_pinkyProxy_03_geo - 400050: l_ringProxy_01_geo - 400052: l_ringProxy_02_geo - 400054: l_ringProxy_03_geo - 400056: l_shourderProxy_geo - 400058: l_thumbProxy_01_geo - 400060: l_thumbProxy_02_geo - 400062: l_thumbProxy_03_geo - 400064: l_UNI_eye - 400066: l_wristProxy_geo - 400068: LeftArm - 400070: LeftCheek - 400072: LeftEye - 400074: LeftEyelidLower - 400076: LeftEyelidUpper - 400078: LeftFoot - 400080: LeftForeArm - 400082: LeftHand - 400084: LeftHandIndex1 - 400086: LeftHandIndex13 - 400088: LeftHandIndex17 - 400090: LeftHandIndex2 - 400092: LeftHandIndex3 - 400094: LeftHandMiddle1 - 400096: LeftHandMiddle13 - 400098: LeftHandMiddle17 - 400100: LeftHandMiddle2 - 400102: LeftHandMiddle3 - 400104: LeftHandPinky1 - 400106: LeftHandPinky13 - 400108: LeftHandPinky17 - 400110: LeftHandPinky2 - 400112: LeftHandPinky3 - 400114: LeftHandRing1 - 400116: LeftHandRing13 - 400118: LeftHandRing17 - 400120: LeftHandRing2 - 400122: LeftHandRing3 - 400124: LeftHandThumb1 - 400126: LeftHandThumb13 - 400128: LeftHandThumb17 - 400130: LeftHandThumb2 - 400132: LeftHandThumb3 - 400134: LeftInnerBrow - 400136: LeftIOuterBrow - 400138: LeftLeg - 400140: LeftLipCorner - 400142: LeftLipLower - 400144: LeftLipUpper - 400146: LeftNostril - 400148: LeftShoulder - 400150: LeftToes - 400152: LeftUpLeg - 400154: LToeBase_End2 - 400156: LToeBase_End3 - 400158: Neck - 400160: neckProxy_geo - 400162: pelvisProxy_geo - 400164: r_ankleProxy_geo - 400166: r_ballProxy_geo - 400168: r_clavicleProxy_geo - 400170: r_erbowProxy_geo - 400172: r_hipProxy_geo - 400174: r_indexProxy_01_geo - 400176: r_indexProxy_02_geo - 400178: r_indexProxy_03_geo - 400180: r_kneeProxy_geo - 400182: r_middleProxy_01_geo - 400184: r_middleProxy_02_geo - 400186: r_middleProxy_03_geo - 400188: r_pinkyProxy_01_geo - 400190: r_pinkyProxy_02_geo - 400192: r_pinkyProxy_03_geo - 400194: r_ringProxy_01_geo - 400196: r_ringProxy_02_geo - 400198: r_ringProxy_03_geo - 400200: r_shourderProxy_geo - 400202: r_thumbProxy_01_geo - 400204: r_thumbProxy_02_geo - 400206: r_thumbProxy_03_geo - 400208: r_UNI_eye - 400210: r_wristProxy_geo - 400212: Reference - 400214: RightArm - 400216: RightCheek - 400218: RightEye - 400220: RightEyelidLower - 400222: RightEyelidUpper - 400224: RightFoot - 400226: RightForeArm - 400228: RightHand - 400230: RightHandIndex1 - 400232: RightHandIndex2 - 400234: RightHandIndex3 - 400236: RightHandMiddle1 - 400238: RightHandMiddle2 - 400240: RightHandMiddle3 - 400242: RightHandPinky1 - 400244: RightHandPinky2 - 400246: RightHandPinky3 - 400248: RightHandRing1 - 400250: RightHandRing2 - 400252: RightHandRing3 - 400254: RightHandThumb1 - 400256: RightHandThumb2 - 400258: RightHandThumb3 - 400260: RightInnerBrow - 400262: RightIOuterBrow - 400264: RightLeg - 400266: RightLipCorner - 400268: RightLipLower - 400270: RightLipUpper - 400272: RightNostril - 400274: RightShoulder - 400276: RightToes - 400278: RightUpLeg - 400280: Spine - 400282: spineProxy_geo - 400284: TongueBack - 400286: TongueTip - 400288: UNI_01_Lower_teethProxy - 400290: UNI_01_TongueBaseProxy - 400292: UNI_01_TongueTipProxy - 400294: UNI_01_Upper_teethProxy - 2300000: chestProxy_geo - 2300002: headProxy_geo - 2300004: jawProxy_geo - 2300006: l_ankleProxy_geo - 2300008: l_ballProxy_geo - 2300010: l_clavicleProxy_geo - 2300012: l_erbowProxy_geo - 2300014: l_hipProxy_geo - 2300016: l_indexProxy_01_geo - 2300018: l_indexProxy_02_geo - 2300020: l_indexProxy_03_geo - 2300022: l_kneeProxy_geo - 2300024: l_middleProxy_01_geo - 2300026: l_middleProxy_02_geo - 2300028: l_middleProxy_03_geo - 2300030: l_pinkyProxy_01_geo - 2300032: l_pinkyProxy_02_geo - 2300034: l_pinkyProxy_03_geo - 2300036: l_ringProxy_01_geo - 2300038: l_ringProxy_02_geo - 2300040: l_ringProxy_03_geo - 2300042: l_shourderProxy_geo - 2300044: l_thumbProxy_01_geo - 2300046: l_thumbProxy_02_geo - 2300048: l_thumbProxy_03_geo - 2300050: l_UNI_eye - 2300052: l_wristProxy_geo - 2300054: neckProxy_geo - 2300056: pelvisProxy_geo - 2300058: r_ankleProxy_geo - 2300060: r_ballProxy_geo - 2300062: r_clavicleProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_hipProxy_geo - 2300068: r_indexProxy_01_geo - 2300070: r_indexProxy_02_geo - 2300072: r_indexProxy_03_geo - 2300074: r_kneeProxy_geo - 2300076: r_middleProxy_01_geo - 2300078: r_middleProxy_02_geo - 2300080: r_middleProxy_03_geo - 2300082: r_pinkyProxy_01_geo - 2300084: r_pinkyProxy_02_geo - 2300086: r_pinkyProxy_03_geo - 2300088: r_ringProxy_01_geo - 2300090: r_ringProxy_02_geo - 2300092: r_ringProxy_03_geo - 2300094: r_shourderProxy_geo - 2300096: r_thumbProxy_01_geo - 2300098: r_thumbProxy_02_geo - 2300100: r_thumbProxy_03_geo - 2300102: r_UNI_eye - 2300104: r_wristProxy_geo - 2300106: spineProxy_geo - 2300108: UNI_01_Lower_teethProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: UNI_01_TongueTipProxy - 2300114: UNI_01_Upper_teethProxy - 3300000: chestProxy_geo - 3300002: headProxy_geo - 3300004: jawProxy_geo - 3300006: l_ankleProxy_geo - 3300008: l_ballProxy_geo - 3300010: l_clavicleProxy_geo - 3300012: l_erbowProxy_geo - 3300014: l_hipProxy_geo - 3300016: l_indexProxy_01_geo - 3300018: l_indexProxy_02_geo - 3300020: l_indexProxy_03_geo - 3300022: l_kneeProxy_geo - 3300024: l_middleProxy_01_geo - 3300026: l_middleProxy_02_geo - 3300028: l_middleProxy_03_geo - 3300030: l_pinkyProxy_01_geo - 3300032: l_pinkyProxy_02_geo - 3300034: l_pinkyProxy_03_geo - 3300036: l_ringProxy_01_geo - 3300038: l_ringProxy_02_geo - 3300040: l_ringProxy_03_geo - 3300042: l_shourderProxy_geo - 3300044: l_thumbProxy_01_geo - 3300046: l_thumbProxy_02_geo - 3300048: l_thumbProxy_03_geo - 3300050: l_UNI_eye - 3300052: l_wristProxy_geo - 3300054: neckProxy_geo - 3300056: pelvisProxy_geo - 3300058: r_ankleProxy_geo - 3300060: r_ballProxy_geo - 3300062: r_clavicleProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_hipProxy_geo - 3300068: r_indexProxy_01_geo - 3300070: r_indexProxy_02_geo - 3300072: r_indexProxy_03_geo - 3300074: r_kneeProxy_geo - 3300076: r_middleProxy_01_geo - 3300078: r_middleProxy_02_geo - 3300080: r_middleProxy_03_geo - 3300082: r_pinkyProxy_01_geo - 3300084: r_pinkyProxy_02_geo - 3300086: r_pinkyProxy_03_geo - 3300088: r_ringProxy_01_geo - 3300090: r_ringProxy_02_geo - 3300092: r_ringProxy_03_geo - 3300094: r_shourderProxy_geo - 3300096: r_thumbProxy_01_geo - 3300098: r_thumbProxy_02_geo - 3300100: r_thumbProxy_03_geo - 3300102: r_UNI_eye - 3300104: r_wristProxy_geo - 3300106: spineProxy_geo - 3300108: UNI_01_Lower_teethProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: UNI_01_TongueTipProxy - 3300114: UNI_01_Upper_teethProxy - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: HumanoidWalkRight - 7400002: HumanoidWalkLeft - 9500000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Chest + - first: + 1: 100002 + second: chestProxy_geo + - first: + 1: 100004 + second: //RootNode + - first: + 1: 100006 + second: Head + - first: + 1: 100008 + second: headProxy_geo + - first: + 1: 100010 + second: HeadTop_End + - first: + 1: 100012 + second: Hips + - first: + 1: 100014 + second: Jaw + - first: + 1: 100016 + second: JawEND + - first: + 1: 100018 + second: jawProxy_geo + - first: + 1: 100020 + second: l_ankleProxy_geo + - first: + 1: 100022 + second: l_ballProxy_geo + - first: + 1: 100024 + second: l_clavicleProxy_geo + - first: + 1: 100026 + second: l_erbowProxy_geo + - first: + 1: 100028 + second: l_hipProxy_geo + - first: + 1: 100030 + second: l_indexProxy_01_geo + - first: + 1: 100032 + second: l_indexProxy_02_geo + - first: + 1: 100034 + second: l_indexProxy_03_geo + - first: + 1: 100036 + second: l_kneeProxy_geo + - first: + 1: 100038 + second: l_middleProxy_01_geo + - first: + 1: 100040 + second: l_middleProxy_02_geo + - first: + 1: 100042 + second: l_middleProxy_03_geo + - first: + 1: 100044 + second: l_pinkyProxy_01_geo + - first: + 1: 100046 + second: l_pinkyProxy_02_geo + - first: + 1: 100048 + second: l_pinkyProxy_03_geo + - first: + 1: 100050 + second: l_ringProxy_01_geo + - first: + 1: 100052 + second: l_ringProxy_02_geo + - first: + 1: 100054 + second: l_ringProxy_03_geo + - first: + 1: 100056 + second: l_shourderProxy_geo + - first: + 1: 100058 + second: l_thumbProxy_01_geo + - first: + 1: 100060 + second: l_thumbProxy_02_geo + - first: + 1: 100062 + second: l_thumbProxy_03_geo + - first: + 1: 100064 + second: l_UNI_eye + - first: + 1: 100066 + second: l_wristProxy_geo + - first: + 1: 100068 + second: LeftArm + - first: + 1: 100070 + second: LeftCheek + - first: + 1: 100072 + second: LeftEye + - first: + 1: 100074 + second: LeftEyelidLower + - first: + 1: 100076 + second: LeftEyelidUpper + - first: + 1: 100078 + second: LeftFoot + - first: + 1: 100080 + second: LeftForeArm + - first: + 1: 100082 + second: LeftHand + - first: + 1: 100084 + second: LeftHandIndex1 + - first: + 1: 100086 + second: LeftHandIndex13 + - first: + 1: 100088 + second: LeftHandIndex17 + - first: + 1: 100090 + second: LeftHandIndex2 + - first: + 1: 100092 + second: LeftHandIndex3 + - first: + 1: 100094 + second: LeftHandMiddle1 + - first: + 1: 100096 + second: LeftHandMiddle13 + - first: + 1: 100098 + second: LeftHandMiddle17 + - first: + 1: 100100 + second: LeftHandMiddle2 + - first: + 1: 100102 + second: LeftHandMiddle3 + - first: + 1: 100104 + second: LeftHandPinky1 + - first: + 1: 100106 + second: LeftHandPinky13 + - first: + 1: 100108 + second: LeftHandPinky17 + - first: + 1: 100110 + second: LeftHandPinky2 + - first: + 1: 100112 + second: LeftHandPinky3 + - first: + 1: 100114 + second: LeftHandRing1 + - first: + 1: 100116 + second: LeftHandRing13 + - first: + 1: 100118 + second: LeftHandRing17 + - first: + 1: 100120 + second: LeftHandRing2 + - first: + 1: 100122 + second: LeftHandRing3 + - first: + 1: 100124 + second: LeftHandThumb1 + - first: + 1: 100126 + second: LeftHandThumb13 + - first: + 1: 100128 + second: LeftHandThumb17 + - first: + 1: 100130 + second: LeftHandThumb2 + - first: + 1: 100132 + second: LeftHandThumb3 + - first: + 1: 100134 + second: LeftInnerBrow + - first: + 1: 100136 + second: LeftIOuterBrow + - first: + 1: 100138 + second: LeftLeg + - first: + 1: 100140 + second: LeftLipCorner + - first: + 1: 100142 + second: LeftLipLower + - first: + 1: 100144 + second: LeftLipUpper + - first: + 1: 100146 + second: LeftNostril + - first: + 1: 100148 + second: LeftShoulder + - first: + 1: 100150 + second: LeftToes + - first: + 1: 100152 + second: LeftUpLeg + - first: + 1: 100154 + second: LToeBase_End2 + - first: + 1: 100156 + second: LToeBase_End3 + - first: + 1: 100158 + second: Neck + - first: + 1: 100160 + second: neckProxy_geo + - first: + 1: 100162 + second: pelvisProxy_geo + - first: + 1: 100164 + second: r_ankleProxy_geo + - first: + 1: 100166 + second: r_ballProxy_geo + - first: + 1: 100168 + second: r_clavicleProxy_geo + - first: + 1: 100170 + second: r_erbowProxy_geo + - first: + 1: 100172 + second: r_hipProxy_geo + - first: + 1: 100174 + second: r_indexProxy_01_geo + - first: + 1: 100176 + second: r_indexProxy_02_geo + - first: + 1: 100178 + second: r_indexProxy_03_geo + - first: + 1: 100180 + second: r_kneeProxy_geo + - first: + 1: 100182 + second: r_middleProxy_01_geo + - first: + 1: 100184 + second: r_middleProxy_02_geo + - first: + 1: 100186 + second: r_middleProxy_03_geo + - first: + 1: 100188 + second: r_pinkyProxy_01_geo + - first: + 1: 100190 + second: r_pinkyProxy_02_geo + - first: + 1: 100192 + second: r_pinkyProxy_03_geo + - first: + 1: 100194 + second: r_ringProxy_01_geo + - first: + 1: 100196 + second: r_ringProxy_02_geo + - first: + 1: 100198 + second: r_ringProxy_03_geo + - first: + 1: 100200 + second: r_shourderProxy_geo + - first: + 1: 100202 + second: r_thumbProxy_01_geo + - first: + 1: 100204 + second: r_thumbProxy_02_geo + - first: + 1: 100206 + second: r_thumbProxy_03_geo + - first: + 1: 100208 + second: r_UNI_eye + - first: + 1: 100210 + second: r_wristProxy_geo + - first: + 1: 100212 + second: Reference + - first: + 1: 100214 + second: RightArm + - first: + 1: 100216 + second: RightCheek + - first: + 1: 100218 + second: RightEye + - first: + 1: 100220 + second: RightEyelidLower + - first: + 1: 100222 + second: RightEyelidUpper + - first: + 1: 100224 + second: RightFoot + - first: + 1: 100226 + second: RightForeArm + - first: + 1: 100228 + second: RightHand + - first: + 1: 100230 + second: RightHandIndex1 + - first: + 1: 100232 + second: RightHandIndex2 + - first: + 1: 100234 + second: RightHandIndex3 + - first: + 1: 100236 + second: RightHandMiddle1 + - first: + 1: 100238 + second: RightHandMiddle2 + - first: + 1: 100240 + second: RightHandMiddle3 + - first: + 1: 100242 + second: RightHandPinky1 + - first: + 1: 100244 + second: RightHandPinky2 + - first: + 1: 100246 + second: RightHandPinky3 + - first: + 1: 100248 + second: RightHandRing1 + - first: + 1: 100250 + second: RightHandRing2 + - first: + 1: 100252 + second: RightHandRing3 + - first: + 1: 100254 + second: RightHandThumb1 + - first: + 1: 100256 + second: RightHandThumb2 + - first: + 1: 100258 + second: RightHandThumb3 + - first: + 1: 100260 + second: RightInnerBrow + - first: + 1: 100262 + second: RightIOuterBrow + - first: + 1: 100264 + second: RightLeg + - first: + 1: 100266 + second: RightLipCorner + - first: + 1: 100268 + second: RightLipLower + - first: + 1: 100270 + second: RightLipUpper + - first: + 1: 100272 + second: RightNostril + - first: + 1: 100274 + second: RightShoulder + - first: + 1: 100276 + second: RightToes + - first: + 1: 100278 + second: RightUpLeg + - first: + 1: 100280 + second: Spine + - first: + 1: 100282 + second: spineProxy_geo + - first: + 1: 100284 + second: TongueBack + - first: + 1: 100286 + second: TongueTip + - first: + 1: 100288 + second: UNI_01_Lower_teethProxy + - first: + 1: 100290 + second: UNI_01_TongueBaseProxy + - first: + 1: 100292 + second: UNI_01_TongueTipProxy + - first: + 1: 100294 + second: UNI_01_Upper_teethProxy + - first: + 4: 400000 + second: Chest + - first: + 4: 400002 + second: chestProxy_geo + - first: + 4: 400004 + second: //RootNode + - first: + 4: 400006 + second: Head + - first: + 4: 400008 + second: headProxy_geo + - first: + 4: 400010 + second: HeadTop_End + - first: + 4: 400012 + second: Hips + - first: + 4: 400014 + second: Jaw + - first: + 4: 400016 + second: JawEND + - first: + 4: 400018 + second: jawProxy_geo + - first: + 4: 400020 + second: l_ankleProxy_geo + - first: + 4: 400022 + second: l_ballProxy_geo + - first: + 4: 400024 + second: l_clavicleProxy_geo + - first: + 4: 400026 + second: l_erbowProxy_geo + - first: + 4: 400028 + second: l_hipProxy_geo + - first: + 4: 400030 + second: l_indexProxy_01_geo + - first: + 4: 400032 + second: l_indexProxy_02_geo + - first: + 4: 400034 + second: l_indexProxy_03_geo + - first: + 4: 400036 + second: l_kneeProxy_geo + - first: + 4: 400038 + second: l_middleProxy_01_geo + - first: + 4: 400040 + second: l_middleProxy_02_geo + - first: + 4: 400042 + second: l_middleProxy_03_geo + - first: + 4: 400044 + second: l_pinkyProxy_01_geo + - first: + 4: 400046 + second: l_pinkyProxy_02_geo + - first: + 4: 400048 + second: l_pinkyProxy_03_geo + - first: + 4: 400050 + second: l_ringProxy_01_geo + - first: + 4: 400052 + second: l_ringProxy_02_geo + - first: + 4: 400054 + second: l_ringProxy_03_geo + - first: + 4: 400056 + second: l_shourderProxy_geo + - first: + 4: 400058 + second: l_thumbProxy_01_geo + - first: + 4: 400060 + second: l_thumbProxy_02_geo + - first: + 4: 400062 + second: l_thumbProxy_03_geo + - first: + 4: 400064 + second: l_UNI_eye + - first: + 4: 400066 + second: l_wristProxy_geo + - first: + 4: 400068 + second: LeftArm + - first: + 4: 400070 + second: LeftCheek + - first: + 4: 400072 + second: LeftEye + - first: + 4: 400074 + second: LeftEyelidLower + - first: + 4: 400076 + second: LeftEyelidUpper + - first: + 4: 400078 + second: LeftFoot + - first: + 4: 400080 + second: LeftForeArm + - first: + 4: 400082 + second: LeftHand + - first: + 4: 400084 + second: LeftHandIndex1 + - first: + 4: 400086 + second: LeftHandIndex13 + - first: + 4: 400088 + second: LeftHandIndex17 + - first: + 4: 400090 + second: LeftHandIndex2 + - first: + 4: 400092 + second: LeftHandIndex3 + - first: + 4: 400094 + second: LeftHandMiddle1 + - first: + 4: 400096 + second: LeftHandMiddle13 + - first: + 4: 400098 + second: LeftHandMiddle17 + - first: + 4: 400100 + second: LeftHandMiddle2 + - first: + 4: 400102 + second: LeftHandMiddle3 + - first: + 4: 400104 + second: LeftHandPinky1 + - first: + 4: 400106 + second: LeftHandPinky13 + - first: + 4: 400108 + second: LeftHandPinky17 + - first: + 4: 400110 + second: LeftHandPinky2 + - first: + 4: 400112 + second: LeftHandPinky3 + - first: + 4: 400114 + second: LeftHandRing1 + - first: + 4: 400116 + second: LeftHandRing13 + - first: + 4: 400118 + second: LeftHandRing17 + - first: + 4: 400120 + second: LeftHandRing2 + - first: + 4: 400122 + second: LeftHandRing3 + - first: + 4: 400124 + second: LeftHandThumb1 + - first: + 4: 400126 + second: LeftHandThumb13 + - first: + 4: 400128 + second: LeftHandThumb17 + - first: + 4: 400130 + second: LeftHandThumb2 + - first: + 4: 400132 + second: LeftHandThumb3 + - first: + 4: 400134 + second: LeftInnerBrow + - first: + 4: 400136 + second: LeftIOuterBrow + - first: + 4: 400138 + second: LeftLeg + - first: + 4: 400140 + second: LeftLipCorner + - first: + 4: 400142 + second: LeftLipLower + - first: + 4: 400144 + second: LeftLipUpper + - first: + 4: 400146 + second: LeftNostril + - first: + 4: 400148 + second: LeftShoulder + - first: + 4: 400150 + second: LeftToes + - first: + 4: 400152 + second: LeftUpLeg + - first: + 4: 400154 + second: LToeBase_End2 + - first: + 4: 400156 + second: LToeBase_End3 + - first: + 4: 400158 + second: Neck + - first: + 4: 400160 + second: neckProxy_geo + - first: + 4: 400162 + second: pelvisProxy_geo + - first: + 4: 400164 + second: r_ankleProxy_geo + - first: + 4: 400166 + second: r_ballProxy_geo + - first: + 4: 400168 + second: r_clavicleProxy_geo + - first: + 4: 400170 + second: r_erbowProxy_geo + - first: + 4: 400172 + second: r_hipProxy_geo + - first: + 4: 400174 + second: r_indexProxy_01_geo + - first: + 4: 400176 + second: r_indexProxy_02_geo + - first: + 4: 400178 + second: r_indexProxy_03_geo + - first: + 4: 400180 + second: r_kneeProxy_geo + - first: + 4: 400182 + second: r_middleProxy_01_geo + - first: + 4: 400184 + second: r_middleProxy_02_geo + - first: + 4: 400186 + second: r_middleProxy_03_geo + - first: + 4: 400188 + second: r_pinkyProxy_01_geo + - first: + 4: 400190 + second: r_pinkyProxy_02_geo + - first: + 4: 400192 + second: r_pinkyProxy_03_geo + - first: + 4: 400194 + second: r_ringProxy_01_geo + - first: + 4: 400196 + second: r_ringProxy_02_geo + - first: + 4: 400198 + second: r_ringProxy_03_geo + - first: + 4: 400200 + second: r_shourderProxy_geo + - first: + 4: 400202 + second: r_thumbProxy_01_geo + - first: + 4: 400204 + second: r_thumbProxy_02_geo + - first: + 4: 400206 + second: r_thumbProxy_03_geo + - first: + 4: 400208 + second: r_UNI_eye + - first: + 4: 400210 + second: r_wristProxy_geo + - first: + 4: 400212 + second: Reference + - first: + 4: 400214 + second: RightArm + - first: + 4: 400216 + second: RightCheek + - first: + 4: 400218 + second: RightEye + - first: + 4: 400220 + second: RightEyelidLower + - first: + 4: 400222 + second: RightEyelidUpper + - first: + 4: 400224 + second: RightFoot + - first: + 4: 400226 + second: RightForeArm + - first: + 4: 400228 + second: RightHand + - first: + 4: 400230 + second: RightHandIndex1 + - first: + 4: 400232 + second: RightHandIndex2 + - first: + 4: 400234 + second: RightHandIndex3 + - first: + 4: 400236 + second: RightHandMiddle1 + - first: + 4: 400238 + second: RightHandMiddle2 + - first: + 4: 400240 + second: RightHandMiddle3 + - first: + 4: 400242 + second: RightHandPinky1 + - first: + 4: 400244 + second: RightHandPinky2 + - first: + 4: 400246 + second: RightHandPinky3 + - first: + 4: 400248 + second: RightHandRing1 + - first: + 4: 400250 + second: RightHandRing2 + - first: + 4: 400252 + second: RightHandRing3 + - first: + 4: 400254 + second: RightHandThumb1 + - first: + 4: 400256 + second: RightHandThumb2 + - first: + 4: 400258 + second: RightHandThumb3 + - first: + 4: 400260 + second: RightInnerBrow + - first: + 4: 400262 + second: RightIOuterBrow + - first: + 4: 400264 + second: RightLeg + - first: + 4: 400266 + second: RightLipCorner + - first: + 4: 400268 + second: RightLipLower + - first: + 4: 400270 + second: RightLipUpper + - first: + 4: 400272 + second: RightNostril + - first: + 4: 400274 + second: RightShoulder + - first: + 4: 400276 + second: RightToes + - first: + 4: 400278 + second: RightUpLeg + - first: + 4: 400280 + second: Spine + - first: + 4: 400282 + second: spineProxy_geo + - first: + 4: 400284 + second: TongueBack + - first: + 4: 400286 + second: TongueTip + - first: + 4: 400288 + second: UNI_01_Lower_teethProxy + - first: + 4: 400290 + second: UNI_01_TongueBaseProxy + - first: + 4: 400292 + second: UNI_01_TongueTipProxy + - first: + 4: 400294 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300000 + second: chestProxy_geo + - first: + 23: 2300002 + second: headProxy_geo + - first: + 23: 2300004 + second: jawProxy_geo + - first: + 23: 2300006 + second: l_ankleProxy_geo + - first: + 23: 2300008 + second: l_ballProxy_geo + - first: + 23: 2300010 + second: l_clavicleProxy_geo + - first: + 23: 2300012 + second: l_erbowProxy_geo + - first: + 23: 2300014 + second: l_hipProxy_geo + - first: + 23: 2300016 + second: l_indexProxy_01_geo + - first: + 23: 2300018 + second: l_indexProxy_02_geo + - first: + 23: 2300020 + second: l_indexProxy_03_geo + - first: + 23: 2300022 + second: l_kneeProxy_geo + - first: + 23: 2300024 + second: l_middleProxy_01_geo + - first: + 23: 2300026 + second: l_middleProxy_02_geo + - first: + 23: 2300028 + second: l_middleProxy_03_geo + - first: + 23: 2300030 + second: l_pinkyProxy_01_geo + - first: + 23: 2300032 + second: l_pinkyProxy_02_geo + - first: + 23: 2300034 + second: l_pinkyProxy_03_geo + - first: + 23: 2300036 + second: l_ringProxy_01_geo + - first: + 23: 2300038 + second: l_ringProxy_02_geo + - first: + 23: 2300040 + second: l_ringProxy_03_geo + - first: + 23: 2300042 + second: l_shourderProxy_geo + - first: + 23: 2300044 + second: l_thumbProxy_01_geo + - first: + 23: 2300046 + second: l_thumbProxy_02_geo + - first: + 23: 2300048 + second: l_thumbProxy_03_geo + - first: + 23: 2300050 + second: l_UNI_eye + - first: + 23: 2300052 + second: l_wristProxy_geo + - first: + 23: 2300054 + second: neckProxy_geo + - first: + 23: 2300056 + second: pelvisProxy_geo + - first: + 23: 2300058 + second: r_ankleProxy_geo + - first: + 23: 2300060 + second: r_ballProxy_geo + - first: + 23: 2300062 + second: r_clavicleProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_hipProxy_geo + - first: + 23: 2300068 + second: r_indexProxy_01_geo + - first: + 23: 2300070 + second: r_indexProxy_02_geo + - first: + 23: 2300072 + second: r_indexProxy_03_geo + - first: + 23: 2300074 + second: r_kneeProxy_geo + - first: + 23: 2300076 + second: r_middleProxy_01_geo + - first: + 23: 2300078 + second: r_middleProxy_02_geo + - first: + 23: 2300080 + second: r_middleProxy_03_geo + - first: + 23: 2300082 + second: r_pinkyProxy_01_geo + - first: + 23: 2300084 + second: r_pinkyProxy_02_geo + - first: + 23: 2300086 + second: r_pinkyProxy_03_geo + - first: + 23: 2300088 + second: r_ringProxy_01_geo + - first: + 23: 2300090 + second: r_ringProxy_02_geo + - first: + 23: 2300092 + second: r_ringProxy_03_geo + - first: + 23: 2300094 + second: r_shourderProxy_geo + - first: + 23: 2300096 + second: r_thumbProxy_01_geo + - first: + 23: 2300098 + second: r_thumbProxy_02_geo + - first: + 23: 2300100 + second: r_thumbProxy_03_geo + - first: + 23: 2300102 + second: r_UNI_eye + - first: + 23: 2300104 + second: r_wristProxy_geo + - first: + 23: 2300106 + second: spineProxy_geo + - first: + 23: 2300108 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: UNI_01_TongueTipProxy + - first: + 23: 2300114 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300000 + second: chestProxy_geo + - first: + 33: 3300002 + second: headProxy_geo + - first: + 33: 3300004 + second: jawProxy_geo + - first: + 33: 3300006 + second: l_ankleProxy_geo + - first: + 33: 3300008 + second: l_ballProxy_geo + - first: + 33: 3300010 + second: l_clavicleProxy_geo + - first: + 33: 3300012 + second: l_erbowProxy_geo + - first: + 33: 3300014 + second: l_hipProxy_geo + - first: + 33: 3300016 + second: l_indexProxy_01_geo + - first: + 33: 3300018 + second: l_indexProxy_02_geo + - first: + 33: 3300020 + second: l_indexProxy_03_geo + - first: + 33: 3300022 + second: l_kneeProxy_geo + - first: + 33: 3300024 + second: l_middleProxy_01_geo + - first: + 33: 3300026 + second: l_middleProxy_02_geo + - first: + 33: 3300028 + second: l_middleProxy_03_geo + - first: + 33: 3300030 + second: l_pinkyProxy_01_geo + - first: + 33: 3300032 + second: l_pinkyProxy_02_geo + - first: + 33: 3300034 + second: l_pinkyProxy_03_geo + - first: + 33: 3300036 + second: l_ringProxy_01_geo + - first: + 33: 3300038 + second: l_ringProxy_02_geo + - first: + 33: 3300040 + second: l_ringProxy_03_geo + - first: + 33: 3300042 + second: l_shourderProxy_geo + - first: + 33: 3300044 + second: l_thumbProxy_01_geo + - first: + 33: 3300046 + second: l_thumbProxy_02_geo + - first: + 33: 3300048 + second: l_thumbProxy_03_geo + - first: + 33: 3300050 + second: l_UNI_eye + - first: + 33: 3300052 + second: l_wristProxy_geo + - first: + 33: 3300054 + second: neckProxy_geo + - first: + 33: 3300056 + second: pelvisProxy_geo + - first: + 33: 3300058 + second: r_ankleProxy_geo + - first: + 33: 3300060 + second: r_ballProxy_geo + - first: + 33: 3300062 + second: r_clavicleProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_hipProxy_geo + - first: + 33: 3300068 + second: r_indexProxy_01_geo + - first: + 33: 3300070 + second: r_indexProxy_02_geo + - first: + 33: 3300072 + second: r_indexProxy_03_geo + - first: + 33: 3300074 + second: r_kneeProxy_geo + - first: + 33: 3300076 + second: r_middleProxy_01_geo + - first: + 33: 3300078 + second: r_middleProxy_02_geo + - first: + 33: 3300080 + second: r_middleProxy_03_geo + - first: + 33: 3300082 + second: r_pinkyProxy_01_geo + - first: + 33: 3300084 + second: r_pinkyProxy_02_geo + - first: + 33: 3300086 + second: r_pinkyProxy_03_geo + - first: + 33: 3300088 + second: r_ringProxy_01_geo + - first: + 33: 3300090 + second: r_ringProxy_02_geo + - first: + 33: 3300092 + second: r_ringProxy_03_geo + - first: + 33: 3300094 + second: r_shourderProxy_geo + - first: + 33: 3300096 + second: r_thumbProxy_01_geo + - first: + 33: 3300098 + second: r_thumbProxy_02_geo + - first: + 33: 3300100 + second: r_thumbProxy_03_geo + - first: + 33: 3300102 + second: r_UNI_eye + - first: + 33: 3300104 + second: r_wristProxy_geo + - first: + 33: 3300106 + second: spineProxy_geo + - first: + 33: 3300108 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: UNI_01_TongueTipProxy + - first: + 33: 3300114 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: HumanoidWalkRight + - first: + 74: 7400002 + second: HumanoidWalkLeft + - first: + 95: 9500000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 0 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidWalkRight takeName: _7_a_U1_M_P_WalkForwardTurnRight_NtrlMedium__Fb_Dia2m_No_0_PJ_1 - firstFrame: 90.5999985 + internalID: 0 + firstFrame: 90.6 lastFrame: 122.100006 wrapMode: 0 orientationOffsetY: 0 level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -519,16 +1482,19 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidWalkLeft takeName: _7_a_U1_M_P_WalkForwardTurnRight_NtrlMedium__Fb_Dia2m_No_0_PJ_1 - firstFrame: 90.5999985 + internalID: 0 + firstFrame: 90.6 lastFrame: 122.100006 wrapMode: 0 orientationOffsetY: 0 level: 0 - cycleOffset: .5 + cycleOffset: 0.5 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -545,18 +1511,31 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -564,12 +1543,16 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -1005,396 +1988,403 @@ ModelImporter: modified: 0 skeleton: - name: WalkTurn(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: 0, y: .978280783, z: -.0454514362} + parentName: + position: {x: 0, y: 0.9782808, z: -0.045451436} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg - position: {x: -.0754494965, y: -.0456640199, z: -2.30926381e-16} + parentName: + position: {x: -0.0754495, y: -0.04566402, z: -2.3092638e-16} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg - position: {x: -.0205504987, y: -.409129977, z: -.000718647963} + parentName: + position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot - position: {x: -.00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes - position: {x: -.00748699997, y: -.0731673017, z: .145427123} + parentName: + position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg - position: {x: .0754495338, y: -.0456639901, z: -1.33226755e-16} + parentName: + position: {x: 0.075449534, y: -0.04566399, z: -1.3322676e-16} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg - position: {x: .0205504671, y: -.409130007, z: -.000718647963} + parentName: + position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot - position: {x: .00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes - position: {x: .00748699997, y: -.0731673017, z: .145427495} + parentName: + position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine - position: {x: 1.70530253e-15, y: .0922631845, z: .0157713313} + parentName: + position: {x: 1.7053025e-15, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest - position: {x: 1.70530253e-15, y: .162540287, z: -.00165605545} + parentName: + position: {x: 1.7053025e-15, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder - position: {x: -.0382859968, y: .221622497, z: -.017063085} - rotation: {x: -.0147808986, y: -.0538775325, z: .156701982, w: .986064553} + parentName: + position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} + rotation: {x: -0.014780899, y: -0.053877532, z: 0.15670198, w: 0.98606455} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm - position: {x: -.100502051, y: 1.12508158e-09, z: -1.90391272e-10} - rotation: {x: .0314127803, y: .0437958837, z: -.145582214, w: .987877071} + parentName: + position: {x: -0.10050205, y: 0.0000000011250816, z: -1.9039127e-10} + rotation: {x: 0.03141278, y: 0.043795884, z: -0.14558221, w: 0.9878771} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm - position: {x: -.254049301, y: -1.05549701e-10, z: 1.09197949e-10} - rotation: {x: .2138381, y: .0305939578, z: -.0201875716, w: .976181209} + parentName: + position: {x: -0.2540493, y: -1.055497e-10, z: 1.0919795e-10} + rotation: {x: 0.2138381, y: 0.030593958, z: -0.020187572, w: 0.9761812} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand - position: {x: -.24638927, y: -1.14727637e-10, z: 1.33491083e-11} + parentName: + position: {x: -0.24638927, y: -1.1472764e-10, z: 1.3349108e-11} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 - position: {x: -.0751257986, y: -.00784140453, z: .0326526426} - rotation: {x: -.0355877392, y: .0203897264, z: .0891612843, w: .995172441} + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: -0.03558774, y: 0.020389726, z: 0.089161284, w: 0.99517244} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 - position: {x: -.03979728, y: 4.98084119e-05, z: .00118575059} - rotation: {x: -.067650035, y: .0147010209, z: .0282103531, w: .99720186} + parentName: + position: {x: -0.03979728, y: 0.000049808412, z: 0.0011857506} + rotation: {x: -0.067650035, y: 0.014701021, z: 0.028210353, w: 0.99720186} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 - position: {x: -.0279684775, y: -6.41634301e-09, z: -5.14348883e-08} + parentName: + position: {x: -0.027968477, y: -0.000000006416343, z: -0.00000005143489} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 - position: {x: -.0760238245, y: -.00188513438, z: .0101412293} - rotation: {x: -.0202440154, y: .0555505231, z: .0874573365, w: .994412124} + parentName: + position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} + rotation: {x: -0.020244015, y: 0.055550523, z: 0.08745734, w: 0.9944121} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 - position: {x: -.0442804359, y: 4.79887012e-06, z: -.00042540062} - rotation: {x: -.0149214305, y: -.00651388662, z: .0271232538, w: .9994995} + parentName: + position: {x: -0.044280436, y: 0.00000479887, z: -0.00042540062} + rotation: {x: -0.0149214305, y: -0.0065138866, z: 0.027123254, w: 0.9994995} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 - position: {x: -.0339648277, y: -1.21842687e-08, z: 3.75257692e-09} + parentName: + position: {x: -0.033964828, y: -0.000000012184269, z: 0.000000003752577} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 - position: {x: -.0656599477, y: -.00782510638, z: -.0322512463} - rotation: {x: -.0490606353, y: .0760782659, z: .0864803717, w: .992132246} + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.049060635, y: 0.076078266, z: 0.08648037, w: 0.99213225} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 - position: {x: -.0308054481, y: -3.08745766e-05, z: -.00144807738} - rotation: {x: .0495492145, y: -.0218166728, z: .0328659192, w: .997992396} + parentName: + position: {x: -0.030805448, y: -0.000030874577, z: -0.0014480774} + rotation: {x: 0.049549215, y: -0.021816673, z: 0.03286592, w: 0.9979924} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 - position: {x: -.0230640266, y: -6.40260851e-06, z: 1.79083859e-08} + parentName: + position: {x: -0.023064027, y: -0.0000064026085, z: 0.000000017908386} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 - position: {x: -.0703021064, y: -.00374530931, z: -.0114117917} - rotation: {x: -.0161509421, y: .0750548244, z: .085394524, w: .993385017} + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: -0.016150942, y: 0.075054824, z: 0.085394524, w: 0.993385} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 - position: {x: -.0431354567, y: -2.0882293e-05, z: -.00223517814} - rotation: {x: .0190618206, y: -.0256749857, z: .02892741, w: .999069929} + parentName: + position: {x: -0.043135457, y: -0.000020882293, z: -0.0022351781} + rotation: {x: 0.01906182, y: -0.025674986, z: 0.02892741, w: 0.9990699} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 - position: {x: -.0308355652, y: 1.58168798e-10, z: -1.64554788e-08} + parentName: + position: {x: -0.030835565, y: 1.581688e-10, z: -0.000000016455479} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 - position: {x: -.0142312413, y: -.0123778246, z: .0255316682} - rotation: {x: -.129420206, y: -.0551873557, z: -.119928889, w: .982762337} + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.1294202, y: -0.055187356, z: -0.11992889, w: 0.98276234} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 - position: {x: -.0163739994, y: -.00528999977, z: .0234914087} - rotation: {x: -.0260624681, y: .0966897979, z: .00360738859, w: .994966745} + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.026062468, y: 0.0966898, z: 0.0036073886, w: 0.99496675} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 - position: {x: -.0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck - position: {x: -2.84217077e-15, y: .259009272, z: -.0324132554} + parentName: + position: {x: -2.8421708e-15, y: 0.25900927, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head - position: {x: -5.68434176e-16, y: .0830703825, z: .0113267815} + parentName: + position: {x: -5.684342e-16, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw - position: {x: 1.73472344e-20, y: .0111267585, z: .0103275431} - rotation: {x: .219240054, y: -0, z: -0, w: .975670993} + parentName: + position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} + rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND - position: {x: -1.73472344e-20, y: -.0482887588, z: .071851708} - rotation: {x: 3.46944695e-18, y: -3.25260652e-18, z: -1.12847458e-35, w: 1} + parentName: + position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} + rotation: {x: 3.469447e-18, y: -3.2526065e-18, z: -1.1284746e-35, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner - position: {x: -.032843262, y: -.01657876, z: .0661217645} + parentName: + position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower - position: {x: -.0142508168, y: -.0216887593, z: .0822406337} + parentName: + position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner - position: {x: .0328399986, y: -.01657876, z: .0661187842} + parentName: + position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower - position: {x: .0142508168, y: -.0216887593, z: .0822387859} + parentName: + position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack - position: {x: -1.73472344e-20, y: -.022869369, z: .0100954091} + parentName: + position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip - position: {x: -1.73472344e-20, y: -.0232788119, z: .0383227095} + parentName: + position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440265, y: .0337019488, z: .0594304018} + parentName: + position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye - position: {x: -.0208482333, y: .0825027004, z: .0554274321} + parentName: + position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower - position: {x: -.0356189571, y: .0650736615, z: .076234743} + parentName: + position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper - position: {x: -.0344068967, y: .10060814, z: .0802053064} + parentName: + position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow - position: {x: -.0120626912, y: .118765265, z: .0934668258} + parentName: + position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow - position: {x: -.0550398715, y: .114825293, z: .061777398} - rotation: {x: 3.46944695e-18, y: -3.25260652e-18, z: -1.12847458e-35, w: 1} + parentName: + position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} + rotation: {x: 3.469447e-18, y: -3.2526065e-18, z: -1.1284746e-35, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper - position: {x: -.0145013221, y: -.00511181122, z: .094618842} + parentName: + position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril - position: {x: -.0178999994, y: .0263128281, z: .0908674002} + parentName: + position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .033702828, z: .0594273992} + parentName: + position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye - position: {x: .020849999, y: .082502827, z: .0554273985} - rotation: {x: 3.46944695e-18, y: -3.25260652e-18, z: -1.12847458e-35, w: 1} + parentName: + position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} + rotation: {x: 3.469447e-18, y: -3.2526065e-18, z: -1.1284746e-35, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower - position: {x: .0356200002, y: .065072827, z: .0762374029} + parentName: + position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper - position: {x: .0344099998, y: .100612827, z: .0802073926} + parentName: + position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow - position: {x: .0120626874, y: .118765265, z: .0934668258} + parentName: + position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow - position: {x: .0550400019, y: .114822827, z: .061777398} - rotation: {x: 3.46944695e-18, y: -3.25260652e-18, z: -1.12847458e-35, w: 1} + parentName: + position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} + rotation: {x: 3.469447e-18, y: -3.2526065e-18, z: -1.1284746e-35, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper - position: {x: .0145013221, y: -.00510717137, z: .094617404} + parentName: + position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril - position: {x: .0178999994, y: .0263089053, z: .0908706188} + parentName: + position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder - position: {x: .0382860154, y: .221621126, z: -.017063085} - rotation: {x: .161226362, y: .986777782, z: -.000264319213, w: -.0166035369} + parentName: + position: {x: 0.038286015, y: 0.22162113, z: -0.017063085} + rotation: {x: 0.16122636, y: 0.9867778, z: -0.0002643192, w: -0.016603537} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm - position: {x: -.100501455, y: -2.49664549e-06, z: -5.22836601e-08} - rotation: {x: .13713856, y: .985173404, z: .0769179687, w: .0686292574} + parentName: + position: {x: -0.100501455, y: -0.0000024966455, z: -0.00000005228366} + rotation: {x: 0.13713856, y: 0.9851734, z: 0.07691797, w: 0.06862926} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm - position: {x: .253428251, y: .00601135287, z: -.0167045239} - rotation: {x: .237398192, y: .0239303056, z: -.0130977379, w: .971029282} + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: 0.23739819, y: 0.023930306, z: -0.013097738, w: 0.9710293} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand - position: {x: .245373696, y: .0216417722, z: .00555046508} + parentName: + position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 - position: {x: .0747694969, y: -.00124305359, z: .0343444981} - rotation: {x: -.0193142965, y: .144485593, z: -.0552937947, w: .987771988} + parentName: + position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} + rotation: {x: -0.019314297, y: 0.1444856, z: -0.055293795, w: 0.987772} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 - position: {x: .0370584019, y: .00072612107, z: .0145388944} - rotation: {x: -.0626306161, y: .0217898954, z: .0492491424, w: .996582806} + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.062630616, y: 0.021789895, z: 0.049249142, w: 0.9965828} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 - position: {x: .0252250377, y: -.00496646529, z: .0110121462} + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 - position: {x: .0756476447, y: .00479140272, z: .0118531818} - rotation: {x: -.0083159646, y: .0137313176, z: -.0464223213, w: .998792946} + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.008315965, y: 0.013731318, z: -0.04642232, w: 0.99879295} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 - position: {x: .0438090637, y: .000194188149, z: .00645493623} - rotation: {x: -.0187553763, y: -.0444608666, z: .0846683979, w: .995240033} + parentName: + position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} + rotation: {x: -0.018755376, y: -0.044460867, z: 0.0846684, w: 0.99524003} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 - position: {x: .0330724716, y: -.00754753686, z: .00168984616} + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 - position: {x: .0668033436, y: -.00199410855, z: -.0307561457} - rotation: {x: -.0065329643, y: -.250651777, z: -.016728282, w: .967910707} + parentName: + position: {x: 0.06680334, y: -0.0019941085, z: -0.030756146} + rotation: {x: -0.0065329643, y: -0.25065178, z: -0.016728282, w: 0.9679107} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 - position: {x: .0285308417, y: -.001397143, z: -.0116237961} - rotation: {x: .033050999, y: .000949021487, z: -.0588754006, w: .997717619} + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: 0.033051, y: 0.0009490215, z: -0.0588754, w: 0.9977176} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 - position: {x: .0214268602, y: -.000553508929, z: -.00851660781} + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 - position: {x: .0705984756, y: .00245709671, z: -.00982145779} - rotation: {x: -.0121607138, y: -.11751543, z: -.0254483633, w: .992670476} + parentName: + position: {x: 0.070598476, y: 0.0024570967, z: -0.009821458} + rotation: {x: -0.012160714, y: -0.11751543, z: -0.025448363, w: 0.9926705} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 - position: {x: .0428871848, y: -.00137538207, z: -.00494585838} - rotation: {x: .0222987644, y: -.0217661057, z: .0794658363, w: .996350527} + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.0049458584} + rotation: {x: 0.022298764, y: -0.021766106, z: 0.07946584, w: 0.9963505} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 - position: {x: .0295006037, y: -.00769293541, z: -.00462225592} + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 - position: {x: .0146849155, y: -.0111049423, z: .0258580949} - rotation: {x: -.101609342, y: .0311730728, z: .104487799, w: .988830745} + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} + rotation: {x: -0.10160934, y: 0.031173073, z: 0.1044878, w: 0.98883075} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 - position: {x: .0163739994, y: -.00528999977, z: .0234913602} - rotation: {x: -.0260628574, y: -.0966915861, z: -.00360764307, w: .994966567} + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.026062857, y: -0.096691586, z: -0.003607643, w: 0.99496657} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 - position: {x: .0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e8914d097ece7cc48a83d5fccd4098c0, - type: 3} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta index c28510f1f..e677c2921 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta @@ -1,508 +1,1471 @@ fileFormatVersion: 2 guid: bb141fc9a700c9c4ca7e6dadb8acf24b +labels: +- ObiCloth +- ObiRope +- ObiSoftbody ModelImporter: - serializedVersion: 18 - fileIDToRecycleName: - 100000: Chest - 100002: chestProxy_geo - 100004: //RootNode - 100006: Head - 100008: headProxy_geo - 100010: HeadTop_End - 100012: Hips - 100014: Jaw - 100016: JawEND - 100018: jawProxy_geo - 100020: l_ankleProxy_geo - 100022: l_ballProxy_geo - 100024: l_clavicleProxy_geo - 100026: l_erbowProxy_geo - 100028: l_hipProxy_geo - 100030: l_indexProxy_01_geo - 100032: l_indexProxy_02_geo - 100034: l_indexProxy_03_geo - 100036: l_kneeProxy_geo - 100038: l_middleProxy_01_geo - 100040: l_middleProxy_02_geo - 100042: l_middleProxy_03_geo - 100044: l_pinkyProxy_01_geo - 100046: l_pinkyProxy_02_geo - 100048: l_pinkyProxy_03_geo - 100050: l_ringProxy_01_geo - 100052: l_ringProxy_02_geo - 100054: l_ringProxy_03_geo - 100056: l_shourderProxy_geo - 100058: l_thumbProxy_01_geo - 100060: l_thumbProxy_02_geo - 100062: l_thumbProxy_03_geo - 100064: l_UNI_eye - 100066: l_wristProxy_geo - 100068: LeftArm - 100070: LeftCheek - 100072: LeftEye - 100074: LeftEyelidLower - 100076: LeftEyelidUpper - 100078: LeftFoot - 100080: LeftForeArm - 100082: LeftHand - 100084: LeftHandIndex1 - 100086: LeftHandIndex13 - 100088: LeftHandIndex17 - 100090: LeftHandIndex2 - 100092: LeftHandIndex3 - 100094: LeftHandMiddle1 - 100096: LeftHandMiddle13 - 100098: LeftHandMiddle17 - 100100: LeftHandMiddle2 - 100102: LeftHandMiddle3 - 100104: LeftHandPinky1 - 100106: LeftHandPinky13 - 100108: LeftHandPinky17 - 100110: LeftHandPinky2 - 100112: LeftHandPinky3 - 100114: LeftHandRing1 - 100116: LeftHandRing13 - 100118: LeftHandRing17 - 100120: LeftHandRing2 - 100122: LeftHandRing3 - 100124: LeftHandThumb1 - 100126: LeftHandThumb13 - 100128: LeftHandThumb17 - 100130: LeftHandThumb2 - 100132: LeftHandThumb3 - 100134: LeftInnerBrow - 100136: LeftIOuterBrow - 100138: LeftLeg - 100140: LeftLipCorner - 100142: LeftLipLower - 100144: LeftLipUpper - 100146: LeftNostril - 100148: LeftShoulder - 100150: LeftToes - 100152: LeftUpLeg - 100154: LToeBase_End2 - 100156: LToeBase_End3 - 100158: Neck - 100160: neckProxy_geo - 100162: pelvisProxy_geo - 100164: r_ankleProxy_geo - 100166: r_ballProxy_geo - 100168: r_clavicleProxy_geo - 100170: r_erbowProxy_geo - 100172: r_hipProxy_geo - 100174: r_indexProxy_01_geo - 100176: r_indexProxy_02_geo - 100178: r_indexProxy_03_geo - 100180: r_kneeProxy_geo - 100182: r_middleProxy_01_geo - 100184: r_middleProxy_02_geo - 100186: r_middleProxy_03_geo - 100188: r_pinkyProxy_01_geo - 100190: r_pinkyProxy_02_geo - 100192: r_pinkyProxy_03_geo - 100194: r_ringProxy_01_geo - 100196: r_ringProxy_02_geo - 100198: r_ringProxy_03_geo - 100200: r_shourderProxy_geo - 100202: r_thumbProxy_01_geo - 100204: r_thumbProxy_02_geo - 100206: r_thumbProxy_03_geo - 100208: r_UNI_eye - 100210: r_wristProxy_geo - 100212: Reference - 100214: RightArm - 100216: RightCheek - 100218: RightEye - 100220: RightEyelidLower - 100222: RightEyelidUpper - 100224: RightFoot - 100226: RightForeArm - 100228: RightHand - 100230: RightHandIndex1 - 100232: RightHandIndex2 - 100234: RightHandIndex3 - 100236: RightHandMiddle1 - 100238: RightHandMiddle2 - 100240: RightHandMiddle3 - 100242: RightHandPinky1 - 100244: RightHandPinky2 - 100246: RightHandPinky3 - 100248: RightHandRing1 - 100250: RightHandRing2 - 100252: RightHandRing3 - 100254: RightHandThumb1 - 100256: RightHandThumb2 - 100258: RightHandThumb3 - 100260: RightInnerBrow - 100262: RightIOuterBrow - 100264: RightLeg - 100266: RightLipCorner - 100268: RightLipLower - 100270: RightLipUpper - 100272: RightNostril - 100274: RightShoulder - 100276: RightToes - 100278: RightUpLeg - 100280: Spine - 100282: spineProxy_geo - 100284: TongueBack - 100286: TongueTip - 100288: UNI_01_Lower_teethProxy - 100290: UNI_01_TongueBaseProxy - 100292: UNI_01_TongueTipProxy - 100294: UNI_01_Upper_teethProxy - 400000: Chest - 400002: chestProxy_geo - 400004: //RootNode - 400006: Head - 400008: headProxy_geo - 400010: HeadTop_End - 400012: Hips - 400014: Jaw - 400016: JawEND - 400018: jawProxy_geo - 400020: l_ankleProxy_geo - 400022: l_ballProxy_geo - 400024: l_clavicleProxy_geo - 400026: l_erbowProxy_geo - 400028: l_hipProxy_geo - 400030: l_indexProxy_01_geo - 400032: l_indexProxy_02_geo - 400034: l_indexProxy_03_geo - 400036: l_kneeProxy_geo - 400038: l_middleProxy_01_geo - 400040: l_middleProxy_02_geo - 400042: l_middleProxy_03_geo - 400044: l_pinkyProxy_01_geo - 400046: l_pinkyProxy_02_geo - 400048: l_pinkyProxy_03_geo - 400050: l_ringProxy_01_geo - 400052: l_ringProxy_02_geo - 400054: l_ringProxy_03_geo - 400056: l_shourderProxy_geo - 400058: l_thumbProxy_01_geo - 400060: l_thumbProxy_02_geo - 400062: l_thumbProxy_03_geo - 400064: l_UNI_eye - 400066: l_wristProxy_geo - 400068: LeftArm - 400070: LeftCheek - 400072: LeftEye - 400074: LeftEyelidLower - 400076: LeftEyelidUpper - 400078: LeftFoot - 400080: LeftForeArm - 400082: LeftHand - 400084: LeftHandIndex1 - 400086: LeftHandIndex13 - 400088: LeftHandIndex17 - 400090: LeftHandIndex2 - 400092: LeftHandIndex3 - 400094: LeftHandMiddle1 - 400096: LeftHandMiddle13 - 400098: LeftHandMiddle17 - 400100: LeftHandMiddle2 - 400102: LeftHandMiddle3 - 400104: LeftHandPinky1 - 400106: LeftHandPinky13 - 400108: LeftHandPinky17 - 400110: LeftHandPinky2 - 400112: LeftHandPinky3 - 400114: LeftHandRing1 - 400116: LeftHandRing13 - 400118: LeftHandRing17 - 400120: LeftHandRing2 - 400122: LeftHandRing3 - 400124: LeftHandThumb1 - 400126: LeftHandThumb13 - 400128: LeftHandThumb17 - 400130: LeftHandThumb2 - 400132: LeftHandThumb3 - 400134: LeftInnerBrow - 400136: LeftIOuterBrow - 400138: LeftLeg - 400140: LeftLipCorner - 400142: LeftLipLower - 400144: LeftLipUpper - 400146: LeftNostril - 400148: LeftShoulder - 400150: LeftToes - 400152: LeftUpLeg - 400154: LToeBase_End2 - 400156: LToeBase_End3 - 400158: Neck - 400160: neckProxy_geo - 400162: pelvisProxy_geo - 400164: r_ankleProxy_geo - 400166: r_ballProxy_geo - 400168: r_clavicleProxy_geo - 400170: r_erbowProxy_geo - 400172: r_hipProxy_geo - 400174: r_indexProxy_01_geo - 400176: r_indexProxy_02_geo - 400178: r_indexProxy_03_geo - 400180: r_kneeProxy_geo - 400182: r_middleProxy_01_geo - 400184: r_middleProxy_02_geo - 400186: r_middleProxy_03_geo - 400188: r_pinkyProxy_01_geo - 400190: r_pinkyProxy_02_geo - 400192: r_pinkyProxy_03_geo - 400194: r_ringProxy_01_geo - 400196: r_ringProxy_02_geo - 400198: r_ringProxy_03_geo - 400200: r_shourderProxy_geo - 400202: r_thumbProxy_01_geo - 400204: r_thumbProxy_02_geo - 400206: r_thumbProxy_03_geo - 400208: r_UNI_eye - 400210: r_wristProxy_geo - 400212: Reference - 400214: RightArm - 400216: RightCheek - 400218: RightEye - 400220: RightEyelidLower - 400222: RightEyelidUpper - 400224: RightFoot - 400226: RightForeArm - 400228: RightHand - 400230: RightHandIndex1 - 400232: RightHandIndex2 - 400234: RightHandIndex3 - 400236: RightHandMiddle1 - 400238: RightHandMiddle2 - 400240: RightHandMiddle3 - 400242: RightHandPinky1 - 400244: RightHandPinky2 - 400246: RightHandPinky3 - 400248: RightHandRing1 - 400250: RightHandRing2 - 400252: RightHandRing3 - 400254: RightHandThumb1 - 400256: RightHandThumb2 - 400258: RightHandThumb3 - 400260: RightInnerBrow - 400262: RightIOuterBrow - 400264: RightLeg - 400266: RightLipCorner - 400268: RightLipLower - 400270: RightLipUpper - 400272: RightNostril - 400274: RightShoulder - 400276: RightToes - 400278: RightUpLeg - 400280: Spine - 400282: spineProxy_geo - 400284: TongueBack - 400286: TongueTip - 400288: UNI_01_Lower_teethProxy - 400290: UNI_01_TongueBaseProxy - 400292: UNI_01_TongueTipProxy - 400294: UNI_01_Upper_teethProxy - 2300000: chestProxy_geo - 2300002: headProxy_geo - 2300004: jawProxy_geo - 2300006: l_ankleProxy_geo - 2300008: l_ballProxy_geo - 2300010: l_clavicleProxy_geo - 2300012: l_erbowProxy_geo - 2300014: l_hipProxy_geo - 2300016: l_indexProxy_01_geo - 2300018: l_indexProxy_02_geo - 2300020: l_indexProxy_03_geo - 2300022: l_kneeProxy_geo - 2300024: l_middleProxy_01_geo - 2300026: l_middleProxy_02_geo - 2300028: l_middleProxy_03_geo - 2300030: l_pinkyProxy_01_geo - 2300032: l_pinkyProxy_02_geo - 2300034: l_pinkyProxy_03_geo - 2300036: l_ringProxy_01_geo - 2300038: l_ringProxy_02_geo - 2300040: l_ringProxy_03_geo - 2300042: l_shourderProxy_geo - 2300044: l_thumbProxy_01_geo - 2300046: l_thumbProxy_02_geo - 2300048: l_thumbProxy_03_geo - 2300050: l_UNI_eye - 2300052: l_wristProxy_geo - 2300054: neckProxy_geo - 2300056: pelvisProxy_geo - 2300058: r_ankleProxy_geo - 2300060: r_ballProxy_geo - 2300062: r_clavicleProxy_geo - 2300064: r_erbowProxy_geo - 2300066: r_hipProxy_geo - 2300068: r_indexProxy_01_geo - 2300070: r_indexProxy_02_geo - 2300072: r_indexProxy_03_geo - 2300074: r_kneeProxy_geo - 2300076: r_middleProxy_01_geo - 2300078: r_middleProxy_02_geo - 2300080: r_middleProxy_03_geo - 2300082: r_pinkyProxy_01_geo - 2300084: r_pinkyProxy_02_geo - 2300086: r_pinkyProxy_03_geo - 2300088: r_ringProxy_01_geo - 2300090: r_ringProxy_02_geo - 2300092: r_ringProxy_03_geo - 2300094: r_shourderProxy_geo - 2300096: r_thumbProxy_01_geo - 2300098: r_thumbProxy_02_geo - 2300100: r_thumbProxy_03_geo - 2300102: r_UNI_eye - 2300104: r_wristProxy_geo - 2300106: spineProxy_geo - 2300108: UNI_01_Lower_teethProxy - 2300110: UNI_01_TongueBaseProxy - 2300112: UNI_01_TongueTipProxy - 2300114: UNI_01_Upper_teethProxy - 3300000: chestProxy_geo - 3300002: headProxy_geo - 3300004: jawProxy_geo - 3300006: l_ankleProxy_geo - 3300008: l_ballProxy_geo - 3300010: l_clavicleProxy_geo - 3300012: l_erbowProxy_geo - 3300014: l_hipProxy_geo - 3300016: l_indexProxy_01_geo - 3300018: l_indexProxy_02_geo - 3300020: l_indexProxy_03_geo - 3300022: l_kneeProxy_geo - 3300024: l_middleProxy_01_geo - 3300026: l_middleProxy_02_geo - 3300028: l_middleProxy_03_geo - 3300030: l_pinkyProxy_01_geo - 3300032: l_pinkyProxy_02_geo - 3300034: l_pinkyProxy_03_geo - 3300036: l_ringProxy_01_geo - 3300038: l_ringProxy_02_geo - 3300040: l_ringProxy_03_geo - 3300042: l_shourderProxy_geo - 3300044: l_thumbProxy_01_geo - 3300046: l_thumbProxy_02_geo - 3300048: l_thumbProxy_03_geo - 3300050: l_UNI_eye - 3300052: l_wristProxy_geo - 3300054: neckProxy_geo - 3300056: pelvisProxy_geo - 3300058: r_ankleProxy_geo - 3300060: r_ballProxy_geo - 3300062: r_clavicleProxy_geo - 3300064: r_erbowProxy_geo - 3300066: r_hipProxy_geo - 3300068: r_indexProxy_01_geo - 3300070: r_indexProxy_02_geo - 3300072: r_indexProxy_03_geo - 3300074: r_kneeProxy_geo - 3300076: r_middleProxy_01_geo - 3300078: r_middleProxy_02_geo - 3300080: r_middleProxy_03_geo - 3300082: r_pinkyProxy_01_geo - 3300084: r_pinkyProxy_02_geo - 3300086: r_pinkyProxy_03_geo - 3300088: r_ringProxy_01_geo - 3300090: r_ringProxy_02_geo - 3300092: r_ringProxy_03_geo - 3300094: r_shourderProxy_geo - 3300096: r_thumbProxy_01_geo - 3300098: r_thumbProxy_02_geo - 3300100: r_thumbProxy_03_geo - 3300102: r_UNI_eye - 3300104: r_wristProxy_geo - 3300106: spineProxy_geo - 3300108: UNI_01_Lower_teethProxy - 3300110: UNI_01_TongueBaseProxy - 3300112: UNI_01_TongueTipProxy - 3300114: UNI_01_Upper_teethProxy - 4300000: l_UNI_eye - 4300002: r_UNI_eye - 4300004: UNI_01_TongueBaseProxy - 4300006: UNI_01_TongueTipProxy - 4300008: UNI_01_Lower_teethProxy - 4300010: jawProxy_geo - 4300012: headProxy_geo - 4300014: UNI_01_Upper_teethProxy - 4300016: neckProxy_geo - 4300018: r_pinkyProxy_03_geo - 4300020: r_pinkyProxy_02_geo - 4300022: r_pinkyProxy_01_geo - 4300024: r_ringProxy_03_geo - 4300026: r_ringProxy_02_geo - 4300028: r_ringProxy_01_geo - 4300030: r_middleProxy_03_geo - 4300032: r_middleProxy_02_geo - 4300034: r_middleProxy_01_geo - 4300036: r_indexProxy_03_geo - 4300038: r_indexProxy_02_geo - 4300040: r_indexProxy_01_geo - 4300042: r_thumbProxy_03_geo - 4300044: r_thumbProxy_02_geo - 4300046: r_thumbProxy_01_geo - 4300048: r_wristProxy_geo - 4300050: r_erbowProxy_geo - 4300052: r_shourderProxy_geo - 4300054: r_clavicleProxy_geo - 4300056: chestProxy_geo - 4300058: l_pinkyProxy_03_geo - 4300060: l_pinkyProxy_02_geo - 4300062: l_pinkyProxy_01_geo - 4300064: l_ringProxy_03_geo - 4300066: l_ringProxy_02_geo - 4300068: l_ringProxy_01_geo - 4300070: l_middleProxy_03_geo - 4300072: l_middleProxy_02_geo - 4300074: l_middleProxy_01_geo - 4300076: l_indexProxy_03_geo - 4300078: l_indexProxy_02_geo - 4300080: l_indexProxy_01_geo - 4300082: l_thumbProxy_03_geo - 4300084: l_thumbProxy_02_geo - 4300086: l_thumbProxy_01_geo - 4300088: l_wristProxy_geo - 4300090: l_erbowProxy_geo - 4300092: l_shourderProxy_geo - 4300094: l_clavicleProxy_geo - 4300096: spineProxy_geo - 4300098: r_ballProxy_geo - 4300100: r_ankleProxy_geo - 4300102: r_kneeProxy_geo - 4300104: r_hipProxy_geo - 4300106: pelvisProxy_geo - 4300108: l_ballProxy_geo - 4300110: l_ankleProxy_geo - 4300112: l_kneeProxy_geo - 4300114: l_hipProxy_geo - 7400000: HumanoidWalkLeftSharp - 7400002: HumanoidWalkRightSharp - 9500000: //RootNode + serializedVersion: 19301 + internalIDToNameTable: + - first: + 1: 100000 + second: Chest + - first: + 1: 100002 + second: chestProxy_geo + - first: + 1: 100004 + second: //RootNode + - first: + 1: 100006 + second: Head + - first: + 1: 100008 + second: headProxy_geo + - first: + 1: 100010 + second: HeadTop_End + - first: + 1: 100012 + second: Hips + - first: + 1: 100014 + second: Jaw + - first: + 1: 100016 + second: JawEND + - first: + 1: 100018 + second: jawProxy_geo + - first: + 1: 100020 + second: l_ankleProxy_geo + - first: + 1: 100022 + second: l_ballProxy_geo + - first: + 1: 100024 + second: l_clavicleProxy_geo + - first: + 1: 100026 + second: l_erbowProxy_geo + - first: + 1: 100028 + second: l_hipProxy_geo + - first: + 1: 100030 + second: l_indexProxy_01_geo + - first: + 1: 100032 + second: l_indexProxy_02_geo + - first: + 1: 100034 + second: l_indexProxy_03_geo + - first: + 1: 100036 + second: l_kneeProxy_geo + - first: + 1: 100038 + second: l_middleProxy_01_geo + - first: + 1: 100040 + second: l_middleProxy_02_geo + - first: + 1: 100042 + second: l_middleProxy_03_geo + - first: + 1: 100044 + second: l_pinkyProxy_01_geo + - first: + 1: 100046 + second: l_pinkyProxy_02_geo + - first: + 1: 100048 + second: l_pinkyProxy_03_geo + - first: + 1: 100050 + second: l_ringProxy_01_geo + - first: + 1: 100052 + second: l_ringProxy_02_geo + - first: + 1: 100054 + second: l_ringProxy_03_geo + - first: + 1: 100056 + second: l_shourderProxy_geo + - first: + 1: 100058 + second: l_thumbProxy_01_geo + - first: + 1: 100060 + second: l_thumbProxy_02_geo + - first: + 1: 100062 + second: l_thumbProxy_03_geo + - first: + 1: 100064 + second: l_UNI_eye + - first: + 1: 100066 + second: l_wristProxy_geo + - first: + 1: 100068 + second: LeftArm + - first: + 1: 100070 + second: LeftCheek + - first: + 1: 100072 + second: LeftEye + - first: + 1: 100074 + second: LeftEyelidLower + - first: + 1: 100076 + second: LeftEyelidUpper + - first: + 1: 100078 + second: LeftFoot + - first: + 1: 100080 + second: LeftForeArm + - first: + 1: 100082 + second: LeftHand + - first: + 1: 100084 + second: LeftHandIndex1 + - first: + 1: 100086 + second: LeftHandIndex13 + - first: + 1: 100088 + second: LeftHandIndex17 + - first: + 1: 100090 + second: LeftHandIndex2 + - first: + 1: 100092 + second: LeftHandIndex3 + - first: + 1: 100094 + second: LeftHandMiddle1 + - first: + 1: 100096 + second: LeftHandMiddle13 + - first: + 1: 100098 + second: LeftHandMiddle17 + - first: + 1: 100100 + second: LeftHandMiddle2 + - first: + 1: 100102 + second: LeftHandMiddle3 + - first: + 1: 100104 + second: LeftHandPinky1 + - first: + 1: 100106 + second: LeftHandPinky13 + - first: + 1: 100108 + second: LeftHandPinky17 + - first: + 1: 100110 + second: LeftHandPinky2 + - first: + 1: 100112 + second: LeftHandPinky3 + - first: + 1: 100114 + second: LeftHandRing1 + - first: + 1: 100116 + second: LeftHandRing13 + - first: + 1: 100118 + second: LeftHandRing17 + - first: + 1: 100120 + second: LeftHandRing2 + - first: + 1: 100122 + second: LeftHandRing3 + - first: + 1: 100124 + second: LeftHandThumb1 + - first: + 1: 100126 + second: LeftHandThumb13 + - first: + 1: 100128 + second: LeftHandThumb17 + - first: + 1: 100130 + second: LeftHandThumb2 + - first: + 1: 100132 + second: LeftHandThumb3 + - first: + 1: 100134 + second: LeftInnerBrow + - first: + 1: 100136 + second: LeftIOuterBrow + - first: + 1: 100138 + second: LeftLeg + - first: + 1: 100140 + second: LeftLipCorner + - first: + 1: 100142 + second: LeftLipLower + - first: + 1: 100144 + second: LeftLipUpper + - first: + 1: 100146 + second: LeftNostril + - first: + 1: 100148 + second: LeftShoulder + - first: + 1: 100150 + second: LeftToes + - first: + 1: 100152 + second: LeftUpLeg + - first: + 1: 100154 + second: LToeBase_End2 + - first: + 1: 100156 + second: LToeBase_End3 + - first: + 1: 100158 + second: Neck + - first: + 1: 100160 + second: neckProxy_geo + - first: + 1: 100162 + second: pelvisProxy_geo + - first: + 1: 100164 + second: r_ankleProxy_geo + - first: + 1: 100166 + second: r_ballProxy_geo + - first: + 1: 100168 + second: r_clavicleProxy_geo + - first: + 1: 100170 + second: r_erbowProxy_geo + - first: + 1: 100172 + second: r_hipProxy_geo + - first: + 1: 100174 + second: r_indexProxy_01_geo + - first: + 1: 100176 + second: r_indexProxy_02_geo + - first: + 1: 100178 + second: r_indexProxy_03_geo + - first: + 1: 100180 + second: r_kneeProxy_geo + - first: + 1: 100182 + second: r_middleProxy_01_geo + - first: + 1: 100184 + second: r_middleProxy_02_geo + - first: + 1: 100186 + second: r_middleProxy_03_geo + - first: + 1: 100188 + second: r_pinkyProxy_01_geo + - first: + 1: 100190 + second: r_pinkyProxy_02_geo + - first: + 1: 100192 + second: r_pinkyProxy_03_geo + - first: + 1: 100194 + second: r_ringProxy_01_geo + - first: + 1: 100196 + second: r_ringProxy_02_geo + - first: + 1: 100198 + second: r_ringProxy_03_geo + - first: + 1: 100200 + second: r_shourderProxy_geo + - first: + 1: 100202 + second: r_thumbProxy_01_geo + - first: + 1: 100204 + second: r_thumbProxy_02_geo + - first: + 1: 100206 + second: r_thumbProxy_03_geo + - first: + 1: 100208 + second: r_UNI_eye + - first: + 1: 100210 + second: r_wristProxy_geo + - first: + 1: 100212 + second: Reference + - first: + 1: 100214 + second: RightArm + - first: + 1: 100216 + second: RightCheek + - first: + 1: 100218 + second: RightEye + - first: + 1: 100220 + second: RightEyelidLower + - first: + 1: 100222 + second: RightEyelidUpper + - first: + 1: 100224 + second: RightFoot + - first: + 1: 100226 + second: RightForeArm + - first: + 1: 100228 + second: RightHand + - first: + 1: 100230 + second: RightHandIndex1 + - first: + 1: 100232 + second: RightHandIndex2 + - first: + 1: 100234 + second: RightHandIndex3 + - first: + 1: 100236 + second: RightHandMiddle1 + - first: + 1: 100238 + second: RightHandMiddle2 + - first: + 1: 100240 + second: RightHandMiddle3 + - first: + 1: 100242 + second: RightHandPinky1 + - first: + 1: 100244 + second: RightHandPinky2 + - first: + 1: 100246 + second: RightHandPinky3 + - first: + 1: 100248 + second: RightHandRing1 + - first: + 1: 100250 + second: RightHandRing2 + - first: + 1: 100252 + second: RightHandRing3 + - first: + 1: 100254 + second: RightHandThumb1 + - first: + 1: 100256 + second: RightHandThumb2 + - first: + 1: 100258 + second: RightHandThumb3 + - first: + 1: 100260 + second: RightInnerBrow + - first: + 1: 100262 + second: RightIOuterBrow + - first: + 1: 100264 + second: RightLeg + - first: + 1: 100266 + second: RightLipCorner + - first: + 1: 100268 + second: RightLipLower + - first: + 1: 100270 + second: RightLipUpper + - first: + 1: 100272 + second: RightNostril + - first: + 1: 100274 + second: RightShoulder + - first: + 1: 100276 + second: RightToes + - first: + 1: 100278 + second: RightUpLeg + - first: + 1: 100280 + second: Spine + - first: + 1: 100282 + second: spineProxy_geo + - first: + 1: 100284 + second: TongueBack + - first: + 1: 100286 + second: TongueTip + - first: + 1: 100288 + second: UNI_01_Lower_teethProxy + - first: + 1: 100290 + second: UNI_01_TongueBaseProxy + - first: + 1: 100292 + second: UNI_01_TongueTipProxy + - first: + 1: 100294 + second: UNI_01_Upper_teethProxy + - first: + 4: 400000 + second: Chest + - first: + 4: 400002 + second: chestProxy_geo + - first: + 4: 400004 + second: //RootNode + - first: + 4: 400006 + second: Head + - first: + 4: 400008 + second: headProxy_geo + - first: + 4: 400010 + second: HeadTop_End + - first: + 4: 400012 + second: Hips + - first: + 4: 400014 + second: Jaw + - first: + 4: 400016 + second: JawEND + - first: + 4: 400018 + second: jawProxy_geo + - first: + 4: 400020 + second: l_ankleProxy_geo + - first: + 4: 400022 + second: l_ballProxy_geo + - first: + 4: 400024 + second: l_clavicleProxy_geo + - first: + 4: 400026 + second: l_erbowProxy_geo + - first: + 4: 400028 + second: l_hipProxy_geo + - first: + 4: 400030 + second: l_indexProxy_01_geo + - first: + 4: 400032 + second: l_indexProxy_02_geo + - first: + 4: 400034 + second: l_indexProxy_03_geo + - first: + 4: 400036 + second: l_kneeProxy_geo + - first: + 4: 400038 + second: l_middleProxy_01_geo + - first: + 4: 400040 + second: l_middleProxy_02_geo + - first: + 4: 400042 + second: l_middleProxy_03_geo + - first: + 4: 400044 + second: l_pinkyProxy_01_geo + - first: + 4: 400046 + second: l_pinkyProxy_02_geo + - first: + 4: 400048 + second: l_pinkyProxy_03_geo + - first: + 4: 400050 + second: l_ringProxy_01_geo + - first: + 4: 400052 + second: l_ringProxy_02_geo + - first: + 4: 400054 + second: l_ringProxy_03_geo + - first: + 4: 400056 + second: l_shourderProxy_geo + - first: + 4: 400058 + second: l_thumbProxy_01_geo + - first: + 4: 400060 + second: l_thumbProxy_02_geo + - first: + 4: 400062 + second: l_thumbProxy_03_geo + - first: + 4: 400064 + second: l_UNI_eye + - first: + 4: 400066 + second: l_wristProxy_geo + - first: + 4: 400068 + second: LeftArm + - first: + 4: 400070 + second: LeftCheek + - first: + 4: 400072 + second: LeftEye + - first: + 4: 400074 + second: LeftEyelidLower + - first: + 4: 400076 + second: LeftEyelidUpper + - first: + 4: 400078 + second: LeftFoot + - first: + 4: 400080 + second: LeftForeArm + - first: + 4: 400082 + second: LeftHand + - first: + 4: 400084 + second: LeftHandIndex1 + - first: + 4: 400086 + second: LeftHandIndex13 + - first: + 4: 400088 + second: LeftHandIndex17 + - first: + 4: 400090 + second: LeftHandIndex2 + - first: + 4: 400092 + second: LeftHandIndex3 + - first: + 4: 400094 + second: LeftHandMiddle1 + - first: + 4: 400096 + second: LeftHandMiddle13 + - first: + 4: 400098 + second: LeftHandMiddle17 + - first: + 4: 400100 + second: LeftHandMiddle2 + - first: + 4: 400102 + second: LeftHandMiddle3 + - first: + 4: 400104 + second: LeftHandPinky1 + - first: + 4: 400106 + second: LeftHandPinky13 + - first: + 4: 400108 + second: LeftHandPinky17 + - first: + 4: 400110 + second: LeftHandPinky2 + - first: + 4: 400112 + second: LeftHandPinky3 + - first: + 4: 400114 + second: LeftHandRing1 + - first: + 4: 400116 + second: LeftHandRing13 + - first: + 4: 400118 + second: LeftHandRing17 + - first: + 4: 400120 + second: LeftHandRing2 + - first: + 4: 400122 + second: LeftHandRing3 + - first: + 4: 400124 + second: LeftHandThumb1 + - first: + 4: 400126 + second: LeftHandThumb13 + - first: + 4: 400128 + second: LeftHandThumb17 + - first: + 4: 400130 + second: LeftHandThumb2 + - first: + 4: 400132 + second: LeftHandThumb3 + - first: + 4: 400134 + second: LeftInnerBrow + - first: + 4: 400136 + second: LeftIOuterBrow + - first: + 4: 400138 + second: LeftLeg + - first: + 4: 400140 + second: LeftLipCorner + - first: + 4: 400142 + second: LeftLipLower + - first: + 4: 400144 + second: LeftLipUpper + - first: + 4: 400146 + second: LeftNostril + - first: + 4: 400148 + second: LeftShoulder + - first: + 4: 400150 + second: LeftToes + - first: + 4: 400152 + second: LeftUpLeg + - first: + 4: 400154 + second: LToeBase_End2 + - first: + 4: 400156 + second: LToeBase_End3 + - first: + 4: 400158 + second: Neck + - first: + 4: 400160 + second: neckProxy_geo + - first: + 4: 400162 + second: pelvisProxy_geo + - first: + 4: 400164 + second: r_ankleProxy_geo + - first: + 4: 400166 + second: r_ballProxy_geo + - first: + 4: 400168 + second: r_clavicleProxy_geo + - first: + 4: 400170 + second: r_erbowProxy_geo + - first: + 4: 400172 + second: r_hipProxy_geo + - first: + 4: 400174 + second: r_indexProxy_01_geo + - first: + 4: 400176 + second: r_indexProxy_02_geo + - first: + 4: 400178 + second: r_indexProxy_03_geo + - first: + 4: 400180 + second: r_kneeProxy_geo + - first: + 4: 400182 + second: r_middleProxy_01_geo + - first: + 4: 400184 + second: r_middleProxy_02_geo + - first: + 4: 400186 + second: r_middleProxy_03_geo + - first: + 4: 400188 + second: r_pinkyProxy_01_geo + - first: + 4: 400190 + second: r_pinkyProxy_02_geo + - first: + 4: 400192 + second: r_pinkyProxy_03_geo + - first: + 4: 400194 + second: r_ringProxy_01_geo + - first: + 4: 400196 + second: r_ringProxy_02_geo + - first: + 4: 400198 + second: r_ringProxy_03_geo + - first: + 4: 400200 + second: r_shourderProxy_geo + - first: + 4: 400202 + second: r_thumbProxy_01_geo + - first: + 4: 400204 + second: r_thumbProxy_02_geo + - first: + 4: 400206 + second: r_thumbProxy_03_geo + - first: + 4: 400208 + second: r_UNI_eye + - first: + 4: 400210 + second: r_wristProxy_geo + - first: + 4: 400212 + second: Reference + - first: + 4: 400214 + second: RightArm + - first: + 4: 400216 + second: RightCheek + - first: + 4: 400218 + second: RightEye + - first: + 4: 400220 + second: RightEyelidLower + - first: + 4: 400222 + second: RightEyelidUpper + - first: + 4: 400224 + second: RightFoot + - first: + 4: 400226 + second: RightForeArm + - first: + 4: 400228 + second: RightHand + - first: + 4: 400230 + second: RightHandIndex1 + - first: + 4: 400232 + second: RightHandIndex2 + - first: + 4: 400234 + second: RightHandIndex3 + - first: + 4: 400236 + second: RightHandMiddle1 + - first: + 4: 400238 + second: RightHandMiddle2 + - first: + 4: 400240 + second: RightHandMiddle3 + - first: + 4: 400242 + second: RightHandPinky1 + - first: + 4: 400244 + second: RightHandPinky2 + - first: + 4: 400246 + second: RightHandPinky3 + - first: + 4: 400248 + second: RightHandRing1 + - first: + 4: 400250 + second: RightHandRing2 + - first: + 4: 400252 + second: RightHandRing3 + - first: + 4: 400254 + second: RightHandThumb1 + - first: + 4: 400256 + second: RightHandThumb2 + - first: + 4: 400258 + second: RightHandThumb3 + - first: + 4: 400260 + second: RightInnerBrow + - first: + 4: 400262 + second: RightIOuterBrow + - first: + 4: 400264 + second: RightLeg + - first: + 4: 400266 + second: RightLipCorner + - first: + 4: 400268 + second: RightLipLower + - first: + 4: 400270 + second: RightLipUpper + - first: + 4: 400272 + second: RightNostril + - first: + 4: 400274 + second: RightShoulder + - first: + 4: 400276 + second: RightToes + - first: + 4: 400278 + second: RightUpLeg + - first: + 4: 400280 + second: Spine + - first: + 4: 400282 + second: spineProxy_geo + - first: + 4: 400284 + second: TongueBack + - first: + 4: 400286 + second: TongueTip + - first: + 4: 400288 + second: UNI_01_Lower_teethProxy + - first: + 4: 400290 + second: UNI_01_TongueBaseProxy + - first: + 4: 400292 + second: UNI_01_TongueTipProxy + - first: + 4: 400294 + second: UNI_01_Upper_teethProxy + - first: + 23: 2300000 + second: chestProxy_geo + - first: + 23: 2300002 + second: headProxy_geo + - first: + 23: 2300004 + second: jawProxy_geo + - first: + 23: 2300006 + second: l_ankleProxy_geo + - first: + 23: 2300008 + second: l_ballProxy_geo + - first: + 23: 2300010 + second: l_clavicleProxy_geo + - first: + 23: 2300012 + second: l_erbowProxy_geo + - first: + 23: 2300014 + second: l_hipProxy_geo + - first: + 23: 2300016 + second: l_indexProxy_01_geo + - first: + 23: 2300018 + second: l_indexProxy_02_geo + - first: + 23: 2300020 + second: l_indexProxy_03_geo + - first: + 23: 2300022 + second: l_kneeProxy_geo + - first: + 23: 2300024 + second: l_middleProxy_01_geo + - first: + 23: 2300026 + second: l_middleProxy_02_geo + - first: + 23: 2300028 + second: l_middleProxy_03_geo + - first: + 23: 2300030 + second: l_pinkyProxy_01_geo + - first: + 23: 2300032 + second: l_pinkyProxy_02_geo + - first: + 23: 2300034 + second: l_pinkyProxy_03_geo + - first: + 23: 2300036 + second: l_ringProxy_01_geo + - first: + 23: 2300038 + second: l_ringProxy_02_geo + - first: + 23: 2300040 + second: l_ringProxy_03_geo + - first: + 23: 2300042 + second: l_shourderProxy_geo + - first: + 23: 2300044 + second: l_thumbProxy_01_geo + - first: + 23: 2300046 + second: l_thumbProxy_02_geo + - first: + 23: 2300048 + second: l_thumbProxy_03_geo + - first: + 23: 2300050 + second: l_UNI_eye + - first: + 23: 2300052 + second: l_wristProxy_geo + - first: + 23: 2300054 + second: neckProxy_geo + - first: + 23: 2300056 + second: pelvisProxy_geo + - first: + 23: 2300058 + second: r_ankleProxy_geo + - first: + 23: 2300060 + second: r_ballProxy_geo + - first: + 23: 2300062 + second: r_clavicleProxy_geo + - first: + 23: 2300064 + second: r_erbowProxy_geo + - first: + 23: 2300066 + second: r_hipProxy_geo + - first: + 23: 2300068 + second: r_indexProxy_01_geo + - first: + 23: 2300070 + second: r_indexProxy_02_geo + - first: + 23: 2300072 + second: r_indexProxy_03_geo + - first: + 23: 2300074 + second: r_kneeProxy_geo + - first: + 23: 2300076 + second: r_middleProxy_01_geo + - first: + 23: 2300078 + second: r_middleProxy_02_geo + - first: + 23: 2300080 + second: r_middleProxy_03_geo + - first: + 23: 2300082 + second: r_pinkyProxy_01_geo + - first: + 23: 2300084 + second: r_pinkyProxy_02_geo + - first: + 23: 2300086 + second: r_pinkyProxy_03_geo + - first: + 23: 2300088 + second: r_ringProxy_01_geo + - first: + 23: 2300090 + second: r_ringProxy_02_geo + - first: + 23: 2300092 + second: r_ringProxy_03_geo + - first: + 23: 2300094 + second: r_shourderProxy_geo + - first: + 23: 2300096 + second: r_thumbProxy_01_geo + - first: + 23: 2300098 + second: r_thumbProxy_02_geo + - first: + 23: 2300100 + second: r_thumbProxy_03_geo + - first: + 23: 2300102 + second: r_UNI_eye + - first: + 23: 2300104 + second: r_wristProxy_geo + - first: + 23: 2300106 + second: spineProxy_geo + - first: + 23: 2300108 + second: UNI_01_Lower_teethProxy + - first: + 23: 2300110 + second: UNI_01_TongueBaseProxy + - first: + 23: 2300112 + second: UNI_01_TongueTipProxy + - first: + 23: 2300114 + second: UNI_01_Upper_teethProxy + - first: + 33: 3300000 + second: chestProxy_geo + - first: + 33: 3300002 + second: headProxy_geo + - first: + 33: 3300004 + second: jawProxy_geo + - first: + 33: 3300006 + second: l_ankleProxy_geo + - first: + 33: 3300008 + second: l_ballProxy_geo + - first: + 33: 3300010 + second: l_clavicleProxy_geo + - first: + 33: 3300012 + second: l_erbowProxy_geo + - first: + 33: 3300014 + second: l_hipProxy_geo + - first: + 33: 3300016 + second: l_indexProxy_01_geo + - first: + 33: 3300018 + second: l_indexProxy_02_geo + - first: + 33: 3300020 + second: l_indexProxy_03_geo + - first: + 33: 3300022 + second: l_kneeProxy_geo + - first: + 33: 3300024 + second: l_middleProxy_01_geo + - first: + 33: 3300026 + second: l_middleProxy_02_geo + - first: + 33: 3300028 + second: l_middleProxy_03_geo + - first: + 33: 3300030 + second: l_pinkyProxy_01_geo + - first: + 33: 3300032 + second: l_pinkyProxy_02_geo + - first: + 33: 3300034 + second: l_pinkyProxy_03_geo + - first: + 33: 3300036 + second: l_ringProxy_01_geo + - first: + 33: 3300038 + second: l_ringProxy_02_geo + - first: + 33: 3300040 + second: l_ringProxy_03_geo + - first: + 33: 3300042 + second: l_shourderProxy_geo + - first: + 33: 3300044 + second: l_thumbProxy_01_geo + - first: + 33: 3300046 + second: l_thumbProxy_02_geo + - first: + 33: 3300048 + second: l_thumbProxy_03_geo + - first: + 33: 3300050 + second: l_UNI_eye + - first: + 33: 3300052 + second: l_wristProxy_geo + - first: + 33: 3300054 + second: neckProxy_geo + - first: + 33: 3300056 + second: pelvisProxy_geo + - first: + 33: 3300058 + second: r_ankleProxy_geo + - first: + 33: 3300060 + second: r_ballProxy_geo + - first: + 33: 3300062 + second: r_clavicleProxy_geo + - first: + 33: 3300064 + second: r_erbowProxy_geo + - first: + 33: 3300066 + second: r_hipProxy_geo + - first: + 33: 3300068 + second: r_indexProxy_01_geo + - first: + 33: 3300070 + second: r_indexProxy_02_geo + - first: + 33: 3300072 + second: r_indexProxy_03_geo + - first: + 33: 3300074 + second: r_kneeProxy_geo + - first: + 33: 3300076 + second: r_middleProxy_01_geo + - first: + 33: 3300078 + second: r_middleProxy_02_geo + - first: + 33: 3300080 + second: r_middleProxy_03_geo + - first: + 33: 3300082 + second: r_pinkyProxy_01_geo + - first: + 33: 3300084 + second: r_pinkyProxy_02_geo + - first: + 33: 3300086 + second: r_pinkyProxy_03_geo + - first: + 33: 3300088 + second: r_ringProxy_01_geo + - first: + 33: 3300090 + second: r_ringProxy_02_geo + - first: + 33: 3300092 + second: r_ringProxy_03_geo + - first: + 33: 3300094 + second: r_shourderProxy_geo + - first: + 33: 3300096 + second: r_thumbProxy_01_geo + - first: + 33: 3300098 + second: r_thumbProxy_02_geo + - first: + 33: 3300100 + second: r_thumbProxy_03_geo + - first: + 33: 3300102 + second: r_UNI_eye + - first: + 33: 3300104 + second: r_wristProxy_geo + - first: + 33: 3300106 + second: spineProxy_geo + - first: + 33: 3300108 + second: UNI_01_Lower_teethProxy + - first: + 33: 3300110 + second: UNI_01_TongueBaseProxy + - first: + 33: 3300112 + second: UNI_01_TongueTipProxy + - first: + 33: 3300114 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300000 + second: l_UNI_eye + - first: + 43: 4300002 + second: r_UNI_eye + - first: + 43: 4300004 + second: UNI_01_TongueBaseProxy + - first: + 43: 4300006 + second: UNI_01_TongueTipProxy + - first: + 43: 4300008 + second: UNI_01_Lower_teethProxy + - first: + 43: 4300010 + second: jawProxy_geo + - first: + 43: 4300012 + second: headProxy_geo + - first: + 43: 4300014 + second: UNI_01_Upper_teethProxy + - first: + 43: 4300016 + second: neckProxy_geo + - first: + 43: 4300018 + second: r_pinkyProxy_03_geo + - first: + 43: 4300020 + second: r_pinkyProxy_02_geo + - first: + 43: 4300022 + second: r_pinkyProxy_01_geo + - first: + 43: 4300024 + second: r_ringProxy_03_geo + - first: + 43: 4300026 + second: r_ringProxy_02_geo + - first: + 43: 4300028 + second: r_ringProxy_01_geo + - first: + 43: 4300030 + second: r_middleProxy_03_geo + - first: + 43: 4300032 + second: r_middleProxy_02_geo + - first: + 43: 4300034 + second: r_middleProxy_01_geo + - first: + 43: 4300036 + second: r_indexProxy_03_geo + - first: + 43: 4300038 + second: r_indexProxy_02_geo + - first: + 43: 4300040 + second: r_indexProxy_01_geo + - first: + 43: 4300042 + second: r_thumbProxy_03_geo + - first: + 43: 4300044 + second: r_thumbProxy_02_geo + - first: + 43: 4300046 + second: r_thumbProxy_01_geo + - first: + 43: 4300048 + second: r_wristProxy_geo + - first: + 43: 4300050 + second: r_erbowProxy_geo + - first: + 43: 4300052 + second: r_shourderProxy_geo + - first: + 43: 4300054 + second: r_clavicleProxy_geo + - first: + 43: 4300056 + second: chestProxy_geo + - first: + 43: 4300058 + second: l_pinkyProxy_03_geo + - first: + 43: 4300060 + second: l_pinkyProxy_02_geo + - first: + 43: 4300062 + second: l_pinkyProxy_01_geo + - first: + 43: 4300064 + second: l_ringProxy_03_geo + - first: + 43: 4300066 + second: l_ringProxy_02_geo + - first: + 43: 4300068 + second: l_ringProxy_01_geo + - first: + 43: 4300070 + second: l_middleProxy_03_geo + - first: + 43: 4300072 + second: l_middleProxy_02_geo + - first: + 43: 4300074 + second: l_middleProxy_01_geo + - first: + 43: 4300076 + second: l_indexProxy_03_geo + - first: + 43: 4300078 + second: l_indexProxy_02_geo + - first: + 43: 4300080 + second: l_indexProxy_01_geo + - first: + 43: 4300082 + second: l_thumbProxy_03_geo + - first: + 43: 4300084 + second: l_thumbProxy_02_geo + - first: + 43: 4300086 + second: l_thumbProxy_01_geo + - first: + 43: 4300088 + second: l_wristProxy_geo + - first: + 43: 4300090 + second: l_erbowProxy_geo + - first: + 43: 4300092 + second: l_shourderProxy_geo + - first: + 43: 4300094 + second: l_clavicleProxy_geo + - first: + 43: 4300096 + second: spineProxy_geo + - first: + 43: 4300098 + second: r_ballProxy_geo + - first: + 43: 4300100 + second: r_ankleProxy_geo + - first: + 43: 4300102 + second: r_kneeProxy_geo + - first: + 43: 4300104 + second: r_hipProxy_geo + - first: + 43: 4300106 + second: pelvisProxy_geo + - first: + 43: 4300108 + second: l_ballProxy_geo + - first: + 43: 4300110 + second: l_ankleProxy_geo + - first: + 43: 4300112 + second: l_kneeProxy_geo + - first: + 43: 4300114 + second: l_hipProxy_geo + - first: + 74: 7400000 + second: HumanoidWalkLeftSharp + - first: + 74: 7400002 + second: HumanoidWalkRightSharp + - first: + 95: 9500000 + second: //RootNode + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 1 materialSearch: 2 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 + resampleCurves: 1 optimizeGameObjects: 0 motionNodeName: - pivotNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 0 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 animationWrapMode: 0 extraExposedTransformPaths: [] + extraUserProperties: [] clipAnimations: - serializedVersion: 16 name: HumanoidWalkRightSharp takeName: _8_a_U1_M_P_WalkForwardTurnRight_NtrlShort__Fb_Dia1m_No_0_PJ_4 - firstFrame: 53.2999992 + internalID: 0 + firstFrame: 53.3 lastFrame: 84 wrapMode: 0 orientationOffsetY: 0 level: 0 cycleOffset: 0 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -519,16 +1482,19 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 - serializedVersion: 16 name: HumanoidWalkLeftSharp takeName: _8_a_U1_M_P_WalkForwardTurnRight_NtrlShort__Fb_Dia1m_No_0_PJ_4 - firstFrame: 53.2999992 + internalID: 0 + firstFrame: 53.3 lastFrame: 84 wrapMode: 0 orientationOffsetY: 0 level: 0 - cycleOffset: .5 + cycleOffset: 0.5 loop: 0 + hasAdditiveReferencePose: 0 loopTime: 1 loopBlend: 1 loopBlendOrientation: 0 @@ -545,18 +1511,31 @@ ModelImporter: transformMask: [] maskType: 0 maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 1 meshes: lODScreenPercentages: [] - globalScale: .00999999978 + globalScale: 0.01 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 importBlendShapes: 0 + importCameras: 0 + importLights: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 @@ -564,12 +1543,16 @@ ModelImporter: useFileScale: 0 tangentSpace: normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 normalImportMode: 0 - tangentImportMode: 1 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -1005,396 +1988,403 @@ ModelImporter: modified: 0 skeleton: - name: WalkTurnSharp(Clone) + parentName: position: {x: 0, y: 0, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Hips - position: {x: 0, y: .951679945, z: -.0734068155} + parentName: + position: {x: 0, y: 0.95167994, z: -0.073406816} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftUpLeg - position: {x: -.0754494965, y: -.0456640199, z: -7.1054272e-17} + parentName: + position: {x: -0.0754495, y: -0.04566402, z: -7.105427e-17} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLeg - position: {x: -.0205504987, y: -.409129977, z: -.000718647963} + parentName: + position: {x: -0.020550499, y: -0.40912998, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftFoot - position: {x: -.00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: -0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftToes - position: {x: -.00748699997, y: -.0731673017, z: .145427123} + parentName: + position: {x: -0.007487, y: -0.0731673, z: 0.14542712} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightUpLeg - position: {x: .0754495338, y: -.0456639901, z: 0} + parentName: + position: {x: 0.075449534, y: -0.04566399, z: 0} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLeg - position: {x: .0205504671, y: -.409130007, z: -.000718647963} + parentName: + position: {x: 0.020550467, y: -0.40913, z: -0.00071864796} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightFoot - position: {x: .00515299942, y: -.423155904, z: -.0276488513} + parentName: + position: {x: 0.0051529994, y: -0.4231559, z: -0.027648851} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightToes - position: {x: .00748699997, y: -.0731673017, z: .145427495} + parentName: + position: {x: 0.007487, y: -0.0731673, z: 0.1454275} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Spine - position: {x: 1.42108544e-16, y: .0922631845, z: .0157713313} + parentName: + position: {x: 1.4210854e-16, y: 0.092263184, z: 0.015771331} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Chest - position: {x: -1.42108544e-16, y: .162540287, z: -.00165605545} + parentName: + position: {x: -1.4210854e-16, y: 0.16254029, z: -0.0016560555} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftShoulder - position: {x: -.0382859968, y: .221622497, z: -.017063085} - rotation: {x: -.0221654978, y: -.0647571012, z: .150944948, w: .986169815} + parentName: + position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} + rotation: {x: -0.022165498, y: -0.0647571, z: 0.15094495, w: 0.9861698} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftArm - position: {x: -.100502051, y: 8.54155913e-10, z: -3.69725445e-10} - rotation: {x: .0106419669, y: .0620222352, z: -.139523, w: .988217294} + parentName: + position: {x: -0.10050205, y: 8.541559e-10, z: -3.6972544e-10} + rotation: {x: 0.010641967, y: 0.062022235, z: -0.139523, w: 0.9882173} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftForeArm - position: {x: -.254049301, y: -2.90391433e-10, z: 1.89220972e-10} - rotation: {x: .191195339, y: .0320876539, z: -.015048732, w: .98091203} + parentName: + position: {x: -0.2540493, y: -2.9039143e-10, z: 1.8922097e-10} + rotation: {x: 0.19119534, y: 0.032087654, z: -0.015048732, w: 0.980912} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHand - position: {x: -.24638927, y: -2.04380513e-10, z: -2.76404663e-11} + parentName: + position: {x: -0.24638927, y: -2.0438051e-10, z: -2.7640466e-11} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex1 - position: {x: -.0751257986, y: -.00784140453, z: .0326526426} - rotation: {x: -.0355880857, y: .0203896258, z: .0891591534, w: .99517262} + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: -0.035588086, y: 0.020389626, z: 0.08915915, w: 0.9951726} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex2 - position: {x: -.03979728, y: 4.980843e-05, z: .00118575059} - rotation: {x: -.0676201731, y: .014689805, z: .0282076728, w: .997204125} + parentName: + position: {x: -0.03979728, y: 0.00004980843, z: 0.0011857506} + rotation: {x: -0.06762017, y: 0.014689805, z: 0.028207673, w: 0.9972041} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandIndex3 - position: {x: -.0279684775, y: -6.32620267e-09, z: -5.13934566e-08} + parentName: + position: {x: -0.027968477, y: -0.0000000063262027, z: -0.000000051393457} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle1 - position: {x: -.0760238245, y: -.00188513449, z: .0101412293} - rotation: {x: -.0202437695, y: .0555506349, z: .0874595419, w: .994412005} + parentName: + position: {x: -0.076023825, y: -0.0018851345, z: 0.010141229} + rotation: {x: -0.02024377, y: 0.055550635, z: 0.08745954, w: 0.994412} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle2 - position: {x: -.0442804359, y: 4.79886603e-06, z: -.000425400416} - rotation: {x: -.0148668028, y: -.00650640437, z: .027121624, w: .999500394} + parentName: + position: {x: -0.044280436, y: 0.000004798866, z: -0.00042540042} + rotation: {x: -0.014866803, y: -0.0065064044, z: 0.027121624, w: 0.9995004} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandMiddle3 - position: {x: -.0339648277, y: -1.23281945e-08, z: 3.8019885e-09} + parentName: + position: {x: -0.033964828, y: -0.0000000123281945, z: 0.0000000038019885} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky1 - position: {x: -.0656599477, y: -.00782510638, z: -.0322512463} - rotation: {x: -.0490607433, y: .0760781392, z: .0864796862, w: .992132246} + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.049060743, y: 0.07607814, z: 0.086479686, w: 0.99213225} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky2 - position: {x: -.0308054481, y: -3.08745912e-05, z: -.00144807703} - rotation: {x: .0495053492, y: -.0218173042, z: .0328643546, w: .997994602} + parentName: + position: {x: -0.030805448, y: -0.00003087459, z: -0.001448077} + rotation: {x: 0.04950535, y: -0.021817304, z: 0.032864355, w: 0.9979946} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandPinky3 - position: {x: -.0230640266, y: -6.40261305e-06, z: 1.81588078e-08} + parentName: + position: {x: -0.023064027, y: -0.000006402613, z: 0.000000018158808} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing1 - position: {x: -.0703021064, y: -.00374530931, z: -.0114117917} - rotation: {x: -.0161509272, y: .0750548989, z: .0853952542, w: .993384898} + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: -0.016150927, y: 0.0750549, z: 0.085395254, w: 0.9933849} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing2 - position: {x: -.0431354567, y: -2.0882313e-05, z: -.00223517814} - rotation: {x: .0190618392, y: -.0256752465, z: .0289273206, w: .999069929} + parentName: + position: {x: -0.043135457, y: -0.000020882313, z: -0.0022351781} + rotation: {x: 0.01906184, y: -0.025675246, z: 0.02892732, w: 0.9990699} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandRing3 - position: {x: -.0308355652, y: 1.19146082e-10, z: -1.64279221e-08} + parentName: + position: {x: -0.030835565, y: 1.1914608e-10, z: -0.000000016427922} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb1 - position: {x: -.0142312413, y: -.0123778246, z: .0255316682} - rotation: {x: -.103088424, y: -.0457053706, z: -.0948034078, w: .989088535} + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.10308842, y: -0.04570537, z: -0.09480341, w: 0.98908854} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb2 - position: {x: -.0163739994, y: -.00528999977, z: .0234914087} - rotation: {x: -.0260616504, y: .0966882184, z: .00360805099, w: .994966924} + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.02606165, y: 0.09668822, z: 0.003608051, w: 0.9949669} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftHandThumb3 - position: {x: -.0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Neck - position: {x: -1.42108544e-16, y: .259009302, z: -.0324132554} + parentName: + position: {x: -1.4210854e-16, y: 0.2590093, z: -0.032413255} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Head - position: {x: -4.26325632e-16, y: .0830703825, z: .0113267815} + parentName: + position: {x: -4.2632563e-16, y: 0.08307038, z: 0.0113267815} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: Jaw - position: {x: 1.73472344e-20, y: .0111267585, z: .0103275431} - rotation: {x: .219240054, y: -0, z: -0, w: .975670993} + parentName: + position: {x: 1.7347234e-20, y: 0.0111267585, z: 0.010327543} + rotation: {x: 0.21924005, y: -0, z: -0, w: 0.975671} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: JawEND - position: {x: -1.73472344e-20, y: -.0482887588, z: .071851708} + parentName: + position: {x: -1.7347234e-20, y: -0.04828876, z: 0.07185171} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipCorner - position: {x: -.032843262, y: -.01657876, z: .0661217645} + parentName: + position: {x: -0.032843262, y: -0.01657876, z: 0.066121764} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipLower - position: {x: -.0142508168, y: -.0216887593, z: .0822406337} + parentName: + position: {x: -0.014250817, y: -0.02168876, z: 0.08224063} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipCorner - position: {x: .0328399986, y: -.01657876, z: .0661187842} + parentName: + position: {x: 0.03284, y: -0.01657876, z: 0.066118784} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipLower - position: {x: .0142508168, y: -.0216887593, z: .0822387859} + parentName: + position: {x: 0.014250817, y: -0.02168876, z: 0.082238786} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueBack - position: {x: -1.73472344e-20, y: -.022869369, z: .0100954091} + parentName: + position: {x: -1.7347234e-20, y: -0.022869369, z: 0.010095409} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: TongueTip - position: {x: -1.73472344e-20, y: -.0232788119, z: .0383227095} + parentName: + position: {x: -1.7347234e-20, y: -0.023278812, z: 0.03832271} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftCheek - position: {x: -.0542440265, y: .0337019488, z: .0594304018} + parentName: + position: {x: -0.054244027, y: 0.03370195, z: 0.0594304} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEye - position: {x: -.0208482333, y: .0825027004, z: .0554274321} + parentName: + position: {x: -0.020848233, y: 0.0825027, z: 0.055427432} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidLower - position: {x: -.0356189571, y: .0650736615, z: .076234743} + parentName: + position: {x: -0.035618957, y: 0.06507366, z: 0.07623474} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftEyelidUpper - position: {x: -.0344068967, y: .10060814, z: .0802053064} + parentName: + position: {x: -0.034406897, y: 0.10060814, z: 0.08020531} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftInnerBrow - position: {x: -.0120626912, y: .118765265, z: .0934668258} + parentName: + position: {x: -0.012062691, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftIOuterBrow - position: {x: -.0550398715, y: .114825293, z: .061777398} + parentName: + position: {x: -0.05503987, y: 0.11482529, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftLipUpper - position: {x: -.0145013221, y: -.00511181122, z: .094618842} + parentName: + position: {x: -0.014501322, y: -0.005111811, z: 0.09461884} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: LeftNostril - position: {x: -.0178999994, y: .0263128281, z: .0908674002} + parentName: + position: {x: -0.0179, y: 0.026312828, z: 0.0908674} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightCheek - position: {x: .0542399958, y: .033702828, z: .0594273992} + parentName: + position: {x: 0.054239996, y: 0.033702828, z: 0.0594274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEye - position: {x: .020849999, y: .082502827, z: .0554273985} + parentName: + position: {x: 0.020849999, y: 0.08250283, z: 0.0554274} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidLower - position: {x: .0356200002, y: .065072827, z: .0762374029} + parentName: + position: {x: 0.03562, y: 0.06507283, z: 0.0762374} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightEyelidUpper - position: {x: .0344099998, y: .100612827, z: .0802073926} + parentName: + position: {x: 0.03441, y: 0.10061283, z: 0.08020739} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightInnerBrow - position: {x: .0120626874, y: .118765265, z: .0934668258} + parentName: + position: {x: 0.012062687, y: 0.118765265, z: 0.093466826} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightIOuterBrow - position: {x: .0550400019, y: .114822827, z: .061777398} + parentName: + position: {x: 0.055040002, y: 0.11482283, z: 0.061777398} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightLipUpper - position: {x: .0145013221, y: -.00510717137, z: .094617404} + parentName: + position: {x: 0.014501322, y: -0.0051071714, z: 0.094617404} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightNostril - position: {x: .0178999994, y: .0263089053, z: .0908706188} + parentName: + position: {x: 0.0179, y: 0.026308905, z: 0.09087062} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightShoulder - position: {x: .0382860154, y: .221621141, z: -.017063085} - rotation: {x: .154757425, y: .986676931, z: -.0157793798, w: -.0476438813} + parentName: + position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} + rotation: {x: 0.15475743, y: 0.98667693, z: -0.01577938, w: -0.04764388} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightArm - position: {x: -.100501455, y: -2.49648065e-06, z: -5.26188195e-08} - rotation: {x: .130882964, y: .987497151, z: -.0353813171, w: .0804189369} + parentName: + position: {x: -0.100501455, y: -0.0000024964806, z: -0.00000005261882} + rotation: {x: 0.13088296, y: 0.98749715, z: -0.035381317, w: 0.08041894} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightForeArm - position: {x: .253428251, y: .00601135287, z: -.0167045239} - rotation: {x: .280784488, y: .028492162, z: -.0234558787, w: .959061027} + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: 0.2807845, y: 0.028492162, z: -0.023455879, w: 0.959061} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHand - position: {x: .245373696, y: .0216417722, z: .00555046508} + parentName: + position: {x: 0.2453737, y: 0.021641772, z: 0.005550465} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex1 - position: {x: .0747694969, y: -.00124305324, z: .0343444981} - rotation: {x: .0702486187, y: .110602617, z: -.0305125732, w: .990909278} + parentName: + position: {x: 0.0747695, y: -0.0012430532, z: 0.034344498} + rotation: {x: 0.07024862, y: 0.11060262, z: -0.030512573, w: 0.9909093} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex2 - position: {x: .0370584019, y: .00072612107, z: .0145388944} - rotation: {x: -.0682227388, y: .0217395108, z: .0434513427, w: .996486425} + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.06822274, y: 0.02173951, z: 0.043451343, w: 0.9964864} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandIndex3 - position: {x: .0252250377, y: -.00496646529, z: .0110121462} + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle1 - position: {x: .0756476447, y: .00479140272, z: .0118531818} - rotation: {x: -.0920466632, y: .0207282137, z: -.0604893267, w: .99369961} + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.09204666, y: 0.020728214, z: -0.060489327, w: 0.9936996} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle2 - position: {x: .0438090637, y: .000194188135, z: .00645493623} - rotation: {x: -.0169275757, y: -.0436564907, z: .0808736235, w: .995624006} + parentName: + position: {x: 0.043809064, y: 0.00019418813, z: 0.006454936} + rotation: {x: -0.016927576, y: -0.04365649, z: 0.08087362, w: 0.995624} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandMiddle3 - position: {x: .0330724716, y: -.00754753686, z: .00168984616} + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky1 - position: {x: .0668033436, y: -.00199410855, z: -.0307561457} - rotation: {x: -.285667181, y: -.21415624, z: .021061996, w: .933856428} + parentName: + position: {x: 0.06680334, y: -0.0019941085, z: -0.030756146} + rotation: {x: -0.28566718, y: -0.21415624, z: 0.021061996, w: 0.9338564} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky2 - position: {x: .0285308417, y: -.001397143, z: -.0116237961} - rotation: {x: .0287868604, y: .000551951351, z: -.0619924963, w: .997661233} + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: 0.02878686, y: 0.00055195135, z: -0.061992496, w: 0.99766123} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandPinky3 - position: {x: .0214268602, y: -.000553508929, z: -.00851660781} + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing1 - position: {x: .0705984756, y: .00245709671, z: -.00982145779} - rotation: {x: -.104537345, y: -.101430796, z: -.0258029439, w: .988998473} + parentName: + position: {x: 0.070598476, y: 0.0024570967, z: -0.009821458} + rotation: {x: -0.104537345, y: -0.101430796, z: -0.025802944, w: 0.9889985} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing2 - position: {x: .0428871848, y: -.00137538207, z: -.00494585838} - rotation: {x: .0209362246, y: -.0216365587, z: .0753415748, w: .996703148} + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.0049458584} + rotation: {x: 0.020936225, y: -0.021636559, z: 0.075341575, w: 0.99670315} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandRing3 - position: {x: .0295006037, y: -.00769293541, z: -.00462225592} + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb1 - position: {x: .0146849155, y: -.0111049423, z: .0258580949} - rotation: {x: -.15737839, y: .0567218959, z: .195477024, w: .966335058} + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} + rotation: {x: -0.15737839, y: 0.056721896, z: 0.19547702, w: 0.96633506} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb2 - position: {x: .0163739994, y: -.00528999977, z: .0234913602} - rotation: {x: -.026062455, y: -.0966872424, z: -.00360673014, w: .994967043} + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.026062455, y: -0.09668724, z: -0.0036067301, w: 0.99496704} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - name: RightHandThumb3 - position: {x: .0254599992, y: -.00763999997, z: .0208330005} + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} rotation: {x: 0, y: 0, z: 0, w: 1} scale: {x: 1, y: 1, z: 1} - transformModified: 1 - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 feetSpacing: 0 + globalScale: 0.01 rootMotionBoneName: - lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e8914d097ece7cc48a83d5fccd4098c0, - type: 3} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 additionalBone: 0 userData: assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial index 2d99aa2a0..af7b90267 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial @@ -1,14 +1,15 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!134 &13400000 -PhysicMaterial: +PhysicsMaterial: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: CharacterFriction - dynamicFriction: 0.9 - staticFriction: 0.6 - bounciness: 0 - frictionCombine: 3 - bounceCombine: 3 + serializedVersion: 2 + m_DynamicFriction: 0.9 + m_StaticFriction: 0.6 + m_Bounciness: 0 + m_FrictionCombine: 3 + m_BounceCombine: 3 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset index 352f070d3..ae997429e 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5b9c84cdb747944209b1c8753933c5db, type: 3} m_Name: HighFriction m_EditorClassIdentifier: - dynamicFriction: 1 + dynamicFriction: 0.5 staticFriction: 0 stickiness: 0 stickDistance: 0 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset index 686668d4f..bb418697b 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5b9c84cdb747944209b1c8753933c5db, type: 3} m_Name: MediumFriction m_EditorClassIdentifier: - dynamicFriction: 0.17 + dynamicFriction: 0.1 staticFriction: 0 stickiness: 0 stickDistance: 0 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset index 7a63fa378..d98d3e3ee 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset @@ -12,11 +12,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5b9c84cdb747944209b1c8753933c5db, type: 3} m_Name: RollingFriction m_EditorClassIdentifier: - dynamicFriction: 0.7 + dynamicFriction: 0.9 staticFriction: 0 stickiness: 0 stickDistance: 0 frictionCombine: 0 - stickinessCombine: 3 + stickinessCombine: 1 rollingContacts: 1 - rollingFriction: 0.2 + rollingFriction: 0.02 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset new file mode 100644 index 000000000..f9aa1c397 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5b9c84cdb747944209b1c8753933c5db, type: 3} + m_Name: RollingFrictionSmoke + m_EditorClassIdentifier: + dynamicFriction: 0.1 + staticFriction: 0 + stickiness: 0 + stickDistance: 0 + frictionCombine: 0 + stickinessCombine: 3 + rollingContacts: 1 + rollingFriction: 0.01 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset.meta new file mode 100644 index 000000000..3dff32bfc --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb309543303c94a32b84f20d84389f76 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset index 8a9681338..dddae90c4 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset @@ -12,10 +12,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5b9c84cdb747944209b1c8753933c5db, type: 3} m_Name: VerySticky m_EditorClassIdentifier: - dynamicFriction: 0.2 + dynamicFriction: 0.3 staticFriction: 0 - stickiness: 0.2 - stickDistance: 0.03 + stickiness: 0.16 + stickDistance: 0.025 frictionCombine: 3 stickinessCombine: 3 rollingContacts: 0 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Checker.mat b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Checker.mat index c09e0c2e1..e2aefe395 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Checker.mat +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Checker.mat @@ -1,5 +1,18 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6423271243515826522 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 5 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -8,30 +21,28 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Checker - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION m_InvalidKeywords: [] - m_LightmapFlags: 7 + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - _BaseMap: m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} - m_Scale: {x: 1, y: 1} + m_Scale: {x: 5, y: 5} m_Offset: {x: 0, y: 0} - _BumpMap: - m_Texture: {fileID: 2800000, guid: 176574918b29445148929eb9a46c70ef, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _DetailAlbedoMap: @@ -48,11 +59,11 @@ Material: m_Offset: {x: 0, y: 0} - _EmissionMap: m_Texture: {fileID: 0} - m_Scale: {x: 40, y: 40} + m_Scale: {x: 5, y: 5} m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} - m_Scale: {x: 1, y: 1} + m_Scale: {x: 5, y: 5} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: m_Texture: {fileID: 0} @@ -84,11 +95,8 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - _AlphaClip: 0 - - _AlphaToMask: 0 - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - _ClearCoatMask: 0 - _ClearCoatSmoothness: 0 @@ -97,7 +105,6 @@ Material: - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - _EnvironmentReflections: 1 - _GlossMapScale: 1 @@ -109,34 +116,19 @@ Material: - _Parallax: 0.02 - _QueueOffset: 0 - _ReceiveShadows: 1 - - _Smoothness: 0.3 + - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - _Surface: 0 - _UVSec: 0 - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 ---- !u!114 &7591979257084172258 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat index 9b8967679..ef95fa00a 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: CoarseChecker - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -17,10 +17,8 @@ Material: m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -83,11 +81,8 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - _AlphaClip: 0 - - _AlphaToMask: 0 - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - _ClearCoatMask: 0 - _ClearCoatSmoothness: 0 @@ -96,7 +91,6 @@ Material: - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - _EnvironmentReflections: 1 - _GlossMapScale: 1 @@ -108,6 +102,7 @@ Material: - _OcclusionStrength: 1 - _Parallax: 0.02 - _QueueOffset: 0 + - _RadiusScale: 1 - _ReceiveShadows: 1 - _SampleGI: 0 - _Shininess: 0 @@ -117,7 +112,6 @@ Material: - _SpecSource: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - _Surface: 0 - _UVSec: 0 - _WorkflowMode: 1 @@ -142,4 +136,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 10 + version: 5 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat index 9444fb88f..ad9a04f8e 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat @@ -1,18 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-4641164658409323212 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -21,27 +8,23 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: FinishLine - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _ALPHAPREMULTIPLY_ON m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 + m_CustomRenderQueue: 3000 stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + RenderType: Transparent + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -64,7 +47,7 @@ Material: m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} - m_Scale: {x: 1, y: 1} + m_Scale: {x: 5, y: 5} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: m_Texture: {fileID: 0} @@ -78,39 +61,12 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 + - _DstBlend: 10 - _GlossMapScale: 1 - _Glossiness: 0.2 - _GlossyReflections: 1 @@ -118,21 +74,13 @@ Material: - _Mode: 3 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.2 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 + - _ZWrite: 0 m_Colors: - - _BaseColor: {r: 1, g: 0, b: 0, a: 1} - _Color: {r: 1, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0.9843137, g: 0.21960784, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Flesh.mat b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Flesh.mat index 60093fa26..0c8b428be 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Flesh.mat +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Flesh.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Flesh - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -17,18 +17,12 @@ Material: m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -65,39 +59,12 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 2 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.25 - _GlossyReflections: 1 @@ -105,34 +72,13 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.25 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 0.72530067, b: 0.61960775, a: 1} - - _Color: {r: 1, g: 0.72530067, b: 0.61960775, a: 1} + - _Color: {r: 1, g: 0.72530067, b: 0.61960787, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 ---- !u!114 &4664576965949414257 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Metal.mat b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Metal.mat index 1896de598..337a2a7e4 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Metal.mat +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Metal.mat @@ -8,28 +8,22 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Metal - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION m_InvalidKeywords: [] - m_LightmapFlags: 7 + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -66,77 +60,28 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - - _Glossiness: 0.6 + - _Glossiness: 0.7 - _GlossyReflections: 1 - _Metallic: 1 - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.6 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 0.47058815, g: 0.47058815, b: 0.47058815, a: 1} - - _Color: {r: 0.4705881, g: 0.4705881, b: 0.4705881, a: 1} + - _Color: {r: 0.6, g: 0.6, b: 0.6, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 ---- !u!114 &1911468319228164988 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat index 9bcd28ea3..1656355a7 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat @@ -8,21 +8,19 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: TestEnvironment - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION - _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A m_InvalidKeywords: [] - m_LightmapFlags: 7 + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -71,34 +69,15 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - _AlphaClip: 0 - - _AlphaToMask: 0 - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EnvironmentReflections: 1 - _GlossMapScale: 0.5 - _Glossiness: 0.5 @@ -113,11 +92,9 @@ Material: - _SmoothnessTextureChannel: 1 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - _Surface: 0 - _UVSec: 0 - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - _BaseColor: {r: 1, g: 1, b: 1, a: 1} @@ -138,4 +115,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 10 + version: 2 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat index e8a9a26b9..e4ac15cd9 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat @@ -2,20 +2,26 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: VertexColors m_Shader: {fileID: 4800000, guid: 96c602bba0bc94471862812f91285c9a, type: 3} - m_ShaderKeywords: _EMISSION _METALLICGLOSSMAP + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - _EMISSION + - _METALLICGLOSSMAP m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -79,3 +85,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Walls.mat b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Walls.mat index 34c0d0934..21e8d04db 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Walls.mat +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Materials/Walls.mat @@ -1,18 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-4663480162422728688 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -21,28 +8,22 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Walls - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION m_InvalidKeywords: [] - m_LightmapFlags: 7 + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -65,7 +46,7 @@ Material: m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} + m_Scale: {x: 9, y: 5} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: m_Texture: {fileID: 0} @@ -79,40 +60,13 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.3 - _GlossyReflections: 1 @@ -120,23 +74,14 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.3 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 0.49803913, g: 0.49803913, b: 0.49803913, a: 1} - - _Color: {r: 0.49803907, g: 0.49803907, b: 0.49803907, a: 1} + - _Color: {r: 0.49803922, g: 0.49803922, b: 0.49803922, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 0} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/Fan.fbx b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/Fan.fbx new file mode 100644 index 000000000..77ab5dd52 Binary files /dev/null and b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/Fan.fbx differ diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/Fan.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/Fan.fbx.meta new file mode 100644 index 000000000..cd9a62c9d --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/Fan.fbx.meta @@ -0,0 +1,171 @@ +fileFormatVersion: 2 +guid: 89e24673c05344d179c516868eb341b8 +ModelImporter: + serializedVersion: 21202 + internalIDToNameTable: + - first: + 1: 100000 + second: //RootNode + - first: + 1: 100002 + second: pCube2 + - first: + 1: 100004 + second: pCube3 + - first: + 1: 100006 + second: pCube4 + - first: + 1: 100008 + second: pCylinder1 + - first: + 4: 400000 + second: //RootNode + - first: + 4: 400002 + second: pCube2 + - first: + 4: 400004 + second: pCube3 + - first: + 4: 400006 + second: pCube4 + - first: + 4: 400008 + second: pCylinder1 + - first: + 23: 2300000 + second: pCube2 + - first: + 23: 2300002 + second: pCube3 + - first: + 23: 2300004 + second: pCube4 + - first: + 23: 2300006 + second: pCylinder1 + - first: + 33: 3300000 + second: pCube2 + - first: + 33: 3300002 + second: pCube3 + - first: + 33: 3300004 + second: pCube4 + - first: + 33: 3300006 + second: pCylinder1 + - first: + 43: 4300000 + second: pCylinder1 + - first: + 43: 4300002 + second: pCube2 + - first: + 43: 4300004 + second: pCube3 + - first: + 43: 4300006 + second: pCube4 + externalObjects: {} + materials: + materialImportMode: 0 + materialName: 0 + materialSearch: 1 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 40 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 0 + importBlendShapes: 1 + importCameras: 0 + importLights: 0 + nodeNameCollisionStrategy: 0 + fileIdsGeneration: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 0 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 40 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 0 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta index 45c3b5676..68499baea 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 64df75de10b494f109b074d28a8eade0 ModelImporter: - serializedVersion: 26 + serializedVersion: 21202 internalIDToNameTable: - first: 1: 100000 @@ -20,7 +20,7 @@ ModelImporter: second: pCube1 externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 0 materialSearch: 1 materialLocation: 0 @@ -29,6 +29,7 @@ ModelImporter: bakeSimulation: 0 resampleCurves: 1 optimizeGameObjects: 0 + removeConstantScaleCurves: 0 motionNodeName: rigImportErrors: rigImportWarnings: @@ -58,20 +59,27 @@ ModelImporter: importBlendShapes: 1 importCameras: 0 importLights: 0 + nodeNameCollisionStrategy: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 keepQuads: 0 weldVertices: 1 + bakeAxisConversion: 0 preserveHierarchy: 0 skinWeightsMode: 0 maxBonesPerVertex: 4 minBoneWeight: 0.001 + optimizeBones: 1 meshOptimizationFlags: -1 indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 0 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 secondaryUVPackMargin: 4 useFileScale: 1 tangentSpace: @@ -84,7 +92,6 @@ ModelImporter: normalSmoothingSource: 0 referencedClips: [] importAnimation: 1 - copyAvatar: 0 humanDescription: serializedVersion: 3 human: [] @@ -102,8 +109,11 @@ ModelImporter: hasExtraRoot: 0 skeletonHasParents: 1 lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 0 humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 0 additionalBone: 0 userData: assetBundleName: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs new file mode 100644 index 000000000..db2ef153a --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs @@ -0,0 +1,69 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Obi.Samples +{ + [RequireComponent(typeof(ObiSolver))] + public class ActorActorCollisionDetector : MonoBehaviour + { + public struct ActorPair + { + public readonly ObiActor actorA; + public readonly ObiActor actorB; + public int particleA; + public int particleB; + + public ActorPair(ObiActor actorA, ObiActor actorB, int particleA, int particleB) + { + this.actorA = actorA; + this.actorB = actorB; + this.particleA = particleA; + this.particleB = particleB; + } + } + + public UnityEvent callback; + ObiSolver solver; + + void OnEnable() + { + solver = GetComponent(); + solver.OnParticleCollision += Solver_OnCollision; + } + + void OnDisable() + { + solver.OnParticleCollision -= Solver_OnCollision; + } + + void Solver_OnCollision(object sender, ObiNativeContactList e) + { + if (!solver.initialized || callback == null) return; + + // just iterate over all contacts in the current frame: + foreach (Oni.Contact contact in e) + { + // if this one is an actual collision: + if (contact.distance < 0.01) + { + // get the index of the first entry in the simplices array for both bodies: + int startA = solver.simplexCounts.GetSimplexStartAndSize(contact.bodyA, out _); + int startB = solver.simplexCounts.GetSimplexStartAndSize(contact.bodyB, out _); + + // retrieve the index of both particles from the simplices array: + int particleA = solver.simplices[startA]; + int particleB = solver.simplices[startB]; + + // retrieve info about both actors involved in the collision: + var particleInActorA = solver.particleToActor[particleA]; + var particleInActorB = solver.particleToActor[particleB]; + + // if they're not the same actor, trigger a callback: + if (particleInActorA != null && particleInActorB != null && particleInActorA.actor != particleInActorB.actor) + callback.Invoke(new ActorPair(particleInActorA.actor, particleInActorB.actor, particleA, particleB)); + } + } + } + + } +} diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs.meta new file mode 100644 index 000000000..d036a2d12 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5a3cc3afb7a14486848b022c300ea32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs new file mode 100644 index 000000000..ec64776aa --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs @@ -0,0 +1,32 @@ +using UnityEngine; +using Obi; + +namespace Obi.Samples +{ + [RequireComponent(typeof(ObiActor))] + public class ActorBlinker : MonoBehaviour + { + public Color neutralColor = Color.white; + public Color highlightColor = Color.red; + private ObiActor actor; + + void Awake() + { + actor = GetComponent(); + } + + public void Blink(int particleIndex) + { + if (actor.solver != null) + actor.solver.colors[particleIndex] = highlightColor; + } + + void LateUpdate() + { + if (actor.solver != null) + for (int i = 0; i < actor.activeParticleCount; ++i) + actor.solver.colors[actor.solverIndices[i]] += (neutralColor - actor.solver.colors[actor.solverIndices[i]]) * Time.deltaTime * 5; + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs.meta new file mode 100644 index 000000000..95fad905d --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbbc507232dcc4cb1ae27d9474ddbe70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs index 051482236..018a320c4 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs @@ -1,21 +1,23 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -public class ActorCOMTransform : MonoBehaviour +namespace Obi.Samples { - - public Vector3 offset; - public ObiActor actor; - - public void Update() + public class ActorCOMTransform : MonoBehaviour { - if (actor != null && actor.isLoaded) + + public Vector3 offset; + public ObiActor actor; + + public void Update() { - Vector3 com; - actor.GetMass(out com); - transform.position = actor.solver.transform.TransformPoint(com) + offset; + if (actor != null && actor.isLoaded) + { + Vector3 com; + actor.GetMass(out com); + transform.position = actor.solver.transform.TransformPoint(com) + offset; + } } } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs index 5afb457fd..609290646 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs @@ -1,35 +1,33 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -public class ActorSpawner : MonoBehaviour { +namespace Obi.Samples +{ + public class ActorSpawner : MonoBehaviour + { - public ObiActor template; + public ObiActor template; - public int basePhase = 2; - public int maxInstances = 32; - public float spawnDelay = 0.3f; + public int maxInstances = 32; + public float spawnDelay = 0.3f; - private int phase = 0; - private int instances = 0; - private float timeFromLastSpawn = 0; - - // Update is called once per frame - void Update () { + private int instances = 0; + private float timeFromLastSpawn = 0; - timeFromLastSpawn += Time.deltaTime; + // Update is called once per frame + void Update() + { - if (Input.GetMouseButtonDown(0) && instances < maxInstances && timeFromLastSpawn > spawnDelay) - { - GameObject go = Instantiate(template.gameObject,transform.position,Quaternion.identity); - go.transform.SetParent(transform.parent); + timeFromLastSpawn += Time.deltaTime; - go.GetComponent().SetFilterCategory(basePhase + phase); - - phase++; - instances++; - timeFromLastSpawn = 0; - } - } -} + if (Input.GetMouseButtonDown(0) && instances < maxInstances && timeFromLastSpawn > spawnDelay) + { + GameObject go = Instantiate(template.gameObject, transform.position, Quaternion.identity); + go.transform.SetParent(transform.parent); + instances++; + timeFromLastSpawn = 0; + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs index 8a5cc8bcf..72fbe5837 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs @@ -1,16 +1,21 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -[RequireComponent(typeof(ObiActor))] -public class AddRandomVelocity : MonoBehaviour { +namespace Obi.Samples +{ + [RequireComponent(typeof(ObiActor))] + public class AddRandomVelocity : MonoBehaviour + { - public float intensity = 5; - - void Update () { - if (Input.GetKeyDown(KeyCode.Space)){ - GetComponent().AddForce(Random.onUnitSphere*intensity,ForceMode.VelocityChange); - } - } + public float intensity = 5; + + void Update() + { + if (Input.GetKeyDown(KeyCode.Space)) + { + GetComponent().AddForce(UnityEngine.Random.onUnitSphere * intensity, ForceMode.VelocityChange); + } + } + } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs index 897374084..b8fcd917f 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs @@ -1,23 +1,30 @@ using UnityEngine; -public class Blinker : MonoBehaviour { +namespace Obi.Samples +{ + public class Blinker : MonoBehaviour + { - public Color highlightColor; + public Color highlightColor; - private Renderer rend; - private Color original; + private Renderer rend; + private Color original; - void Awake(){ - rend = GetComponent(); - original = rend.material.color; - } + void Awake() + { + rend = GetComponent(); + original = rend.material.color; + } - public void Blink(){ - rend.material.color = highlightColor; - } + public void Blink() + { + rend.material.color = highlightColor; + } - void LateUpdate(){ - rend.material.color += (original - rend.material.color)*Time.deltaTime*5; - } + void LateUpdate() + { + rend.material.color += (original - rend.material.color) * Time.deltaTime * 5; + } -} + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs index 6d76046ea..93c6fb00e 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs @@ -33,7 +33,7 @@ namespace Obi{ } - private void FixedUpdate() + private void Update() { if (!m_Jump) { diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs index 190fcd29e..b53a0f8b5 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs @@ -1,48 +1,51 @@ using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using Obi; -[RequireComponent(typeof(ObiSolver))] -public class ColliderHighlighter : MonoBehaviour { +namespace Obi.Samples +{ + [RequireComponent(typeof(ObiSolver))] + public class ColliderHighlighter : MonoBehaviour + { - ObiSolver solver; + ObiSolver solver; - void Awake(){ - solver = GetComponent(); - } + void Awake() + { + solver = GetComponent(); + } - void OnEnable () { - solver.OnCollision += Solver_OnCollision; - } + void OnEnable() + { + solver.OnCollision += Solver_OnCollision; + } - void OnDisable(){ - solver.OnCollision -= Solver_OnCollision; - } - - void Solver_OnCollision (object sender, ObiSolver.ObiCollisionEventArgs e) - { - var colliderWorld = ObiColliderWorld.GetInstance(); + void OnDisable() + { + solver.OnCollision -= Solver_OnCollision; + } - Oni.Contact[] contacts = e.contacts.Data; - for(int i = 0; i < e.contacts.Count; ++i) - { - Oni.Contact c = contacts[i]; - // make sure this is an actual contact: - if (c.distance < 0.01f) - { - // get the collider: - var col = colliderWorld.colliderHandles[c.bodyB].owner; + void Solver_OnCollision(object sender, ObiNativeContactList e) + { + var colliderWorld = ObiColliderWorld.GetInstance(); - if (col != null) + for (int i = 0; i < e.count; ++i) + { + Oni.Contact c = e[i]; + // make sure this is an actual contact: + if (c.distance < 0.01f) { - // make it blink: - Blinker blinker = col.GetComponent(); - - if (blinker) - blinker.Blink(); - } - } - } - } + // get the collider: + var col = colliderWorld.colliderHandles[c.bodyB].owner; + + if (col != null) + { + // make it blink: + Blinker blinker = col.GetComponent(); + + if (blinker) + blinker.Blink(); + } + } + } + } + } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs index 27460b4c4..2db887399 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs @@ -1,184 +1,97 @@ using UnityEngine; using System.Collections; using System.Collections.Generic; -using Obi; -[RequireComponent(typeof(ObiSolver))] -public class CollisionEventHandler : MonoBehaviour +namespace Obi.Samples { - - ObiSolver solver; - public int contactCount; - - ObiSolver.ObiCollisionEventArgs frame; - - void Awake() + [RequireComponent(typeof(ObiSolver))] + public class CollisionEventHandler : MonoBehaviour { - solver = GetComponent(); - } - void OnEnable() - { - solver.OnParticleCollision += Solver_OnCollision; - } + ObiSolver solver; + public int contactCount; - void OnDisable() - { - solver.OnParticleCollision -= Solver_OnCollision; - } + ObiNativeContactList frame; - void Solver_OnCollision(object sender, ObiSolver.ObiCollisionEventArgs e) - { - frame = e; - } - - void OnDrawGizmos() - { - if (solver == null || frame == null || frame.contacts == null) return; - - Gizmos.matrix = solver.transform.localToWorldMatrix; - - contactCount = frame.contacts.Count; - - /*for (int i = 0; i < frame.contacts.Count; ++i) + void Awake() { - var contact = frame.contacts.Data[i]; + solver = GetComponent(); + } - //if (contact.distance > 0.001f) continue; - - Gizmos.color = (contact.distance <= 0) ? Color.red : Color.green; - - //Gizmos.color = new Color(((i * 100) % 255) / 255.0f, ((i * 50) % 255) / 255.0f, ((i * 20) % 255) / 255.0f); - - Vector3 point = frame.contacts.Data[i].pointB; - - Gizmos.DrawSphere(point, 0.01f); - - Gizmos.DrawRay(point, contact.normal * contact.distance); - - Gizmos.color = Color.cyan; - Gizmos.DrawRay(point, contact.tangent * contact.tangentImpulse + contact.bitangent * contact.bitangentImpulse); - - }*/ - - for (int i = 0; i < frame.contacts.Count; ++i) + void OnEnable() { - var contact = frame.contacts.Data[i]; + solver.OnCollision += Solver_OnCollision; + } - //if (contact.distance > 0.001f) continue; + void OnDisable() + { + solver.OnCollision -= Solver_OnCollision; + } - Gizmos.color = (contact.distance <= 0) ? Color.red : Color.green; + void Solver_OnCollision(object sender, ObiNativeContactList e) + { + frame = e; + } - //Gizmos.color = new Color(((i * 100) % 255) / 255.0f, ((i * 50) % 255) / 255.0f, ((i * 20) % 255) / 255.0f); + void OnDrawGizmos() + { + if (solver == null || frame == null) return; - Vector3 point = Vector3.zero;//frame.contacts.Data[i].point; + Gizmos.matrix = solver.transform.localToWorldMatrix; - int simplexStart = solver.simplexCounts.GetSimplexStartAndSize(contact.bodyB, out int simplexSize); + contactCount = frame.count; - float radius = 0; - for (int j = 0; j < simplexSize; ++j) + for (int i = 0; i < frame.count; ++i) { - point += (Vector3)solver.positions[solver.simplices[simplexStart + j]] * contact.pointB[j]; - radius += solver.principalRadii[solver.simplices[simplexStart + j]].x * contact.pointB[j]; + var contact = frame[i]; + + //if (contact.distance > 0.001f) continue; + + Gizmos.color = (contact.distance <= 0) ? Color.red : Color.green; + + //Gizmos.color = new Color(((i * 100) % 255) / 255.0f, ((i * 50) % 255) / 255.0f, ((i * 20) % 255) / 255.0f); + + Vector3 point = frame[i].pointB; + + Gizmos.DrawSphere(point, 0.01f); + + Gizmos.DrawRay(point, contact.normal * contact.distance); + + Gizmos.color = Color.cyan; + //Gizmos.DrawRay(point, contact.tangent * contact.tangentImpulse + contact.bitangent * contact.bitangentImpulse); + } - Vector3 normal = contact.normal; + /*for (int i = 0; i < frame.count; ++i) + { + var contact = frame[i]; - //Gizmos.DrawSphere(point + normal.normalized * frame.contacts[i].distance, 0.01f); + //if (contact.distance > 0.001f) continue; - Gizmos.DrawSphere(point + normal * radius, 0.01f); + Gizmos.color = (contact.distance <= 0) ? Color.red : Color.green; - Gizmos.DrawRay(point + normal * radius, normal.normalized * contact.distance); + //Gizmos.color = new Color(((i * 100) % 255) / 255.0f, ((i * 50) % 255) / 255.0f, ((i * 20) % 255) / 255.0f); + + Vector3 point = Vector3.zero;//frame.contacts.Data[i].point; + + int simplexStart = solver.simplexCounts.GetSimplexStartAndSize(contact.bodyB, out int simplexSize); + + float radius = 0; + for (int j = 0; j < simplexSize; ++j) + { + point += (Vector3)solver.positions[solver.simplices[simplexStart + j]] * contact.pointB[j]; + radius += solver.principalRadii[solver.simplices[simplexStart + j]].x * contact.pointB[j]; + } + + Vector3 normal = contact.normal; + + //Gizmos.DrawSphere(point + normal.normalized * frame.contacts[i].distance, 0.01f); + + Gizmos.DrawSphere(point + normal * radius, 0.01f); + + Gizmos.DrawRay(point + normal * radius, normal.normalized * contact.distance); + }*/ } + } - } - -/* -[RequireComponent(typeof(ObiSolver))] -public class CollisionEventHandler : MonoBehaviour { - - ObiSolver solver; - public int counter = 0; - public Collider targetCollider = null; - - HashSet particles = new HashSet(); - - void Awake(){ - solver = GetComponent(); - } - - void OnEnable () { - solver.OnCollision += Solver_OnCollision; - } - - void OnDisable(){ - solver.OnCollision -= Solver_OnCollision; - } - - void Solver_OnCollision (object sender, Obi.ObiSolver.ObiCollisionEventArgs e) - { - HashSet currentParticles = new HashSet(); - - for(int i = 0; i < e.contacts.Count; ++i) - { - if (e.contacts.Data[i].distance < 0.001f) - { - - Component collider; - if (ObiCollider.idToCollider.TryGetValue(e.contacts.Data[i].other,out collider)){ - - if (collider == targetCollider) - currentParticles.Add(e.contacts.Data[i].particle); - - } - } - } - - particles.ExceptWith(currentParticles); - counter += particles.Count; - particles = currentParticles; - } - -} -*/ - -/*[RequireComponent(typeof(ObiSolver))] -public class CollisionEventHandler : MonoBehaviour { - - ObiSolver solver; - public Collider targetCollider = null; - - void Awake(){ - solver = GetComponent(); - } - - void OnEnable () { - solver.OnCollision += Solver_OnCollision; - } - - void OnDisable(){ - solver.OnCollision -= Solver_OnCollision; - } - - void Solver_OnCollision (object sender, Obi.ObiSolver.ObiCollisionEventArgs e) - { - - for(int i = 0; i < e.contacts.Count; ++i) - { - if (e.contacts.Data[i].distance < 0.001f) - { - Component collider; - if (ObiCollider.idToCollider.TryGetValue(e.contacts.Data[i].other,out collider)){ - - if (collider == targetCollider) - - solver.viscosities[e.contacts.Data[i].particle] = Mathf.Max(0,solver.viscosities[e.contacts.Data[i].particle] - 0.1f * Time.fixedDeltaTime); - - } - } - } - - } - -}*/ diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs index af3d4df10..5fcfe1c98 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs @@ -3,7 +3,7 @@ using System; using System.Collections; using System.Collections.Generic; -namespace Obi +namespace Obi.Samples { /** * Sample script that colors fluid particles based on their vorticity (2D only) @@ -22,7 +22,7 @@ namespace Obi if (!isActiveAndEnabled || actor.solver == null) return; - for (int i = 0; i < actor.solverIndices.Length; ++i) + for (int i = 0; i < actor.solverIndices.count; ++i) { int k = actor.solverIndices[i]; diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs index 3c1d5552f..a1cf04c61 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs @@ -3,7 +3,7 @@ using System; using System.Collections; using System.Collections.Generic; -namespace Obi +namespace Obi.Samples { /** * Sample script that colors fluid particles based on their vorticity (2D only) @@ -25,7 +25,7 @@ namespace Obi if (!isActiveAndEnabled || actor.solver == null) return; - for (int i = 0; i < actor.solverIndices.Length; ++i){ + for (int i = 0; i < actor.solverIndices.count; ++i){ int k = actor.solverIndices[i]; diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs index dcc1ba2d7..c445dfc28 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs @@ -1,9 +1,6 @@ using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; -namespace Obi +namespace Obi.Samples { [RequireComponent(typeof(ObiActor))] public class ColorRandomizer : MonoBehaviour @@ -14,13 +11,16 @@ namespace Obi void Start() { actor = GetComponent(); + actor.OnBlueprintLoaded += Actor_OnBlueprintLoaded; + } - for (int i = 0; i < actor.solverIndices.Length; ++i) + private void Actor_OnBlueprintLoaded(ObiActor a, ObiActorBlueprint blueprint) + { + for (int i = 0; i < actor.solverIndices.count; ++i) { actor.solver.colors[actor.solverIndices[i]] = gradient.Evaluate(UnityEngine.Random.value); - } - } - - } + } + } + } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs index 25e1f211b..298017a89 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs @@ -1,39 +1,42 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -[ExecuteInEditMode] -[RequireComponent(typeof(ObiActor))] -public class DebugParticleFrames : MonoBehaviour { +namespace Obi.Samples +{ + [ExecuteInEditMode] + [RequireComponent(typeof(ObiActor))] + public class DebugParticleFrames : MonoBehaviour + { - ObiActor actor; - public float size = 1; - - public void Awake() - { - actor = GetComponent(); - } - - // Update is called once per frame - void OnDrawGizmos () - { - Vector4 b1 = new Vector4(1, 0, 0, 0); - Vector4 b2 = new Vector4(0, 1, 0, 0); - Vector4 b3 = new Vector4(0, 0, 1, 0); - for (int i = 0; i < actor.activeParticleCount; ++i) + ObiActor actor; + public float size = 1; + + public void Awake() { + actor = GetComponent(); + } - Vector3 position = actor.GetParticlePosition(actor.solverIndices[i]); - Quaternion quat = actor.GetParticleOrientation(actor.solverIndices[i]); - - Gizmos.color = Color.red; - Gizmos.DrawRay(position, quat * b1 * size); - Gizmos.color = Color.green; - Gizmos.DrawRay(position, quat * b2 * size); - Gizmos.color = Color.blue; - Gizmos.DrawRay(position, quat * b3 * size); - } - - } + // Update is called once per frame + void OnDrawGizmos() + { + Vector4 b1 = new Vector4(1, 0, 0, 0); + Vector4 b2 = new Vector4(0, 1, 0, 0); + Vector4 b3 = new Vector4(0, 0, 1, 0); + for (int i = 0; i < actor.activeParticleCount; ++i) + { + + Vector3 position = actor.GetParticlePosition(actor.solverIndices[i]); + Quaternion quat = actor.GetParticleOrientation(actor.solverIndices[i]); + + Gizmos.color = Color.red; + Gizmos.DrawRay(position, quat * b1 * size); + Gizmos.color = Color.green; + Gizmos.DrawRay(position, quat * b2 * size); + Gizmos.color = Color.blue; + Gizmos.DrawRay(position, quat * b3 * size); + } + + } + } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs index 4f7a13465..ff7bb55d0 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs @@ -1,76 +1,78 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -public class ExtrapolationCamera : MonoBehaviour +namespace Obi.Samples { - public Transform target = null; - - public float extrapolation = 10; - - [Range(0, 1)] - public float smoothness = 0.8f; - - [Range(0, 1)] - public float linearSpeed = 1; - - [Range(0, 1)] - public float rotationalSpeed = 1; - - [Min(0)] - public float distanceFromTarget = 4; - - Vector3 lastPosition; - Vector3 extrapolatedPos; - - void Start() + public class ExtrapolationCamera : MonoBehaviour { - if (target != null) - lastPosition = target.position; - } + public Transform target = null; - private void FixedUpdate() - { - if (target != null) + public float extrapolation = 10; + + [Range(0, 1)] + public float smoothness = 0.8f; + + [Range(0, 1)] + public float linearSpeed = 1; + + [Range(0, 1)] + public float rotationalSpeed = 1; + + [Min(0)] + public float distanceFromTarget = 4; + + Vector3 lastPosition; + Vector3 extrapolatedPos; + + void Start() { - // Get position delta since the last physics update: - Vector3 positionDelta = target.position - lastPosition; - positionDelta.y = 0; - - // extrapolate position using velocity (the division/multiplication by Time.deltaTime simplify out) - extrapolatedPos = Vector3.Lerp(target.position + positionDelta * extrapolation, extrapolatedPos, smoothness); - - // store the target's current com for the next frame: - lastPosition = target.position; + if (target != null) + lastPosition = target.position; } - } - void LateUpdate() - { - if (target != null) + private void FixedUpdate() { - // get vector from the camera to the extrapolated position: - Vector3 toTarget = extrapolatedPos - transform.position; + if (target != null) + { + // Get position delta since the last physics update: + Vector3 positionDelta = target.position - lastPosition; + positionDelta.y = 0; - // rotate the camera towards the extrapolated position: - transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(toTarget), rotationalSpeed); - - // keep our current world space height: - toTarget.y = 0; - - // move the camera towards the extrapolated position, keeping some distance to it: - transform.position += toTarget.normalized * (toTarget.magnitude - distanceFromTarget) * linearSpeed; + // extrapolate position using velocity (the division/multiplication by Time.deltaTime simplify out) + extrapolatedPos = Vector3.Lerp(target.position + positionDelta * extrapolation, extrapolatedPos, smoothness); + // store the target's current com for the next frame: + lastPosition = target.position; + } } - } - public void Teleport(Vector3 position, Quaternion rotation) - { - transform.position = position; - transform.rotation = rotation; + void LateUpdate() + { + if (target != null) + { + // get vector from the camera to the extrapolated position: + Vector3 toTarget = extrapolatedPos - transform.position; - if (target != null) - extrapolatedPos = lastPosition = target.position; + // rotate the camera towards the extrapolated position: + transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(toTarget), rotationalSpeed); + + // keep our current world space height: + toTarget.y = 0; + + // move the camera towards the extrapolated position, keeping some distance to it: + transform.position += toTarget.normalized * (toTarget.magnitude - distanceFromTarget) * linearSpeed; + + } + } + + public void Teleport(Vector3 position, Quaternion rotation) + { + transform.position = position; + transform.rotation = rotation; + + if (target != null) + extrapolatedPos = lastPosition = target.position; + } } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs index 2433ea770..bd83d2163 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs @@ -2,56 +2,59 @@ using UnityEngine.UI; using System.Collections; -[RequireComponent(typeof(Text))] -public class FPSDisplay : MonoBehaviour +namespace Obi.Samples { - public float updateInterval = 0.5f; - - public bool showMedian = false; - public float medianLearnrate = 0.05f; - - private float accum = 0; // FPS accumulated over the interval - private int frames = 0; // Frames drawn over the interval - private float timeleft; // Left time for current interval - private float currentFPS = 0; - - private float median = 0; - private float average = 0; - - public float CurrentFPS{ - get { return currentFPS; } - } - - public float FPSMedian + [RequireComponent(typeof(Text))] + public class FPSDisplay : MonoBehaviour { - get { return median; } - } + public float updateInterval = 0.5f; - public float FPSAverage - { - get { return average; } - } + public bool showMedian = false; + public float medianLearnrate = 0.05f; - Text uguiText; + private float accum = 0; // FPS accumulated over the interval + private int frames = 0; // Frames drawn over the interval + private float timeleft; // Left time for current interval + private float currentFPS = 0; - void Start() - { - uguiText = GetComponent(); - timeleft = updateInterval; - } + private float median = 0; + private float average = 0; - void Update() - { - // Timing inside the editor is not accurate. Only use in actual build. + public float CurrentFPS + { + get { return currentFPS; } + } - //#if !UNITY_EDITOR + public float FPSMedian + { + get { return median; } + } + + public float FPSAverage + { + get { return average; } + } + + Text uguiText; + + void Start() + { + uguiText = GetComponent(); + timeleft = updateInterval; + } + + void Update() + { + // Timing inside the editor is not accurate. Only use in actual build. + + //#if !UNITY_EDITOR timeleft -= Time.deltaTime; - accum += Time.timeScale/Time.deltaTime; + accum += Time.timeScale / Time.deltaTime; ++frames; - + // Interval ended - update GUI text and start new interval - if( timeleft <= 0.0) + if (timeleft <= 0.0) { currentFPS = accum / frames; @@ -60,18 +63,19 @@ public class FPSDisplay : MonoBehaviour // display two fractional digits (f2 format) float fps = showMedian ? median : currentFPS; - uguiText.text = System.String.Format("{0:F2} FPS ({1:F1} ms)", fps, 1000.0f / fps); + uguiText.text = System.String.Format("{0:F2} FPS ({1:F1} ms)", fps, 1000.0f / fps); timeleft = updateInterval; accum = 0.0F; frames = 0; } - //#endif - } + //#endif + } - public void ResetMedianAndAverage() - { - median = 0; - average = 0; + public void ResetMedianAndAverage() + { + median = 0; + average = 0; + } } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs index bcd4788a5..79bcebe3e 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace Obi +namespace Obi.Samples { [RequireComponent(typeof(Camera))] public class LookAroundCamera : MonoBehaviour @@ -64,7 +64,10 @@ namespace Obi currentShot.position += delta * Time.deltaTime * movementSpeed; - if (Input.GetKey(KeyCode.Mouse0)) + var system = UnityEngine.EventSystems.EventSystem.current; + bool focusUI = system != null && system.IsPointerOverGameObject(); + + if (Input.GetKey(KeyCode.Mouse0) && !focusUI) { float deltaX = Input.GetAxis("Mouse X") * rotationSpeed; float deltaY = Input.GetAxis("Mouse Y") * rotationSpeed; diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs index 7597a980e..a077e14f6 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs @@ -1,7 +1,7 @@ using System; using UnityEngine; -namespace Obi +namespace Obi.Samples { public class MoveAndRotate : MonoBehaviour { diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs index d9b6f8d66..ba39a0312 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs @@ -1,15 +1,17 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -public class ObiActorTeleport : MonoBehaviour +namespace Obi.Samples { - public ObiActor actor; - public Transform target; - - public void Teleport() + public class ObiActorTeleport : MonoBehaviour { - actor.Teleport(target.position, target.rotation); + public ObiActor actor; + public Transform target; + + public void Teleport() + { + actor.Teleport(target.position, target.rotation); + } } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs index 9f464b185..ae6fcf333 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs @@ -1,53 +1,58 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -[RequireComponent(typeof(ObiSolver))] -public class ObiParticleCounter : MonoBehaviour { - - ObiSolver solver; - public int counter = 0; - public Collider2D targetCollider = null; - - ObiSolver.ObiCollisionEventArgs frame; - HashSet particles = new HashSet(); - - void Awake(){ - solver = GetComponent(); - } - - void OnEnable () { - solver.OnCollision += Solver_OnCollision; - } - - void OnDisable(){ - solver.OnCollision -= Solver_OnCollision; - } - - void Solver_OnCollision (object sender, ObiSolver.ObiCollisionEventArgs e) +namespace Obi.Samples +{ + [RequireComponent(typeof(ObiSolver))] + public class ObiParticleCounter : MonoBehaviour { - HashSet currentParticles = new HashSet(); - - for(int i = 0; i < e.contacts.Count; ++i) + + ObiSolver solver; + public int counter = 0; + public Collider2D targetCollider = null; + + ObiNativeContactList frame; + HashSet particles = new HashSet(); + + void Awake() { - if (e.contacts.Data[i].distance < 0.001f) - { - - /*Component collider; - if (ObiCollider2D.idToCollider.TryGetValue(e.contacts.Data[i].other,out collider)){ - - if (collider == targetCollider) - currentParticles.Add(e.contacts.Data[i].particle); - - }*/ - } + solver = GetComponent(); + } + + void OnEnable() + { + solver.OnCollision += Solver_OnCollision; + } + + void OnDisable() + { + solver.OnCollision -= Solver_OnCollision; + } + + void Solver_OnCollision(object sender, ObiNativeContactList e) + { + HashSet currentParticles = new HashSet(); + + for (int i = 0; i < e.count; ++i) + { + if (e[i].distance < 0.001f) + { + + /*Component collider; + if (ObiCollider2D.idToCollider.TryGetValue(e.contacts.Data[i].other,out collider)){ + + if (collider == targetCollider) + currentParticles.Add(e.contacts.Data[i].particle); + + }*/ + } + } + + particles.ExceptWith(currentParticles); + counter += particles.Count; + particles = currentParticles; Debug.Log(counter); } - particles.ExceptWith(currentParticles); - counter += particles.Count; - particles = currentParticles;Debug.Log(counter); } - } - diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs index 1ca0319cf..9f8127d1a 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs @@ -1,23 +1,25 @@ using UnityEngine; using System.Collections; - -public class ObjectDragger : MonoBehaviour -{ - - private Vector3 screenPoint; - private Vector3 offset; - - void OnMouseDown() - { - screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position); - offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); - } - - void OnMouseDrag() - { - Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); - transform.position = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; - } - +namespace Obi.Samples +{ + public class ObjectDragger : MonoBehaviour + { + + private Vector3 screenPoint; + private Vector3 offset; + + void OnMouseDown() + { + screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position); + offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); + } + + void OnMouseDrag() + { + Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); + transform.position = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; + } + + } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs index 9bea6154e..673104e56 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs @@ -1,22 +1,25 @@ using UnityEngine; using System.Collections; - - public class ObjectLimit : MonoBehaviour - { - - public float minX = 0; - public float maxX = 1; - public float minY = 0; - public float maxY = 1; - public float minZ = 0; - public float maxZ = 1; - - void Update() - { - transform.localPosition = new Vector3(Mathf.Clamp(gameObject.transform.localPosition.x,minX,maxX), - Mathf.Clamp(gameObject.transform.localPosition.y,minY,maxY), - Mathf.Clamp(gameObject.transform.localPosition.z,minZ,maxZ)); - - } - - } \ No newline at end of file + +namespace Obi.Samples +{ + public class ObjectLimit : MonoBehaviour + { + + public float minX = 0; + public float maxX = 1; + public float minY = 0; + public float maxY = 1; + public float minZ = 0; + public float maxZ = 1; + + void Update() + { + transform.localPosition = new Vector3(Mathf.Clamp(gameObject.transform.localPosition.x, minX, maxX), + Mathf.Clamp(gameObject.transform.localPosition.y, minY, maxY), + Mathf.Clamp(gameObject.transform.localPosition.z, minZ, maxZ)); + + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs new file mode 100644 index 000000000..aff42672f --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi.Samples +{ + [RequireComponent(typeof(Rigidbody))] + public class RigidbodyMaxAngularVel : MonoBehaviour + { + public float maxAngularVelocity = 20; + + // Start is called before the first frame update + void Start() + { + GetComponent().maxAngularVelocity = maxAngularVelocity; + } + + // Update is called once per frame + void Update() + { + + } + } +} diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs.meta b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs.meta new file mode 100644 index 000000000..bdba51d88 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c31446bcaf82443aa64afa152fac3d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs index 2e9072166..5b70d25ac 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs @@ -2,9 +2,14 @@ using System.Collections.Generic; using UnityEngine; -public class SlowmoToggler : MonoBehaviour { +namespace Obi.Samples +{ + public class SlowmoToggler : MonoBehaviour + { - public void Slowmo (bool slowmo) { - Time.timeScale = slowmo?0.25f:1; - } + public void Slowmo(bool slowmo) + { + Time.timeScale = slowmo ? 0.25f : 1; + } + } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs index c91f8816c..fc9c9971a 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs @@ -1,21 +1,24 @@ using UnityEngine; using Obi; -[RequireComponent(typeof(ObiSolver))] -public class WorldSpaceGravity : MonoBehaviour +namespace Obi.Samples { - - ObiSolver solver; - public Vector3 worldGravity = new Vector3(0,-9.81f,0); - - void Awake() + [RequireComponent(typeof(ObiSolver))] + public class WorldSpaceGravity : MonoBehaviour { - solver = GetComponent(); - } - void Update() - { - solver.parameters.gravity = transform.InverseTransformDirection(worldGravity); - solver.PushSolverParameters(); + ObiSolver solver; + public Vector3 worldGravity = new Vector3(0, -9.81f, 0); + + void Awake() + { + solver = GetComponent(); + } + + void Update() + { + solver.parameters.gravity = transform.InverseTransformDirection(worldGravity); + solver.PushSolverParameters(); + } } } diff --git a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/SparksEmitter.prefab b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/SparksEmitter.prefab index e9eff4b83..08f4e732f 100644 --- a/Assets/ThirdParty/Obi/Samples/Common/SampleResources/SparksEmitter.prefab +++ b/Assets/ThirdParty/Obi/Samples/Common/SampleResources/SparksEmitter.prefab @@ -25,12 +25,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1583403103468830} + serializedVersion: 2 m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 1.703, y: 0.731, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!198 &198836399661015336 ParticleSystem: @@ -214,6 +215,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: @@ -243,6 +245,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 startSize: @@ -564,6 +567,7 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 randomizeRotationDirection: 0 + gravitySource: 0 maxNumParticles: 400 customEmitterVelocity: {x: 0, y: 0, z: 0} size3D: 0 @@ -1467,6 +1471,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 3 m_NumAlphaKeys: 2 minGradient: @@ -1496,6 +1501,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 UVModule: @@ -3716,6 +3722,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: @@ -3745,6 +3752,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 range: {x: 0, y: 1} @@ -4134,6 +4142,7 @@ ParticleSystem: m_RotationOrder: 4 minVertexDistance: 0.2 textureMode: 0 + textureScale: {x: 1, y: 1} ribbonCount: 1 shadowBias: 0.5 worldSpace: 0 @@ -4176,6 +4185,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: @@ -4205,6 +4215,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 widthOverTrail: @@ -4292,6 +4303,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: @@ -4321,6 +4333,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 CustomDataModule: @@ -4359,6 +4372,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: @@ -4388,6 +4402,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 colorLabel0: Color @@ -4641,6 +4656,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 minGradient: @@ -4670,6 +4686,7 @@ ParticleSystem: atime6: 0 atime7: 0 m_Mode: 0 + m_ColorSpace: -1 m_NumColorKeys: 2 m_NumAlphaKeys: 2 colorLabel1: Color @@ -4907,6 +4924,11 @@ ParticleSystemRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -4929,10 +4951,12 @@ ParticleSystemRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 m_RenderMode: 1 + m_MeshDistribution: 0 m_SortMode: 0 m_MinParticleSize: 0 m_MaxParticleSize: 0.5 @@ -4945,15 +4969,21 @@ ParticleSystemRenderer: m_RenderAlignment: 0 m_Pivot: {x: 0, y: 0, z: 0} m_Flip: {x: 0, y: 0, z: 0} - m_UseCustomVertexStreams: 0 m_EnableGPUInstancing: 0 m_ApplyActiveColorSpace: 0 m_AllowRoll: 1 m_FreeformStretching: 0 m_RotateWithStretchDirection: 1 + m_UseCustomVertexStreams: 0 m_VertexStreams: 0001030405 + m_UseCustomTrailVertexStreams: 0 + m_TrailVertexStreams: 00010304 m_Mesh: {fileID: 0} m_Mesh1: {fileID: 0} m_Mesh2: {fileID: 0} m_Mesh3: {fileID: 0} + m_MeshWeighting: 1 + m_MeshWeighting1: 1 + m_MeshWeighting2: 1 + m_MeshWeighting3: 1 m_MaskInteraction: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CableCar.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CableCar.unity new file mode 100644 index 000000000..7377017d8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CableCar.unity @@ -0,0 +1,3602 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 664654699} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &158742032 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 158742033} + - component: {fileID: 158742035} + - component: {fileID: 158742034} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &158742033 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 158742032} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.82, y: 0.929, z: 0} + m_LocalScale: {x: 3, y: 0.058823526, z: 0.3333333} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1359249594} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &158742034 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 158742032} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &158742035 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 158742032} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &282899373 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 282899377} + - component: {fileID: 282899376} + - component: {fileID: 282899375} + - component: {fileID: 282899374} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &282899374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282899373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &282899375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282899373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &282899376 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282899373} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &282899377 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282899373} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2087273468} + - {fileID: 665462092} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &318045077 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318045078} + - component: {fileID: 318045080} + - component: {fileID: 318045079} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318045078 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318045077} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.82, y: 0.929, z: 0} + m_LocalScale: {x: 3, y: 0.058823526, z: 0.3333333} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 452639195} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &318045079 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318045077} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &318045080 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318045077} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &352165315 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 352165316} + - component: {fileID: 352165319} + - component: {fileID: 352165317} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &352165316 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 352165315} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.82, y: 0.929, z: 0} + m_LocalScale: {x: 3, y: 0.058823526, z: 0.3333333} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1625299420} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &352165317 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 352165315} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &352165319 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 352165315} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} + m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &452639190 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 452639195} + - component: {fileID: 452639194} + - component: {fileID: 452639193} + - component: {fileID: 452639192} + - component: {fileID: 452639191} + m_Layer: 0 + m_Name: Post (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &452639191 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452639190} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &452639192 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452639190} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &452639193 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452639190} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &452639194 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452639190} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &452639195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452639190} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 2.73, y: 2, z: -2.57} + m_LocalScale: {x: 0.3, y: 2, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 318045078} + - {fileID: 571024694} + - {fileID: 669702488} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!1 &488353305 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 488353306} + - component: {fileID: 488353309} + - component: {fileID: 488353308} + - component: {fileID: 488353307} + - component: {fileID: 488353316} + - component: {fileID: 488353315} + - component: {fileID: 488353314} + - component: {fileID: 488353313} + - component: {fileID: 488353312} + - component: {fileID: 488353311} + - component: {fileID: 488353310} + - component: {fileID: 488353318} + - component: {fileID: 488353317} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &488353306 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 754643806} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &488353307 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 40} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &488353308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !u!114 &488353309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 18.60432 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.18564853 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.18596585 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.18565044 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.18601711 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.18576063 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.18583234 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.18588233 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.18583456 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.18592378 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.18579607 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.1858063 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.1861207 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.19971544 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.19943272 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.19898842 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.19928476 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.19936812 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.19907406 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.19931118 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.19934076 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.19907784 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.19906293 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.19933437 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.1992483 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.19919144 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + restLength: 0.19944213 + constraintForce: 0 + tearResistance: 1 + - particle1: 26 + particle2: 27 + restLength: 0.19925661 + constraintForce: 0 + tearResistance: 1 + - particle1: 27 + particle2: 28 + restLength: 0.19924371 + constraintForce: 0 + tearResistance: 1 + - particle1: 28 + particle2: 29 + restLength: 0.19933179 + constraintForce: 0 + tearResistance: 1 + - particle1: 29 + particle2: 30 + restLength: 0.19922554 + constraintForce: 0 + tearResistance: 1 + - particle1: 30 + particle2: 31 + restLength: 0.1993162 + constraintForce: 0 + tearResistance: 1 + - particle1: 31 + particle2: 32 + restLength: 0.1992752 + constraintForce: 0 + tearResistance: 1 + - particle1: 32 + particle2: 33 + restLength: 0.199276 + constraintForce: 0 + tearResistance: 1 + - particle1: 33 + particle2: 34 + restLength: 0.19927499 + constraintForce: 0 + tearResistance: 1 + - particle1: 34 + particle2: 35 + restLength: 0.19931632 + constraintForce: 0 + tearResistance: 1 + - particle1: 35 + particle2: 36 + restLength: 0.19922356 + constraintForce: 0 + tearResistance: 1 + - particle1: 36 + particle2: 37 + restLength: 0.19934614 + constraintForce: 0 + tearResistance: 1 + - particle1: 37 + particle2: 38 + restLength: 0.19922769 + constraintForce: 0 + tearResistance: 1 + - particle1: 38 + particle2: 39 + restLength: 0.19926094 + constraintForce: 0 + tearResistance: 1 + - particle1: 39 + particle2: 40 + restLength: 0.1994527 + constraintForce: 0 + tearResistance: 1 + - particle1: 40 + particle2: 41 + restLength: 0.17630634 + constraintForce: 0 + tearResistance: 1 + - particle1: 41 + particle2: 42 + restLength: 0.1766938 + constraintForce: 0 + tearResistance: 1 + - particle1: 42 + particle2: 43 + restLength: 0.17595129 + constraintForce: 0 + tearResistance: 1 + - particle1: 43 + particle2: 44 + restLength: 0.17587988 + constraintForce: 0 + tearResistance: 1 + - particle1: 44 + particle2: 45 + restLength: 0.17602395 + constraintForce: 0 + tearResistance: 1 + - particle1: 45 + particle2: 46 + restLength: 0.17617115 + constraintForce: 0 + tearResistance: 1 + - particle1: 46 + particle2: 47 + restLength: 0.17634629 + constraintForce: 0 + tearResistance: 1 + - particle1: 47 + particle2: 48 + restLength: 0.17855187 + constraintForce: 0 + tearResistance: 1 + - particle1: 48 + particle2: 49 + restLength: 0.17836717 + constraintForce: 0 + tearResistance: 1 + - particle1: 49 + particle2: 50 + restLength: 0.17838444 + constraintForce: 0 + tearResistance: 1 + - particle1: 50 + particle2: 51 + restLength: 0.178448 + constraintForce: 0 + tearResistance: 1 + - particle1: 51 + particle2: 52 + restLength: 0.17842674 + constraintForce: 0 + tearResistance: 1 + - particle1: 52 + particle2: 53 + restLength: 0.17843884 + constraintForce: 0 + tearResistance: 1 + - particle1: 53 + particle2: 54 + restLength: 0.17857191 + constraintForce: 0 + tearResistance: 1 + - particle1: 54 + particle2: 55 + restLength: 0.19458835 + constraintForce: 0 + tearResistance: 1 + - particle1: 55 + particle2: 56 + restLength: 0.19471198 + constraintForce: 0 + tearResistance: 1 + - particle1: 56 + particle2: 57 + restLength: 0.19477776 + constraintForce: 0 + tearResistance: 1 + - particle1: 57 + particle2: 58 + restLength: 0.19480988 + constraintForce: 0 + tearResistance: 1 + - particle1: 58 + particle2: 59 + restLength: 0.19482192 + constraintForce: 0 + tearResistance: 1 + - particle1: 59 + particle2: 60 + restLength: 0.19482367 + constraintForce: 0 + tearResistance: 1 + - particle1: 60 + particle2: 61 + restLength: 0.1948015 + constraintForce: 0 + tearResistance: 1 + - particle1: 61 + particle2: 62 + restLength: 0.19473623 + constraintForce: 0 + tearResistance: 1 + - particle1: 62 + particle2: 63 + restLength: 0.19476943 + constraintForce: 0 + tearResistance: 1 + - particle1: 63 + particle2: 64 + restLength: 0.19480366 + constraintForce: 0 + tearResistance: 1 + - particle1: 64 + particle2: 65 + restLength: 0.19482858 + constraintForce: 0 + tearResistance: 1 + - particle1: 65 + particle2: 66 + restLength: 0.19484122 + constraintForce: 0 + tearResistance: 1 + - particle1: 66 + particle2: 67 + restLength: 0.19484922 + constraintForce: 0 + tearResistance: 1 + - particle1: 67 + particle2: 68 + restLength: 0.1948556 + constraintForce: 0 + tearResistance: 1 + - particle1: 68 + particle2: 69 + restLength: 0.19484958 + constraintForce: 0 + tearResistance: 1 + - particle1: 69 + particle2: 70 + restLength: 0.19484664 + constraintForce: 0 + tearResistance: 1 + - particle1: 70 + particle2: 71 + restLength: 0.19483826 + constraintForce: 0 + tearResistance: 1 + - particle1: 71 + particle2: 72 + restLength: 0.19481866 + constraintForce: 0 + tearResistance: 1 + - particle1: 72 + particle2: 73 + restLength: 0.1947577 + constraintForce: 0 + tearResistance: 1 + - particle1: 73 + particle2: 74 + restLength: 0.19461222 + constraintForce: 0 + tearResistance: 1 + - particle1: 74 + particle2: 75 + restLength: 0.19427651 + constraintForce: 0 + tearResistance: 1 + - particle1: 75 + particle2: 76 + restLength: 0.19059443 + constraintForce: 0 + tearResistance: 1 + - particle1: 76 + particle2: 77 + restLength: 0.19353278 + constraintForce: 0 + tearResistance: 1 + - particle1: 77 + particle2: 78 + restLength: 0.19126464 + constraintForce: 0 + tearResistance: 1 + - particle1: 78 + particle2: 79 + restLength: 0.19203633 + constraintForce: 0 + tearResistance: 1 + - particle1: 79 + particle2: 80 + restLength: 0.1922527 + constraintForce: 0 + tearResistance: 1 + - particle1: 80 + particle2: 81 + restLength: 0.19227861 + constraintForce: 0 + tearResistance: 1 + - particle1: 81 + particle2: 82 + restLength: 0.19226435 + constraintForce: 0 + tearResistance: 1 + - particle1: 82 + particle2: 83 + restLength: 0.19226244 + constraintForce: 0 + tearResistance: 1 + - particle1: 83 + particle2: 84 + restLength: 0.19227688 + constraintForce: 0 + tearResistance: 1 + - particle1: 84 + particle2: 85 + restLength: 0.19230759 + constraintForce: 0 + tearResistance: 1 + - particle1: 85 + particle2: 86 + restLength: 0.19232152 + constraintForce: 0 + tearResistance: 1 + - particle1: 86 + particle2: 87 + restLength: 0.19231874 + constraintForce: 0 + tearResistance: 1 + - particle1: 87 + particle2: 88 + restLength: 0.1922695 + constraintForce: 0 + tearResistance: 1 + - particle1: 88 + particle2: 89 + restLength: 0.192091 + constraintForce: 0 + tearResistance: 1 + - particle1: 89 + particle2: 90 + restLength: 0.19219275 + constraintForce: 0 + tearResistance: 1 + - particle1: 90 + particle2: 91 + restLength: 0.19225457 + constraintForce: 0 + tearResistance: 1 + - particle1: 91 + particle2: 92 + restLength: 0.19226341 + constraintForce: 0 + tearResistance: 1 + - particle1: 92 + particle2: 93 + restLength: 0.19222912 + constraintForce: 0 + tearResistance: 1 + - particle1: 93 + particle2: 94 + restLength: 0.19215801 + constraintForce: 0 + tearResistance: 1 + - particle1: 94 + particle2: 95 + restLength: 0.19206558 + constraintForce: 0 + tearResistance: 1 + - particle1: 95 + particle2: 96 + restLength: 0.19197142 + constraintForce: 0 + tearResistance: 1 + - particle1: 96 + particle2: 0 + restLength: 0.18639506 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: e016b4df5bfaf488f91ab99ebca81d83, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &488353310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 488353309} + m_Target: {fileID: 1569702937} + m_ParticleGroup: {fileID: -6013852427284171944, guid: e016b4df5bfaf488f91ab99ebca81d83, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &488353311 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 488353309} + m_Target: {fileID: 452639195} + m_ParticleGroup: {fileID: -7671420094400086755, guid: e016b4df5bfaf488f91ab99ebca81d83, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &488353312 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 488353309} + m_Target: {fileID: 452639195} + m_ParticleGroup: {fileID: 218208082314265139, guid: e016b4df5bfaf488f91ab99ebca81d83, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &488353313 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 488353309} + m_Target: {fileID: 452639195} + m_ParticleGroup: {fileID: 1548941265819301156, guid: e016b4df5bfaf488f91ab99ebca81d83, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &488353314 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 488353309} + m_Target: {fileID: 1192568501} + m_ParticleGroup: {fileID: -793357204084665196, guid: e016b4df5bfaf488f91ab99ebca81d83, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &488353315 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 488353309} + m_Target: {fileID: 1359249594} + m_ParticleGroup: {fileID: 135749586216130241, guid: e016b4df5bfaf488f91ab99ebca81d83, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &488353316 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 488353309} + m_Target: {fileID: 1625299420} + m_ParticleGroup: {fileID: 8813747759735635217, guid: e016b4df5bfaf488f91ab99ebca81d83, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &488353317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2aadf7c5471054b0db8c70bd317bc272, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Rope: {fileID: 488353309} + m_Target: {fileID: 1060357570} + m_Position: 0.326 + m_LimitRange: 0 + m_Range: {x: 0, y: 1} + m_Friction: 0 + m_MotorSpeed: 0 + m_MotorForce: Infinity + m_Compliance: 0 + m_ClampAtEnds: 1 + currentEdge: + edgeIndex: 31 + coordinate: 0.62199974 + firstEdge: + edgeIndex: 0 + coordinate: -3.4028235e+38 + lastEdge: + edgeIndex: 96 + coordinate: 3.4028235e+38 + breakThreshold: Infinity +--- !u!114 &488353318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488353305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2aadf7c5471054b0db8c70bd317bc272, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Rope: {fileID: 488353309} + m_Target: {fileID: 1060357570} + m_Position: 0.31 + m_LimitRange: 0 + m_Range: {x: 0, y: 1} + m_Friction: 1 + m_MotorSpeed: 0 + m_MotorForce: Infinity + m_Compliance: 0 + m_ClampAtEnds: 1 + currentEdge: + edgeIndex: 30 + coordinate: 0.069999695 + firstEdge: + edgeIndex: 0 + coordinate: -3.4028235e+38 + lastEdge: + edgeIndex: 96 + coordinate: 3.4028235e+38 + breakThreshold: Infinity +--- !u!1 &506459881 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + m_PrefabInstance: {fileID: 421764872} + m_PrefabAsset: {fileID: 0} +--- !u!64 &506459882 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506459881} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!114 &506459883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506459881} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 506459882} + m_DistanceField: {fileID: 11400000, guid: 5eb5ff1af3a3f4a14977448198c232ae, type: 2} +--- !u!1 &571024693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 571024694} + - component: {fileID: 571024696} + - component: {fileID: 571024695} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &571024694 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571024693} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.88, y: 0.929, z: 0} + m_LocalScale: {x: 3, y: 0.058823526, z: 0.3333333} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 452639195} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &571024695 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571024693} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &571024696 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571024693} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!850595691 &664654699 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 +--- !u!1 &665462091 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 665462092} + - component: {fileID: 665462094} + - component: {fileID: 665462093} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &665462092 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665462091} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 282899377} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 100.29999, y: 24.400024} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &665462093 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665462091} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 200 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Use W and S to move the cable car. Press the spacebar to toggle its motor + on/off. +--- !u!222 &665462094 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665462091} + m_CullTransparentMesh: 0 +--- !u!1 &669702487 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 669702488} + - component: {fileID: 669702490} + - component: {fileID: 669702489} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &669702488 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669702487} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.929, z: 1.79} + m_LocalScale: {x: 3, y: 0.058823526, z: 0.3333333} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 452639195} + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!23 &669702489 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669702487} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &669702490 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669702487} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &752782995 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 752782996} + - component: {fileID: 752782998} + - component: {fileID: 752782997} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &752782996 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752782995} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.82, y: 0.929, z: 0} + m_LocalScale: {x: 3, y: 0.058823526, z: 0.3333333} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1569702937} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &752782997 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752782995} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &752782998 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752782995} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &754643804 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 754643806} + - component: {fileID: 754643805} + m_Layer: 0 + m_Name: Obi Solver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &754643805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 754643804} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + m_EditorClassIdentifier: + simulateWhenInvisible: 1 + m_Backend: 1 + substeps: 8 + maxStepsPerFrame: 1 + synchronization: 2 + parameters: + mode: 0 + interpolation: 0 + gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 + damping: 0.2 + maxAnisotropy: 3 + sleepThreshold: 0.00001 + maxVelocity: 50 + maxAngularVelocity: 20 + collisionMargin: 0.02 + maxDepenetration: 10 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + skinConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + volumeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + shapeMatchingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 1 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + stretchShearConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 0 +--- !u!4 &754643806 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 754643804} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 488353306} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1002464891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1002464896} + - component: {fileID: 1002464895} + - component: {fileID: 1002464893} + - component: {fileID: 1002464892} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1002464892 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 +--- !u!124 &1002464893 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 +--- !u!20 &1002464895 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 75 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1002464896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + serializedVersion: 2 + m_LocalRotation: {x: 0.1763995, y: 0.25600994, z: -0.04757431, w: 0.9492517} + m_LocalPosition: {x: -2.711, y: 4.27, z: -4.417} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 21.054, y: 30.187, z: 0} +--- !u!1 &1060357566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1060357570} + - component: {fileID: 1060357569} + - component: {fileID: 1060357568} + - component: {fileID: 1060357567} + - component: {fileID: 1060357571} + - component: {fileID: 1060357573} + - component: {fileID: 1060357572} + - component: {fileID: 1060357574} + m_Layer: 0 + m_Name: Car + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1060357567 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060357566} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1060357568 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060357566} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1060357569 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060357566} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1060357570 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060357566} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.22492011, z: -0, w: 0.9743773} + m_LocalPosition: {x: 0.216, y: 3.42, z: -1.774} + m_LocalScale: {x: 0.5, y: 0.3, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1537151302} + - {fileID: 1763592425} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 25.996, z: 0} +--- !u!54 &1060357571 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060357566} + serializedVersion: 5 + m_Mass: 2 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &1060357572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060357566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &1060357573 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060357566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 1060357568} + m_DistanceField: {fileID: 0} +--- !u!114 &1060357574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060357566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df6783efff96747d7b949f3538d1cee7, type: 3} + m_Name: + m_EditorClassIdentifier: + pinhole: {fileID: 488353318} + carSpeed: 1 +--- !u!1 &1175446144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1175446146} + - component: {fileID: 1175446145} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1175446145 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.03 + m_NormalBias: 0.01 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + serializedVersion: 2 + m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} +--- !u!1 &1192568496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1192568501} + - component: {fileID: 1192568500} + - component: {fileID: 1192568499} + - component: {fileID: 1192568498} + - component: {fileID: 1192568497} + m_Layer: 0 + m_Name: Post (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &1192568497 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192568496} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1192568498 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192568496} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &1192568499 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192568496} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1192568500 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192568496} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1192568501 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192568496} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.8870109, z: 0, w: 0.46174863} + m_LocalPosition: {x: 3, y: 2, z: 2} + m_LocalScale: {x: 0.3, y: 2, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1921533333} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 125, z: 0} +--- !u!1 &1327725106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1327725109} + - component: {fileID: 1327725108} + - component: {fileID: 1327725107} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1327725107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1327725106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1327725108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1327725106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1327725109 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1327725106} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1359249589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1359249594} + - component: {fileID: 1359249593} + - component: {fileID: 1359249592} + - component: {fileID: 1359249591} + - component: {fileID: 1359249590} + m_Layer: 0 + m_Name: Post (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &1359249590 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1359249589} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1359249591 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1359249589} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &1359249592 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1359249589} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1359249593 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1359249589} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1359249594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1359249589} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -1.51, y: 1.96, z: 2.69} + m_LocalScale: {x: 0.3, y: 2, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 158742033} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!1 &1537151301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1537151302} + - component: {fileID: 1537151304} + - component: {fileID: 1537151303} + m_Layer: 0 + m_Name: PinholeTarget + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1537151302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537151301} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: -0.3, y: 0.5, z: 0} + m_LocalScale: {x: 10, y: 25, z: 25} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1060357570} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!23 &1537151303 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537151301} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1537151304 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537151301} + m_Mesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} +--- !u!1 &1569702932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1569702937} + - component: {fileID: 1569702936} + - component: {fileID: 1569702935} + - component: {fileID: 1569702934} + - component: {fileID: 1569702933} + m_Layer: 0 + m_Name: Post (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &1569702933 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569702932} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1569702934 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569702932} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &1569702935 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569702932} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1569702936 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569702932} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1569702937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569702932} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.8870109, z: 0, w: 0.46174863} + m_LocalPosition: {x: -0.37, y: 2, z: -0.59} + m_LocalScale: {x: 0.3, y: 2, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 752782996} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 125, z: 0} +--- !u!1 &1625299419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1625299420} + - component: {fileID: 1625299423} + - component: {fileID: 1625299422} + - component: {fileID: 1625299421} + - component: {fileID: 1625299424} + m_Layer: 0 + m_Name: Post + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1625299420 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625299419} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4, y: 1.96, z: 0} + m_LocalScale: {x: 0.3, y: 2, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 352165316} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1625299421 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625299419} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &1625299422 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625299419} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1625299423 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625299419} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!54 &1625299424 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625299419} + serializedVersion: 5 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &1763592424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1763592425} + - component: {fileID: 1763592427} + - component: {fileID: 1763592426} + m_Layer: 0 + m_Name: PinholeTarget (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1763592425 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1763592424} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0.3, y: 0.5, z: 0} + m_LocalScale: {x: 10, y: 25, z: 25} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1060357570} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!23 &1763592426 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1763592424} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1763592427 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1763592424} + m_Mesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} +--- !u!1 &1921533332 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1921533333} + - component: {fileID: 1921533335} + - component: {fileID: 1921533334} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1921533333 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1921533332} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.82, y: 0.929, z: 0} + m_LocalScale: {x: 3, y: 0.058823526, z: 0.3333333} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1192568501} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1921533334 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1921533332} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1921533335 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1921533332} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2046597303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2046597305} + - component: {fileID: 2046597304} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2046597304 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2046597303} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &2046597305 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2046597303} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2087273467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2087273468} + - component: {fileID: 2087273472} + - component: {fileID: 2087273471} + - component: {fileID: 2087273470} + - component: {fileID: 2087273469} + m_Layer: 5 + m_Name: FPSDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2087273468 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2087273467} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 282899377} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 99, y: -31} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2087273469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2087273467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} + m_EffectDistance: {x: 1, y: -1} + m_UseGraphicAlpha: 1 +--- !u!114 &2087273470 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2087273467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f14f49b61044e49ebb2f29511f2b3f41, type: 3} + m_Name: + m_EditorClassIdentifier: + updateInterval: 0.5 + showMedian: 0 + medianLearnrate: 0.05 +--- !u!114 &2087273471 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2087273467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &2087273472 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2087273467} + m_CullTransparentMesh: 0 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 1625299420} + - {fileID: 1359249594} + - {fileID: 1192568501} + - {fileID: 1569702937} + - {fileID: 452639195} + - {fileID: 1060357570} + - {fileID: 282899377} + - {fileID: 1327725109} + - {fileID: 754643806} + - {fileID: 2046597305} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CableCar.unity.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CableCar.unity.meta new file mode 100644 index 000000000..ec65ee589 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CableCar.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 78725675a368c4503978c7bd3dbc2778 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains.meta deleted file mode 100644 index 36892bf8b..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 306f6e46fa8f27349a72c7356cd9e22a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains.unity index 6d613d3f7..2bce92310 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains.unity @@ -43,7 +43,7 @@ RenderSettings: LightmapSettings: m_ObjectHideFlags: 0 serializedVersion: 13 - m_BakeOnSceneLoad: 1 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -93,8 +93,8 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: 01df968f52f4b30449fed4038ccb6d32, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: ead7bc8e5b16df244a6acc9f4ec59b99, type: 2} + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 21c4fb2401b72496aa6ac0cb399992d5, type: 2} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 @@ -265,10 +265,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 34917040} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -305,6 +305,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -326,6 +328,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -385,6 +388,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 34917044} @@ -433,10 +437,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 37255347} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -473,6 +477,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -494,6 +500,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -553,6 +560,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 37255351} @@ -599,6 +607,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -620,6 +630,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -675,10 +686,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 56383757} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -721,6 +732,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 56383759} @@ -836,10 +848,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 447687745} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -876,6 +888,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -897,6 +911,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -956,6 +971,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 447687749} @@ -1000,6 +1016,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -1048,10 +1065,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 512808546} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -1088,6 +1105,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1109,6 +1128,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1168,10 +1188,57 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 512808550} m_DistanceField: {fileID: 0} +--- !u!1 &632392820 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 632392822} + - component: {fileID: 632392821} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &632392821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 632392820} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &632392822 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 632392820} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &870807626 GameObject: m_ObjectHideFlags: 0 @@ -1221,7 +1288,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -1311,26 +1377,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1175446144 GameObject: m_ObjectHideFlags: 0 @@ -1341,7 +1387,6 @@ GameObject: m_Component: - component: {fileID: 1175446146} - component: {fileID: 1175446145} - - component: {fileID: 1175446147} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -1429,75 +1474,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!114 &1175446147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 3 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 ---- !u!1 &1225672221 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1225672223} - - component: {fileID: 1225672222} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1225672222 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1225672221} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: - cellSpans: - m_AlignBytes: 16 ---- !u!4 &1225672223 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1225672221} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1225692698 GameObject: m_ObjectHideFlags: 0 @@ -1527,10 +1503,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1225692698} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -1567,6 +1543,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1588,6 +1566,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1662,6 +1641,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1225692701} @@ -1701,9 +1681,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 5.092446 elements: @@ -1822,6 +1806,9 @@ MonoBehaviour: restLength: 0.21691507 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 9b7a30b754796421d9e0b869d8eb345b, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -1847,138 +1834,26 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 09ac962c0743c400aa230ebf871b6156, type: 3} m_Name: m_EditorClassIdentifier: - linkInstances: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - randomizeLinks: 1 + linkMesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} + linkMaterial: {fileID: 2100000, guid: edc856900ac3941a98996e21e91e215e, type: 2} linkScale: {x: 34, y: 34, z: 34} - linkPrefabs: - - {fileID: 116810, guid: 1a25eaebcccc14ffeabd9b15641f8b51, type: 3} - - {fileID: 116810, guid: 2d2a7dadfeecb4ffc9bdbfa8ae0b4727, type: 3} twistAnchor: 0 - sectionTwist: 90 + linkTwist: 0 + linkModifiers: + - translation: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + - translation: {x: 0, y: 0, z: 0} + scale: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 --- !u!114 &1346965644 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1991,12 +1866,26 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 09ac962c0743c400aa230ebf871b6156, type: 3} m_Name: m_EditorClassIdentifier: - linkInstances: [] - randomizeLinks: 0 - linkScale: {x: 1, y: 1, z: 1} - linkPrefabs: [] + linkMesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} + linkMaterial: {fileID: 2100000, guid: b74081a5a5bbf418ea9f95bfec18f393, type: 2} + linkScale: {x: 34, y: 34, z: 34} twistAnchor: 0 - sectionTwist: 0 + linkTwist: 0 + linkModifiers: + - translation: {x: 0, y: 0, z: 0} + scale: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0} + - translation: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 90} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 --- !u!114 &1346965645 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2014,8 +1903,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 7546284794258584817, guid: 9b7a30b754796421d9e0b869d8eb345b, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965646 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2033,8 +1923,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -4517029930201779066, guid: 9b7a30b754796421d9e0b869d8eb345b, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965647 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2050,6 +1941,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 0 --- !u!114 &1346965648 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2067,8 +1959,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -53998285165153434, guid: 9b7a30b754796421d9e0b869d8eb345b, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!4 &1346965650 Transform: m_ObjectHideFlags: 0 @@ -2128,10 +2021,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1535267384} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -2168,6 +2061,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2189,6 +2084,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2248,54 +2144,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1535267388} m_DistanceField: {fileID: 0} ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1715322543 GameObject: m_ObjectHideFlags: 0 @@ -2405,6 +2258,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2426,6 +2281,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2594,7 +2450,6 @@ GameObject: m_Component: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -2602,21 +2457,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 4 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2631,23 +2471,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.5 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 20 collisionMargin: 0.02 maxDepenetration: 10 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 5 @@ -2703,6 +2577,11 @@ MonoBehaviour: iterations: 2 SORFactor: 1 enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 5 @@ -2756,5 +2635,4 @@ SceneRoots: - {fileID: 1804369595} - {fileID: 1715322546} - {fileID: 870807627} - - {fileID: 1583418125} - - {fileID: 1225672223} + - {fileID: 632392822} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/LightingData.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/LightingData.asset deleted file mode 100644 index 3ceb4a476..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/LightingData.asset and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/ReflectionProbe-0.exr b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/ReflectionProbe-0.exr deleted file mode 100644 index e70946aca..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Chains/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ChainsSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ChainsSettings.lighting index 99e16c229..e33a52a76 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ChainsSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ChainsSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: ChainsSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_RealtimeEnvironmentLighting: 1 @@ -16,11 +15,13 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 0 - m_BakeBackend: 0 + m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -31,23 +32,21 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 + m_PVREnvironmentImportanceSampling: 0 m_PVRFilteringMode: 2 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta index e7f701c98..c7ba969b6 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ead7bc8e5b16df244a6acc9f4ec59b99 +guid: 21c4fb2401b72496aa6ac0cb399992d5 NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles.meta deleted file mode 100644 index a2164293d..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ac10cfaac48612249911a6dd920b81fc -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles.unity index 509ff7143..e4a27b50e 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles.unity @@ -93,8 +93,8 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: 2f80d1bbf7ee7a04fa11b0bad858ba56, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: 0d463da1f27b1e84f955ad80af856df5, type: 2} + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 135660571} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 @@ -119,6 +119,67 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!850595691 &135660571 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &283647873 GameObject: m_ObjectHideFlags: 0 @@ -316,6 +377,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: c73079cca10924a80871331c66b4ad4b, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -334,51 +396,51 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -9172040529234819637, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000035347645 + value: -0.0000010492962 objectReference: {fileID: 0} - target: {fileID: -9172040529234819637, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.25340143 + value: -0.2534013 objectReference: {fileID: 0} - target: {fileID: -9172040529234819637, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000013932136 + value: -0.000000015490253 objectReference: {fileID: 0} - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.07600623 + value: -0.07600576 objectReference: {fileID: 0} - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000025504167 + value: -0.0000015074818 objectReference: {fileID: 0} - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.00000018258288 + value: -0.00000029842522 objectReference: {fileID: 0} - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.000000014007303 + value: -0.00000042157708 objectReference: {fileID: 0} - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.000091485614 + value: 0.00009201089 objectReference: {fileID: 0} - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00000020098787 + value: 0.0000010680768 objectReference: {fileID: 0} - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.13803943 + value: -0.13803966 objectReference: {fileID: 0} - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.00000051572107 + value: 0.00000073331586 objectReference: {fileID: 0} - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 1.9185334e-23 + value: 8.111622e-24 objectReference: {fileID: 0} - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -386,31 +448,31 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 5.897394e-25 + value: -2.7034068e-23 objectReference: {fileID: 0} - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -1.3514626e-23 + value: 1.2354341e-23 objectReference: {fileID: 0} - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.02210797 + value: 0.022107342 objectReference: {fileID: 0} - target: {fileID: -8713422515971011683, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: -0.09805851 + value: -0.09805872 objectReference: {fileID: 0} - target: {fileID: -8713422515971011683, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.75200945 + value: 0.75200963 objectReference: {fileID: 0} - target: {fileID: -8713422515971011683, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.114931755 + value: -0.11493167 objectReference: {fileID: 0} - target: {fileID: -8713422515971011683, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.64160514 + value: 0.6416048 objectReference: {fileID: 0} - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_RootOrder @@ -458,43 +520,43 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.36055627 + value: 0.36056164 objectReference: {fileID: 0} - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.0000005631009 + value: 0.000002228131 objectReference: {fileID: 0} - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.120000735 + value: -0.120003656 objectReference: {fileID: 0} - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9999616 + value: 0.99996156 objectReference: {fileID: 0} - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000014688959 + value: -0.000000043665747 objectReference: {fileID: 0} - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.000000011031668 + value: 0.00000018800084 objectReference: {fileID: 0} - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.008770917 + value: -0.008770226 objectReference: {fileID: 0} - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.079857364 + value: 0.07985789 objectReference: {fileID: 0} - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.00000019398995 + value: 0.00000037613611 objectReference: {fileID: 0} - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.00000016918875 + value: -0.0000002995739 objectReference: {fileID: 0} - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -502,15 +564,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.0000000911087 + value: -0.000000038988315 objectReference: {fileID: 0} - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.021724027 + value: -0.021723459 objectReference: {fileID: 0} - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00000012005526 + value: -0.00000006747969 objectReference: {fileID: 0} - target: {fileID: -7959887483407685756, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -518,31 +580,31 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -7959887483407685756, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000008222498 + value: -0.0000001661601 objectReference: {fileID: 0} - target: {fileID: -7959887483407685756, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.2534013 + value: -0.25340128 objectReference: {fileID: 0} - target: {fileID: -7959887483407685756, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00000015242011 + value: 0.00000016678908 objectReference: {fileID: 0} - target: {fileID: -7940801031966596053, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9997869 + value: 0.99978685 objectReference: {fileID: 0} - target: {fileID: -7940801031966596053, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000090835755 + value: 0.00000008968509 objectReference: {fileID: 0} - target: {fileID: -7940801031966596053, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.020644648 + value: -0.020645771 objectReference: {fileID: 0} - target: {fileID: -7940801031966596053, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.000000045180247 + value: 0.00000055668374 objectReference: {fileID: 0} - target: {fileID: -7477343846450812277, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x @@ -570,55 +632,59 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.07985702 + value: -0.07985784 objectReference: {fileID: 0} - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000034656287 + value: -0.00000080354766 objectReference: {fileID: 0} - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.000000029655894 + value: -0.0000005768561 objectReference: {fileID: 0} - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.999764 + value: 0.9997641 objectReference: {fileID: 0} - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.000000011411709 + value: 0.00000014191231 objectReference: {fileID: 0} - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.0217239 + value: -0.021724235 objectReference: {fileID: 0} - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.000000069100224 + value: 0.00000062396185 objectReference: {fileID: 0} - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.11609162 + value: -0.11609173 objectReference: {fileID: 0} - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.0000005731995 + value: -0.00000062014124 objectReference: {fileID: 0} - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -1.0095917e-23 + value: -2.5339291e-23 + objectReference: {fileID: 0} + - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99978566 objectReference: {fileID: 0} - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -1.0545787e-26 + value: 1.324855e-23 objectReference: {fileID: 0} - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 1.296086e-23 + value: -1.32212165e-23 objectReference: {fileID: 0} - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.020704772 + value: 0.020704893 objectReference: {fileID: 0} - target: {fileID: -6781684182533653455, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -626,55 +692,55 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -6781684182533653455, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.000000027877974 + value: -0.00000035827992 objectReference: {fileID: 0} - target: {fileID: -6781684182533653455, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.01471638 + value: -0.014716088 objectReference: {fileID: 0} - target: {fileID: -6781684182533653455, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000016789998 + value: -0.00000051379055 objectReference: {fileID: 0} - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.09154375 + value: -0.09154363 objectReference: {fileID: 0} - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.019813953 + value: 0.019814389 objectReference: {fileID: 0} - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.029995024 + value: 0.029995376 objectReference: {fileID: 0} - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9868013 + value: 0.9868012 objectReference: {fileID: 0} - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.04286804 + value: 0.042868167 objectReference: {fileID: 0} - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.1501124 + value: 0.1501125 objectReference: {fileID: 0} - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.04303353 + value: -0.043033816 objectReference: {fileID: 0} - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.07746903 + value: 0.07747036 objectReference: {fileID: 0} - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000013306443 + value: -0.000000062956175 objectReference: {fileID: 0} - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.00000014895568 + value: 0.00000022474865 objectReference: {fileID: 0} - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -682,111 +748,115 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000038067565 + value: 0.000000004672845 objectReference: {fileID: 0} - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.008619632 + value: -0.008621245 objectReference: {fileID: 0} - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.000000022024029 + value: 0.00000027842057 + objectReference: {fileID: 0} + - target: {fileID: -6417551873659808624, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99986434 objectReference: {fileID: 0} - target: {fileID: -6417551873659808624, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.0000002458691 + value: -0.00000067800266 objectReference: {fileID: 0} - target: {fileID: -6417551873659808624, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.016476635 + value: 0.016475664 objectReference: {fileID: 0} - target: {fileID: -6417551873659808624, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000013411042 + value: 0.00000055879343 objectReference: {fileID: 0} - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.38948783 + value: 0.38948995 objectReference: {fileID: 0} - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000020861626 + value: -0.0000005662441 objectReference: {fileID: 0} - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.00000020861631 + value: 0.0000011026862 objectReference: {fileID: 0} - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.996377 + value: -0.99637693 objectReference: {fileID: 0} - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.000000036327606 + value: -0.00000010173496 objectReference: {fileID: 0} - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.000000055867655 + value: 0.00000014762924 objectReference: {fileID: 0} - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.08504705 + value: 0.08504721 objectReference: {fileID: 0} - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.06707275 + value: -0.06707188 objectReference: {fileID: 0} - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.00000006884857 + value: -0.0000005421837 objectReference: {fileID: 0} - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.000000018969658 + value: -0.00000026477534 objectReference: {fileID: 0} - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.7131761 + value: 0.71317726 objectReference: {fileID: 0} - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000016517498 + value: -0.0000002642057 objectReference: {fileID: 0} - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.700985 + value: -0.7009838 objectReference: {fileID: 0} - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.000000009968829 + value: -0.00000026777093 objectReference: {fileID: 0} - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.08444028 + value: 0.08444421 objectReference: {fileID: 0} - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.00000030478665 + value: 0.00000041417888 objectReference: {fileID: 0} - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.00000051571277 + value: 0.0000005414325 objectReference: {fileID: 0} - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9993727 + value: 0.99937284 objectReference: {fileID: 0} - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.0000002560232 + value: -0.00000025388488 objectReference: {fileID: 0} - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.03541356 + value: 0.035412047 objectReference: {fileID: 0} - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00000011542316 + value: 0.00000079346563 objectReference: {fileID: 0} - target: {fileID: -5777574540501867108, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x @@ -802,103 +872,103 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.09619963 + value: 0.09620107 objectReference: {fileID: 0} - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.0000037450247 + value: -0.0000041651533 objectReference: {fileID: 0} - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.00000012138516 + value: 0.00000087866357 objectReference: {fileID: 0} - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9933717 + value: 0.9933716 objectReference: {fileID: 0} - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000007241961 + value: -0.0000007276969 objectReference: {fileID: 0} - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.11494669 + value: -0.11494698 objectReference: {fileID: 0} - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000012544264 + value: -0.00000019915707 objectReference: {fileID: 0} - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.38948792 + value: -0.3894925 objectReference: {fileID: 0} - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.000000055879354 + value: 0.00000016577542 objectReference: {fileID: 0} - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.000000029802322 + value: -0.00000008940697 objectReference: {fileID: 0} - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.99637693 + value: 0.996377 objectReference: {fileID: 0} - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000003835789 + value: 0.000000023014751 objectReference: {fileID: 0} - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.00000003230275 + value: -0.0000001938165 objectReference: {fileID: 0} - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.085047096 + value: -0.08504718 objectReference: {fileID: 0} - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.08916188 + value: 0.08916262 objectReference: {fileID: 0} - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.000000044923127 + value: 0.00000014660782 objectReference: {fileID: 0} - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.00000018626451 + value: 0.0000008493662 objectReference: {fileID: 0} - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.999931 + value: 0.99993104 objectReference: {fileID: 0} - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.00000018626436 + value: 0.0000005885956 objectReference: {fileID: 0} - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.011748751 + value: -0.011747742 objectReference: {fileID: 0} - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000032782526 + value: -0.0000013411038 objectReference: {fileID: 0} - target: {fileID: -4421869768541714866, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: -0.060132433 + value: -0.060132556 objectReference: {fileID: 0} - target: {fileID: -4421869768541714866, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.9060735 + value: 0.9060736 objectReference: {fileID: 0} - target: {fileID: -4421869768541714866, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.137752 + value: -0.13775198 objectReference: {fileID: 0} - target: {fileID: -4421869768541714866, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.39552405 + value: 0.39552408 objectReference: {fileID: 0} - target: {fileID: -3575167729457297781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -906,15 +976,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -3575167729457297781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.0000002476626 + value: 0.0000003071598 objectReference: {fileID: 0} - target: {fileID: -3575167729457297781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.020644594 + value: -0.02064545 objectReference: {fileID: 0} - target: {fileID: -3575167729457297781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.000000045258204 + value: 0.00000009844927 objectReference: {fileID: 0} - target: {fileID: -3168850724122587569, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: 'm_Materials.Array.data[0]' @@ -922,15 +992,15 @@ PrefabInstance: objectReference: {fileID: 2100000, guid: 5c0346dbcbacd4648bec909deff79751, type: 2} - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.097654 + value: -0.09765314 objectReference: {fileID: 0} - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000036611073 + value: -0.0000018528449 objectReference: {fileID: 0} - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.000000003749075 + value: 0.000000010311136 objectReference: {fileID: 0} - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -938,59 +1008,59 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000022251575 + value: 0.00000012380465 objectReference: {fileID: 0} - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.000000019825379 + value: 0.00000004935552 objectReference: {fileID: 0} - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.027953451 + value: 0.027953576 objectReference: {fileID: 0} - target: {fileID: -3011178037101974448, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9240755 + value: 0.92407554 objectReference: {fileID: 0} - target: {fileID: -3011178037101974448, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.00000015530905 + value: 0.00000028197525 objectReference: {fileID: 0} - target: {fileID: -3011178037101974448, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.38221008 + value: -0.3822101 objectReference: {fileID: 0} - target: {fileID: -3011178037101974448, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000006197281 + value: 0.00000041559773 objectReference: {fileID: 0} - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.0670727 + value: 0.06707575 objectReference: {fileID: 0} - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.0000000052219806 + value: 0.00000031952973 objectReference: {fileID: 0} - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.00000035371752 + value: -0.00000045113052 objectReference: {fileID: 0} - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.71317565 + value: 0.71317756 objectReference: {fileID: 0} - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000038672738 + value: -0.0000008332994 objectReference: {fileID: 0} - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.7009854 + value: -0.7009834 objectReference: {fileID: 0} - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -8.278953e-10 + value: -0.000000019855111 objectReference: {fileID: 0} - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x @@ -1006,99 +1076,103 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.99993867 + value: 0.9999386 objectReference: {fileID: 0} - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -1.6228881e-16 + value: -1.622888e-16 objectReference: {fileID: 0} - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -1.8379096e-16 + value: -1.8379094e-16 objectReference: {fileID: 0} - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.011078296 + value: -0.011078295 + objectReference: {fileID: 0} + - target: {fileID: -1336073094781112630, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999462 objectReference: {fileID: 0} - target: {fileID: -1336073094781112630, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000098879 + value: -0.00000021312617 objectReference: {fileID: 0} - target: {fileID: -1336073094781112630, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.010379857 + value: -0.010378925 objectReference: {fileID: 0} - target: {fileID: -1336073094781112630, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.000000038188134 + value: -0.000000986678 objectReference: {fileID: 0} - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.09660024 + value: -0.09660413 objectReference: {fileID: 0} - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.00000036440179 + value: 0.0000019549343 objectReference: {fileID: 0} - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -1.6653345e-16 + value: -4.440892e-16 objectReference: {fileID: 0} - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.99999195 + value: 0.9999919 objectReference: {fileID: 0} - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -1.7763562e-15 - objectReference: {fileID: 0} - - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} - propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} + - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -3.552712e-15 + objectReference: {fileID: 0} - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.0040301573 + value: -0.0040304568 objectReference: {fileID: 0} - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.025980879 + value: -0.025980504 objectReference: {fileID: 0} - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.0028835752 + value: 0.0028841335 objectReference: {fileID: 0} - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.12321692 + value: 0.12321715 objectReference: {fileID: 0} - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.69933355 + value: 0.6993337 objectReference: {fileID: 0} - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.11304523 + value: 0.1130452 objectReference: {fileID: 0} - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.69661623 + value: 0.69661605 objectReference: {fileID: 0} - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.11348655 + value: -0.11348706 objectReference: {fileID: 0} - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.068375364 + value: -0.0683766 objectReference: {fileID: 0} - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.00000043567888 + value: 0.00000027297665 objectReference: {fileID: 0} - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -1.490854e-15 + value: 1.839932e-15 objectReference: {fileID: 0} - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1106,55 +1180,55 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.5078705 + value: -0.50786996 objectReference: {fileID: 0} - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.4920038 + value: 0.4920044 objectReference: {fileID: 0} - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.49200356 + value: -0.49200338 objectReference: {fileID: 0} - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.089161985 + value: -0.08916246 objectReference: {fileID: 0} - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000004194635 + value: -0.000001291351 objectReference: {fileID: 0} - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.00000048428774 + value: 0.0000005438924 objectReference: {fileID: 0} - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.99993104 + value: 0.999931 objectReference: {fileID: 0} - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000008195633 + value: -0.00000040978173 objectReference: {fileID: 0} - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.011748425 + value: -0.011747533 objectReference: {fileID: 0} - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.0000004842874 + value: 0.0000005885956 objectReference: {fileID: 0} - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.07399583 + value: -0.07399587 objectReference: {fileID: 0} - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.0000000144355 + value: -0.00000026158523 objectReference: {fileID: 0} - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.00000015180558 + value: -0.00000035576522 objectReference: {fileID: 0} - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1162,15 +1236,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000040978158 + value: 0.000000007450576 objectReference: {fileID: 0} - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.041632753 + value: -0.041633245 objectReference: {fileID: 0} - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.0000001215375 + value: -0.00000019604329 objectReference: {fileID: 0} - target: {fileID: 919132149155446097, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_Name @@ -1178,15 +1252,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.09548417 + value: -0.0954846 objectReference: {fileID: 0} - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.0000005920281 + value: 0.0000020772218 objectReference: {fileID: 0} - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 2.6253225e-27 + value: 5.2939566e-23 objectReference: {fileID: 0} - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1194,31 +1268,31 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.000000022360005 + value: -0.000000123532 objectReference: {fileID: 0} - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.000000019703004 + value: -0.000000050034007 objectReference: {fileID: 0} - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.022468941 + value: -0.022468971 objectReference: {fileID: 0} - target: {fileID: 2040772738850610504, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.99989176 + value: 0.9998918 objectReference: {fileID: 0} - target: {fileID: 2040772738850610504, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.00000007007278 + value: 0.0000006451799 objectReference: {fileID: 0} - target: {fileID: 2040772738850610504, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.014716182 + value: -0.014714867 objectReference: {fileID: 0} - target: {fileID: 2040772738850610504, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000008374207 + value: 0.00000026629922 objectReference: {fileID: 0} - target: {fileID: 2115105493465890901, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1226,31 +1300,31 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2115105493465890901, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.05894502 + value: 0.058945026 objectReference: {fileID: 0} - target: {fileID: 2115105493465890901, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.38568267 + value: 0.3856826 objectReference: {fileID: 0} - target: {fileID: 2115105493465890901, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.13910511 + value: 0.13910525 objectReference: {fileID: 0} - target: {fileID: 2527769708469969364, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9999461 + value: 0.9999462 objectReference: {fileID: 0} - target: {fileID: 2527769708469969364, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000005579037 + value: -0.00000004621701 objectReference: {fileID: 0} - target: {fileID: 2527769708469969364, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.010380306 + value: -0.010380278 objectReference: {fileID: 0} - target: {fileID: 2527769708469969364, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00000026966057 + value: 0.00000042109525 objectReference: {fileID: 0} - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x @@ -1266,27 +1340,27 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -5.8000204e-25 + value: 2.586405e-23 objectReference: {fileID: 0} - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 1.3218873e-23 + value: 1.4385742e-23 objectReference: {fileID: 0} - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00024904308 + value: 0.00024960932 objectReference: {fileID: 0} - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.07817221 + value: -0.07817269 objectReference: {fileID: 0} - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.00000015993884 + value: 0.0000017938504 objectReference: {fileID: 0} - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 1.0258534e-15 + value: 1.665669e-15 objectReference: {fileID: 0} - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1294,43 +1368,43 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -9.362882e-19 + value: -1.4326946e-14 objectReference: {fileID: 0} - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 6.5162556e-17 + value: 3.607274e-15 objectReference: {fileID: 0} - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.03668089 + value: -0.03668081 objectReference: {fileID: 0} - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.09154148 + value: 0.091541335 objectReference: {fileID: 0} - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.01981489 + value: -0.019814892 objectReference: {fileID: 0} - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.02999468 + value: -0.029995365 objectReference: {fileID: 0} - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9868012 + value: 0.98680127 objectReference: {fileID: 0} - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.042868104 + value: 0.042868026 objectReference: {fileID: 0} - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.1501125 + value: 0.15011218 objectReference: {fileID: 0} - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.043033507 + value: -0.043034364 objectReference: {fileID: 0} - target: {fileID: 2885808408270941255, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1338,23 +1412,23 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2885808408270941255, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.0000002030282 + value: 0.00000033341337 objectReference: {fileID: 0} - target: {fileID: 2885808408270941255, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.018015321 + value: 0.018016445 objectReference: {fileID: 0} - target: {fileID: 2885808408270941255, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.000000015599644 + value: -0.0000004951142 objectReference: {fileID: 0} - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.36055595 + value: -0.36056012 objectReference: {fileID: 0} - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.000000091735274 + value: -0.0000008348143 objectReference: {fileID: 0} - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z @@ -1366,79 +1440,79 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.00000004837842 + value: 0.00000020615342 objectReference: {fileID: 0} - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.00000003436716 + value: 0.00000018319605 objectReference: {fileID: 0} - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.008770723 + value: -0.008770426 objectReference: {fileID: 0} - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.07600932 + value: 0.07600952 objectReference: {fileID: 0} - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.00000334365 + value: 0.000003103759 objectReference: {fileID: 0} - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.0000007629533 + value: -0.0000006124428 objectReference: {fileID: 0} - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.000000087195154 + value: 0.000000053867357 objectReference: {fileID: 0} - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.00009146326 + value: 0.00009152289 objectReference: {fileID: 0} - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00000014438807 + value: 0.000000486669 objectReference: {fileID: 0} - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.09619819 + value: -0.096200034 objectReference: {fileID: 0} - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000018176283 + value: 0.0000007554088 objectReference: {fileID: 0} - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.00000057005826 + value: 0.0000007054443 objectReference: {fileID: 0} - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9933717 + value: 0.99337167 objectReference: {fileID: 0} - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.00000001302149 + value: 0.00000010875463 objectReference: {fileID: 0} - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.11494673 + value: -0.1149467 objectReference: {fileID: 0} - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000027911648 + value: -0.0000010473476 objectReference: {fileID: 0} - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.08443858 + value: -0.08443848 objectReference: {fileID: 0} - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000023513277 + value: -0.0000011159559 objectReference: {fileID: 0} - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.00000031256445 + value: -0.0000000035768721 objectReference: {fileID: 0} - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1446,47 +1520,47 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000014378008 + value: -0.00000016915709 objectReference: {fileID: 0} - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.03541338 + value: 0.035412762 objectReference: {fileID: 0} - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.0000003751099 + value: -0.00000092941957 objectReference: {fileID: 0} - target: {fileID: 5146824284552866293, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.99986434 + value: 0.9998643 objectReference: {fileID: 0} - target: {fileID: 5146824284552866293, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000044703462 + value: 0.00000008195636 objectReference: {fileID: 0} - target: {fileID: 5146824284552866293, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.01647713 + value: 0.016477132 objectReference: {fileID: 0} - target: {fileID: 5146824284552866293, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000007823106 + value: -0.00000016391272 objectReference: {fileID: 0} - target: {fileID: 5536388351197450959, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.99983776 + value: 0.9998377 objectReference: {fileID: 0} - target: {fileID: 5536388351197450959, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.00000024586907 + value: -0.00000019371501 objectReference: {fileID: 0} - target: {fileID: 5536388351197450959, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: 0.018015463 + value: 0.018016273 objectReference: {fileID: 0} - target: {fileID: 5536388351197450959, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00000031292427 + value: 0.00000019371501 objectReference: {fileID: 0} - target: {fileID: 5866666021909216657, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_Controller @@ -1494,15 +1568,15 @@ PrefabInstance: objectReference: {fileID: 9100000, guid: e2cf68ff4b1ffda45a77f7307dd789b9, type: 2} - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.07399513 + value: 0.07399515 objectReference: {fileID: 0} - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.0000007917406 + value: 0.0000009936048 objectReference: {fileID: 0} - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.0000009469222 + value: -0.00000067777 objectReference: {fileID: 0} - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1510,35 +1584,35 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: -0.000000033527588 + value: -0.00000012293455 objectReference: {fileID: 0} - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.041632883 + value: -0.041632507 objectReference: {fileID: 0} - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.0000000149011505 + value: 0.00000034738324 objectReference: {fileID: 0} - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: 0.02597995 + value: 0.025979655 objectReference: {fileID: 0} - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.0028835365 + value: -0.0028832175 objectReference: {fileID: 0} - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: -0.12321778 + value: -0.12322027 objectReference: {fileID: 0} - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.6993333 + value: 0.69933337 objectReference: {fileID: 0} - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.11304535 + value: 0.11304582 objectReference: {fileID: 0} - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y @@ -1546,63 +1620,63 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.11348603 + value: -0.11348579 objectReference: {fileID: 0} - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.07746922 + value: -0.07747022 objectReference: {fileID: 0} - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: -0.00000003922807 + value: -0.00000047863637 objectReference: {fileID: 0} - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 0.00000046299692 + value: 0.0000015713451 objectReference: {fileID: 0} - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9999629 + value: 0.99996287 objectReference: {fileID: 0} - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000095049955 + value: 0.00000017576116 objectReference: {fileID: 0} - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.008619845 + value: -0.008620437 objectReference: {fileID: 0} - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.00000013218293 + value: 0.0000003392898 objectReference: {fileID: 0} - target: {fileID: 8561469618316601768, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w - value: 0.9240755 + value: 0.92407495 objectReference: {fileID: 0} - target: {fileID: 8561469618316601768, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 0.000000037750738 + value: 0.000000031075025 objectReference: {fileID: 0} - target: {fileID: 8561469618316601768, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -0.3822102 + value: -0.38221136 objectReference: {fileID: 0} - target: {fileID: 8561469618316601768, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: -0.00000008068842 + value: -0.00000037519456 objectReference: {fileID: 0} - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.x - value: -0.08463919 + value: -0.08463777 objectReference: {fileID: 0} - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.y - value: 0.000000050538493 + value: 0.00000077379883 objectReference: {fileID: 0} - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalPosition.z - value: 1.3612353e-15 + value: -3.8395097e-15 objectReference: {fileID: 0} - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.w @@ -1610,15 +1684,15 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.x - value: 5.2939534e-22 + value: 2.8434645e-17 objectReference: {fileID: 0} - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.y - value: -1.421738e-17 + value: 2.1175819e-22 objectReference: {fileID: 0} - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} propertyPath: m_LocalRotation.z - value: 0.008003613 + value: 0.008003579 objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] @@ -1636,9 +1710,6 @@ PrefabInstance: - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} insertIndex: -1 addedObject: {fileID: 1080600883} - - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} - insertIndex: -1 - addedObject: {fileID: 1080600886} - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} insertIndex: -1 addedObject: {fileID: 1080600887} @@ -1672,9 +1743,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7be315bc5964b4fbca6cf0a978ff76a1, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 _radius: multiplier: 0.1 @@ -2017,6 +2092,59 @@ MonoBehaviour: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 + _aerodynamicsEnabled: 1 + _drag: + multiplier: 0.02 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _lift: + multiplier: 0.02 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 filter: -65534 fixRoot: 1 stretchBones: 1 @@ -2033,7 +2161,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} - component: {fileID: 1002464894} m_Layer: 0 m_Name: Main Camera @@ -2142,72 +2269,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 ---- !u!1 &1076081359 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1076081361} - - component: {fileID: 1076081360} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1076081360 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1076081359} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: - cellSpans: - m_AlignBytes: 16 ---- !u!4 &1076081361 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1076081359} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1080600881 stripped GameObject: m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} @@ -2275,10 +2336,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1080600881} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -2295,22 +2356,6 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 ---- !u!114 &1080600886 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1080600881} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 434d88f9b3534406382ff56c0e74bd9a, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 1080600887} - deltaSmoothing: 0.95 - substeps: 2 --- !u!114 &1080600887 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2324,24 +2369,58 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: simulateWhenInvisible: 1 - m_Backend: 1 + m_Backend: 0 + substeps: 2 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -5, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.6 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 10 + maxAngularVelocity: 10 collisionMargin: 0.02 maxDepenetration: 10 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 4 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 0 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0.5 worldAngularInertiaScale: 0.1 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 1 @@ -2393,6 +2472,11 @@ MonoBehaviour: SORFactor: 1 enabled: 0 pinConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + pinholeConstraintParameters: evaluationOrder: 1 iterations: 1 SORFactor: 1 @@ -2432,7 +2516,6 @@ GameObject: m_Component: - component: {fileID: 1175446146} - component: {fileID: 1175446145} - - component: {fileID: 1175446147} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -2520,30 +2603,7 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!114 &1175446147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 3 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 ---- !u!1 &1583418123 +--- !u!1 &1643493863 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2551,34 +2611,34 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} + - component: {fileID: 1643493865} + - component: {fileID: 1643493864} m_Layer: 0 - m_Name: OniCollisionWorld + m_Name: ComputeCollisionWorld m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1583418124 +--- !u!114 &1643493864 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} + m_GameObject: {fileID: 1643493863} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} + m_Script: {fileID: 11500000, guid: ce0ddc77554954cd78643d83b0505396, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!4 &1583418125 +--- !u!4 &1643493865 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} + m_GameObject: {fileID: 1643493863} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2683,9 +2743,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7be315bc5964b4fbca6cf0a978ff76a1, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 0d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000 + solverIndices: + serializedContents: 0d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000 + m_AlignBytes: 16 + groupID: 2 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 _radius: multiplier: 0.04 @@ -3028,6 +3092,59 @@ MonoBehaviour: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 + _aerodynamicsEnabled: 1 + _drag: + multiplier: 0.02 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _lift: + multiplier: 0.02 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 filter: -65534 fixRoot: 1 stretchBones: 0 @@ -3049,9 +3166,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7be315bc5964b4fbca6cf0a978ff76a1, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b000000 + solverIndices: + serializedContents: 200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b000000 + m_AlignBytes: 16 + groupID: 3 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 _radius: multiplier: 0.1 @@ -3394,6 +3515,59 @@ MonoBehaviour: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 + _aerodynamicsEnabled: 1 + _drag: + multiplier: 1 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _lift: + multiplier: 0.02 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 filter: -65534 fixRoot: 1 stretchBones: 1 @@ -3415,9 +3589,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7be315bc5964b4fbca6cf0a978ff76a1, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 2c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000 + solverIndices: + serializedContents: 2c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000 + m_AlignBytes: 16 + groupID: 4 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 _radius: multiplier: 0.1 @@ -3760,6 +3938,59 @@ MonoBehaviour: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 + _aerodynamicsEnabled: 1 + _drag: + multiplier: 0.02 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _lift: + multiplier: 0.02 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 filter: -65534 fixRoot: 1 stretchBones: 1 @@ -3773,5 +4004,4 @@ SceneRoots: - {fileID: 421764872} - {fileID: 1175446146} - {fileID: 283647877} - - {fileID: 1076081361} - - {fileID: 1583418125} + - {fileID: 1643493865} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/LightingData.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/LightingData.asset deleted file mode 100644 index c32b7433b..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/LightingData.asset and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/ReflectionProbe-0.exr b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/ReflectionProbe-0.exr deleted file mode 100644 index e70946aca..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentacles/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentaclesSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentaclesSettings.lighting deleted file mode 100644 index d4c52a1ab..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentaclesSettings.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: CharacterTentaclesSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 0 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 1 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentaclesSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentaclesSettings.lighting.meta deleted file mode 100644 index 83ed11976..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CharacterTentaclesSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0d463da1f27b1e84f955ad80af856df5 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ComputeRopes.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ComputeRopes.unity new file mode 100644 index 000000000..2d0484722 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ComputeRopes.unity @@ -0,0 +1,40302 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 2a7dd55cd73e04316941dd907bb58462, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &23156 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 23157} + - component: {fileID: 23161} + - component: {fileID: 23160} + - component: {fileID: 23159} + - component: {fileID: 23158} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &23157 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 23156} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &23158 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 23156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 23161} + m_Target: {fileID: 23157} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &23159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 23156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &23160 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 23156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !u!114 &23161 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 23156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &21655690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 21655691} + - component: {fileID: 21655695} + - component: {fileID: 21655694} + - component: {fileID: 21655693} + - component: {fileID: 21655692} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &21655691 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21655690} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &21655692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21655690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 21655695} + m_Target: {fileID: 21655691} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &21655693 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21655690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &21655694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21655690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 1 +--- !u!114 &21655695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21655690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 112 + particle2: 113 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 113 + particle2: 114 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 114 + particle2: 115 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 115 + particle2: 116 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 116 + particle2: 117 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 117 + particle2: 118 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 118 + particle2: 119 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 119 + particle2: 120 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 120 + particle2: 121 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 121 + particle2: 122 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 122 + particle2: 123 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &39329228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 39329229} + - component: {fileID: 39329233} + - component: {fileID: 39329232} + - component: {fileID: 39329231} + - component: {fileID: 39329230} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &39329229 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39329228} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &39329230 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39329228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 39329233} + m_Target: {fileID: 39329229} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &39329231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39329228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &39329232 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39329228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 2 +--- !u!114 &39329233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39329228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000 + m_AlignBytes: 16 + groupID: 3 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 224 + particle2: 225 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 225 + particle2: 226 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 226 + particle2: 227 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 227 + particle2: 228 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 228 + particle2: 229 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 229 + particle2: 230 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 230 + particle2: 231 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 231 + particle2: 232 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 232 + particle2: 233 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 233 + particle2: 234 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 234 + particle2: 235 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &40955814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 40955815} + - component: {fileID: 40955819} + - component: {fileID: 40955818} + - component: {fileID: 40955817} + - component: {fileID: 40955816} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &40955815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40955814} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &40955816 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40955814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 40955819} + m_Target: {fileID: 40955815} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &40955817 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40955814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &40955818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40955814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 3 +--- !u!114 &40955819 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40955814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000 + m_AlignBytes: 16 + groupID: 4 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 336 + particle2: 337 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 337 + particle2: 338 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 338 + particle2: 339 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 339 + particle2: 340 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 340 + particle2: 341 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 341 + particle2: 342 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 342 + particle2: 343 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 343 + particle2: 344 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 344 + particle2: 345 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 345 + particle2: 346 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 346 + particle2: 347 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &52316902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 52316903} + - component: {fileID: 52316907} + - component: {fileID: 52316906} + - component: {fileID: 52316905} + - component: {fileID: 52316904} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &52316903 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 52316902} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &52316904 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 52316902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 52316907} + m_Target: {fileID: 52316903} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &52316905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 52316902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &52316906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 52316902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 4 +--- !u!114 &52316907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 52316902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000d8010000d9010000da010000db010000dc010000dd010000de010000df010000e0010000e1010000e2010000e3010000e4010000e5010000e6010000e7010000e8010000e9010000ea010000eb010000ec010000ed010000ee010000ef010000f0010000f1010000f2010000f3010000f4010000f5010000f6010000f7010000f8010000f9010000fa010000fb010000fc010000fd010000fe010000ff010000000200000102000002020000030200000402000005020000060200000702000008020000090200000a0200000b0200000c0200000d0200000e0200000f020000100200001102000012020000130200001402000015020000160200001702000018020000190200001a0200001b0200001c0200001d0200001e0200001f020000200200002102000022020000230200002402000025020000260200002702000028020000290200002a0200002b0200002c0200002d0200002e0200002f020000 + m_AlignBytes: 16 + groupID: 5 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 448 + particle2: 449 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 449 + particle2: 450 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 450 + particle2: 451 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 451 + particle2: 452 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 452 + particle2: 453 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 453 + particle2: 454 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 454 + particle2: 455 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 455 + particle2: 456 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 456 + particle2: 457 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 457 + particle2: 458 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 458 + particle2: 459 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &54623966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 54623967} + m_Layer: 0 + m_Name: Row (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &54623967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 54623966} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1461467372} + - {fileID: 549111722} + - {fileID: 2039851350} + - {fileID: 2120568196} + - {fileID: 1707229808} + - {fileID: 453529546} + - {fileID: 437496967} + - {fileID: 75753452} + - {fileID: 1143427710} + - {fileID: 1796031224} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &58243449 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 58243450} + - component: {fileID: 58243454} + - component: {fileID: 58243453} + - component: {fileID: 58243452} + - component: {fileID: 58243451} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &58243450 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58243449} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &58243451 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58243449} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 58243454} + m_Target: {fileID: 58243450} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &58243452 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58243449} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &58243453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58243449} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 5 +--- !u!114 &58243454 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 58243449} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 300200003102000032020000330200003402000035020000360200003702000038020000390200003a0200003b0200003c0200003d0200003e0200003f020000400200004102000042020000430200004402000045020000460200004702000048020000490200004a0200004b0200004c0200004d0200004e0200004f020000500200005102000052020000530200005402000055020000560200005702000058020000590200005a0200005b0200005c0200005d0200005e0200005f020000600200006102000062020000630200006402000065020000660200006702000068020000690200006a0200006b0200006c0200006d0200006e0200006f020000700200007102000072020000730200007402000075020000760200007702000078020000790200007a0200007b0200007c0200007d0200007e0200007f020000800200008102000082020000830200008402000085020000860200008702000088020000890200008a0200008b0200008c0200008d0200008e0200008f020000900200009102000092020000930200009402000095020000960200009702000098020000990200009a0200009b0200009c0200009d0200009e0200009f020000 + m_AlignBytes: 16 + groupID: 6 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 560 + particle2: 561 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 561 + particle2: 562 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 562 + particle2: 563 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 563 + particle2: 564 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 564 + particle2: 565 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 565 + particle2: 566 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 566 + particle2: 567 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 567 + particle2: 568 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 568 + particle2: 569 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 569 + particle2: 570 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 570 + particle2: 571 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &59144233 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 59144234} + - component: {fileID: 59144238} + - component: {fileID: 59144237} + - component: {fileID: 59144236} + - component: {fileID: 59144235} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &59144234 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59144233} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &59144235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59144233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 59144238} + m_Target: {fileID: 59144234} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &59144236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59144233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &59144237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59144233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 6 +--- !u!114 &59144238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59144233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0020000a1020000a2020000a3020000a4020000a5020000a6020000a7020000a8020000a9020000aa020000ab020000ac020000ad020000ae020000af020000b0020000b1020000b2020000b3020000b4020000b5020000b6020000b7020000b8020000b9020000ba020000bb020000bc020000bd020000be020000bf020000c0020000c1020000c2020000c3020000c4020000c5020000c6020000c7020000c8020000c9020000ca020000cb020000cc020000cd020000ce020000cf020000d0020000d1020000d2020000d3020000d4020000d5020000d6020000d7020000d8020000d9020000da020000db020000dc020000dd020000de020000df020000e0020000e1020000e2020000e3020000e4020000e5020000e6020000e7020000e8020000e9020000ea020000eb020000ec020000ed020000ee020000ef020000f0020000f1020000f2020000f3020000f4020000f5020000f6020000f7020000f8020000f9020000fa020000fb020000fc020000fd020000fe020000ff020000000300000103000002030000030300000403000005030000060300000703000008030000090300000a0300000b0300000c0300000d0300000e0300000f030000 + m_AlignBytes: 16 + groupID: 7 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 672 + particle2: 673 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 673 + particle2: 674 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 674 + particle2: 675 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 675 + particle2: 676 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 676 + particle2: 677 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 677 + particle2: 678 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 678 + particle2: 679 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 679 + particle2: 680 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 680 + particle2: 681 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 681 + particle2: 682 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 682 + particle2: 683 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &61099066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 61099067} + - component: {fileID: 61099071} + - component: {fileID: 61099070} + - component: {fileID: 61099069} + - component: {fileID: 61099068} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &61099067 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 61099066} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &61099068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 61099066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 61099071} + m_Target: {fileID: 61099067} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &61099069 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 61099066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &61099070 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 61099066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 7 +--- !u!114 &61099071 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 61099066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 100300001103000012030000130300001403000015030000160300001703000018030000190300001a0300001b0300001c0300001d0300001e0300001f030000200300002103000022030000230300002403000025030000260300002703000028030000290300002a0300002b0300002c0300002d0300002e0300002f030000300300003103000032030000330300003403000035030000360300003703000038030000390300003a0300003b0300003c0300003d0300003e0300003f030000400300004103000042030000430300004403000045030000460300004703000048030000490300004a0300004b0300004c0300004d0300004e0300004f030000500300005103000052030000530300005403000055030000560300005703000058030000590300005a0300005b0300005c0300005d0300005e0300005f030000600300006103000062030000630300006403000065030000660300006703000068030000690300006a0300006b0300006c0300006d0300006e0300006f030000700300007103000072030000730300007403000075030000760300007703000078030000790300007a0300007b0300007c0300007d0300007e0300007f030000 + m_AlignBytes: 16 + groupID: 8 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 784 + particle2: 785 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 785 + particle2: 786 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 786 + particle2: 787 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 787 + particle2: 788 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 788 + particle2: 789 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 789 + particle2: 790 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 790 + particle2: 791 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 791 + particle2: 792 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 792 + particle2: 793 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 793 + particle2: 794 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 794 + particle2: 795 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &67321348 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 67321349} + - component: {fileID: 67321353} + - component: {fileID: 67321352} + - component: {fileID: 67321351} + - component: {fileID: 67321350} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &67321349 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 67321348} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &67321350 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 67321348} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 67321353} + m_Target: {fileID: 67321349} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &67321351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 67321348} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &67321352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 67321348} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 8 +--- !u!114 &67321353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 67321348} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 800300008103000082030000830300008403000085030000860300008703000088030000890300008a0300008b0300008c0300008d0300008e0300008f030000900300009103000092030000930300009403000095030000960300009703000098030000990300009a0300009b0300009c0300009d0300009e0300009f030000a0030000a1030000a2030000a3030000a4030000a5030000a6030000a7030000a8030000a9030000aa030000ab030000ac030000ad030000ae030000af030000b0030000b1030000b2030000b3030000b4030000b5030000b6030000b7030000b8030000b9030000ba030000bb030000bc030000bd030000be030000bf030000c0030000c1030000c2030000c3030000c4030000c5030000c6030000c7030000c8030000c9030000ca030000cb030000cc030000cd030000ce030000cf030000d0030000d1030000d2030000d3030000d4030000d5030000d6030000d7030000d8030000d9030000da030000db030000dc030000dd030000de030000df030000e0030000e1030000e2030000e3030000e4030000e5030000e6030000e7030000e8030000e9030000ea030000eb030000ec030000ed030000ee030000ef030000 + m_AlignBytes: 16 + groupID: 9 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 896 + particle2: 897 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 897 + particle2: 898 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 898 + particle2: 899 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 899 + particle2: 900 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 900 + particle2: 901 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 901 + particle2: 902 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 902 + particle2: 903 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 903 + particle2: 904 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 904 + particle2: 905 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 905 + particle2: 906 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 906 + particle2: 907 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &75753451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 75753452} + - component: {fileID: 75753456} + - component: {fileID: 75753455} + - component: {fileID: 75753454} + - component: {fileID: 75753453} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &75753452 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 75753451} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &75753453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 75753451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 75753456} + m_Target: {fileID: 75753452} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &75753454 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 75753451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &75753455 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 75753451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 9 +--- !u!114 &75753456 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 75753451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f0030000f1030000f2030000f3030000f4030000f5030000f6030000f7030000f8030000f9030000fa030000fb030000fc030000fd030000fe030000ff030000000400000104000002040000030400000404000005040000060400000704000008040000090400000a0400000b0400000c0400000d0400000e0400000f040000100400001104000012040000130400001404000015040000160400001704000018040000190400001a0400001b0400001c0400001d0400001e0400001f040000200400002104000022040000230400002404000025040000260400002704000028040000290400002a0400002b0400002c0400002d0400002e0400002f040000300400003104000032040000330400003404000035040000360400003704000038040000390400003a0400003b0400003c0400003d0400003e0400003f040000400400004104000042040000430400004404000045040000460400004704000048040000490400004a0400004b0400004c0400004d0400004e0400004f040000500400005104000052040000530400005404000055040000560400005704000058040000590400005a0400005b0400005c0400005d0400005e0400005f040000 + m_AlignBytes: 16 + groupID: 10 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1008 + particle2: 1009 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1009 + particle2: 1010 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1010 + particle2: 1011 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1011 + particle2: 1012 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1012 + particle2: 1013 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1013 + particle2: 1014 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1014 + particle2: 1015 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1015 + particle2: 1016 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1016 + particle2: 1017 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1017 + particle2: 1018 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1018 + particle2: 1019 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &82705114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 82705115} + - component: {fileID: 82705119} + - component: {fileID: 82705118} + - component: {fileID: 82705117} + - component: {fileID: 82705116} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &82705115 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82705114} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &82705116 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82705114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 82705119} + m_Target: {fileID: 82705115} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &82705117 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82705114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &82705118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82705114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 10 +--- !u!114 &82705119 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82705114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 600400006104000062040000630400006404000065040000660400006704000068040000690400006a0400006b0400006c0400006d0400006e0400006f040000700400007104000072040000730400007404000075040000760400007704000078040000790400007a0400007b0400007c0400007d0400007e0400007f040000800400008104000082040000830400008404000085040000860400008704000088040000890400008a0400008b0400008c0400008d0400008e0400008f040000900400009104000092040000930400009404000095040000960400009704000098040000990400009a0400009b0400009c0400009d0400009e0400009f040000a0040000a1040000a2040000a3040000a4040000a5040000a6040000a7040000a8040000a9040000aa040000ab040000ac040000ad040000ae040000af040000b0040000b1040000b2040000b3040000b4040000b5040000b6040000b7040000b8040000b9040000ba040000bb040000bc040000bd040000be040000bf040000c0040000c1040000c2040000c3040000c4040000c5040000c6040000c7040000c8040000c9040000ca040000cb040000cc040000cd040000ce040000cf040000 + m_AlignBytes: 16 + groupID: 11 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1120 + particle2: 1121 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1121 + particle2: 1122 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1122 + particle2: 1123 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1123 + particle2: 1124 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1124 + particle2: 1125 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1125 + particle2: 1126 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1126 + particle2: 1127 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1127 + particle2: 1128 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1128 + particle2: 1129 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1129 + particle2: 1130 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1130 + particle2: 1131 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &84035659 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 84035660} + - component: {fileID: 84035664} + - component: {fileID: 84035663} + - component: {fileID: 84035662} + - component: {fileID: 84035661} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &84035660 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84035659} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &84035661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84035659} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 84035664} + m_Target: {fileID: 84035660} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &84035662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84035659} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &84035663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84035659} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 11 +--- !u!114 &84035664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84035659} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d0040000d1040000d2040000d3040000d4040000d5040000d6040000d7040000d8040000d9040000da040000db040000dc040000dd040000de040000df040000e0040000e1040000e2040000e3040000e4040000e5040000e6040000e7040000e8040000e9040000ea040000eb040000ec040000ed040000ee040000ef040000f0040000f1040000f2040000f3040000f4040000f5040000f6040000f7040000f8040000f9040000fa040000fb040000fc040000fd040000fe040000ff040000000500000105000002050000030500000405000005050000060500000705000008050000090500000a0500000b0500000c0500000d0500000e0500000f050000100500001105000012050000130500001405000015050000160500001705000018050000190500001a0500001b0500001c0500001d0500001e0500001f050000200500002105000022050000230500002405000025050000260500002705000028050000290500002a0500002b0500002c0500002d0500002e0500002f050000300500003105000032050000330500003405000035050000360500003705000038050000390500003a0500003b0500003c0500003d0500003e0500003f050000 + m_AlignBytes: 16 + groupID: 12 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1232 + particle2: 1233 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1233 + particle2: 1234 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1234 + particle2: 1235 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1235 + particle2: 1236 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1236 + particle2: 1237 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1237 + particle2: 1238 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1238 + particle2: 1239 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1239 + particle2: 1240 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1240 + particle2: 1241 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1241 + particle2: 1242 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1242 + particle2: 1243 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &104614687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 104614688} + - component: {fileID: 104614692} + - component: {fileID: 104614691} + - component: {fileID: 104614690} + - component: {fileID: 104614689} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &104614688 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104614687} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &104614689 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104614687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 104614692} + m_Target: {fileID: 104614688} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &104614690 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104614687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &104614691 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104614687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 12 +--- !u!114 &104614692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 104614687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 400500004105000042050000430500004405000045050000460500004705000048050000490500004a0500004b0500004c0500004d0500004e0500004f050000500500005105000052050000530500005405000055050000560500005705000058050000590500005a0500005b0500005c0500005d0500005e0500005f050000600500006105000062050000630500006405000065050000660500006705000068050000690500006a0500006b0500006c0500006d0500006e0500006f050000700500007105000072050000730500007405000075050000760500007705000078050000790500007a0500007b0500007c0500007d0500007e0500007f050000800500008105000082050000830500008405000085050000860500008705000088050000890500008a0500008b0500008c0500008d0500008e0500008f050000900500009105000092050000930500009405000095050000960500009705000098050000990500009a0500009b0500009c0500009d0500009e0500009f050000a0050000a1050000a2050000a3050000a4050000a5050000a6050000a7050000a8050000a9050000aa050000ab050000ac050000ad050000ae050000af050000 + m_AlignBytes: 16 + groupID: 13 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1344 + particle2: 1345 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1345 + particle2: 1346 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1346 + particle2: 1347 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1347 + particle2: 1348 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1348 + particle2: 1349 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1349 + particle2: 1350 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1350 + particle2: 1351 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1351 + particle2: 1352 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1352 + particle2: 1353 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1353 + particle2: 1354 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1354 + particle2: 1355 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &113190532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 113190533} + - component: {fileID: 113190537} + - component: {fileID: 113190536} + - component: {fileID: 113190535} + - component: {fileID: 113190534} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &113190533 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113190532} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &113190534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113190532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 113190537} + m_Target: {fileID: 113190533} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &113190535 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113190532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &113190536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113190532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 13 +--- !u!114 &113190537 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113190532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b0050000b1050000b2050000b3050000b4050000b5050000b6050000b7050000b8050000b9050000ba050000bb050000bc050000bd050000be050000bf050000c0050000c1050000c2050000c3050000c4050000c5050000c6050000c7050000c8050000c9050000ca050000cb050000cc050000cd050000ce050000cf050000d0050000d1050000d2050000d3050000d4050000d5050000d6050000d7050000d8050000d9050000da050000db050000dc050000dd050000de050000df050000e0050000e1050000e2050000e3050000e4050000e5050000e6050000e7050000e8050000e9050000ea050000eb050000ec050000ed050000ee050000ef050000f0050000f1050000f2050000f3050000f4050000f5050000f6050000f7050000f8050000f9050000fa050000fb050000fc050000fd050000fe050000ff050000000600000106000002060000030600000406000005060000060600000706000008060000090600000a0600000b0600000c0600000d0600000e0600000f060000100600001106000012060000130600001406000015060000160600001706000018060000190600001a0600001b0600001c0600001d0600001e0600001f060000 + m_AlignBytes: 16 + groupID: 14 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1456 + particle2: 1457 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1457 + particle2: 1458 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1458 + particle2: 1459 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1459 + particle2: 1460 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1460 + particle2: 1461 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1461 + particle2: 1462 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1462 + particle2: 1463 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1463 + particle2: 1464 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1464 + particle2: 1465 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1465 + particle2: 1466 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1466 + particle2: 1467 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &123868265 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 123868266} + - component: {fileID: 123868270} + - component: {fileID: 123868269} + - component: {fileID: 123868268} + - component: {fileID: 123868267} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &123868266 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 123868265} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &123868267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 123868265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 123868270} + m_Target: {fileID: 123868266} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &123868268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 123868265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &123868269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 123868265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 14 +--- !u!114 &123868270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 123868265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 200600002106000022060000230600002406000025060000260600002706000028060000290600002a0600002b0600002c0600002d0600002e0600002f060000300600003106000032060000330600003406000035060000360600003706000038060000390600003a0600003b0600003c0600003d0600003e0600003f060000400600004106000042060000430600004406000045060000460600004706000048060000490600004a0600004b0600004c0600004d0600004e0600004f060000500600005106000052060000530600005406000055060000560600005706000058060000590600005a0600005b0600005c0600005d0600005e0600005f060000600600006106000062060000630600006406000065060000660600006706000068060000690600006a0600006b0600006c0600006d0600006e0600006f060000700600007106000072060000730600007406000075060000760600007706000078060000790600007a0600007b0600007c0600007d0600007e0600007f060000800600008106000082060000830600008406000085060000860600008706000088060000890600008a0600008b0600008c0600008d0600008e0600008f060000 + m_AlignBytes: 16 + groupID: 15 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1568 + particle2: 1569 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1569 + particle2: 1570 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1570 + particle2: 1571 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1571 + particle2: 1572 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1572 + particle2: 1573 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1573 + particle2: 1574 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1574 + particle2: 1575 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1575 + particle2: 1576 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1576 + particle2: 1577 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1577 + particle2: 1578 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1578 + particle2: 1579 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &138556972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 138556973} + - component: {fileID: 138556977} + - component: {fileID: 138556976} + - component: {fileID: 138556975} + - component: {fileID: 138556974} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &138556973 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138556972} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &138556974 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138556972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 138556977} + m_Target: {fileID: 138556973} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &138556975 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138556972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &138556976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138556972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 15 +--- !u!114 &138556977 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138556972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 900600009106000092060000930600009406000095060000960600009706000098060000990600009a0600009b0600009c0600009d0600009e0600009f060000a0060000a1060000a2060000a3060000a4060000a5060000a6060000a7060000a8060000a9060000aa060000ab060000ac060000ad060000ae060000af060000b0060000b1060000b2060000b3060000b4060000b5060000b6060000b7060000b8060000b9060000ba060000bb060000bc060000bd060000be060000bf060000c0060000c1060000c2060000c3060000c4060000c5060000c6060000c7060000c8060000c9060000ca060000cb060000cc060000cd060000ce060000cf060000d0060000d1060000d2060000d3060000d4060000d5060000d6060000d7060000d8060000d9060000da060000db060000dc060000dd060000de060000df060000e0060000e1060000e2060000e3060000e4060000e5060000e6060000e7060000e8060000e9060000ea060000eb060000ec060000ed060000ee060000ef060000f0060000f1060000f2060000f3060000f4060000f5060000f6060000f7060000f8060000f9060000fa060000fb060000fc060000fd060000fe060000ff060000 + m_AlignBytes: 16 + groupID: 16 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1680 + particle2: 1681 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1681 + particle2: 1682 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1682 + particle2: 1683 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1683 + particle2: 1684 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1684 + particle2: 1685 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1685 + particle2: 1686 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1686 + particle2: 1687 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1687 + particle2: 1688 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1688 + particle2: 1689 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1689 + particle2: 1690 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1690 + particle2: 1691 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &139383574 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 139383575} + - component: {fileID: 139383579} + - component: {fileID: 139383578} + - component: {fileID: 139383577} + - component: {fileID: 139383576} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &139383575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139383574} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &139383576 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139383574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 139383579} + m_Target: {fileID: 139383575} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &139383577 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139383574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &139383578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139383574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 16 +--- !u!114 &139383579 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 139383574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000700000107000002070000030700000407000005070000060700000707000008070000090700000a0700000b0700000c0700000d0700000e0700000f070000100700001107000012070000130700001407000015070000160700001707000018070000190700001a0700001b0700001c0700001d0700001e0700001f070000200700002107000022070000230700002407000025070000260700002707000028070000290700002a0700002b0700002c0700002d0700002e0700002f070000300700003107000032070000330700003407000035070000360700003707000038070000390700003a0700003b0700003c0700003d0700003e0700003f070000400700004107000042070000430700004407000045070000460700004707000048070000490700004a0700004b0700004c0700004d0700004e0700004f070000500700005107000052070000530700005407000055070000560700005707000058070000590700005a0700005b0700005c0700005d0700005e0700005f070000600700006107000062070000630700006407000065070000660700006707000068070000690700006a0700006b0700006c0700006d0700006e0700006f070000 + m_AlignBytes: 16 + groupID: 17 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1792 + particle2: 1793 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1793 + particle2: 1794 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1794 + particle2: 1795 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1795 + particle2: 1796 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1796 + particle2: 1797 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1797 + particle2: 1798 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1798 + particle2: 1799 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1799 + particle2: 1800 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1800 + particle2: 1801 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1801 + particle2: 1802 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1802 + particle2: 1803 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &156100544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 156100545} + - component: {fileID: 156100549} + - component: {fileID: 156100548} + - component: {fileID: 156100547} + - component: {fileID: 156100546} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &156100545 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156100544} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &156100546 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156100544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 156100549} + m_Target: {fileID: 156100545} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &156100547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156100544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &156100548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156100544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 17 +--- !u!114 &156100549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156100544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 700700007107000072070000730700007407000075070000760700007707000078070000790700007a0700007b0700007c0700007d0700007e0700007f070000800700008107000082070000830700008407000085070000860700008707000088070000890700008a0700008b0700008c0700008d0700008e0700008f070000900700009107000092070000930700009407000095070000960700009707000098070000990700009a0700009b0700009c0700009d0700009e0700009f070000a0070000a1070000a2070000a3070000a4070000a5070000a6070000a7070000a8070000a9070000aa070000ab070000ac070000ad070000ae070000af070000b0070000b1070000b2070000b3070000b4070000b5070000b6070000b7070000b8070000b9070000ba070000bb070000bc070000bd070000be070000bf070000c0070000c1070000c2070000c3070000c4070000c5070000c6070000c7070000c8070000c9070000ca070000cb070000cc070000cd070000ce070000cf070000d0070000d1070000d2070000d3070000d4070000d5070000d6070000d7070000d8070000d9070000da070000db070000dc070000dd070000de070000df070000 + m_AlignBytes: 16 + groupID: 18 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 1904 + particle2: 1905 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1905 + particle2: 1906 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 1906 + particle2: 1907 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 1907 + particle2: 1908 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 1908 + particle2: 1909 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 1909 + particle2: 1910 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 1910 + particle2: 1911 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 1911 + particle2: 1912 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 1912 + particle2: 1913 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 1913 + particle2: 1914 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 1914 + particle2: 1915 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &161507645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 161507646} + - component: {fileID: 161507650} + - component: {fileID: 161507649} + - component: {fileID: 161507648} + - component: {fileID: 161507647} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &161507646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 161507645} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &161507647 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 161507645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 161507650} + m_Target: {fileID: 161507646} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &161507648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 161507645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &161507649 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 161507645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 18 +--- !u!114 &161507650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 161507645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0070000e1070000e2070000e3070000e4070000e5070000e6070000e7070000e8070000e9070000ea070000eb070000ec070000ed070000ee070000ef070000f0070000f1070000f2070000f3070000f4070000f5070000f6070000f7070000f8070000f9070000fa070000fb070000fc070000fd070000fe070000ff070000000800000108000002080000030800000408000005080000060800000708000008080000090800000a0800000b0800000c0800000d0800000e0800000f080000100800001108000012080000130800001408000015080000160800001708000018080000190800001a0800001b0800001c0800001d0800001e0800001f080000200800002108000022080000230800002408000025080000260800002708000028080000290800002a0800002b0800002c0800002d0800002e0800002f080000300800003108000032080000330800003408000035080000360800003708000038080000390800003a0800003b0800003c0800003d0800003e0800003f080000400800004108000042080000430800004408000045080000460800004708000048080000490800004a0800004b0800004c0800004d0800004e0800004f080000 + m_AlignBytes: 16 + groupID: 19 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2016 + particle2: 2017 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2017 + particle2: 2018 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2018 + particle2: 2019 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2019 + particle2: 2020 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2020 + particle2: 2021 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2021 + particle2: 2022 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2022 + particle2: 2023 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2023 + particle2: 2024 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2024 + particle2: 2025 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2025 + particle2: 2026 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2026 + particle2: 2027 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &163656623 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 163656624} + - component: {fileID: 163656628} + - component: {fileID: 163656627} + - component: {fileID: 163656626} + - component: {fileID: 163656625} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &163656624 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163656623} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &163656625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163656623} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 163656628} + m_Target: {fileID: 163656624} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &163656626 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163656623} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &163656627 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163656623} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 19 +--- !u!114 &163656628 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163656623} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 500800005108000052080000530800005408000055080000560800005708000058080000590800005a0800005b0800005c0800005d0800005e0800005f080000600800006108000062080000630800006408000065080000660800006708000068080000690800006a0800006b0800006c0800006d0800006e0800006f080000700800007108000072080000730800007408000075080000760800007708000078080000790800007a0800007b0800007c0800007d0800007e0800007f080000800800008108000082080000830800008408000085080000860800008708000088080000890800008a0800008b0800008c0800008d0800008e0800008f080000900800009108000092080000930800009408000095080000960800009708000098080000990800009a0800009b0800009c0800009d0800009e0800009f080000a0080000a1080000a2080000a3080000a4080000a5080000a6080000a7080000a8080000a9080000aa080000ab080000ac080000ad080000ae080000af080000b0080000b1080000b2080000b3080000b4080000b5080000b6080000b7080000b8080000b9080000ba080000bb080000bc080000bd080000be080000bf080000 + m_AlignBytes: 16 + groupID: 20 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2128 + particle2: 2129 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2129 + particle2: 2130 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2130 + particle2: 2131 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2131 + particle2: 2132 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2132 + particle2: 2133 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2133 + particle2: 2134 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2134 + particle2: 2135 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2135 + particle2: 2136 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2136 + particle2: 2137 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2137 + particle2: 2138 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2138 + particle2: 2139 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &165314044 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 165314045} + - component: {fileID: 165314049} + - component: {fileID: 165314048} + - component: {fileID: 165314047} + - component: {fileID: 165314046} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &165314045 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165314044} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &165314046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165314044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 165314049} + m_Target: {fileID: 165314045} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &165314047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165314044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &165314048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165314044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 20 +--- !u!114 &165314049 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165314044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0080000c1080000c2080000c3080000c4080000c5080000c6080000c7080000c8080000c9080000ca080000cb080000cc080000cd080000ce080000cf080000d0080000d1080000d2080000d3080000d4080000d5080000d6080000d7080000d8080000d9080000da080000db080000dc080000dd080000de080000df080000e0080000e1080000e2080000e3080000e4080000e5080000e6080000e7080000e8080000e9080000ea080000eb080000ec080000ed080000ee080000ef080000f0080000f1080000f2080000f3080000f4080000f5080000f6080000f7080000f8080000f9080000fa080000fb080000fc080000fd080000fe080000ff080000000900000109000002090000030900000409000005090000060900000709000008090000090900000a0900000b0900000c0900000d0900000e0900000f090000100900001109000012090000130900001409000015090000160900001709000018090000190900001a0900001b0900001c0900001d0900001e0900001f090000200900002109000022090000230900002409000025090000260900002709000028090000290900002a0900002b0900002c0900002d0900002e0900002f090000 + m_AlignBytes: 16 + groupID: 21 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2240 + particle2: 2241 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2241 + particle2: 2242 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2242 + particle2: 2243 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2243 + particle2: 2244 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2244 + particle2: 2245 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2245 + particle2: 2246 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2246 + particle2: 2247 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2247 + particle2: 2248 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2248 + particle2: 2249 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2249 + particle2: 2250 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2250 + particle2: 2251 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &170149754 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 170149755} + - component: {fileID: 170149759} + - component: {fileID: 170149758} + - component: {fileID: 170149757} + - component: {fileID: 170149756} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &170149755 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170149754} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &170149756 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170149754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 170149759} + m_Target: {fileID: 170149755} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &170149757 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170149754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &170149758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170149754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 21 +--- !u!114 &170149759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170149754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 300900003109000032090000330900003409000035090000360900003709000038090000390900003a0900003b0900003c0900003d0900003e0900003f090000400900004109000042090000430900004409000045090000460900004709000048090000490900004a0900004b0900004c0900004d0900004e0900004f090000500900005109000052090000530900005409000055090000560900005709000058090000590900005a0900005b0900005c0900005d0900005e0900005f090000600900006109000062090000630900006409000065090000660900006709000068090000690900006a0900006b0900006c0900006d0900006e0900006f090000700900007109000072090000730900007409000075090000760900007709000078090000790900007a0900007b0900007c0900007d0900007e0900007f090000800900008109000082090000830900008409000085090000860900008709000088090000890900008a0900008b0900008c0900008d0900008e0900008f090000900900009109000092090000930900009409000095090000960900009709000098090000990900009a0900009b0900009c0900009d0900009e0900009f090000 + m_AlignBytes: 16 + groupID: 22 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2352 + particle2: 2353 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2353 + particle2: 2354 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2354 + particle2: 2355 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2355 + particle2: 2356 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2356 + particle2: 2357 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2357 + particle2: 2358 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2358 + particle2: 2359 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2359 + particle2: 2360 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2360 + particle2: 2361 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2361 + particle2: 2362 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2362 + particle2: 2363 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &238005275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 238005276} + - component: {fileID: 238005280} + - component: {fileID: 238005279} + - component: {fileID: 238005278} + - component: {fileID: 238005277} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &238005276 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 238005275} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &238005277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 238005275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 238005280} + m_Target: {fileID: 238005276} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &238005278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 238005275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &238005279 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 238005275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 22 +--- !u!114 &238005280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 238005275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0090000a1090000a2090000a3090000a4090000a5090000a6090000a7090000a8090000a9090000aa090000ab090000ac090000ad090000ae090000af090000b0090000b1090000b2090000b3090000b4090000b5090000b6090000b7090000b8090000b9090000ba090000bb090000bc090000bd090000be090000bf090000c0090000c1090000c2090000c3090000c4090000c5090000c6090000c7090000c8090000c9090000ca090000cb090000cc090000cd090000ce090000cf090000d0090000d1090000d2090000d3090000d4090000d5090000d6090000d7090000d8090000d9090000da090000db090000dc090000dd090000de090000df090000e0090000e1090000e2090000e3090000e4090000e5090000e6090000e7090000e8090000e9090000ea090000eb090000ec090000ed090000ee090000ef090000f0090000f1090000f2090000f3090000f4090000f5090000f6090000f7090000f8090000f9090000fa090000fb090000fc090000fd090000fe090000ff090000000a0000010a0000020a0000030a0000040a0000050a0000060a0000070a0000080a0000090a00000a0a00000b0a00000c0a00000d0a00000e0a00000f0a0000 + m_AlignBytes: 16 + groupID: 23 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2464 + particle2: 2465 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2465 + particle2: 2466 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2466 + particle2: 2467 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2467 + particle2: 2468 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2468 + particle2: 2469 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2469 + particle2: 2470 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2470 + particle2: 2471 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2471 + particle2: 2472 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2472 + particle2: 2473 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2473 + particle2: 2474 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2474 + particle2: 2475 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &249029317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249029318} + m_Layer: 0 + m_Name: Row (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &249029318 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249029317} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.8} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1101870350} + - {fileID: 304677351} + - {fileID: 1569249538} + - {fileID: 1092735640} + - {fileID: 1058904400} + - {fileID: 1153529340} + - {fileID: 881133077} + - {fileID: 1743992358} + - {fileID: 519875456} + - {fileID: 960049599} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &258800384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 258800385} + - component: {fileID: 258800389} + - component: {fileID: 258800388} + - component: {fileID: 258800387} + - component: {fileID: 258800386} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &258800385 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 258800384} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &258800386 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 258800384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 258800389} + m_Target: {fileID: 258800385} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &258800387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 258800384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &258800388 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 258800384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 23 +--- !u!114 &258800389 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 258800384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 100a0000110a0000120a0000130a0000140a0000150a0000160a0000170a0000180a0000190a00001a0a00001b0a00001c0a00001d0a00001e0a00001f0a0000200a0000210a0000220a0000230a0000240a0000250a0000260a0000270a0000280a0000290a00002a0a00002b0a00002c0a00002d0a00002e0a00002f0a0000300a0000310a0000320a0000330a0000340a0000350a0000360a0000370a0000380a0000390a00003a0a00003b0a00003c0a00003d0a00003e0a00003f0a0000400a0000410a0000420a0000430a0000440a0000450a0000460a0000470a0000480a0000490a00004a0a00004b0a00004c0a00004d0a00004e0a00004f0a0000500a0000510a0000520a0000530a0000540a0000550a0000560a0000570a0000580a0000590a00005a0a00005b0a00005c0a00005d0a00005e0a00005f0a0000600a0000610a0000620a0000630a0000640a0000650a0000660a0000670a0000680a0000690a00006a0a00006b0a00006c0a00006d0a00006e0a00006f0a0000700a0000710a0000720a0000730a0000740a0000750a0000760a0000770a0000780a0000790a00007a0a00007b0a00007c0a00007d0a00007e0a00007f0a0000 + m_AlignBytes: 16 + groupID: 24 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2576 + particle2: 2577 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2577 + particle2: 2578 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2578 + particle2: 2579 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2579 + particle2: 2580 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2580 + particle2: 2581 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2581 + particle2: 2582 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2582 + particle2: 2583 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2583 + particle2: 2584 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2584 + particle2: 2585 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2585 + particle2: 2586 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2586 + particle2: 2587 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &265659788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 265659789} + - component: {fileID: 265659793} + - component: {fileID: 265659792} + - component: {fileID: 265659791} + - component: {fileID: 265659790} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &265659789 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265659788} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &265659790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265659788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 265659793} + m_Target: {fileID: 265659789} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &265659791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265659788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &265659792 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265659788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 24 +--- !u!114 &265659793 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265659788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 800a0000810a0000820a0000830a0000840a0000850a0000860a0000870a0000880a0000890a00008a0a00008b0a00008c0a00008d0a00008e0a00008f0a0000900a0000910a0000920a0000930a0000940a0000950a0000960a0000970a0000980a0000990a00009a0a00009b0a00009c0a00009d0a00009e0a00009f0a0000a00a0000a10a0000a20a0000a30a0000a40a0000a50a0000a60a0000a70a0000a80a0000a90a0000aa0a0000ab0a0000ac0a0000ad0a0000ae0a0000af0a0000b00a0000b10a0000b20a0000b30a0000b40a0000b50a0000b60a0000b70a0000b80a0000b90a0000ba0a0000bb0a0000bc0a0000bd0a0000be0a0000bf0a0000c00a0000c10a0000c20a0000c30a0000c40a0000c50a0000c60a0000c70a0000c80a0000c90a0000ca0a0000cb0a0000cc0a0000cd0a0000ce0a0000cf0a0000d00a0000d10a0000d20a0000d30a0000d40a0000d50a0000d60a0000d70a0000d80a0000d90a0000da0a0000db0a0000dc0a0000dd0a0000de0a0000df0a0000e00a0000e10a0000e20a0000e30a0000e40a0000e50a0000e60a0000e70a0000e80a0000e90a0000ea0a0000eb0a0000ec0a0000ed0a0000ee0a0000ef0a0000 + m_AlignBytes: 16 + groupID: 25 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2688 + particle2: 2689 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2689 + particle2: 2690 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2690 + particle2: 2691 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2691 + particle2: 2692 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2692 + particle2: 2693 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2693 + particle2: 2694 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2694 + particle2: 2695 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2695 + particle2: 2696 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2696 + particle2: 2697 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2697 + particle2: 2698 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2698 + particle2: 2699 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &274966133 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 274966134} + - component: {fileID: 274966138} + - component: {fileID: 274966137} + - component: {fileID: 274966136} + - component: {fileID: 274966135} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &274966134 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274966133} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &274966135 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274966133} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 274966138} + m_Target: {fileID: 274966134} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &274966136 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274966133} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &274966137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274966133} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 25 +--- !u!114 &274966138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274966133} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f00a0000f10a0000f20a0000f30a0000f40a0000f50a0000f60a0000f70a0000f80a0000f90a0000fa0a0000fb0a0000fc0a0000fd0a0000fe0a0000ff0a0000000b0000010b0000020b0000030b0000040b0000050b0000060b0000070b0000080b0000090b00000a0b00000b0b00000c0b00000d0b00000e0b00000f0b0000100b0000110b0000120b0000130b0000140b0000150b0000160b0000170b0000180b0000190b00001a0b00001b0b00001c0b00001d0b00001e0b00001f0b0000200b0000210b0000220b0000230b0000240b0000250b0000260b0000270b0000280b0000290b00002a0b00002b0b00002c0b00002d0b00002e0b00002f0b0000300b0000310b0000320b0000330b0000340b0000350b0000360b0000370b0000380b0000390b00003a0b00003b0b00003c0b00003d0b00003e0b00003f0b0000400b0000410b0000420b0000430b0000440b0000450b0000460b0000470b0000480b0000490b00004a0b00004b0b00004c0b00004d0b00004e0b00004f0b0000500b0000510b0000520b0000530b0000540b0000550b0000560b0000570b0000580b0000590b00005a0b00005b0b00005c0b00005d0b00005e0b00005f0b0000 + m_AlignBytes: 16 + groupID: 26 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2800 + particle2: 2801 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2801 + particle2: 2802 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2802 + particle2: 2803 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2803 + particle2: 2804 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2804 + particle2: 2805 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2805 + particle2: 2806 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2806 + particle2: 2807 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2807 + particle2: 2808 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2808 + particle2: 2809 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2809 + particle2: 2810 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2810 + particle2: 2811 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &277586513 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 277586514} + - component: {fileID: 277586518} + - component: {fileID: 277586517} + - component: {fileID: 277586516} + - component: {fileID: 277586515} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &277586514 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277586513} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &277586515 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277586513} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 277586518} + m_Target: {fileID: 277586514} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &277586516 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277586513} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &277586517 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277586513} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 26 +--- !u!114 &277586518 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 277586513} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 600b0000610b0000620b0000630b0000640b0000650b0000660b0000670b0000680b0000690b00006a0b00006b0b00006c0b00006d0b00006e0b00006f0b0000700b0000710b0000720b0000730b0000740b0000750b0000760b0000770b0000780b0000790b00007a0b00007b0b00007c0b00007d0b00007e0b00007f0b0000800b0000810b0000820b0000830b0000840b0000850b0000860b0000870b0000880b0000890b00008a0b00008b0b00008c0b00008d0b00008e0b00008f0b0000900b0000910b0000920b0000930b0000940b0000950b0000960b0000970b0000980b0000990b00009a0b00009b0b00009c0b00009d0b00009e0b00009f0b0000a00b0000a10b0000a20b0000a30b0000a40b0000a50b0000a60b0000a70b0000a80b0000a90b0000aa0b0000ab0b0000ac0b0000ad0b0000ae0b0000af0b0000b00b0000b10b0000b20b0000b30b0000b40b0000b50b0000b60b0000b70b0000b80b0000b90b0000ba0b0000bb0b0000bc0b0000bd0b0000be0b0000bf0b0000c00b0000c10b0000c20b0000c30b0000c40b0000c50b0000c60b0000c70b0000c80b0000c90b0000ca0b0000cb0b0000cc0b0000cd0b0000ce0b0000cf0b0000 + m_AlignBytes: 16 + groupID: 27 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 2912 + particle2: 2913 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 2913 + particle2: 2914 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2914 + particle2: 2915 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 2915 + particle2: 2916 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 2916 + particle2: 2917 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 2917 + particle2: 2918 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 2918 + particle2: 2919 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 2919 + particle2: 2920 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 2920 + particle2: 2921 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 2921 + particle2: 2922 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 2922 + particle2: 2923 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &302892550 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 302892551} + - component: {fileID: 302892555} + - component: {fileID: 302892554} + - component: {fileID: 302892553} + - component: {fileID: 302892552} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &302892551 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302892550} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &302892552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302892550} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 302892555} + m_Target: {fileID: 302892551} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &302892553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302892550} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &302892554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302892550} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 27 +--- !u!114 &302892555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302892550} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d00b0000d10b0000d20b0000d30b0000d40b0000d50b0000d60b0000d70b0000d80b0000d90b0000da0b0000db0b0000dc0b0000dd0b0000de0b0000df0b0000e00b0000e10b0000e20b0000e30b0000e40b0000e50b0000e60b0000e70b0000e80b0000e90b0000ea0b0000eb0b0000ec0b0000ed0b0000ee0b0000ef0b0000f00b0000f10b0000f20b0000f30b0000f40b0000f50b0000f60b0000f70b0000f80b0000f90b0000fa0b0000fb0b0000fc0b0000fd0b0000fe0b0000ff0b0000000c0000010c0000020c0000030c0000040c0000050c0000060c0000070c0000080c0000090c00000a0c00000b0c00000c0c00000d0c00000e0c00000f0c0000100c0000110c0000120c0000130c0000140c0000150c0000160c0000170c0000180c0000190c00001a0c00001b0c00001c0c00001d0c00001e0c00001f0c0000200c0000210c0000220c0000230c0000240c0000250c0000260c0000270c0000280c0000290c00002a0c00002b0c00002c0c00002d0c00002e0c00002f0c0000300c0000310c0000320c0000330c0000340c0000350c0000360c0000370c0000380c0000390c00003a0c00003b0c00003c0c00003d0c00003e0c00003f0c0000 + m_AlignBytes: 16 + groupID: 28 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3024 + particle2: 3025 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3025 + particle2: 3026 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3026 + particle2: 3027 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3027 + particle2: 3028 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3028 + particle2: 3029 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3029 + particle2: 3030 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3030 + particle2: 3031 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3031 + particle2: 3032 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3032 + particle2: 3033 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3033 + particle2: 3034 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3034 + particle2: 3035 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &304677350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 304677351} + - component: {fileID: 304677355} + - component: {fileID: 304677354} + - component: {fileID: 304677353} + - component: {fileID: 304677352} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &304677351 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304677350} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &304677352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304677350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 304677355} + m_Target: {fileID: 304677351} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &304677353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304677350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &304677354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304677350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 28 +--- !u!114 &304677355 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304677350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 400c0000410c0000420c0000430c0000440c0000450c0000460c0000470c0000480c0000490c00004a0c00004b0c00004c0c00004d0c00004e0c00004f0c0000500c0000510c0000520c0000530c0000540c0000550c0000560c0000570c0000580c0000590c00005a0c00005b0c00005c0c00005d0c00005e0c00005f0c0000600c0000610c0000620c0000630c0000640c0000650c0000660c0000670c0000680c0000690c00006a0c00006b0c00006c0c00006d0c00006e0c00006f0c0000700c0000710c0000720c0000730c0000740c0000750c0000760c0000770c0000780c0000790c00007a0c00007b0c00007c0c00007d0c00007e0c00007f0c0000800c0000810c0000820c0000830c0000840c0000850c0000860c0000870c0000880c0000890c00008a0c00008b0c00008c0c00008d0c00008e0c00008f0c0000900c0000910c0000920c0000930c0000940c0000950c0000960c0000970c0000980c0000990c00009a0c00009b0c00009c0c00009d0c00009e0c00009f0c0000a00c0000a10c0000a20c0000a30c0000a40c0000a50c0000a60c0000a70c0000a80c0000a90c0000aa0c0000ab0c0000ac0c0000ad0c0000ae0c0000af0c0000 + m_AlignBytes: 16 + groupID: 29 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3136 + particle2: 3137 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3137 + particle2: 3138 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3138 + particle2: 3139 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3139 + particle2: 3140 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3140 + particle2: 3141 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3141 + particle2: 3142 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3142 + particle2: 3143 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3143 + particle2: 3144 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3144 + particle2: 3145 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3145 + particle2: 3146 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3146 + particle2: 3147 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &334659106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 334659107} + - component: {fileID: 334659111} + - component: {fileID: 334659110} + - component: {fileID: 334659109} + - component: {fileID: 334659108} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &334659107 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334659106} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &334659108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334659106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 334659111} + m_Target: {fileID: 334659107} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &334659109 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334659106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &334659110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334659106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 29 +--- !u!114 &334659111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334659106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b00c0000b10c0000b20c0000b30c0000b40c0000b50c0000b60c0000b70c0000b80c0000b90c0000ba0c0000bb0c0000bc0c0000bd0c0000be0c0000bf0c0000c00c0000c10c0000c20c0000c30c0000c40c0000c50c0000c60c0000c70c0000c80c0000c90c0000ca0c0000cb0c0000cc0c0000cd0c0000ce0c0000cf0c0000d00c0000d10c0000d20c0000d30c0000d40c0000d50c0000d60c0000d70c0000d80c0000d90c0000da0c0000db0c0000dc0c0000dd0c0000de0c0000df0c0000e00c0000e10c0000e20c0000e30c0000e40c0000e50c0000e60c0000e70c0000e80c0000e90c0000ea0c0000eb0c0000ec0c0000ed0c0000ee0c0000ef0c0000f00c0000f10c0000f20c0000f30c0000f40c0000f50c0000f60c0000f70c0000f80c0000f90c0000fa0c0000fb0c0000fc0c0000fd0c0000fe0c0000ff0c0000000d0000010d0000020d0000030d0000040d0000050d0000060d0000070d0000080d0000090d00000a0d00000b0d00000c0d00000d0d00000e0d00000f0d0000100d0000110d0000120d0000130d0000140d0000150d0000160d0000170d0000180d0000190d00001a0d00001b0d00001c0d00001d0d00001e0d00001f0d0000 + m_AlignBytes: 16 + groupID: 30 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3248 + particle2: 3249 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3249 + particle2: 3250 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3250 + particle2: 3251 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3251 + particle2: 3252 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3252 + particle2: 3253 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3253 + particle2: 3254 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3254 + particle2: 3255 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3255 + particle2: 3256 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3256 + particle2: 3257 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3257 + particle2: 3258 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3258 + particle2: 3259 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &347068006 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 347068007} + - component: {fileID: 347068011} + - component: {fileID: 347068010} + - component: {fileID: 347068009} + - component: {fileID: 347068008} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &347068007 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347068006} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &347068008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347068006} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 347068011} + m_Target: {fileID: 347068007} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &347068009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347068006} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &347068010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347068006} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 30 +--- !u!114 &347068011 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347068006} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 200d0000210d0000220d0000230d0000240d0000250d0000260d0000270d0000280d0000290d00002a0d00002b0d00002c0d00002d0d00002e0d00002f0d0000300d0000310d0000320d0000330d0000340d0000350d0000360d0000370d0000380d0000390d00003a0d00003b0d00003c0d00003d0d00003e0d00003f0d0000400d0000410d0000420d0000430d0000440d0000450d0000460d0000470d0000480d0000490d00004a0d00004b0d00004c0d00004d0d00004e0d00004f0d0000500d0000510d0000520d0000530d0000540d0000550d0000560d0000570d0000580d0000590d00005a0d00005b0d00005c0d00005d0d00005e0d00005f0d0000600d0000610d0000620d0000630d0000640d0000650d0000660d0000670d0000680d0000690d00006a0d00006b0d00006c0d00006d0d00006e0d00006f0d0000700d0000710d0000720d0000730d0000740d0000750d0000760d0000770d0000780d0000790d00007a0d00007b0d00007c0d00007d0d00007e0d00007f0d0000800d0000810d0000820d0000830d0000840d0000850d0000860d0000870d0000880d0000890d00008a0d00008b0d00008c0d00008d0d00008e0d00008f0d0000 + m_AlignBytes: 16 + groupID: 31 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3360 + particle2: 3361 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3361 + particle2: 3362 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3362 + particle2: 3363 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3363 + particle2: 3364 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3364 + particle2: 3365 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3365 + particle2: 3366 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3366 + particle2: 3367 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3367 + particle2: 3368 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3368 + particle2: 3369 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3369 + particle2: 3370 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3370 + particle2: 3371 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &353133263 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 353133264} + - component: {fileID: 353133268} + - component: {fileID: 353133267} + - component: {fileID: 353133266} + - component: {fileID: 353133265} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &353133264 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353133263} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &353133265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353133263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 353133268} + m_Target: {fileID: 353133264} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &353133266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353133263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &353133267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353133263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 31 +--- !u!114 &353133268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353133263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 900d0000910d0000920d0000930d0000940d0000950d0000960d0000970d0000980d0000990d00009a0d00009b0d00009c0d00009d0d00009e0d00009f0d0000a00d0000a10d0000a20d0000a30d0000a40d0000a50d0000a60d0000a70d0000a80d0000a90d0000aa0d0000ab0d0000ac0d0000ad0d0000ae0d0000af0d0000b00d0000b10d0000b20d0000b30d0000b40d0000b50d0000b60d0000b70d0000b80d0000b90d0000ba0d0000bb0d0000bc0d0000bd0d0000be0d0000bf0d0000c00d0000c10d0000c20d0000c30d0000c40d0000c50d0000c60d0000c70d0000c80d0000c90d0000ca0d0000cb0d0000cc0d0000cd0d0000ce0d0000cf0d0000d00d0000d10d0000d20d0000d30d0000d40d0000d50d0000d60d0000d70d0000d80d0000d90d0000da0d0000db0d0000dc0d0000dd0d0000de0d0000df0d0000e00d0000e10d0000e20d0000e30d0000e40d0000e50d0000e60d0000e70d0000e80d0000e90d0000ea0d0000eb0d0000ec0d0000ed0d0000ee0d0000ef0d0000f00d0000f10d0000f20d0000f30d0000f40d0000f50d0000f60d0000f70d0000f80d0000f90d0000fa0d0000fb0d0000fc0d0000fd0d0000fe0d0000ff0d0000 + m_AlignBytes: 16 + groupID: 32 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3472 + particle2: 3473 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3473 + particle2: 3474 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3474 + particle2: 3475 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3475 + particle2: 3476 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3476 + particle2: 3477 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3477 + particle2: 3478 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3478 + particle2: 3479 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3479 + particle2: 3480 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3480 + particle2: 3481 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3481 + particle2: 3482 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3482 + particle2: 3483 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &356687287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 356687288} + - component: {fileID: 356687292} + - component: {fileID: 356687291} + - component: {fileID: 356687290} + - component: {fileID: 356687289} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &356687288 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356687287} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &356687289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356687287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 356687292} + m_Target: {fileID: 356687288} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &356687290 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356687287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &356687291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356687287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 32 +--- !u!114 &356687292 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356687287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000e0000010e0000020e0000030e0000040e0000050e0000060e0000070e0000080e0000090e00000a0e00000b0e00000c0e00000d0e00000e0e00000f0e0000100e0000110e0000120e0000130e0000140e0000150e0000160e0000170e0000180e0000190e00001a0e00001b0e00001c0e00001d0e00001e0e00001f0e0000200e0000210e0000220e0000230e0000240e0000250e0000260e0000270e0000280e0000290e00002a0e00002b0e00002c0e00002d0e00002e0e00002f0e0000300e0000310e0000320e0000330e0000340e0000350e0000360e0000370e0000380e0000390e00003a0e00003b0e00003c0e00003d0e00003e0e00003f0e0000400e0000410e0000420e0000430e0000440e0000450e0000460e0000470e0000480e0000490e00004a0e00004b0e00004c0e00004d0e00004e0e00004f0e0000500e0000510e0000520e0000530e0000540e0000550e0000560e0000570e0000580e0000590e00005a0e00005b0e00005c0e00005d0e00005e0e00005f0e0000600e0000610e0000620e0000630e0000640e0000650e0000660e0000670e0000680e0000690e00006a0e00006b0e00006c0e00006d0e00006e0e00006f0e0000 + m_AlignBytes: 16 + groupID: 33 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3584 + particle2: 3585 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3585 + particle2: 3586 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3586 + particle2: 3587 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3587 + particle2: 3588 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3588 + particle2: 3589 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3589 + particle2: 3590 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3590 + particle2: 3591 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3591 + particle2: 3592 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3592 + particle2: 3593 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3593 + particle2: 3594 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3594 + particle2: 3595 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &360658607 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 360658608} + - component: {fileID: 360658612} + - component: {fileID: 360658611} + - component: {fileID: 360658610} + - component: {fileID: 360658609} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &360658608 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360658607} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &360658609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360658607} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 360658612} + m_Target: {fileID: 360658608} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &360658610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360658607} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &360658611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360658607} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 33 +--- !u!114 &360658612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360658607} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 700e0000710e0000720e0000730e0000740e0000750e0000760e0000770e0000780e0000790e00007a0e00007b0e00007c0e00007d0e00007e0e00007f0e0000800e0000810e0000820e0000830e0000840e0000850e0000860e0000870e0000880e0000890e00008a0e00008b0e00008c0e00008d0e00008e0e00008f0e0000900e0000910e0000920e0000930e0000940e0000950e0000960e0000970e0000980e0000990e00009a0e00009b0e00009c0e00009d0e00009e0e00009f0e0000a00e0000a10e0000a20e0000a30e0000a40e0000a50e0000a60e0000a70e0000a80e0000a90e0000aa0e0000ab0e0000ac0e0000ad0e0000ae0e0000af0e0000b00e0000b10e0000b20e0000b30e0000b40e0000b50e0000b60e0000b70e0000b80e0000b90e0000ba0e0000bb0e0000bc0e0000bd0e0000be0e0000bf0e0000c00e0000c10e0000c20e0000c30e0000c40e0000c50e0000c60e0000c70e0000c80e0000c90e0000ca0e0000cb0e0000cc0e0000cd0e0000ce0e0000cf0e0000d00e0000d10e0000d20e0000d30e0000d40e0000d50e0000d60e0000d70e0000d80e0000d90e0000da0e0000db0e0000dc0e0000dd0e0000de0e0000df0e0000 + m_AlignBytes: 16 + groupID: 34 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3696 + particle2: 3697 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3697 + particle2: 3698 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3698 + particle2: 3699 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3699 + particle2: 3700 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3700 + particle2: 3701 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3701 + particle2: 3702 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3702 + particle2: 3703 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3703 + particle2: 3704 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3704 + particle2: 3705 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3705 + particle2: 3706 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3706 + particle2: 3707 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &386305777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 386305778} + - component: {fileID: 386305782} + - component: {fileID: 386305781} + - component: {fileID: 386305780} + - component: {fileID: 386305779} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &386305778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386305777} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &386305779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386305777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 386305782} + m_Target: {fileID: 386305778} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &386305780 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386305777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &386305781 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386305777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 34 +--- !u!114 &386305782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386305777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e00e0000e10e0000e20e0000e30e0000e40e0000e50e0000e60e0000e70e0000e80e0000e90e0000ea0e0000eb0e0000ec0e0000ed0e0000ee0e0000ef0e0000f00e0000f10e0000f20e0000f30e0000f40e0000f50e0000f60e0000f70e0000f80e0000f90e0000fa0e0000fb0e0000fc0e0000fd0e0000fe0e0000ff0e0000000f0000010f0000020f0000030f0000040f0000050f0000060f0000070f0000080f0000090f00000a0f00000b0f00000c0f00000d0f00000e0f00000f0f0000100f0000110f0000120f0000130f0000140f0000150f0000160f0000170f0000180f0000190f00001a0f00001b0f00001c0f00001d0f00001e0f00001f0f0000200f0000210f0000220f0000230f0000240f0000250f0000260f0000270f0000280f0000290f00002a0f00002b0f00002c0f00002d0f00002e0f00002f0f0000300f0000310f0000320f0000330f0000340f0000350f0000360f0000370f0000380f0000390f00003a0f00003b0f00003c0f00003d0f00003e0f00003f0f0000400f0000410f0000420f0000430f0000440f0000450f0000460f0000470f0000480f0000490f00004a0f00004b0f00004c0f00004d0f00004e0f00004f0f0000 + m_AlignBytes: 16 + groupID: 35 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3808 + particle2: 3809 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3809 + particle2: 3810 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3810 + particle2: 3811 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3811 + particle2: 3812 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3812 + particle2: 3813 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3813 + particle2: 3814 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3814 + particle2: 3815 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3815 + particle2: 3816 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3816 + particle2: 3817 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3817 + particle2: 3818 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3818 + particle2: 3819 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &386703046 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 386703047} + - component: {fileID: 386703051} + - component: {fileID: 386703050} + - component: {fileID: 386703049} + - component: {fileID: 386703048} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &386703047 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386703046} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &386703048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386703046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 386703051} + m_Target: {fileID: 386703047} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &386703049 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386703046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &386703050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386703046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 35 +--- !u!114 &386703051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386703046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 500f0000510f0000520f0000530f0000540f0000550f0000560f0000570f0000580f0000590f00005a0f00005b0f00005c0f00005d0f00005e0f00005f0f0000600f0000610f0000620f0000630f0000640f0000650f0000660f0000670f0000680f0000690f00006a0f00006b0f00006c0f00006d0f00006e0f00006f0f0000700f0000710f0000720f0000730f0000740f0000750f0000760f0000770f0000780f0000790f00007a0f00007b0f00007c0f00007d0f00007e0f00007f0f0000800f0000810f0000820f0000830f0000840f0000850f0000860f0000870f0000880f0000890f00008a0f00008b0f00008c0f00008d0f00008e0f00008f0f0000900f0000910f0000920f0000930f0000940f0000950f0000960f0000970f0000980f0000990f00009a0f00009b0f00009c0f00009d0f00009e0f00009f0f0000a00f0000a10f0000a20f0000a30f0000a40f0000a50f0000a60f0000a70f0000a80f0000a90f0000aa0f0000ab0f0000ac0f0000ad0f0000ae0f0000af0f0000b00f0000b10f0000b20f0000b30f0000b40f0000b50f0000b60f0000b70f0000b80f0000b90f0000ba0f0000bb0f0000bc0f0000bd0f0000be0f0000bf0f0000 + m_AlignBytes: 16 + groupID: 36 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 3920 + particle2: 3921 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 3921 + particle2: 3922 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 3922 + particle2: 3923 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3923 + particle2: 3924 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 3924 + particle2: 3925 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 3925 + particle2: 3926 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 3926 + particle2: 3927 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 3927 + particle2: 3928 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 3928 + particle2: 3929 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 3929 + particle2: 3930 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 3930 + particle2: 3931 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &393174416 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 393174417} + - component: {fileID: 393174421} + - component: {fileID: 393174420} + - component: {fileID: 393174419} + - component: {fileID: 393174418} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &393174417 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393174416} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &393174418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393174416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 393174421} + m_Target: {fileID: 393174417} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &393174419 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393174416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &393174420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393174416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 36 +--- !u!114 &393174421 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393174416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c00f0000c10f0000c20f0000c30f0000c40f0000c50f0000c60f0000c70f0000c80f0000c90f0000ca0f0000cb0f0000cc0f0000cd0f0000ce0f0000cf0f0000d00f0000d10f0000d20f0000d30f0000d40f0000d50f0000d60f0000d70f0000d80f0000d90f0000da0f0000db0f0000dc0f0000dd0f0000de0f0000df0f0000e00f0000e10f0000e20f0000e30f0000e40f0000e50f0000e60f0000e70f0000e80f0000e90f0000ea0f0000eb0f0000ec0f0000ed0f0000ee0f0000ef0f0000f00f0000f10f0000f20f0000f30f0000f40f0000f50f0000f60f0000f70f0000f80f0000f90f0000fa0f0000fb0f0000fc0f0000fd0f0000fe0f0000ff0f0000001000000110000002100000031000000410000005100000061000000710000008100000091000000a1000000b1000000c1000000d1000000e1000000f100000101000001110000012100000131000001410000015100000161000001710000018100000191000001a1000001b1000001c1000001d1000001e1000001f100000201000002110000022100000231000002410000025100000261000002710000028100000291000002a1000002b1000002c1000002d1000002e1000002f100000 + m_AlignBytes: 16 + groupID: 37 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4032 + particle2: 4033 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4033 + particle2: 4034 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4034 + particle2: 4035 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4035 + particle2: 4036 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4036 + particle2: 4037 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4037 + particle2: 4038 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4038 + particle2: 4039 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4039 + particle2: 4040 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4040 + particle2: 4041 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4041 + particle2: 4042 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4042 + particle2: 4043 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &399904145 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 399904146} + - component: {fileID: 399904150} + - component: {fileID: 399904149} + - component: {fileID: 399904148} + - component: {fileID: 399904147} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &399904146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 399904145} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &399904147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 399904145} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 399904150} + m_Target: {fileID: 399904146} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &399904148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 399904145} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &399904149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 399904145} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 37 +--- !u!114 &399904150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 399904145} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 301000003110000032100000331000003410000035100000361000003710000038100000391000003a1000003b1000003c1000003d1000003e1000003f100000401000004110000042100000431000004410000045100000461000004710000048100000491000004a1000004b1000004c1000004d1000004e1000004f100000501000005110000052100000531000005410000055100000561000005710000058100000591000005a1000005b1000005c1000005d1000005e1000005f100000601000006110000062100000631000006410000065100000661000006710000068100000691000006a1000006b1000006c1000006d1000006e1000006f100000701000007110000072100000731000007410000075100000761000007710000078100000791000007a1000007b1000007c1000007d1000007e1000007f100000801000008110000082100000831000008410000085100000861000008710000088100000891000008a1000008b1000008c1000008d1000008e1000008f100000901000009110000092100000931000009410000095100000961000009710000098100000991000009a1000009b1000009c1000009d1000009e1000009f100000 + m_AlignBytes: 16 + groupID: 38 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4144 + particle2: 4145 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4145 + particle2: 4146 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4146 + particle2: 4147 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4147 + particle2: 4148 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4148 + particle2: 4149 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4149 + particle2: 4150 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4150 + particle2: 4151 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4151 + particle2: 4152 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4152 + particle2: 4153 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4153 + particle2: 4154 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4154 + particle2: 4155 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalScale.x + value: 1.2 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalScale.y + value: 1.2 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalScale.z + value: 1.2 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} + m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &426164208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 426164209} + m_Layer: 0 + m_Name: Row (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &426164209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 426164208} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.6} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 584208411} + - {fileID: 1523215163} + - {fileID: 1895783475} + - {fileID: 1898534085} + - {fileID: 1948354618} + - {fileID: 2078944946} + - {fileID: 2145370371} + - {fileID: 40955815} + - {fileID: 1789705481} + - {fileID: 1753057674} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &437496966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 437496967} + - component: {fileID: 437496971} + - component: {fileID: 437496970} + - component: {fileID: 437496969} + - component: {fileID: 437496968} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &437496967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437496966} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &437496968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437496966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 437496971} + m_Target: {fileID: 437496967} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &437496969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437496966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &437496970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437496966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 38 +--- !u!114 &437496971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437496966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0100000a1100000a2100000a3100000a4100000a5100000a6100000a7100000a8100000a9100000aa100000ab100000ac100000ad100000ae100000af100000b0100000b1100000b2100000b3100000b4100000b5100000b6100000b7100000b8100000b9100000ba100000bb100000bc100000bd100000be100000bf100000c0100000c1100000c2100000c3100000c4100000c5100000c6100000c7100000c8100000c9100000ca100000cb100000cc100000cd100000ce100000cf100000d0100000d1100000d2100000d3100000d4100000d5100000d6100000d7100000d8100000d9100000da100000db100000dc100000dd100000de100000df100000e0100000e1100000e2100000e3100000e4100000e5100000e6100000e7100000e8100000e9100000ea100000eb100000ec100000ed100000ee100000ef100000f0100000f1100000f2100000f3100000f4100000f5100000f6100000f7100000f8100000f9100000fa100000fb100000fc100000fd100000fe100000ff100000001100000111000002110000031100000411000005110000061100000711000008110000091100000a1100000b1100000c1100000d1100000e1100000f110000 + m_AlignBytes: 16 + groupID: 39 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4256 + particle2: 4257 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4257 + particle2: 4258 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4258 + particle2: 4259 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4259 + particle2: 4260 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4260 + particle2: 4261 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4261 + particle2: 4262 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4262 + particle2: 4263 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4263 + particle2: 4264 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4264 + particle2: 4265 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4265 + particle2: 4266 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4266 + particle2: 4267 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &444273475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 444273476} + - component: {fileID: 444273480} + - component: {fileID: 444273479} + - component: {fileID: 444273478} + - component: {fileID: 444273477} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &444273476 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444273475} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &444273477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444273475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 444273480} + m_Target: {fileID: 444273476} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &444273478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444273475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &444273479 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444273475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 39 +--- !u!114 &444273480 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 444273475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 101100001111000012110000131100001411000015110000161100001711000018110000191100001a1100001b1100001c1100001d1100001e1100001f110000201100002111000022110000231100002411000025110000261100002711000028110000291100002a1100002b1100002c1100002d1100002e1100002f110000301100003111000032110000331100003411000035110000361100003711000038110000391100003a1100003b1100003c1100003d1100003e1100003f110000401100004111000042110000431100004411000045110000461100004711000048110000491100004a1100004b1100004c1100004d1100004e1100004f110000501100005111000052110000531100005411000055110000561100005711000058110000591100005a1100005b1100005c1100005d1100005e1100005f110000601100006111000062110000631100006411000065110000661100006711000068110000691100006a1100006b1100006c1100006d1100006e1100006f110000701100007111000072110000731100007411000075110000761100007711000078110000791100007a1100007b1100007c1100007d1100007e1100007f110000 + m_AlignBytes: 16 + groupID: 40 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4368 + particle2: 4369 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4369 + particle2: 4370 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4370 + particle2: 4371 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4371 + particle2: 4372 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4372 + particle2: 4373 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4373 + particle2: 4374 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4374 + particle2: 4375 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4375 + particle2: 4376 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4376 + particle2: 4377 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4377 + particle2: 4378 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4378 + particle2: 4379 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &449353292 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 449353293} + - component: {fileID: 449353297} + - component: {fileID: 449353296} + - component: {fileID: 449353295} + - component: {fileID: 449353294} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &449353293 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449353292} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &449353294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449353292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 449353297} + m_Target: {fileID: 449353293} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &449353295 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449353292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &449353296 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449353292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 40 +--- !u!114 &449353297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449353292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 801100008111000082110000831100008411000085110000861100008711000088110000891100008a1100008b1100008c1100008d1100008e1100008f110000901100009111000092110000931100009411000095110000961100009711000098110000991100009a1100009b1100009c1100009d1100009e1100009f110000a0110000a1110000a2110000a3110000a4110000a5110000a6110000a7110000a8110000a9110000aa110000ab110000ac110000ad110000ae110000af110000b0110000b1110000b2110000b3110000b4110000b5110000b6110000b7110000b8110000b9110000ba110000bb110000bc110000bd110000be110000bf110000c0110000c1110000c2110000c3110000c4110000c5110000c6110000c7110000c8110000c9110000ca110000cb110000cc110000cd110000ce110000cf110000d0110000d1110000d2110000d3110000d4110000d5110000d6110000d7110000d8110000d9110000da110000db110000dc110000dd110000de110000df110000e0110000e1110000e2110000e3110000e4110000e5110000e6110000e7110000e8110000e9110000ea110000eb110000ec110000ed110000ee110000ef110000 + m_AlignBytes: 16 + groupID: 41 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4480 + particle2: 4481 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4481 + particle2: 4482 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4482 + particle2: 4483 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4483 + particle2: 4484 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4484 + particle2: 4485 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4485 + particle2: 4486 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4486 + particle2: 4487 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4487 + particle2: 4488 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4488 + particle2: 4489 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4489 + particle2: 4490 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4490 + particle2: 4491 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &449771828 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 449771829} + - component: {fileID: 449771833} + - component: {fileID: 449771832} + - component: {fileID: 449771831} + - component: {fileID: 449771830} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &449771829 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449771828} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &449771830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449771828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 449771833} + m_Target: {fileID: 449771829} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &449771831 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449771828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &449771832 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449771828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 41 +--- !u!114 &449771833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449771828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f0110000f1110000f2110000f3110000f4110000f5110000f6110000f7110000f8110000f9110000fa110000fb110000fc110000fd110000fe110000ff110000001200000112000002120000031200000412000005120000061200000712000008120000091200000a1200000b1200000c1200000d1200000e1200000f120000101200001112000012120000131200001412000015120000161200001712000018120000191200001a1200001b1200001c1200001d1200001e1200001f120000201200002112000022120000231200002412000025120000261200002712000028120000291200002a1200002b1200002c1200002d1200002e1200002f120000301200003112000032120000331200003412000035120000361200003712000038120000391200003a1200003b1200003c1200003d1200003e1200003f120000401200004112000042120000431200004412000045120000461200004712000048120000491200004a1200004b1200004c1200004d1200004e1200004f120000501200005112000052120000531200005412000055120000561200005712000058120000591200005a1200005b1200005c1200005d1200005e1200005f120000 + m_AlignBytes: 16 + groupID: 42 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4592 + particle2: 4593 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4593 + particle2: 4594 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4594 + particle2: 4595 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4595 + particle2: 4596 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4596 + particle2: 4597 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4597 + particle2: 4598 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4598 + particle2: 4599 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4599 + particle2: 4600 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4600 + particle2: 4601 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4601 + particle2: 4602 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4602 + particle2: 4603 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &451433693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 451433694} + - component: {fileID: 451433698} + - component: {fileID: 451433697} + - component: {fileID: 451433696} + - component: {fileID: 451433695} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &451433694 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451433693} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &451433695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451433693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 451433698} + m_Target: {fileID: 451433694} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &451433696 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451433693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &451433697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451433693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 42 +--- !u!114 &451433698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451433693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 601200006112000062120000631200006412000065120000661200006712000068120000691200006a1200006b1200006c1200006d1200006e1200006f120000701200007112000072120000731200007412000075120000761200007712000078120000791200007a1200007b1200007c1200007d1200007e1200007f120000801200008112000082120000831200008412000085120000861200008712000088120000891200008a1200008b1200008c1200008d1200008e1200008f120000901200009112000092120000931200009412000095120000961200009712000098120000991200009a1200009b1200009c1200009d1200009e1200009f120000a0120000a1120000a2120000a3120000a4120000a5120000a6120000a7120000a8120000a9120000aa120000ab120000ac120000ad120000ae120000af120000b0120000b1120000b2120000b3120000b4120000b5120000b6120000b7120000b8120000b9120000ba120000bb120000bc120000bd120000be120000bf120000c0120000c1120000c2120000c3120000c4120000c5120000c6120000c7120000c8120000c9120000ca120000cb120000cc120000cd120000ce120000cf120000 + m_AlignBytes: 16 + groupID: 43 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4704 + particle2: 4705 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4705 + particle2: 4706 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4706 + particle2: 4707 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4707 + particle2: 4708 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4708 + particle2: 4709 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4709 + particle2: 4710 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4710 + particle2: 4711 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4711 + particle2: 4712 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4712 + particle2: 4713 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4713 + particle2: 4714 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4714 + particle2: 4715 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &452192105 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 452192106} + - component: {fileID: 452192110} + - component: {fileID: 452192109} + - component: {fileID: 452192108} + - component: {fileID: 452192107} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &452192106 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452192105} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &452192107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452192105} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 452192110} + m_Target: {fileID: 452192106} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &452192108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452192105} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &452192109 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452192105} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 43 +--- !u!114 &452192110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452192105} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d0120000d1120000d2120000d3120000d4120000d5120000d6120000d7120000d8120000d9120000da120000db120000dc120000dd120000de120000df120000e0120000e1120000e2120000e3120000e4120000e5120000e6120000e7120000e8120000e9120000ea120000eb120000ec120000ed120000ee120000ef120000f0120000f1120000f2120000f3120000f4120000f5120000f6120000f7120000f8120000f9120000fa120000fb120000fc120000fd120000fe120000ff120000001300000113000002130000031300000413000005130000061300000713000008130000091300000a1300000b1300000c1300000d1300000e1300000f130000101300001113000012130000131300001413000015130000161300001713000018130000191300001a1300001b1300001c1300001d1300001e1300001f130000201300002113000022130000231300002413000025130000261300002713000028130000291300002a1300002b1300002c1300002d1300002e1300002f130000301300003113000032130000331300003413000035130000361300003713000038130000391300003a1300003b1300003c1300003d1300003e1300003f130000 + m_AlignBytes: 16 + groupID: 44 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4816 + particle2: 4817 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4817 + particle2: 4818 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4818 + particle2: 4819 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4819 + particle2: 4820 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4820 + particle2: 4821 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4821 + particle2: 4822 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4822 + particle2: 4823 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4823 + particle2: 4824 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4824 + particle2: 4825 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4825 + particle2: 4826 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4826 + particle2: 4827 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &453529545 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 453529546} + - component: {fileID: 453529550} + - component: {fileID: 453529549} + - component: {fileID: 453529548} + - component: {fileID: 453529547} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &453529546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453529545} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &453529547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453529545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 453529550} + m_Target: {fileID: 453529546} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &453529548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453529545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &453529549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453529545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 44 +--- !u!114 &453529550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453529545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 401300004113000042130000431300004413000045130000461300004713000048130000491300004a1300004b1300004c1300004d1300004e1300004f130000501300005113000052130000531300005413000055130000561300005713000058130000591300005a1300005b1300005c1300005d1300005e1300005f130000601300006113000062130000631300006413000065130000661300006713000068130000691300006a1300006b1300006c1300006d1300006e1300006f130000701300007113000072130000731300007413000075130000761300007713000078130000791300007a1300007b1300007c1300007d1300007e1300007f130000801300008113000082130000831300008413000085130000861300008713000088130000891300008a1300008b1300008c1300008d1300008e1300008f130000901300009113000092130000931300009413000095130000961300009713000098130000991300009a1300009b1300009c1300009d1300009e1300009f130000a0130000a1130000a2130000a3130000a4130000a5130000a6130000a7130000a8130000a9130000aa130000ab130000ac130000ad130000ae130000af130000 + m_AlignBytes: 16 + groupID: 45 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 4928 + particle2: 4929 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 4929 + particle2: 4930 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 4930 + particle2: 4931 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 4931 + particle2: 4932 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4932 + particle2: 4933 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 4933 + particle2: 4934 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 4934 + particle2: 4935 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 4935 + particle2: 4936 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 4936 + particle2: 4937 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 4937 + particle2: 4938 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 4938 + particle2: 4939 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &455432479 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 455432480} + - component: {fileID: 455432484} + - component: {fileID: 455432483} + - component: {fileID: 455432482} + - component: {fileID: 455432481} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &455432480 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455432479} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &455432481 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455432479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 455432484} + m_Target: {fileID: 455432480} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &455432482 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455432479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &455432483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455432479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 45 +--- !u!114 &455432484 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455432479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b0130000b1130000b2130000b3130000b4130000b5130000b6130000b7130000b8130000b9130000ba130000bb130000bc130000bd130000be130000bf130000c0130000c1130000c2130000c3130000c4130000c5130000c6130000c7130000c8130000c9130000ca130000cb130000cc130000cd130000ce130000cf130000d0130000d1130000d2130000d3130000d4130000d5130000d6130000d7130000d8130000d9130000da130000db130000dc130000dd130000de130000df130000e0130000e1130000e2130000e3130000e4130000e5130000e6130000e7130000e8130000e9130000ea130000eb130000ec130000ed130000ee130000ef130000f0130000f1130000f2130000f3130000f4130000f5130000f6130000f7130000f8130000f9130000fa130000fb130000fc130000fd130000fe130000ff130000001400000114000002140000031400000414000005140000061400000714000008140000091400000a1400000b1400000c1400000d1400000e1400000f140000101400001114000012140000131400001414000015140000161400001714000018140000191400001a1400001b1400001c1400001d1400001e1400001f140000 + m_AlignBytes: 16 + groupID: 46 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5040 + particle2: 5041 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5041 + particle2: 5042 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5042 + particle2: 5043 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5043 + particle2: 5044 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5044 + particle2: 5045 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5045 + particle2: 5046 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5046 + particle2: 5047 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5047 + particle2: 5048 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5048 + particle2: 5049 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5049 + particle2: 5050 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5050 + particle2: 5051 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &469876704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 469876705} + - component: {fileID: 469876709} + - component: {fileID: 469876708} + - component: {fileID: 469876707} + - component: {fileID: 469876706} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &469876705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 469876704} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &469876706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 469876704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 469876709} + m_Target: {fileID: 469876705} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &469876707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 469876704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &469876708 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 469876704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 46 +--- !u!114 &469876709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 469876704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 201400002114000022140000231400002414000025140000261400002714000028140000291400002a1400002b1400002c1400002d1400002e1400002f140000301400003114000032140000331400003414000035140000361400003714000038140000391400003a1400003b1400003c1400003d1400003e1400003f140000401400004114000042140000431400004414000045140000461400004714000048140000491400004a1400004b1400004c1400004d1400004e1400004f140000501400005114000052140000531400005414000055140000561400005714000058140000591400005a1400005b1400005c1400005d1400005e1400005f140000601400006114000062140000631400006414000065140000661400006714000068140000691400006a1400006b1400006c1400006d1400006e1400006f140000701400007114000072140000731400007414000075140000761400007714000078140000791400007a1400007b1400007c1400007d1400007e1400007f140000801400008114000082140000831400008414000085140000861400008714000088140000891400008a1400008b1400008c1400008d1400008e1400008f140000 + m_AlignBytes: 16 + groupID: 47 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5152 + particle2: 5153 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5153 + particle2: 5154 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5154 + particle2: 5155 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5155 + particle2: 5156 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5156 + particle2: 5157 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5157 + particle2: 5158 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5158 + particle2: 5159 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5159 + particle2: 5160 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5160 + particle2: 5161 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5161 + particle2: 5162 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5162 + particle2: 5163 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &472161721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 472161722} + m_Layer: 0 + m_Name: Row (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &472161722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472161721} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 21655691} + - {fileID: 449771829} + - {fileID: 61099067} + - {fileID: 67321349} + - {fileID: 531662323} + - {fileID: 138556973} + - {fileID: 515056253} + - {fileID: 1537736705} + - {fileID: 1503252370} + - {fileID: 811913319} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &474752658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 474752659} + - component: {fileID: 474752663} + - component: {fileID: 474752662} + - component: {fileID: 474752661} + - component: {fileID: 474752660} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &474752659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474752658} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &474752660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474752658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 474752663} + m_Target: {fileID: 474752659} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &474752661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474752658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &474752662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474752658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 47 +--- !u!114 &474752663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474752658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 901400009114000092140000931400009414000095140000961400009714000098140000991400009a1400009b1400009c1400009d1400009e1400009f140000a0140000a1140000a2140000a3140000a4140000a5140000a6140000a7140000a8140000a9140000aa140000ab140000ac140000ad140000ae140000af140000b0140000b1140000b2140000b3140000b4140000b5140000b6140000b7140000b8140000b9140000ba140000bb140000bc140000bd140000be140000bf140000c0140000c1140000c2140000c3140000c4140000c5140000c6140000c7140000c8140000c9140000ca140000cb140000cc140000cd140000ce140000cf140000d0140000d1140000d2140000d3140000d4140000d5140000d6140000d7140000d8140000d9140000da140000db140000dc140000dd140000de140000df140000e0140000e1140000e2140000e3140000e4140000e5140000e6140000e7140000e8140000e9140000ea140000eb140000ec140000ed140000ee140000ef140000f0140000f1140000f2140000f3140000f4140000f5140000f6140000f7140000f8140000f9140000fa140000fb140000fc140000fd140000fe140000ff140000 + m_AlignBytes: 16 + groupID: 48 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5264 + particle2: 5265 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5265 + particle2: 5266 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5266 + particle2: 5267 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5267 + particle2: 5268 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5268 + particle2: 5269 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5269 + particle2: 5270 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5270 + particle2: 5271 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5271 + particle2: 5272 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5272 + particle2: 5273 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5273 + particle2: 5274 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5274 + particle2: 5275 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &489080964 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 489080965} + - component: {fileID: 489080969} + - component: {fileID: 489080968} + - component: {fileID: 489080967} + - component: {fileID: 489080966} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &489080965 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489080964} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &489080966 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489080964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 489080969} + m_Target: {fileID: 489080965} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &489080967 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489080964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &489080968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489080964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 48 +--- !u!114 &489080969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 489080964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 001500000115000002150000031500000415000005150000061500000715000008150000091500000a1500000b1500000c1500000d1500000e1500000f150000101500001115000012150000131500001415000015150000161500001715000018150000191500001a1500001b1500001c1500001d1500001e1500001f150000201500002115000022150000231500002415000025150000261500002715000028150000291500002a1500002b1500002c1500002d1500002e1500002f150000301500003115000032150000331500003415000035150000361500003715000038150000391500003a1500003b1500003c1500003d1500003e1500003f150000401500004115000042150000431500004415000045150000461500004715000048150000491500004a1500004b1500004c1500004d1500004e1500004f150000501500005115000052150000531500005415000055150000561500005715000058150000591500005a1500005b1500005c1500005d1500005e1500005f150000601500006115000062150000631500006415000065150000661500006715000068150000691500006a1500006b1500006c1500006d1500006e1500006f150000 + m_AlignBytes: 16 + groupID: 49 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5376 + particle2: 5377 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5377 + particle2: 5378 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5378 + particle2: 5379 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5379 + particle2: 5380 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5380 + particle2: 5381 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5381 + particle2: 5382 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5382 + particle2: 5383 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5383 + particle2: 5384 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5384 + particle2: 5385 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5385 + particle2: 5386 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5386 + particle2: 5387 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &503533458 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 503533459} + - component: {fileID: 503533463} + - component: {fileID: 503533462} + - component: {fileID: 503533461} + - component: {fileID: 503533460} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &503533459 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503533458} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &503533460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503533458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 503533463} + m_Target: {fileID: 503533459} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &503533461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503533458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &503533462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503533458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 49 +--- !u!114 &503533463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503533458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 701500007115000072150000731500007415000075150000761500007715000078150000791500007a1500007b1500007c1500007d1500007e1500007f150000801500008115000082150000831500008415000085150000861500008715000088150000891500008a1500008b1500008c1500008d1500008e1500008f150000901500009115000092150000931500009415000095150000961500009715000098150000991500009a1500009b1500009c1500009d1500009e1500009f150000a0150000a1150000a2150000a3150000a4150000a5150000a6150000a7150000a8150000a9150000aa150000ab150000ac150000ad150000ae150000af150000b0150000b1150000b2150000b3150000b4150000b5150000b6150000b7150000b8150000b9150000ba150000bb150000bc150000bd150000be150000bf150000c0150000c1150000c2150000c3150000c4150000c5150000c6150000c7150000c8150000c9150000ca150000cb150000cc150000cd150000ce150000cf150000d0150000d1150000d2150000d3150000d4150000d5150000d6150000d7150000d8150000d9150000da150000db150000dc150000dd150000de150000df150000 + m_AlignBytes: 16 + groupID: 50 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5488 + particle2: 5489 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5489 + particle2: 5490 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5490 + particle2: 5491 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5491 + particle2: 5492 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5492 + particle2: 5493 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5493 + particle2: 5494 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5494 + particle2: 5495 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5495 + particle2: 5496 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5496 + particle2: 5497 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5497 + particle2: 5498 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5498 + particle2: 5499 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &506459881 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + m_PrefabInstance: {fileID: 421764872} + m_PrefabAsset: {fileID: 0} +--- !u!64 &506459882 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506459881} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!114 &506459883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506459881} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 506459882} + m_DistanceField: {fileID: 0} +--- !u!1 &510728466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 510728467} + m_Layer: 0 + m_Name: Row (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &510728467 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 510728466} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1424048101} + - {fileID: 1084473020} + - {fileID: 729000486} + - {fileID: 980293277} + - {fileID: 1739484933} + - {fileID: 82705115} + - {fileID: 611757892} + - {fileID: 865980438} + - {fileID: 529503719} + - {fileID: 1143771886} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &514767705 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 514767706} + - component: {fileID: 514767710} + - component: {fileID: 514767709} + - component: {fileID: 514767708} + - component: {fileID: 514767707} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &514767706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 514767705} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &514767707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 514767705} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 514767710} + m_Target: {fileID: 514767706} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &514767708 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 514767705} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &514767709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 514767705} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 50 +--- !u!114 &514767710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 514767705} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0150000e1150000e2150000e3150000e4150000e5150000e6150000e7150000e8150000e9150000ea150000eb150000ec150000ed150000ee150000ef150000f0150000f1150000f2150000f3150000f4150000f5150000f6150000f7150000f8150000f9150000fa150000fb150000fc150000fd150000fe150000ff150000001600000116000002160000031600000416000005160000061600000716000008160000091600000a1600000b1600000c1600000d1600000e1600000f160000101600001116000012160000131600001416000015160000161600001716000018160000191600001a1600001b1600001c1600001d1600001e1600001f160000201600002116000022160000231600002416000025160000261600002716000028160000291600002a1600002b1600002c1600002d1600002e1600002f160000301600003116000032160000331600003416000035160000361600003716000038160000391600003a1600003b1600003c1600003d1600003e1600003f160000401600004116000042160000431600004416000045160000461600004716000048160000491600004a1600004b1600004c1600004d1600004e1600004f160000 + m_AlignBytes: 16 + groupID: 51 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5600 + particle2: 5601 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5601 + particle2: 5602 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5602 + particle2: 5603 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5603 + particle2: 5604 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5604 + particle2: 5605 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5605 + particle2: 5606 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5606 + particle2: 5607 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5607 + particle2: 5608 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5608 + particle2: 5609 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5609 + particle2: 5610 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5610 + particle2: 5611 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &515056252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 515056253} + - component: {fileID: 515056257} + - component: {fileID: 515056256} + - component: {fileID: 515056255} + - component: {fileID: 515056254} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &515056253 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515056252} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &515056254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515056252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 515056257} + m_Target: {fileID: 515056253} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &515056255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515056252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &515056256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515056252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 51 +--- !u!114 &515056257 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515056252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 501600005116000052160000531600005416000055160000561600005716000058160000591600005a1600005b1600005c1600005d1600005e1600005f160000601600006116000062160000631600006416000065160000661600006716000068160000691600006a1600006b1600006c1600006d1600006e1600006f160000701600007116000072160000731600007416000075160000761600007716000078160000791600007a1600007b1600007c1600007d1600007e1600007f160000801600008116000082160000831600008416000085160000861600008716000088160000891600008a1600008b1600008c1600008d1600008e1600008f160000901600009116000092160000931600009416000095160000961600009716000098160000991600009a1600009b1600009c1600009d1600009e1600009f160000a0160000a1160000a2160000a3160000a4160000a5160000a6160000a7160000a8160000a9160000aa160000ab160000ac160000ad160000ae160000af160000b0160000b1160000b2160000b3160000b4160000b5160000b6160000b7160000b8160000b9160000ba160000bb160000bc160000bd160000be160000bf160000 + m_AlignBytes: 16 + groupID: 52 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5712 + particle2: 5713 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5713 + particle2: 5714 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5714 + particle2: 5715 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5715 + particle2: 5716 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5716 + particle2: 5717 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5717 + particle2: 5718 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5718 + particle2: 5719 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5719 + particle2: 5720 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5720 + particle2: 5721 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5721 + particle2: 5722 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5722 + particle2: 5723 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &519875455 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519875456} + - component: {fileID: 519875460} + - component: {fileID: 519875459} + - component: {fileID: 519875458} + - component: {fileID: 519875457} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &519875456 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519875455} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &519875457 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519875455} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 519875460} + m_Target: {fileID: 519875456} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &519875458 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519875455} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &519875459 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519875455} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 52 +--- !u!114 &519875460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519875455} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0160000c1160000c2160000c3160000c4160000c5160000c6160000c7160000c8160000c9160000ca160000cb160000cc160000cd160000ce160000cf160000d0160000d1160000d2160000d3160000d4160000d5160000d6160000d7160000d8160000d9160000da160000db160000dc160000dd160000de160000df160000e0160000e1160000e2160000e3160000e4160000e5160000e6160000e7160000e8160000e9160000ea160000eb160000ec160000ed160000ee160000ef160000f0160000f1160000f2160000f3160000f4160000f5160000f6160000f7160000f8160000f9160000fa160000fb160000fc160000fd160000fe160000ff160000001700000117000002170000031700000417000005170000061700000717000008170000091700000a1700000b1700000c1700000d1700000e1700000f170000101700001117000012170000131700001417000015170000161700001717000018170000191700001a1700001b1700001c1700001d1700001e1700001f170000201700002117000022170000231700002417000025170000261700002717000028170000291700002a1700002b1700002c1700002d1700002e1700002f170000 + m_AlignBytes: 16 + groupID: 53 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5824 + particle2: 5825 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5825 + particle2: 5826 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5826 + particle2: 5827 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5827 + particle2: 5828 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5828 + particle2: 5829 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5829 + particle2: 5830 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5830 + particle2: 5831 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5831 + particle2: 5832 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5832 + particle2: 5833 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5833 + particle2: 5834 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5834 + particle2: 5835 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &529503718 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529503719} + - component: {fileID: 529503723} + - component: {fileID: 529503722} + - component: {fileID: 529503721} + - component: {fileID: 529503720} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &529503719 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529503718} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &529503720 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529503718} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 529503723} + m_Target: {fileID: 529503719} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &529503721 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529503718} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &529503722 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529503718} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 53 +--- !u!114 &529503723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529503718} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 301700003117000032170000331700003417000035170000361700003717000038170000391700003a1700003b1700003c1700003d1700003e1700003f170000401700004117000042170000431700004417000045170000461700004717000048170000491700004a1700004b1700004c1700004d1700004e1700004f170000501700005117000052170000531700005417000055170000561700005717000058170000591700005a1700005b1700005c1700005d1700005e1700005f170000601700006117000062170000631700006417000065170000661700006717000068170000691700006a1700006b1700006c1700006d1700006e1700006f170000701700007117000072170000731700007417000075170000761700007717000078170000791700007a1700007b1700007c1700007d1700007e1700007f170000801700008117000082170000831700008417000085170000861700008717000088170000891700008a1700008b1700008c1700008d1700008e1700008f170000901700009117000092170000931700009417000095170000961700009717000098170000991700009a1700009b1700009c1700009d1700009e1700009f170000 + m_AlignBytes: 16 + groupID: 54 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 5936 + particle2: 5937 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 5937 + particle2: 5938 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 5938 + particle2: 5939 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 5939 + particle2: 5940 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 5940 + particle2: 5941 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5941 + particle2: 5942 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 5942 + particle2: 5943 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 5943 + particle2: 5944 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 5944 + particle2: 5945 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 5945 + particle2: 5946 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 5946 + particle2: 5947 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &531482357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 531482358} + - component: {fileID: 531482362} + - component: {fileID: 531482361} + - component: {fileID: 531482360} + - component: {fileID: 531482359} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &531482358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531482357} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &531482359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531482357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 531482362} + m_Target: {fileID: 531482358} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &531482360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531482357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &531482361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531482357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 54 +--- !u!114 &531482362 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531482357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0170000a1170000a2170000a3170000a4170000a5170000a6170000a7170000a8170000a9170000aa170000ab170000ac170000ad170000ae170000af170000b0170000b1170000b2170000b3170000b4170000b5170000b6170000b7170000b8170000b9170000ba170000bb170000bc170000bd170000be170000bf170000c0170000c1170000c2170000c3170000c4170000c5170000c6170000c7170000c8170000c9170000ca170000cb170000cc170000cd170000ce170000cf170000d0170000d1170000d2170000d3170000d4170000d5170000d6170000d7170000d8170000d9170000da170000db170000dc170000dd170000de170000df170000e0170000e1170000e2170000e3170000e4170000e5170000e6170000e7170000e8170000e9170000ea170000eb170000ec170000ed170000ee170000ef170000f0170000f1170000f2170000f3170000f4170000f5170000f6170000f7170000f8170000f9170000fa170000fb170000fc170000fd170000fe170000ff170000001800000118000002180000031800000418000005180000061800000718000008180000091800000a1800000b1800000c1800000d1800000e1800000f180000 + m_AlignBytes: 16 + groupID: 55 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6048 + particle2: 6049 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6049 + particle2: 6050 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6050 + particle2: 6051 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6051 + particle2: 6052 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6052 + particle2: 6053 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6053 + particle2: 6054 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6054 + particle2: 6055 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6055 + particle2: 6056 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6056 + particle2: 6057 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6057 + particle2: 6058 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6058 + particle2: 6059 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &531662322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 531662323} + - component: {fileID: 531662327} + - component: {fileID: 531662326} + - component: {fileID: 531662325} + - component: {fileID: 531662324} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &531662323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531662322} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &531662324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531662322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 531662327} + m_Target: {fileID: 531662323} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &531662325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531662322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &531662326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531662322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 55 +--- !u!114 &531662327 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531662322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 101800001118000012180000131800001418000015180000161800001718000018180000191800001a1800001b1800001c1800001d1800001e1800001f180000201800002118000022180000231800002418000025180000261800002718000028180000291800002a1800002b1800002c1800002d1800002e1800002f180000301800003118000032180000331800003418000035180000361800003718000038180000391800003a1800003b1800003c1800003d1800003e1800003f180000401800004118000042180000431800004418000045180000461800004718000048180000491800004a1800004b1800004c1800004d1800004e1800004f180000501800005118000052180000531800005418000055180000561800005718000058180000591800005a1800005b1800005c1800005d1800005e1800005f180000601800006118000062180000631800006418000065180000661800006718000068180000691800006a1800006b1800006c1800006d1800006e1800006f180000701800007118000072180000731800007418000075180000761800007718000078180000791800007a1800007b1800007c1800007d1800007e1800007f180000 + m_AlignBytes: 16 + groupID: 56 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6160 + particle2: 6161 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6161 + particle2: 6162 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6162 + particle2: 6163 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6163 + particle2: 6164 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6164 + particle2: 6165 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6165 + particle2: 6166 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6166 + particle2: 6167 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6167 + particle2: 6168 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6168 + particle2: 6169 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6169 + particle2: 6170 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6170 + particle2: 6171 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &535373371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 535373372} + - component: {fileID: 535373376} + - component: {fileID: 535373375} + - component: {fileID: 535373374} + - component: {fileID: 535373373} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &535373372 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535373371} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &535373373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535373371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 535373376} + m_Target: {fileID: 535373372} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &535373374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535373371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &535373375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535373371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 56 +--- !u!114 &535373376 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535373371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 801800008118000082180000831800008418000085180000861800008718000088180000891800008a1800008b1800008c1800008d1800008e1800008f180000901800009118000092180000931800009418000095180000961800009718000098180000991800009a1800009b1800009c1800009d1800009e1800009f180000a0180000a1180000a2180000a3180000a4180000a5180000a6180000a7180000a8180000a9180000aa180000ab180000ac180000ad180000ae180000af180000b0180000b1180000b2180000b3180000b4180000b5180000b6180000b7180000b8180000b9180000ba180000bb180000bc180000bd180000be180000bf180000c0180000c1180000c2180000c3180000c4180000c5180000c6180000c7180000c8180000c9180000ca180000cb180000cc180000cd180000ce180000cf180000d0180000d1180000d2180000d3180000d4180000d5180000d6180000d7180000d8180000d9180000da180000db180000dc180000dd180000de180000df180000e0180000e1180000e2180000e3180000e4180000e5180000e6180000e7180000e8180000e9180000ea180000eb180000ec180000ed180000ee180000ef180000 + m_AlignBytes: 16 + groupID: 57 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6272 + particle2: 6273 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6273 + particle2: 6274 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6274 + particle2: 6275 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6275 + particle2: 6276 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6276 + particle2: 6277 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6277 + particle2: 6278 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6278 + particle2: 6279 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6279 + particle2: 6280 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6280 + particle2: 6281 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6281 + particle2: 6282 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6282 + particle2: 6283 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &544654643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 544654644} + - component: {fileID: 544654648} + - component: {fileID: 544654647} + - component: {fileID: 544654646} + - component: {fileID: 544654645} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &544654644 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 544654643} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &544654645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 544654643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 544654648} + m_Target: {fileID: 544654644} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &544654646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 544654643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &544654647 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 544654643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 57 +--- !u!114 &544654648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 544654643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f0180000f1180000f2180000f3180000f4180000f5180000f6180000f7180000f8180000f9180000fa180000fb180000fc180000fd180000fe180000ff180000001900000119000002190000031900000419000005190000061900000719000008190000091900000a1900000b1900000c1900000d1900000e1900000f190000101900001119000012190000131900001419000015190000161900001719000018190000191900001a1900001b1900001c1900001d1900001e1900001f190000201900002119000022190000231900002419000025190000261900002719000028190000291900002a1900002b1900002c1900002d1900002e1900002f190000301900003119000032190000331900003419000035190000361900003719000038190000391900003a1900003b1900003c1900003d1900003e1900003f190000401900004119000042190000431900004419000045190000461900004719000048190000491900004a1900004b1900004c1900004d1900004e1900004f190000501900005119000052190000531900005419000055190000561900005719000058190000591900005a1900005b1900005c1900005d1900005e1900005f190000 + m_AlignBytes: 16 + groupID: 58 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6384 + particle2: 6385 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6385 + particle2: 6386 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6386 + particle2: 6387 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6387 + particle2: 6388 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6388 + particle2: 6389 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6389 + particle2: 6390 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6390 + particle2: 6391 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6391 + particle2: 6392 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6392 + particle2: 6393 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6393 + particle2: 6394 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6394 + particle2: 6395 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &547327666 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 547327667} + - component: {fileID: 547327671} + - component: {fileID: 547327670} + - component: {fileID: 547327669} + - component: {fileID: 547327668} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &547327667 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 547327666} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &547327668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 547327666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 547327671} + m_Target: {fileID: 547327667} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &547327669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 547327666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &547327670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 547327666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 58 +--- !u!114 &547327671 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 547327666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 601900006119000062190000631900006419000065190000661900006719000068190000691900006a1900006b1900006c1900006d1900006e1900006f190000701900007119000072190000731900007419000075190000761900007719000078190000791900007a1900007b1900007c1900007d1900007e1900007f190000801900008119000082190000831900008419000085190000861900008719000088190000891900008a1900008b1900008c1900008d1900008e1900008f190000901900009119000092190000931900009419000095190000961900009719000098190000991900009a1900009b1900009c1900009d1900009e1900009f190000a0190000a1190000a2190000a3190000a4190000a5190000a6190000a7190000a8190000a9190000aa190000ab190000ac190000ad190000ae190000af190000b0190000b1190000b2190000b3190000b4190000b5190000b6190000b7190000b8190000b9190000ba190000bb190000bc190000bd190000be190000bf190000c0190000c1190000c2190000c3190000c4190000c5190000c6190000c7190000c8190000c9190000ca190000cb190000cc190000cd190000ce190000cf190000 + m_AlignBytes: 16 + groupID: 59 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6496 + particle2: 6497 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6497 + particle2: 6498 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6498 + particle2: 6499 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6499 + particle2: 6500 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6500 + particle2: 6501 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6501 + particle2: 6502 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6502 + particle2: 6503 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6503 + particle2: 6504 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6504 + particle2: 6505 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6505 + particle2: 6506 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6506 + particle2: 6507 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &549111721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 549111722} + - component: {fileID: 549111726} + - component: {fileID: 549111725} + - component: {fileID: 549111724} + - component: {fileID: 549111723} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &549111722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549111721} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &549111723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549111721} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 549111726} + m_Target: {fileID: 549111722} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &549111724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549111721} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &549111725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549111721} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 59 +--- !u!114 &549111726 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549111721} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d0190000d1190000d2190000d3190000d4190000d5190000d6190000d7190000d8190000d9190000da190000db190000dc190000dd190000de190000df190000e0190000e1190000e2190000e3190000e4190000e5190000e6190000e7190000e8190000e9190000ea190000eb190000ec190000ed190000ee190000ef190000f0190000f1190000f2190000f3190000f4190000f5190000f6190000f7190000f8190000f9190000fa190000fb190000fc190000fd190000fe190000ff190000001a0000011a0000021a0000031a0000041a0000051a0000061a0000071a0000081a0000091a00000a1a00000b1a00000c1a00000d1a00000e1a00000f1a0000101a0000111a0000121a0000131a0000141a0000151a0000161a0000171a0000181a0000191a00001a1a00001b1a00001c1a00001d1a00001e1a00001f1a0000201a0000211a0000221a0000231a0000241a0000251a0000261a0000271a0000281a0000291a00002a1a00002b1a00002c1a00002d1a00002e1a00002f1a0000301a0000311a0000321a0000331a0000341a0000351a0000361a0000371a0000381a0000391a00003a1a00003b1a00003c1a00003d1a00003e1a00003f1a0000 + m_AlignBytes: 16 + groupID: 60 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6608 + particle2: 6609 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6609 + particle2: 6610 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6610 + particle2: 6611 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6611 + particle2: 6612 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6612 + particle2: 6613 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6613 + particle2: 6614 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6614 + particle2: 6615 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6615 + particle2: 6616 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6616 + particle2: 6617 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6617 + particle2: 6618 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6618 + particle2: 6619 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &549530595 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 549530596} + - component: {fileID: 549530600} + - component: {fileID: 549530599} + - component: {fileID: 549530598} + - component: {fileID: 549530597} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &549530596 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549530595} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &549530597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549530595} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 549530600} + m_Target: {fileID: 549530596} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &549530598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549530595} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &549530599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549530595} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 60 +--- !u!114 &549530600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549530595} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 401a0000411a0000421a0000431a0000441a0000451a0000461a0000471a0000481a0000491a00004a1a00004b1a00004c1a00004d1a00004e1a00004f1a0000501a0000511a0000521a0000531a0000541a0000551a0000561a0000571a0000581a0000591a00005a1a00005b1a00005c1a00005d1a00005e1a00005f1a0000601a0000611a0000621a0000631a0000641a0000651a0000661a0000671a0000681a0000691a00006a1a00006b1a00006c1a00006d1a00006e1a00006f1a0000701a0000711a0000721a0000731a0000741a0000751a0000761a0000771a0000781a0000791a00007a1a00007b1a00007c1a00007d1a00007e1a00007f1a0000801a0000811a0000821a0000831a0000841a0000851a0000861a0000871a0000881a0000891a00008a1a00008b1a00008c1a00008d1a00008e1a00008f1a0000901a0000911a0000921a0000931a0000941a0000951a0000961a0000971a0000981a0000991a00009a1a00009b1a00009c1a00009d1a00009e1a00009f1a0000a01a0000a11a0000a21a0000a31a0000a41a0000a51a0000a61a0000a71a0000a81a0000a91a0000aa1a0000ab1a0000ac1a0000ad1a0000ae1a0000af1a0000 + m_AlignBytes: 16 + groupID: 61 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6720 + particle2: 6721 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6721 + particle2: 6722 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6722 + particle2: 6723 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6723 + particle2: 6724 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6724 + particle2: 6725 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6725 + particle2: 6726 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6726 + particle2: 6727 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6727 + particle2: 6728 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6728 + particle2: 6729 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6729 + particle2: 6730 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6730 + particle2: 6731 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &557556285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 557556286} + - component: {fileID: 557556290} + - component: {fileID: 557556289} + - component: {fileID: 557556288} + - component: {fileID: 557556287} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &557556286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557556285} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &557556287 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557556285} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 557556290} + m_Target: {fileID: 557556286} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &557556288 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557556285} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &557556289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557556285} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 61 +--- !u!114 &557556290 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 557556285} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b01a0000b11a0000b21a0000b31a0000b41a0000b51a0000b61a0000b71a0000b81a0000b91a0000ba1a0000bb1a0000bc1a0000bd1a0000be1a0000bf1a0000c01a0000c11a0000c21a0000c31a0000c41a0000c51a0000c61a0000c71a0000c81a0000c91a0000ca1a0000cb1a0000cc1a0000cd1a0000ce1a0000cf1a0000d01a0000d11a0000d21a0000d31a0000d41a0000d51a0000d61a0000d71a0000d81a0000d91a0000da1a0000db1a0000dc1a0000dd1a0000de1a0000df1a0000e01a0000e11a0000e21a0000e31a0000e41a0000e51a0000e61a0000e71a0000e81a0000e91a0000ea1a0000eb1a0000ec1a0000ed1a0000ee1a0000ef1a0000f01a0000f11a0000f21a0000f31a0000f41a0000f51a0000f61a0000f71a0000f81a0000f91a0000fa1a0000fb1a0000fc1a0000fd1a0000fe1a0000ff1a0000001b0000011b0000021b0000031b0000041b0000051b0000061b0000071b0000081b0000091b00000a1b00000b1b00000c1b00000d1b00000e1b00000f1b0000101b0000111b0000121b0000131b0000141b0000151b0000161b0000171b0000181b0000191b00001a1b00001b1b00001c1b00001d1b00001e1b00001f1b0000 + m_AlignBytes: 16 + groupID: 62 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6832 + particle2: 6833 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6833 + particle2: 6834 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6834 + particle2: 6835 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6835 + particle2: 6836 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6836 + particle2: 6837 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6837 + particle2: 6838 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6838 + particle2: 6839 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6839 + particle2: 6840 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6840 + particle2: 6841 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6841 + particle2: 6842 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6842 + particle2: 6843 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &584208410 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 584208411} + - component: {fileID: 584208415} + - component: {fileID: 584208414} + - component: {fileID: 584208413} + - component: {fileID: 584208412} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &584208411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584208410} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &584208412 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584208410} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 584208415} + m_Target: {fileID: 584208411} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &584208413 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584208410} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &584208414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584208410} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 62 +--- !u!114 &584208415 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584208410} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 201b0000211b0000221b0000231b0000241b0000251b0000261b0000271b0000281b0000291b00002a1b00002b1b00002c1b00002d1b00002e1b00002f1b0000301b0000311b0000321b0000331b0000341b0000351b0000361b0000371b0000381b0000391b00003a1b00003b1b00003c1b00003d1b00003e1b00003f1b0000401b0000411b0000421b0000431b0000441b0000451b0000461b0000471b0000481b0000491b00004a1b00004b1b00004c1b00004d1b00004e1b00004f1b0000501b0000511b0000521b0000531b0000541b0000551b0000561b0000571b0000581b0000591b00005a1b00005b1b00005c1b00005d1b00005e1b00005f1b0000601b0000611b0000621b0000631b0000641b0000651b0000661b0000671b0000681b0000691b00006a1b00006b1b00006c1b00006d1b00006e1b00006f1b0000701b0000711b0000721b0000731b0000741b0000751b0000761b0000771b0000781b0000791b00007a1b00007b1b00007c1b00007d1b00007e1b00007f1b0000801b0000811b0000821b0000831b0000841b0000851b0000861b0000871b0000881b0000891b00008a1b00008b1b00008c1b00008d1b00008e1b00008f1b0000 + m_AlignBytes: 16 + groupID: 63 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 6944 + particle2: 6945 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 6945 + particle2: 6946 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 6946 + particle2: 6947 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 6947 + particle2: 6948 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 6948 + particle2: 6949 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 6949 + particle2: 6950 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6950 + particle2: 6951 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 6951 + particle2: 6952 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 6952 + particle2: 6953 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 6953 + particle2: 6954 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 6954 + particle2: 6955 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &600063429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 600063430} + - component: {fileID: 600063434} + - component: {fileID: 600063433} + - component: {fileID: 600063432} + - component: {fileID: 600063431} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &600063430 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 600063429} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &600063431 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 600063429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 600063434} + m_Target: {fileID: 600063430} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &600063432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 600063429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &600063433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 600063429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 63 +--- !u!114 &600063434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 600063429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 901b0000911b0000921b0000931b0000941b0000951b0000961b0000971b0000981b0000991b00009a1b00009b1b00009c1b00009d1b00009e1b00009f1b0000a01b0000a11b0000a21b0000a31b0000a41b0000a51b0000a61b0000a71b0000a81b0000a91b0000aa1b0000ab1b0000ac1b0000ad1b0000ae1b0000af1b0000b01b0000b11b0000b21b0000b31b0000b41b0000b51b0000b61b0000b71b0000b81b0000b91b0000ba1b0000bb1b0000bc1b0000bd1b0000be1b0000bf1b0000c01b0000c11b0000c21b0000c31b0000c41b0000c51b0000c61b0000c71b0000c81b0000c91b0000ca1b0000cb1b0000cc1b0000cd1b0000ce1b0000cf1b0000d01b0000d11b0000d21b0000d31b0000d41b0000d51b0000d61b0000d71b0000d81b0000d91b0000da1b0000db1b0000dc1b0000dd1b0000de1b0000df1b0000e01b0000e11b0000e21b0000e31b0000e41b0000e51b0000e61b0000e71b0000e81b0000e91b0000ea1b0000eb1b0000ec1b0000ed1b0000ee1b0000ef1b0000f01b0000f11b0000f21b0000f31b0000f41b0000f51b0000f61b0000f71b0000f81b0000f91b0000fa1b0000fb1b0000fc1b0000fd1b0000fe1b0000ff1b0000 + m_AlignBytes: 16 + groupID: 64 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7056 + particle2: 7057 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7057 + particle2: 7058 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7058 + particle2: 7059 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7059 + particle2: 7060 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7060 + particle2: 7061 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7061 + particle2: 7062 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7062 + particle2: 7063 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7063 + particle2: 7064 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7064 + particle2: 7065 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7065 + particle2: 7066 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7066 + particle2: 7067 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &611757891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 611757892} + - component: {fileID: 611757896} + - component: {fileID: 611757895} + - component: {fileID: 611757894} + - component: {fileID: 611757893} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &611757892 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 611757891} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &611757893 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 611757891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 611757896} + m_Target: {fileID: 611757892} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &611757894 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 611757891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &611757895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 611757891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 64 +--- !u!114 &611757896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 611757891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 001c0000011c0000021c0000031c0000041c0000051c0000061c0000071c0000081c0000091c00000a1c00000b1c00000c1c00000d1c00000e1c00000f1c0000101c0000111c0000121c0000131c0000141c0000151c0000161c0000171c0000181c0000191c00001a1c00001b1c00001c1c00001d1c00001e1c00001f1c0000201c0000211c0000221c0000231c0000241c0000251c0000261c0000271c0000281c0000291c00002a1c00002b1c00002c1c00002d1c00002e1c00002f1c0000301c0000311c0000321c0000331c0000341c0000351c0000361c0000371c0000381c0000391c00003a1c00003b1c00003c1c00003d1c00003e1c00003f1c0000401c0000411c0000421c0000431c0000441c0000451c0000461c0000471c0000481c0000491c00004a1c00004b1c00004c1c00004d1c00004e1c00004f1c0000501c0000511c0000521c0000531c0000541c0000551c0000561c0000571c0000581c0000591c00005a1c00005b1c00005c1c00005d1c00005e1c00005f1c0000601c0000611c0000621c0000631c0000641c0000651c0000661c0000671c0000681c0000691c00006a1c00006b1c00006c1c00006d1c00006e1c00006f1c0000 + m_AlignBytes: 16 + groupID: 65 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7168 + particle2: 7169 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7169 + particle2: 7170 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7170 + particle2: 7171 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7171 + particle2: 7172 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7172 + particle2: 7173 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7173 + particle2: 7174 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7174 + particle2: 7175 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7175 + particle2: 7176 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7176 + particle2: 7177 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7177 + particle2: 7178 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7178 + particle2: 7179 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &620777758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 620777759} + - component: {fileID: 620777763} + - component: {fileID: 620777762} + - component: {fileID: 620777761} + - component: {fileID: 620777760} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &620777759 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620777758} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &620777760 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620777758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 620777763} + m_Target: {fileID: 620777759} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &620777761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620777758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &620777762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620777758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 65 +--- !u!114 &620777763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620777758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 701c0000711c0000721c0000731c0000741c0000751c0000761c0000771c0000781c0000791c00007a1c00007b1c00007c1c00007d1c00007e1c00007f1c0000801c0000811c0000821c0000831c0000841c0000851c0000861c0000871c0000881c0000891c00008a1c00008b1c00008c1c00008d1c00008e1c00008f1c0000901c0000911c0000921c0000931c0000941c0000951c0000961c0000971c0000981c0000991c00009a1c00009b1c00009c1c00009d1c00009e1c00009f1c0000a01c0000a11c0000a21c0000a31c0000a41c0000a51c0000a61c0000a71c0000a81c0000a91c0000aa1c0000ab1c0000ac1c0000ad1c0000ae1c0000af1c0000b01c0000b11c0000b21c0000b31c0000b41c0000b51c0000b61c0000b71c0000b81c0000b91c0000ba1c0000bb1c0000bc1c0000bd1c0000be1c0000bf1c0000c01c0000c11c0000c21c0000c31c0000c41c0000c51c0000c61c0000c71c0000c81c0000c91c0000ca1c0000cb1c0000cc1c0000cd1c0000ce1c0000cf1c0000d01c0000d11c0000d21c0000d31c0000d41c0000d51c0000d61c0000d71c0000d81c0000d91c0000da1c0000db1c0000dc1c0000dd1c0000de1c0000df1c0000 + m_AlignBytes: 16 + groupID: 66 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7280 + particle2: 7281 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7281 + particle2: 7282 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7282 + particle2: 7283 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7283 + particle2: 7284 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7284 + particle2: 7285 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7285 + particle2: 7286 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7286 + particle2: 7287 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7287 + particle2: 7288 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7288 + particle2: 7289 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7289 + particle2: 7290 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7290 + particle2: 7291 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &640325666 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 640325667} + - component: {fileID: 640325671} + - component: {fileID: 640325670} + - component: {fileID: 640325669} + - component: {fileID: 640325668} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &640325667 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640325666} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &640325668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640325666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 640325671} + m_Target: {fileID: 640325667} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &640325669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640325666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &640325670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640325666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 66 +--- !u!114 &640325671 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640325666} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e01c0000e11c0000e21c0000e31c0000e41c0000e51c0000e61c0000e71c0000e81c0000e91c0000ea1c0000eb1c0000ec1c0000ed1c0000ee1c0000ef1c0000f01c0000f11c0000f21c0000f31c0000f41c0000f51c0000f61c0000f71c0000f81c0000f91c0000fa1c0000fb1c0000fc1c0000fd1c0000fe1c0000ff1c0000001d0000011d0000021d0000031d0000041d0000051d0000061d0000071d0000081d0000091d00000a1d00000b1d00000c1d00000d1d00000e1d00000f1d0000101d0000111d0000121d0000131d0000141d0000151d0000161d0000171d0000181d0000191d00001a1d00001b1d00001c1d00001d1d00001e1d00001f1d0000201d0000211d0000221d0000231d0000241d0000251d0000261d0000271d0000281d0000291d00002a1d00002b1d00002c1d00002d1d00002e1d00002f1d0000301d0000311d0000321d0000331d0000341d0000351d0000361d0000371d0000381d0000391d00003a1d00003b1d00003c1d00003d1d00003e1d00003f1d0000401d0000411d0000421d0000431d0000441d0000451d0000461d0000471d0000481d0000491d00004a1d00004b1d00004c1d00004d1d00004e1d00004f1d0000 + m_AlignBytes: 16 + groupID: 67 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7392 + particle2: 7393 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7393 + particle2: 7394 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7394 + particle2: 7395 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7395 + particle2: 7396 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7396 + particle2: 7397 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7397 + particle2: 7398 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7398 + particle2: 7399 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7399 + particle2: 7400 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7400 + particle2: 7401 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7401 + particle2: 7402 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7402 + particle2: 7403 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &648480056 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 648480057} + m_Layer: 0 + m_Name: Row (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &648480057 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648480056} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 820904268} + - {fileID: 990019828} + - {fileID: 1593990336} + - {fileID: 544654644} + - {fileID: 1588242874} + - {fileID: 104614688} + - {fileID: 113190533} + - {fileID: 713725211} + - {fileID: 451433694} + - {fileID: 334659107} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &666418978 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 666418979} + - component: {fileID: 666418983} + - component: {fileID: 666418982} + - component: {fileID: 666418981} + - component: {fileID: 666418980} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &666418979 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666418978} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &666418980 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666418978} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 666418983} + m_Target: {fileID: 666418979} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &666418981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666418978} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &666418982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666418978} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 67 +--- !u!114 &666418983 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666418978} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 501d0000511d0000521d0000531d0000541d0000551d0000561d0000571d0000581d0000591d00005a1d00005b1d00005c1d00005d1d00005e1d00005f1d0000601d0000611d0000621d0000631d0000641d0000651d0000661d0000671d0000681d0000691d00006a1d00006b1d00006c1d00006d1d00006e1d00006f1d0000701d0000711d0000721d0000731d0000741d0000751d0000761d0000771d0000781d0000791d00007a1d00007b1d00007c1d00007d1d00007e1d00007f1d0000801d0000811d0000821d0000831d0000841d0000851d0000861d0000871d0000881d0000891d00008a1d00008b1d00008c1d00008d1d00008e1d00008f1d0000901d0000911d0000921d0000931d0000941d0000951d0000961d0000971d0000981d0000991d00009a1d00009b1d00009c1d00009d1d00009e1d00009f1d0000a01d0000a11d0000a21d0000a31d0000a41d0000a51d0000a61d0000a71d0000a81d0000a91d0000aa1d0000ab1d0000ac1d0000ad1d0000ae1d0000af1d0000b01d0000b11d0000b21d0000b31d0000b41d0000b51d0000b61d0000b71d0000b81d0000b91d0000ba1d0000bb1d0000bc1d0000bd1d0000be1d0000bf1d0000 + m_AlignBytes: 16 + groupID: 68 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7504 + particle2: 7505 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7505 + particle2: 7506 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7506 + particle2: 7507 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7507 + particle2: 7508 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7508 + particle2: 7509 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7509 + particle2: 7510 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7510 + particle2: 7511 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7511 + particle2: 7512 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7512 + particle2: 7513 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7513 + particle2: 7514 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7514 + particle2: 7515 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &667569020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 667569021} + - component: {fileID: 667569025} + - component: {fileID: 667569024} + - component: {fileID: 667569023} + - component: {fileID: 667569022} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &667569021 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667569020} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &667569022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667569020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 667569025} + m_Target: {fileID: 667569021} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &667569023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667569020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &667569024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667569020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 68 +--- !u!114 &667569025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667569020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c01d0000c11d0000c21d0000c31d0000c41d0000c51d0000c61d0000c71d0000c81d0000c91d0000ca1d0000cb1d0000cc1d0000cd1d0000ce1d0000cf1d0000d01d0000d11d0000d21d0000d31d0000d41d0000d51d0000d61d0000d71d0000d81d0000d91d0000da1d0000db1d0000dc1d0000dd1d0000de1d0000df1d0000e01d0000e11d0000e21d0000e31d0000e41d0000e51d0000e61d0000e71d0000e81d0000e91d0000ea1d0000eb1d0000ec1d0000ed1d0000ee1d0000ef1d0000f01d0000f11d0000f21d0000f31d0000f41d0000f51d0000f61d0000f71d0000f81d0000f91d0000fa1d0000fb1d0000fc1d0000fd1d0000fe1d0000ff1d0000001e0000011e0000021e0000031e0000041e0000051e0000061e0000071e0000081e0000091e00000a1e00000b1e00000c1e00000d1e00000e1e00000f1e0000101e0000111e0000121e0000131e0000141e0000151e0000161e0000171e0000181e0000191e00001a1e00001b1e00001c1e00001d1e00001e1e00001f1e0000201e0000211e0000221e0000231e0000241e0000251e0000261e0000271e0000281e0000291e00002a1e00002b1e00002c1e00002d1e00002e1e00002f1e0000 + m_AlignBytes: 16 + groupID: 69 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7616 + particle2: 7617 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7617 + particle2: 7618 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7618 + particle2: 7619 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7619 + particle2: 7620 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7620 + particle2: 7621 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7621 + particle2: 7622 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7622 + particle2: 7623 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7623 + particle2: 7624 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7624 + particle2: 7625 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7625 + particle2: 7626 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7626 + particle2: 7627 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &674074860 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 674074861} + - component: {fileID: 674074865} + - component: {fileID: 674074864} + - component: {fileID: 674074863} + - component: {fileID: 674074862} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &674074861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674074860} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &674074862 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674074860} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 674074865} + m_Target: {fileID: 674074861} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &674074863 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674074860} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &674074864 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674074860} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 69 +--- !u!114 &674074865 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674074860} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 301e0000311e0000321e0000331e0000341e0000351e0000361e0000371e0000381e0000391e00003a1e00003b1e00003c1e00003d1e00003e1e00003f1e0000401e0000411e0000421e0000431e0000441e0000451e0000461e0000471e0000481e0000491e00004a1e00004b1e00004c1e00004d1e00004e1e00004f1e0000501e0000511e0000521e0000531e0000541e0000551e0000561e0000571e0000581e0000591e00005a1e00005b1e00005c1e00005d1e00005e1e00005f1e0000601e0000611e0000621e0000631e0000641e0000651e0000661e0000671e0000681e0000691e00006a1e00006b1e00006c1e00006d1e00006e1e00006f1e0000701e0000711e0000721e0000731e0000741e0000751e0000761e0000771e0000781e0000791e00007a1e00007b1e00007c1e00007d1e00007e1e00007f1e0000801e0000811e0000821e0000831e0000841e0000851e0000861e0000871e0000881e0000891e00008a1e00008b1e00008c1e00008d1e00008e1e00008f1e0000901e0000911e0000921e0000931e0000941e0000951e0000961e0000971e0000981e0000991e00009a1e00009b1e00009c1e00009d1e00009e1e00009f1e0000 + m_AlignBytes: 16 + groupID: 70 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7728 + particle2: 7729 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7729 + particle2: 7730 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7730 + particle2: 7731 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7731 + particle2: 7732 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7732 + particle2: 7733 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7733 + particle2: 7734 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7734 + particle2: 7735 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7735 + particle2: 7736 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7736 + particle2: 7737 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7737 + particle2: 7738 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7738 + particle2: 7739 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &686144123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 686144124} + - component: {fileID: 686144128} + - component: {fileID: 686144127} + - component: {fileID: 686144126} + - component: {fileID: 686144125} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &686144124 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686144123} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &686144125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686144123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 686144128} + m_Target: {fileID: 686144124} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &686144126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686144123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &686144127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686144123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 70 +--- !u!114 &686144128 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686144123} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a01e0000a11e0000a21e0000a31e0000a41e0000a51e0000a61e0000a71e0000a81e0000a91e0000aa1e0000ab1e0000ac1e0000ad1e0000ae1e0000af1e0000b01e0000b11e0000b21e0000b31e0000b41e0000b51e0000b61e0000b71e0000b81e0000b91e0000ba1e0000bb1e0000bc1e0000bd1e0000be1e0000bf1e0000c01e0000c11e0000c21e0000c31e0000c41e0000c51e0000c61e0000c71e0000c81e0000c91e0000ca1e0000cb1e0000cc1e0000cd1e0000ce1e0000cf1e0000d01e0000d11e0000d21e0000d31e0000d41e0000d51e0000d61e0000d71e0000d81e0000d91e0000da1e0000db1e0000dc1e0000dd1e0000de1e0000df1e0000e01e0000e11e0000e21e0000e31e0000e41e0000e51e0000e61e0000e71e0000e81e0000e91e0000ea1e0000eb1e0000ec1e0000ed1e0000ee1e0000ef1e0000f01e0000f11e0000f21e0000f31e0000f41e0000f51e0000f61e0000f71e0000f81e0000f91e0000fa1e0000fb1e0000fc1e0000fd1e0000fe1e0000ff1e0000001f0000011f0000021f0000031f0000041f0000051f0000061f0000071f0000081f0000091f00000a1f00000b1f00000c1f00000d1f00000e1f00000f1f0000 + m_AlignBytes: 16 + groupID: 71 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7840 + particle2: 7841 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7841 + particle2: 7842 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7842 + particle2: 7843 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7843 + particle2: 7844 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7844 + particle2: 7845 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7845 + particle2: 7846 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7846 + particle2: 7847 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7847 + particle2: 7848 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7848 + particle2: 7849 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7849 + particle2: 7850 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7850 + particle2: 7851 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &702256089 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 702256090} + - component: {fileID: 702256094} + - component: {fileID: 702256093} + - component: {fileID: 702256092} + - component: {fileID: 702256091} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &702256090 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702256089} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &702256091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702256089} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 702256094} + m_Target: {fileID: 702256090} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &702256092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702256089} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &702256093 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702256089} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 71 +--- !u!114 &702256094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 702256089} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 101f0000111f0000121f0000131f0000141f0000151f0000161f0000171f0000181f0000191f00001a1f00001b1f00001c1f00001d1f00001e1f00001f1f0000201f0000211f0000221f0000231f0000241f0000251f0000261f0000271f0000281f0000291f00002a1f00002b1f00002c1f00002d1f00002e1f00002f1f0000301f0000311f0000321f0000331f0000341f0000351f0000361f0000371f0000381f0000391f00003a1f00003b1f00003c1f00003d1f00003e1f00003f1f0000401f0000411f0000421f0000431f0000441f0000451f0000461f0000471f0000481f0000491f00004a1f00004b1f00004c1f00004d1f00004e1f00004f1f0000501f0000511f0000521f0000531f0000541f0000551f0000561f0000571f0000581f0000591f00005a1f00005b1f00005c1f00005d1f00005e1f00005f1f0000601f0000611f0000621f0000631f0000641f0000651f0000661f0000671f0000681f0000691f00006a1f00006b1f00006c1f00006d1f00006e1f00006f1f0000701f0000711f0000721f0000731f0000741f0000751f0000761f0000771f0000781f0000791f00007a1f00007b1f00007c1f00007d1f00007e1f00007f1f0000 + m_AlignBytes: 16 + groupID: 72 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 7952 + particle2: 7953 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 7953 + particle2: 7954 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 7954 + particle2: 7955 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 7955 + particle2: 7956 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 7956 + particle2: 7957 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 7957 + particle2: 7958 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 7958 + particle2: 7959 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7959 + particle2: 7960 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 7960 + particle2: 7961 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7961 + particle2: 7962 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 7962 + particle2: 7963 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &713725210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 713725211} + - component: {fileID: 713725215} + - component: {fileID: 713725214} + - component: {fileID: 713725213} + - component: {fileID: 713725212} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &713725211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 713725210} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &713725212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 713725210} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 713725215} + m_Target: {fileID: 713725211} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &713725213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 713725210} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &713725214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 713725210} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 72 +--- !u!114 &713725215 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 713725210} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 801f0000811f0000821f0000831f0000841f0000851f0000861f0000871f0000881f0000891f00008a1f00008b1f00008c1f00008d1f00008e1f00008f1f0000901f0000911f0000921f0000931f0000941f0000951f0000961f0000971f0000981f0000991f00009a1f00009b1f00009c1f00009d1f00009e1f00009f1f0000a01f0000a11f0000a21f0000a31f0000a41f0000a51f0000a61f0000a71f0000a81f0000a91f0000aa1f0000ab1f0000ac1f0000ad1f0000ae1f0000af1f0000b01f0000b11f0000b21f0000b31f0000b41f0000b51f0000b61f0000b71f0000b81f0000b91f0000ba1f0000bb1f0000bc1f0000bd1f0000be1f0000bf1f0000c01f0000c11f0000c21f0000c31f0000c41f0000c51f0000c61f0000c71f0000c81f0000c91f0000ca1f0000cb1f0000cc1f0000cd1f0000ce1f0000cf1f0000d01f0000d11f0000d21f0000d31f0000d41f0000d51f0000d61f0000d71f0000d81f0000d91f0000da1f0000db1f0000dc1f0000dd1f0000de1f0000df1f0000e01f0000e11f0000e21f0000e31f0000e41f0000e51f0000e61f0000e71f0000e81f0000e91f0000ea1f0000eb1f0000ec1f0000ed1f0000ee1f0000ef1f0000 + m_AlignBytes: 16 + groupID: 73 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8064 + particle2: 8065 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8065 + particle2: 8066 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8066 + particle2: 8067 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8067 + particle2: 8068 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8068 + particle2: 8069 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8069 + particle2: 8070 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8070 + particle2: 8071 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8071 + particle2: 8072 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8072 + particle2: 8073 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8073 + particle2: 8074 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8074 + particle2: 8075 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &713844501 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 713844502} + m_Layer: 0 + m_Name: Row (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &713844502 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 713844501} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.8} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 444273476} + - {fileID: 455432480} + - {fileID: 1746497396} + - {fileID: 59144234} + - {fileID: 1919837743} + - {fileID: 238005276} + - {fileID: 514767706} + - {fileID: 1771245892} + - {fileID: 302892551} + - {fileID: 2017265027} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &729000485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 729000486} + - component: {fileID: 729000490} + - component: {fileID: 729000489} + - component: {fileID: 729000488} + - component: {fileID: 729000487} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &729000486 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729000485} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &729000487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729000485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 729000490} + m_Target: {fileID: 729000486} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &729000488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729000485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &729000489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729000485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 73 +--- !u!114 &729000490 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729000485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f01f0000f11f0000f21f0000f31f0000f41f0000f51f0000f61f0000f71f0000f81f0000f91f0000fa1f0000fb1f0000fc1f0000fd1f0000fe1f0000ff1f0000002000000120000002200000032000000420000005200000062000000720000008200000092000000a2000000b2000000c2000000d2000000e2000000f200000102000001120000012200000132000001420000015200000162000001720000018200000192000001a2000001b2000001c2000001d2000001e2000001f200000202000002120000022200000232000002420000025200000262000002720000028200000292000002a2000002b2000002c2000002d2000002e2000002f200000302000003120000032200000332000003420000035200000362000003720000038200000392000003a2000003b2000003c2000003d2000003e2000003f200000402000004120000042200000432000004420000045200000462000004720000048200000492000004a2000004b2000004c2000004d2000004e2000004f200000502000005120000052200000532000005420000055200000562000005720000058200000592000005a2000005b2000005c2000005d2000005e2000005f200000 + m_AlignBytes: 16 + groupID: 74 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8176 + particle2: 8177 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8177 + particle2: 8178 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8178 + particle2: 8179 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8179 + particle2: 8180 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8180 + particle2: 8181 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8181 + particle2: 8182 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8182 + particle2: 8183 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8183 + particle2: 8184 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8184 + particle2: 8185 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8185 + particle2: 8186 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8186 + particle2: 8187 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &733963100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 733963101} + - component: {fileID: 733963105} + - component: {fileID: 733963104} + - component: {fileID: 733963103} + - component: {fileID: 733963102} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &733963101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 733963100} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &733963102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 733963100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 733963105} + m_Target: {fileID: 733963101} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &733963103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 733963100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &733963104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 733963100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 74 +--- !u!114 &733963105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 733963100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 602000006120000062200000632000006420000065200000662000006720000068200000692000006a2000006b2000006c2000006d2000006e2000006f200000702000007120000072200000732000007420000075200000762000007720000078200000792000007a2000007b2000007c2000007d2000007e2000007f200000802000008120000082200000832000008420000085200000862000008720000088200000892000008a2000008b2000008c2000008d2000008e2000008f200000902000009120000092200000932000009420000095200000962000009720000098200000992000009a2000009b2000009c2000009d2000009e2000009f200000a0200000a1200000a2200000a3200000a4200000a5200000a6200000a7200000a8200000a9200000aa200000ab200000ac200000ad200000ae200000af200000b0200000b1200000b2200000b3200000b4200000b5200000b6200000b7200000b8200000b9200000ba200000bb200000bc200000bd200000be200000bf200000c0200000c1200000c2200000c3200000c4200000c5200000c6200000c7200000c8200000c9200000ca200000cb200000cc200000cd200000ce200000cf200000 + m_AlignBytes: 16 + groupID: 75 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8288 + particle2: 8289 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8289 + particle2: 8290 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8290 + particle2: 8291 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8291 + particle2: 8292 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8292 + particle2: 8293 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8293 + particle2: 8294 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8294 + particle2: 8295 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8295 + particle2: 8296 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8296 + particle2: 8297 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8297 + particle2: 8298 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8298 + particle2: 8299 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &746024796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 746024797} + - component: {fileID: 746024801} + - component: {fileID: 746024800} + - component: {fileID: 746024799} + - component: {fileID: 746024798} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &746024797 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746024796} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &746024798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746024796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 746024801} + m_Target: {fileID: 746024797} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &746024799 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746024796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &746024800 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746024796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 75 +--- !u!114 &746024801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746024796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d0200000d1200000d2200000d3200000d4200000d5200000d6200000d7200000d8200000d9200000da200000db200000dc200000dd200000de200000df200000e0200000e1200000e2200000e3200000e4200000e5200000e6200000e7200000e8200000e9200000ea200000eb200000ec200000ed200000ee200000ef200000f0200000f1200000f2200000f3200000f4200000f5200000f6200000f7200000f8200000f9200000fa200000fb200000fc200000fd200000fe200000ff200000002100000121000002210000032100000421000005210000062100000721000008210000092100000a2100000b2100000c2100000d2100000e2100000f210000102100001121000012210000132100001421000015210000162100001721000018210000192100001a2100001b2100001c2100001d2100001e2100001f210000202100002121000022210000232100002421000025210000262100002721000028210000292100002a2100002b2100002c2100002d2100002e2100002f210000302100003121000032210000332100003421000035210000362100003721000038210000392100003a2100003b2100003c2100003d2100003e2100003f210000 + m_AlignBytes: 16 + groupID: 76 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8400 + particle2: 8401 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8401 + particle2: 8402 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8402 + particle2: 8403 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8403 + particle2: 8404 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8404 + particle2: 8405 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8405 + particle2: 8406 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8406 + particle2: 8407 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8407 + particle2: 8408 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8408 + particle2: 8409 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8409 + particle2: 8410 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8410 + particle2: 8411 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &765011063 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 765011064} + - component: {fileID: 765011068} + - component: {fileID: 765011067} + - component: {fileID: 765011066} + - component: {fileID: 765011065} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &765011064 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765011063} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &765011065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765011063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 765011068} + m_Target: {fileID: 765011064} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &765011066 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765011063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &765011067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765011063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 76 +--- !u!114 &765011068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765011063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 402100004121000042210000432100004421000045210000462100004721000048210000492100004a2100004b2100004c2100004d2100004e2100004f210000502100005121000052210000532100005421000055210000562100005721000058210000592100005a2100005b2100005c2100005d2100005e2100005f210000602100006121000062210000632100006421000065210000662100006721000068210000692100006a2100006b2100006c2100006d2100006e2100006f210000702100007121000072210000732100007421000075210000762100007721000078210000792100007a2100007b2100007c2100007d2100007e2100007f210000802100008121000082210000832100008421000085210000862100008721000088210000892100008a2100008b2100008c2100008d2100008e2100008f210000902100009121000092210000932100009421000095210000962100009721000098210000992100009a2100009b2100009c2100009d2100009e2100009f210000a0210000a1210000a2210000a3210000a4210000a5210000a6210000a7210000a8210000a9210000aa210000ab210000ac210000ad210000ae210000af210000 + m_AlignBytes: 16 + groupID: 77 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8512 + particle2: 8513 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8513 + particle2: 8514 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8514 + particle2: 8515 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8515 + particle2: 8516 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8516 + particle2: 8517 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8517 + particle2: 8518 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8518 + particle2: 8519 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8519 + particle2: 8520 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8520 + particle2: 8521 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8521 + particle2: 8522 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8522 + particle2: 8523 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &765551416 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 765551417} + - component: {fileID: 765551421} + - component: {fileID: 765551420} + - component: {fileID: 765551419} + - component: {fileID: 765551418} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &765551417 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765551416} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &765551418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765551416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 765551421} + m_Target: {fileID: 765551417} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &765551419 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765551416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &765551420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765551416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 77 +--- !u!114 &765551421 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765551416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b0210000b1210000b2210000b3210000b4210000b5210000b6210000b7210000b8210000b9210000ba210000bb210000bc210000bd210000be210000bf210000c0210000c1210000c2210000c3210000c4210000c5210000c6210000c7210000c8210000c9210000ca210000cb210000cc210000cd210000ce210000cf210000d0210000d1210000d2210000d3210000d4210000d5210000d6210000d7210000d8210000d9210000da210000db210000dc210000dd210000de210000df210000e0210000e1210000e2210000e3210000e4210000e5210000e6210000e7210000e8210000e9210000ea210000eb210000ec210000ed210000ee210000ef210000f0210000f1210000f2210000f3210000f4210000f5210000f6210000f7210000f8210000f9210000fa210000fb210000fc210000fd210000fe210000ff210000002200000122000002220000032200000422000005220000062200000722000008220000092200000a2200000b2200000c2200000d2200000e2200000f220000102200001122000012220000132200001422000015220000162200001722000018220000192200001a2200001b2200001c2200001d2200001e2200001f220000 + m_AlignBytes: 16 + groupID: 78 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8624 + particle2: 8625 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8625 + particle2: 8626 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8626 + particle2: 8627 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8627 + particle2: 8628 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8628 + particle2: 8629 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8629 + particle2: 8630 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8630 + particle2: 8631 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8631 + particle2: 8632 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8632 + particle2: 8633 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8633 + particle2: 8634 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8634 + particle2: 8635 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &769380901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 769380902} + - component: {fileID: 769380906} + - component: {fileID: 769380905} + - component: {fileID: 769380904} + - component: {fileID: 769380903} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &769380902 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769380901} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &769380903 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769380901} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 769380906} + m_Target: {fileID: 769380902} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &769380904 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769380901} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &769380905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769380901} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 78 +--- !u!114 &769380906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769380901} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 202200002122000022220000232200002422000025220000262200002722000028220000292200002a2200002b2200002c2200002d2200002e2200002f220000302200003122000032220000332200003422000035220000362200003722000038220000392200003a2200003b2200003c2200003d2200003e2200003f220000402200004122000042220000432200004422000045220000462200004722000048220000492200004a2200004b2200004c2200004d2200004e2200004f220000502200005122000052220000532200005422000055220000562200005722000058220000592200005a2200005b2200005c2200005d2200005e2200005f220000602200006122000062220000632200006422000065220000662200006722000068220000692200006a2200006b2200006c2200006d2200006e2200006f220000702200007122000072220000732200007422000075220000762200007722000078220000792200007a2200007b2200007c2200007d2200007e2200007f220000802200008122000082220000832200008422000085220000862200008722000088220000892200008a2200008b2200008c2200008d2200008e2200008f220000 + m_AlignBytes: 16 + groupID: 79 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8736 + particle2: 8737 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8737 + particle2: 8738 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8738 + particle2: 8739 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8739 + particle2: 8740 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8740 + particle2: 8741 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8741 + particle2: 8742 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8742 + particle2: 8743 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8743 + particle2: 8744 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8744 + particle2: 8745 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8745 + particle2: 8746 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8746 + particle2: 8747 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &778889993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 778889994} + - component: {fileID: 778889998} + - component: {fileID: 778889997} + - component: {fileID: 778889996} + - component: {fileID: 778889995} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &778889994 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778889993} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &778889995 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778889993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 778889998} + m_Target: {fileID: 778889994} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &778889996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778889993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &778889997 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778889993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 79 +--- !u!114 &778889998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778889993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 902200009122000092220000932200009422000095220000962200009722000098220000992200009a2200009b2200009c2200009d2200009e2200009f220000a0220000a1220000a2220000a3220000a4220000a5220000a6220000a7220000a8220000a9220000aa220000ab220000ac220000ad220000ae220000af220000b0220000b1220000b2220000b3220000b4220000b5220000b6220000b7220000b8220000b9220000ba220000bb220000bc220000bd220000be220000bf220000c0220000c1220000c2220000c3220000c4220000c5220000c6220000c7220000c8220000c9220000ca220000cb220000cc220000cd220000ce220000cf220000d0220000d1220000d2220000d3220000d4220000d5220000d6220000d7220000d8220000d9220000da220000db220000dc220000dd220000de220000df220000e0220000e1220000e2220000e3220000e4220000e5220000e6220000e7220000e8220000e9220000ea220000eb220000ec220000ed220000ee220000ef220000f0220000f1220000f2220000f3220000f4220000f5220000f6220000f7220000f8220000f9220000fa220000fb220000fc220000fd220000fe220000ff220000 + m_AlignBytes: 16 + groupID: 80 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8848 + particle2: 8849 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8849 + particle2: 8850 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8850 + particle2: 8851 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8851 + particle2: 8852 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8852 + particle2: 8853 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8853 + particle2: 8854 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8854 + particle2: 8855 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8855 + particle2: 8856 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8856 + particle2: 8857 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8857 + particle2: 8858 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8858 + particle2: 8859 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &779073862 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 779073863} + m_Layer: 0 + m_Name: Row (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &779073863 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779073862} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1375015038} + - {fileID: 1994012442} + - {fileID: 123868266} + - {fileID: 1100467796} + - {fileID: 620777759} + - {fileID: 52316903} + - {fileID: 58243450} + - {fileID: 1517801622} + - {fileID: 765551417} + - {fileID: 1300868598} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &789375856 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672126} + m_Mesh: {fileID: 4300000, guid: 89e24673c05344d179c516868eb341b8, type: 3} +--- !u!33 &789375858 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672112} + m_Mesh: {fileID: 4300006, guid: 89e24673c05344d179c516868eb341b8, type: 3} +--- !u!33 &789375860 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672114} + m_Mesh: {fileID: 4300004, guid: 89e24673c05344d179c516868eb341b8, type: 3} +--- !u!33 &789375862 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672116} + m_Mesh: {fileID: 4300002, guid: 89e24673c05344d179c516868eb341b8, type: 3} +--- !u!23 &790473136 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672126} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!23 &790473138 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672112} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!23 &790473140 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672114} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!23 &790473142 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672116} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!4 &792243024 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672112} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 792243030} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &792243026 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672114} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 792243030} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &792243028 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672116} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 792243030} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &792243030 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672118} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2045321430962147711} + - {fileID: 792243028} + - {fileID: 792243026} + - {fileID: 792243024} + - {fileID: 792243038} + m_Father: {fileID: 1561375948} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &792243038 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672126} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 792243030} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &792672112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 792243024} + - component: {fileID: 789375858} + - component: {fileID: 790473138} + - component: {fileID: 792672115} + - component: {fileID: 792672113} + m_Layer: 0 + m_Name: pCube4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &792672113 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672112} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 792672115} + m_DistanceField: {fileID: 0} +--- !u!1 &792672114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 792243026} + - component: {fileID: 789375860} + - component: {fileID: 790473140} + - component: {fileID: 792672119} + - component: {fileID: 792672117} + m_Layer: 0 + m_Name: pCube3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &792672115 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672112} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.46872288 + m_Center: {x: -0.77275866, y: -0.01624769, z: 0.027971357} +--- !u!1 &792672116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 792243028} + - component: {fileID: 789375862} + - component: {fileID: 790473142} + - component: {fileID: 792672121} + - component: {fileID: 792672120} + m_Layer: 0 + m_Name: pCube2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &792672117 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 792672119} + m_DistanceField: {fileID: 0} +--- !u!1 &792672118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 792243030} + - component: {fileID: 792672122} + m_Layer: 0 + m_Name: Fan (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &792672119 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672114} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.44351313 + m_Center: {x: 0.46067736, y: -0.01624769, z: -0.6795417} +--- !u!114 &792672120 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 792672121} + m_DistanceField: {fileID: 0} +--- !u!135 &792672121 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672116} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.46508226 + m_Center: {x: 0.4708475, y: -0.01624769, z: 0.7047374} +--- !u!114 &792672122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dae436d3aef704ae1b22a06a92480162, type: 3} + m_Name: + m_EditorClassIdentifier: + moveUnitsPerSecond: + value: {x: 0, y: 0, z: 0} + space: 1 + rotateDegreesPerSecond: + value: {x: 0, y: -500, z: 0} + space: 1 + ignoreTimescale: 0 +--- !u!1 &792672126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 792243038} + - component: {fileID: 789375856} + - component: {fileID: 790473136} + - component: {fileID: 792672128} + - component: {fileID: 792672127} + m_Layer: 0 + m_Name: pCylinder1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &792672127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672126} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 792672128} + m_DistanceField: {fileID: 0} +--- !u!135 &792672128 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672126} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.4000001 + m_Center: {x: 0.000000044703484, y: 0.18707478, z: -0.000000059604645} +--- !u!1 &811595117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 811595118} + - component: {fileID: 811595122} + - component: {fileID: 811595121} + - component: {fileID: 811595120} + - component: {fileID: 811595119} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &811595118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811595117} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &811595119 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811595117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 811595122} + m_Target: {fileID: 811595118} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &811595120 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811595117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &811595121 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811595117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 80 +--- !u!114 &811595122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811595117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 002300000123000002230000032300000423000005230000062300000723000008230000092300000a2300000b2300000c2300000d2300000e2300000f230000102300001123000012230000132300001423000015230000162300001723000018230000192300001a2300001b2300001c2300001d2300001e2300001f230000202300002123000022230000232300002423000025230000262300002723000028230000292300002a2300002b2300002c2300002d2300002e2300002f230000302300003123000032230000332300003423000035230000362300003723000038230000392300003a2300003b2300003c2300003d2300003e2300003f230000402300004123000042230000432300004423000045230000462300004723000048230000492300004a2300004b2300004c2300004d2300004e2300004f230000502300005123000052230000532300005423000055230000562300005723000058230000592300005a2300005b2300005c2300005d2300005e2300005f230000602300006123000062230000632300006423000065230000662300006723000068230000692300006a2300006b2300006c2300006d2300006e2300006f230000 + m_AlignBytes: 16 + groupID: 81 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 8960 + particle2: 8961 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 8961 + particle2: 8962 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 8962 + particle2: 8963 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 8963 + particle2: 8964 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 8964 + particle2: 8965 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 8965 + particle2: 8966 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 8966 + particle2: 8967 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 8967 + particle2: 8968 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8968 + particle2: 8969 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 8969 + particle2: 8970 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 8970 + particle2: 8971 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &811913318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 811913319} + - component: {fileID: 811913323} + - component: {fileID: 811913322} + - component: {fileID: 811913321} + - component: {fileID: 811913320} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &811913319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811913318} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &811913320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811913318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 811913323} + m_Target: {fileID: 811913319} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &811913321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811913318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &811913322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811913318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 81 +--- !u!114 &811913323 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811913318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 702300007123000072230000732300007423000075230000762300007723000078230000792300007a2300007b2300007c2300007d2300007e2300007f230000802300008123000082230000832300008423000085230000862300008723000088230000892300008a2300008b2300008c2300008d2300008e2300008f230000902300009123000092230000932300009423000095230000962300009723000098230000992300009a2300009b2300009c2300009d2300009e2300009f230000a0230000a1230000a2230000a3230000a4230000a5230000a6230000a7230000a8230000a9230000aa230000ab230000ac230000ad230000ae230000af230000b0230000b1230000b2230000b3230000b4230000b5230000b6230000b7230000b8230000b9230000ba230000bb230000bc230000bd230000be230000bf230000c0230000c1230000c2230000c3230000c4230000c5230000c6230000c7230000c8230000c9230000ca230000cb230000cc230000cd230000ce230000cf230000d0230000d1230000d2230000d3230000d4230000d5230000d6230000d7230000d8230000d9230000da230000db230000dc230000dd230000de230000df230000 + m_AlignBytes: 16 + groupID: 82 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9072 + particle2: 9073 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9073 + particle2: 9074 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9074 + particle2: 9075 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9075 + particle2: 9076 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9076 + particle2: 9077 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9077 + particle2: 9078 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9078 + particle2: 9079 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9079 + particle2: 9080 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9080 + particle2: 9081 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9081 + particle2: 9082 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9082 + particle2: 9083 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &820904267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 820904268} + - component: {fileID: 820904272} + - component: {fileID: 820904271} + - component: {fileID: 820904270} + - component: {fileID: 820904269} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &820904268 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820904267} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &820904269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820904267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 820904272} + m_Target: {fileID: 820904268} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &820904270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820904267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &820904271 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820904267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 82 +--- !u!114 &820904272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820904267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0230000e1230000e2230000e3230000e4230000e5230000e6230000e7230000e8230000e9230000ea230000eb230000ec230000ed230000ee230000ef230000f0230000f1230000f2230000f3230000f4230000f5230000f6230000f7230000f8230000f9230000fa230000fb230000fc230000fd230000fe230000ff230000002400000124000002240000032400000424000005240000062400000724000008240000092400000a2400000b2400000c2400000d2400000e2400000f240000102400001124000012240000132400001424000015240000162400001724000018240000192400001a2400001b2400001c2400001d2400001e2400001f240000202400002124000022240000232400002424000025240000262400002724000028240000292400002a2400002b2400002c2400002d2400002e2400002f240000302400003124000032240000332400003424000035240000362400003724000038240000392400003a2400003b2400003c2400003d2400003e2400003f240000402400004124000042240000432400004424000045240000462400004724000048240000492400004a2400004b2400004c2400004d2400004e2400004f240000 + m_AlignBytes: 16 + groupID: 83 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9184 + particle2: 9185 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9185 + particle2: 9186 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9186 + particle2: 9187 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9187 + particle2: 9188 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9188 + particle2: 9189 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9189 + particle2: 9190 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9190 + particle2: 9191 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9191 + particle2: 9192 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9192 + particle2: 9193 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9193 + particle2: 9194 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9194 + particle2: 9195 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &824780548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 824780549} + - component: {fileID: 824780553} + - component: {fileID: 824780552} + - component: {fileID: 824780551} + - component: {fileID: 824780550} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &824780549 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824780548} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &824780550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824780548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 824780553} + m_Target: {fileID: 824780549} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &824780551 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824780548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &824780552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824780548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 83 +--- !u!114 &824780553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824780548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 502400005124000052240000532400005424000055240000562400005724000058240000592400005a2400005b2400005c2400005d2400005e2400005f240000602400006124000062240000632400006424000065240000662400006724000068240000692400006a2400006b2400006c2400006d2400006e2400006f240000702400007124000072240000732400007424000075240000762400007724000078240000792400007a2400007b2400007c2400007d2400007e2400007f240000802400008124000082240000832400008424000085240000862400008724000088240000892400008a2400008b2400008c2400008d2400008e2400008f240000902400009124000092240000932400009424000095240000962400009724000098240000992400009a2400009b2400009c2400009d2400009e2400009f240000a0240000a1240000a2240000a3240000a4240000a5240000a6240000a7240000a8240000a9240000aa240000ab240000ac240000ad240000ae240000af240000b0240000b1240000b2240000b3240000b4240000b5240000b6240000b7240000b8240000b9240000ba240000bb240000bc240000bd240000be240000bf240000 + m_AlignBytes: 16 + groupID: 84 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9296 + particle2: 9297 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9297 + particle2: 9298 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9298 + particle2: 9299 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9299 + particle2: 9300 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9300 + particle2: 9301 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9301 + particle2: 9302 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9302 + particle2: 9303 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9303 + particle2: 9304 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9304 + particle2: 9305 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9305 + particle2: 9306 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9306 + particle2: 9307 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &865980437 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 865980438} + - component: {fileID: 865980442} + - component: {fileID: 865980441} + - component: {fileID: 865980440} + - component: {fileID: 865980439} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &865980438 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865980437} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &865980439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865980437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 865980442} + m_Target: {fileID: 865980438} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &865980440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865980437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &865980441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865980437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 84 +--- !u!114 &865980442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865980437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0240000c1240000c2240000c3240000c4240000c5240000c6240000c7240000c8240000c9240000ca240000cb240000cc240000cd240000ce240000cf240000d0240000d1240000d2240000d3240000d4240000d5240000d6240000d7240000d8240000d9240000da240000db240000dc240000dd240000de240000df240000e0240000e1240000e2240000e3240000e4240000e5240000e6240000e7240000e8240000e9240000ea240000eb240000ec240000ed240000ee240000ef240000f0240000f1240000f2240000f3240000f4240000f5240000f6240000f7240000f8240000f9240000fa240000fb240000fc240000fd240000fe240000ff240000002500000125000002250000032500000425000005250000062500000725000008250000092500000a2500000b2500000c2500000d2500000e2500000f250000102500001125000012250000132500001425000015250000162500001725000018250000192500001a2500001b2500001c2500001d2500001e2500001f250000202500002125000022250000232500002425000025250000262500002725000028250000292500002a2500002b2500002c2500002d2500002e2500002f250000 + m_AlignBytes: 16 + groupID: 85 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9408 + particle2: 9409 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9409 + particle2: 9410 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9410 + particle2: 9411 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9411 + particle2: 9412 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9412 + particle2: 9413 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9413 + particle2: 9414 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9414 + particle2: 9415 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9415 + particle2: 9416 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9416 + particle2: 9417 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9417 + particle2: 9418 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9418 + particle2: 9419 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &869213057 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 869213058} + - component: {fileID: 869213062} + - component: {fileID: 869213061} + - component: {fileID: 869213060} + - component: {fileID: 869213059} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &869213058 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 869213057} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &869213059 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 869213057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 869213062} + m_Target: {fileID: 869213058} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &869213060 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 869213057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &869213061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 869213057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 85 +--- !u!114 &869213062 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 869213057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 302500003125000032250000332500003425000035250000362500003725000038250000392500003a2500003b2500003c2500003d2500003e2500003f250000402500004125000042250000432500004425000045250000462500004725000048250000492500004a2500004b2500004c2500004d2500004e2500004f250000502500005125000052250000532500005425000055250000562500005725000058250000592500005a2500005b2500005c2500005d2500005e2500005f250000602500006125000062250000632500006425000065250000662500006725000068250000692500006a2500006b2500006c2500006d2500006e2500006f250000702500007125000072250000732500007425000075250000762500007725000078250000792500007a2500007b2500007c2500007d2500007e2500007f250000802500008125000082250000832500008425000085250000862500008725000088250000892500008a2500008b2500008c2500008d2500008e2500008f250000902500009125000092250000932500009425000095250000962500009725000098250000992500009a2500009b2500009c2500009d2500009e2500009f250000 + m_AlignBytes: 16 + groupID: 86 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9520 + particle2: 9521 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9521 + particle2: 9522 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9522 + particle2: 9523 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9523 + particle2: 9524 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9524 + particle2: 9525 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9525 + particle2: 9526 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9526 + particle2: 9527 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9527 + particle2: 9528 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9528 + particle2: 9529 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9529 + particle2: 9530 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9530 + particle2: 9531 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &881133076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 881133077} + - component: {fileID: 881133081} + - component: {fileID: 881133080} + - component: {fileID: 881133079} + - component: {fileID: 881133078} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &881133077 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881133076} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &881133078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881133076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 881133081} + m_Target: {fileID: 881133077} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &881133079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881133076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &881133080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881133076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 86 +--- !u!114 &881133081 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881133076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0250000a1250000a2250000a3250000a4250000a5250000a6250000a7250000a8250000a9250000aa250000ab250000ac250000ad250000ae250000af250000b0250000b1250000b2250000b3250000b4250000b5250000b6250000b7250000b8250000b9250000ba250000bb250000bc250000bd250000be250000bf250000c0250000c1250000c2250000c3250000c4250000c5250000c6250000c7250000c8250000c9250000ca250000cb250000cc250000cd250000ce250000cf250000d0250000d1250000d2250000d3250000d4250000d5250000d6250000d7250000d8250000d9250000da250000db250000dc250000dd250000de250000df250000e0250000e1250000e2250000e3250000e4250000e5250000e6250000e7250000e8250000e9250000ea250000eb250000ec250000ed250000ee250000ef250000f0250000f1250000f2250000f3250000f4250000f5250000f6250000f7250000f8250000f9250000fa250000fb250000fc250000fd250000fe250000ff250000002600000126000002260000032600000426000005260000062600000726000008260000092600000a2600000b2600000c2600000d2600000e2600000f260000 + m_AlignBytes: 16 + groupID: 87 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9632 + particle2: 9633 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9633 + particle2: 9634 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9634 + particle2: 9635 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9635 + particle2: 9636 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9636 + particle2: 9637 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9637 + particle2: 9638 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9638 + particle2: 9639 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9639 + particle2: 9640 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9640 + particle2: 9641 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9641 + particle2: 9642 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9642 + particle2: 9643 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &888913398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 888913399} + - component: {fileID: 888913403} + - component: {fileID: 888913402} + - component: {fileID: 888913401} + - component: {fileID: 888913400} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &888913399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888913398} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &888913400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888913398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 888913403} + m_Target: {fileID: 888913399} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &888913401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888913398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &888913402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888913398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 87 +--- !u!114 &888913403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 888913398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 102600001126000012260000132600001426000015260000162600001726000018260000192600001a2600001b2600001c2600001d2600001e2600001f260000202600002126000022260000232600002426000025260000262600002726000028260000292600002a2600002b2600002c2600002d2600002e2600002f260000302600003126000032260000332600003426000035260000362600003726000038260000392600003a2600003b2600003c2600003d2600003e2600003f260000402600004126000042260000432600004426000045260000462600004726000048260000492600004a2600004b2600004c2600004d2600004e2600004f260000502600005126000052260000532600005426000055260000562600005726000058260000592600005a2600005b2600005c2600005d2600005e2600005f260000602600006126000062260000632600006426000065260000662600006726000068260000692600006a2600006b2600006c2600006d2600006e2600006f260000702600007126000072260000732600007426000075260000762600007726000078260000792600007a2600007b2600007c2600007d2600007e2600007f260000 + m_AlignBytes: 16 + groupID: 88 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9744 + particle2: 9745 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9745 + particle2: 9746 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9746 + particle2: 9747 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9747 + particle2: 9748 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9748 + particle2: 9749 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9749 + particle2: 9750 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9750 + particle2: 9751 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9751 + particle2: 9752 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9752 + particle2: 9753 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9753 + particle2: 9754 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9754 + particle2: 9755 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &893001394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 893001395} + m_Layer: 0 + m_Name: Row (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &893001395 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893001394} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.6} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2028909269} + - {fileID: 1521845708} + - {fileID: 1605421489} + - {fileID: 277586514} + - {fileID: 265659789} + - {fileID: 1438254939} + - {fileID: 811595118} + - {fileID: 1299859297} + - {fileID: 165314045} + - {fileID: 1948398665} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &920811575 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 920811577} + - component: {fileID: 920811576} + m_Layer: 0 + m_Name: ComputeCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &920811576 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 920811575} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ce0ddc77554954cd78643d83b0505396, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &920811577 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 920811575} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &938771665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 938771666} + - component: {fileID: 938771670} + - component: {fileID: 938771669} + - component: {fileID: 938771668} + - component: {fileID: 938771667} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &938771666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938771665} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &938771667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938771665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 938771670} + m_Target: {fileID: 938771666} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &938771668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938771665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &938771669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938771665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 88 +--- !u!114 &938771670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938771665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 802600008126000082260000832600008426000085260000862600008726000088260000892600008a2600008b2600008c2600008d2600008e2600008f260000902600009126000092260000932600009426000095260000962600009726000098260000992600009a2600009b2600009c2600009d2600009e2600009f260000a0260000a1260000a2260000a3260000a4260000a5260000a6260000a7260000a8260000a9260000aa260000ab260000ac260000ad260000ae260000af260000b0260000b1260000b2260000b3260000b4260000b5260000b6260000b7260000b8260000b9260000ba260000bb260000bc260000bd260000be260000bf260000c0260000c1260000c2260000c3260000c4260000c5260000c6260000c7260000c8260000c9260000ca260000cb260000cc260000cd260000ce260000cf260000d0260000d1260000d2260000d3260000d4260000d5260000d6260000d7260000d8260000d9260000da260000db260000dc260000dd260000de260000df260000e0260000e1260000e2260000e3260000e4260000e5260000e6260000e7260000e8260000e9260000ea260000eb260000ec260000ed260000ee260000ef260000 + m_AlignBytes: 16 + groupID: 89 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9856 + particle2: 9857 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9857 + particle2: 9858 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9858 + particle2: 9859 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9859 + particle2: 9860 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9860 + particle2: 9861 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9861 + particle2: 9862 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9862 + particle2: 9863 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9863 + particle2: 9864 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9864 + particle2: 9865 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9865 + particle2: 9866 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9866 + particle2: 9867 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &940408951 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 940408952} + m_Layer: 0 + m_Name: Row + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &940408952 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 940408951} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1304270659} + - {fileID: 667569021} + - {fileID: 1613103433} + - {fileID: 702256090} + - {fileID: 1152767235} + - {fileID: 1333859662} + - {fileID: 778889994} + - {fileID: 393174417} + - {fileID: 1649225306} + - {fileID: 2033391599} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &941225758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 941225759} + - component: {fileID: 941225763} + - component: {fileID: 941225762} + - component: {fileID: 941225761} + - component: {fileID: 941225760} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &941225759 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941225758} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &941225760 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941225758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 941225763} + m_Target: {fileID: 941225759} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &941225761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941225758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &941225762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941225758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 89 +--- !u!114 &941225763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941225758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f0260000f1260000f2260000f3260000f4260000f5260000f6260000f7260000f8260000f9260000fa260000fb260000fc260000fd260000fe260000ff260000002700000127000002270000032700000427000005270000062700000727000008270000092700000a2700000b2700000c2700000d2700000e2700000f270000102700001127000012270000132700001427000015270000162700001727000018270000192700001a2700001b2700001c2700001d2700001e2700001f270000202700002127000022270000232700002427000025270000262700002727000028270000292700002a2700002b2700002c2700002d2700002e2700002f270000302700003127000032270000332700003427000035270000362700003727000038270000392700003a2700003b2700003c2700003d2700003e2700003f270000402700004127000042270000432700004427000045270000462700004727000048270000492700004a2700004b2700004c2700004d2700004e2700004f270000502700005127000052270000532700005427000055270000562700005727000058270000592700005a2700005b2700005c2700005d2700005e2700005f270000 + m_AlignBytes: 16 + groupID: 90 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 9968 + particle2: 9969 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 9969 + particle2: 9970 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 9970 + particle2: 9971 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 9971 + particle2: 9972 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 9972 + particle2: 9973 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 9973 + particle2: 9974 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 9974 + particle2: 9975 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 9975 + particle2: 9976 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 9976 + particle2: 9977 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9977 + particle2: 9978 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 9978 + particle2: 9979 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &949070423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 949070424} + - component: {fileID: 949070428} + - component: {fileID: 949070427} + - component: {fileID: 949070426} + - component: {fileID: 949070425} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &949070424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949070423} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &949070425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949070423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 949070428} + m_Target: {fileID: 949070424} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &949070426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949070423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &949070427 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949070423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 90 +--- !u!114 &949070428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949070423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 602700006127000062270000632700006427000065270000662700006727000068270000692700006a2700006b2700006c2700006d2700006e2700006f270000702700007127000072270000732700007427000075270000762700007727000078270000792700007a2700007b2700007c2700007d2700007e2700007f270000802700008127000082270000832700008427000085270000862700008727000088270000892700008a2700008b2700008c2700008d2700008e2700008f270000902700009127000092270000932700009427000095270000962700009727000098270000992700009a2700009b2700009c2700009d2700009e2700009f270000a0270000a1270000a2270000a3270000a4270000a5270000a6270000a7270000a8270000a9270000aa270000ab270000ac270000ad270000ae270000af270000b0270000b1270000b2270000b3270000b4270000b5270000b6270000b7270000b8270000b9270000ba270000bb270000bc270000bd270000be270000bf270000c0270000c1270000c2270000c3270000c4270000c5270000c6270000c7270000c8270000c9270000ca270000cb270000cc270000cd270000ce270000cf270000 + m_AlignBytes: 16 + groupID: 91 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10080 + particle2: 10081 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10081 + particle2: 10082 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10082 + particle2: 10083 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10083 + particle2: 10084 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10084 + particle2: 10085 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10085 + particle2: 10086 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10086 + particle2: 10087 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10087 + particle2: 10088 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10088 + particle2: 10089 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10089 + particle2: 10090 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10090 + particle2: 10091 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &949981032 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 949981033} + - component: {fileID: 949981037} + - component: {fileID: 949981036} + - component: {fileID: 949981035} + - component: {fileID: 949981034} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &949981033 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949981032} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &949981034 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949981032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 949981037} + m_Target: {fileID: 949981033} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &949981035 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949981032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &949981036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949981032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 91 +--- !u!114 &949981037 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949981032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d0270000d1270000d2270000d3270000d4270000d5270000d6270000d7270000d8270000d9270000da270000db270000dc270000dd270000de270000df270000e0270000e1270000e2270000e3270000e4270000e5270000e6270000e7270000e8270000e9270000ea270000eb270000ec270000ed270000ee270000ef270000f0270000f1270000f2270000f3270000f4270000f5270000f6270000f7270000f8270000f9270000fa270000fb270000fc270000fd270000fe270000ff270000002800000128000002280000032800000428000005280000062800000728000008280000092800000a2800000b2800000c2800000d2800000e2800000f280000102800001128000012280000132800001428000015280000162800001728000018280000192800001a2800001b2800001c2800001d2800001e2800001f280000202800002128000022280000232800002428000025280000262800002728000028280000292800002a2800002b2800002c2800002d2800002e2800002f280000302800003128000032280000332800003428000035280000362800003728000038280000392800003a2800003b2800003c2800003d2800003e2800003f280000 + m_AlignBytes: 16 + groupID: 92 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10192 + particle2: 10193 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10193 + particle2: 10194 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10194 + particle2: 10195 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10195 + particle2: 10196 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10196 + particle2: 10197 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10197 + particle2: 10198 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10198 + particle2: 10199 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10199 + particle2: 10200 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10200 + particle2: 10201 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10201 + particle2: 10202 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10202 + particle2: 10203 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &960049598 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 960049599} + - component: {fileID: 960049603} + - component: {fileID: 960049602} + - component: {fileID: 960049601} + - component: {fileID: 960049600} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &960049599 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960049598} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &960049600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960049598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 960049603} + m_Target: {fileID: 960049599} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &960049601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960049598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &960049602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960049598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 92 +--- !u!114 &960049603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960049598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 402800004128000042280000432800004428000045280000462800004728000048280000492800004a2800004b2800004c2800004d2800004e2800004f280000502800005128000052280000532800005428000055280000562800005728000058280000592800005a2800005b2800005c2800005d2800005e2800005f280000602800006128000062280000632800006428000065280000662800006728000068280000692800006a2800006b2800006c2800006d2800006e2800006f280000702800007128000072280000732800007428000075280000762800007728000078280000792800007a2800007b2800007c2800007d2800007e2800007f280000802800008128000082280000832800008428000085280000862800008728000088280000892800008a2800008b2800008c2800008d2800008e2800008f280000902800009128000092280000932800009428000095280000962800009728000098280000992800009a2800009b2800009c2800009d2800009e2800009f280000a0280000a1280000a2280000a3280000a4280000a5280000a6280000a7280000a8280000a9280000aa280000ab280000ac280000ad280000ae280000af280000 + m_AlignBytes: 16 + groupID: 93 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10304 + particle2: 10305 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10305 + particle2: 10306 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10306 + particle2: 10307 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10307 + particle2: 10308 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10308 + particle2: 10309 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10309 + particle2: 10310 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10310 + particle2: 10311 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10311 + particle2: 10312 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10312 + particle2: 10313 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10313 + particle2: 10314 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10314 + particle2: 10315 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &964498382 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 964498383} + - component: {fileID: 964498387} + - component: {fileID: 964498386} + - component: {fileID: 964498385} + - component: {fileID: 964498384} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &964498383 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964498382} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &964498384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964498382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 964498387} + m_Target: {fileID: 964498383} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &964498385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964498382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &964498386 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964498382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 93 +--- !u!114 &964498387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 964498382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b0280000b1280000b2280000b3280000b4280000b5280000b6280000b7280000b8280000b9280000ba280000bb280000bc280000bd280000be280000bf280000c0280000c1280000c2280000c3280000c4280000c5280000c6280000c7280000c8280000c9280000ca280000cb280000cc280000cd280000ce280000cf280000d0280000d1280000d2280000d3280000d4280000d5280000d6280000d7280000d8280000d9280000da280000db280000dc280000dd280000de280000df280000e0280000e1280000e2280000e3280000e4280000e5280000e6280000e7280000e8280000e9280000ea280000eb280000ec280000ed280000ee280000ef280000f0280000f1280000f2280000f3280000f4280000f5280000f6280000f7280000f8280000f9280000fa280000fb280000fc280000fd280000fe280000ff280000002900000129000002290000032900000429000005290000062900000729000008290000092900000a2900000b2900000c2900000d2900000e2900000f290000102900001129000012290000132900001429000015290000162900001729000018290000192900001a2900001b2900001c2900001d2900001e2900001f290000 + m_AlignBytes: 16 + groupID: 94 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10416 + particle2: 10417 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10417 + particle2: 10418 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10418 + particle2: 10419 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10419 + particle2: 10420 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10420 + particle2: 10421 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10421 + particle2: 10422 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10422 + particle2: 10423 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10423 + particle2: 10424 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10424 + particle2: 10425 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10425 + particle2: 10426 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10426 + particle2: 10427 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &975387944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 975387945} + - component: {fileID: 975387949} + - component: {fileID: 975387948} + - component: {fileID: 975387947} + - component: {fileID: 975387946} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &975387945 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975387944} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &975387946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975387944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 975387949} + m_Target: {fileID: 975387945} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &975387947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975387944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &975387948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975387944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 94 +--- !u!114 &975387949 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975387944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 202900002129000022290000232900002429000025290000262900002729000028290000292900002a2900002b2900002c2900002d2900002e2900002f290000302900003129000032290000332900003429000035290000362900003729000038290000392900003a2900003b2900003c2900003d2900003e2900003f290000402900004129000042290000432900004429000045290000462900004729000048290000492900004a2900004b2900004c2900004d2900004e2900004f290000502900005129000052290000532900005429000055290000562900005729000058290000592900005a2900005b2900005c2900005d2900005e2900005f290000602900006129000062290000632900006429000065290000662900006729000068290000692900006a2900006b2900006c2900006d2900006e2900006f290000702900007129000072290000732900007429000075290000762900007729000078290000792900007a2900007b2900007c2900007d2900007e2900007f290000802900008129000082290000832900008429000085290000862900008729000088290000892900008a2900008b2900008c2900008d2900008e2900008f290000 + m_AlignBytes: 16 + groupID: 95 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10528 + particle2: 10529 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10529 + particle2: 10530 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10530 + particle2: 10531 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10531 + particle2: 10532 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10532 + particle2: 10533 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10533 + particle2: 10534 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10534 + particle2: 10535 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10535 + particle2: 10536 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10536 + particle2: 10537 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10537 + particle2: 10538 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10538 + particle2: 10539 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &980293276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 980293277} + - component: {fileID: 980293281} + - component: {fileID: 980293280} + - component: {fileID: 980293279} + - component: {fileID: 980293278} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &980293277 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980293276} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &980293278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980293276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 980293281} + m_Target: {fileID: 980293277} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &980293279 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980293276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &980293280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980293276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 95 +--- !u!114 &980293281 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980293276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 902900009129000092290000932900009429000095290000962900009729000098290000992900009a2900009b2900009c2900009d2900009e2900009f290000a0290000a1290000a2290000a3290000a4290000a5290000a6290000a7290000a8290000a9290000aa290000ab290000ac290000ad290000ae290000af290000b0290000b1290000b2290000b3290000b4290000b5290000b6290000b7290000b8290000b9290000ba290000bb290000bc290000bd290000be290000bf290000c0290000c1290000c2290000c3290000c4290000c5290000c6290000c7290000c8290000c9290000ca290000cb290000cc290000cd290000ce290000cf290000d0290000d1290000d2290000d3290000d4290000d5290000d6290000d7290000d8290000d9290000da290000db290000dc290000dd290000de290000df290000e0290000e1290000e2290000e3290000e4290000e5290000e6290000e7290000e8290000e9290000ea290000eb290000ec290000ed290000ee290000ef290000f0290000f1290000f2290000f3290000f4290000f5290000f6290000f7290000f8290000f9290000fa290000fb290000fc290000fd290000fe290000ff290000 + m_AlignBytes: 16 + groupID: 96 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10640 + particle2: 10641 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10641 + particle2: 10642 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10642 + particle2: 10643 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10643 + particle2: 10644 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10644 + particle2: 10645 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10645 + particle2: 10646 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10646 + particle2: 10647 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10647 + particle2: 10648 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10648 + particle2: 10649 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10649 + particle2: 10650 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10650 + particle2: 10651 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &983686048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 983686049} + - component: {fileID: 983686053} + - component: {fileID: 983686052} + - component: {fileID: 983686051} + - component: {fileID: 983686050} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &983686049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983686048} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &983686050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983686048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 983686053} + m_Target: {fileID: 983686049} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &983686051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983686048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &983686052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983686048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 96 +--- !u!114 &983686053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 983686048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 002a0000012a0000022a0000032a0000042a0000052a0000062a0000072a0000082a0000092a00000a2a00000b2a00000c2a00000d2a00000e2a00000f2a0000102a0000112a0000122a0000132a0000142a0000152a0000162a0000172a0000182a0000192a00001a2a00001b2a00001c2a00001d2a00001e2a00001f2a0000202a0000212a0000222a0000232a0000242a0000252a0000262a0000272a0000282a0000292a00002a2a00002b2a00002c2a00002d2a00002e2a00002f2a0000302a0000312a0000322a0000332a0000342a0000352a0000362a0000372a0000382a0000392a00003a2a00003b2a00003c2a00003d2a00003e2a00003f2a0000402a0000412a0000422a0000432a0000442a0000452a0000462a0000472a0000482a0000492a00004a2a00004b2a00004c2a00004d2a00004e2a00004f2a0000502a0000512a0000522a0000532a0000542a0000552a0000562a0000572a0000582a0000592a00005a2a00005b2a00005c2a00005d2a00005e2a00005f2a0000602a0000612a0000622a0000632a0000642a0000652a0000662a0000672a0000682a0000692a00006a2a00006b2a00006c2a00006d2a00006e2a00006f2a0000 + m_AlignBytes: 16 + groupID: 97 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10752 + particle2: 10753 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10753 + particle2: 10754 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10754 + particle2: 10755 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10755 + particle2: 10756 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10756 + particle2: 10757 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10757 + particle2: 10758 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10758 + particle2: 10759 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10759 + particle2: 10760 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10760 + particle2: 10761 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10761 + particle2: 10762 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10762 + particle2: 10763 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &990019827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 990019828} + - component: {fileID: 990019832} + - component: {fileID: 990019831} + - component: {fileID: 990019830} + - component: {fileID: 990019829} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &990019828 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990019827} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &990019829 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990019827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 990019832} + m_Target: {fileID: 990019828} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &990019830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990019827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &990019831 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990019827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 97 +--- !u!114 &990019832 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990019827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 702a0000712a0000722a0000732a0000742a0000752a0000762a0000772a0000782a0000792a00007a2a00007b2a00007c2a00007d2a00007e2a00007f2a0000802a0000812a0000822a0000832a0000842a0000852a0000862a0000872a0000882a0000892a00008a2a00008b2a00008c2a00008d2a00008e2a00008f2a0000902a0000912a0000922a0000932a0000942a0000952a0000962a0000972a0000982a0000992a00009a2a00009b2a00009c2a00009d2a00009e2a00009f2a0000a02a0000a12a0000a22a0000a32a0000a42a0000a52a0000a62a0000a72a0000a82a0000a92a0000aa2a0000ab2a0000ac2a0000ad2a0000ae2a0000af2a0000b02a0000b12a0000b22a0000b32a0000b42a0000b52a0000b62a0000b72a0000b82a0000b92a0000ba2a0000bb2a0000bc2a0000bd2a0000be2a0000bf2a0000c02a0000c12a0000c22a0000c32a0000c42a0000c52a0000c62a0000c72a0000c82a0000c92a0000ca2a0000cb2a0000cc2a0000cd2a0000ce2a0000cf2a0000d02a0000d12a0000d22a0000d32a0000d42a0000d52a0000d62a0000d72a0000d82a0000d92a0000da2a0000db2a0000dc2a0000dd2a0000de2a0000df2a0000 + m_AlignBytes: 16 + groupID: 98 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10864 + particle2: 10865 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10865 + particle2: 10866 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10866 + particle2: 10867 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10867 + particle2: 10868 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10868 + particle2: 10869 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10869 + particle2: 10870 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10870 + particle2: 10871 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10871 + particle2: 10872 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10872 + particle2: 10873 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10873 + particle2: 10874 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10874 + particle2: 10875 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1001012757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1001012758} + - component: {fileID: 1001012762} + - component: {fileID: 1001012761} + - component: {fileID: 1001012760} + - component: {fileID: 1001012759} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1001012758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001012757} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1001012759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001012757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1001012762} + m_Target: {fileID: 1001012758} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1001012760 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001012757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1001012761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001012757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 98 +--- !u!114 &1001012762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001012757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e02a0000e12a0000e22a0000e32a0000e42a0000e52a0000e62a0000e72a0000e82a0000e92a0000ea2a0000eb2a0000ec2a0000ed2a0000ee2a0000ef2a0000f02a0000f12a0000f22a0000f32a0000f42a0000f52a0000f62a0000f72a0000f82a0000f92a0000fa2a0000fb2a0000fc2a0000fd2a0000fe2a0000ff2a0000002b0000012b0000022b0000032b0000042b0000052b0000062b0000072b0000082b0000092b00000a2b00000b2b00000c2b00000d2b00000e2b00000f2b0000102b0000112b0000122b0000132b0000142b0000152b0000162b0000172b0000182b0000192b00001a2b00001b2b00001c2b00001d2b00001e2b00001f2b0000202b0000212b0000222b0000232b0000242b0000252b0000262b0000272b0000282b0000292b00002a2b00002b2b00002c2b00002d2b00002e2b00002f2b0000302b0000312b0000322b0000332b0000342b0000352b0000362b0000372b0000382b0000392b00003a2b00003b2b00003c2b00003d2b00003e2b00003f2b0000402b0000412b0000422b0000432b0000442b0000452b0000462b0000472b0000482b0000492b00004a2b00004b2b00004c2b00004d2b00004e2b00004f2b0000 + m_AlignBytes: 16 + groupID: 99 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 10976 + particle2: 10977 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 10977 + particle2: 10978 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 10978 + particle2: 10979 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 10979 + particle2: 10980 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 10980 + particle2: 10981 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 10981 + particle2: 10982 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 10982 + particle2: 10983 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 10983 + particle2: 10984 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 10984 + particle2: 10985 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 10985 + particle2: 10986 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10986 + particle2: 10987 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1001514667 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1001514668} + - component: {fileID: 1001514672} + - component: {fileID: 1001514671} + - component: {fileID: 1001514670} + - component: {fileID: 1001514669} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1001514668 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001514667} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1001514669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001514667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1001514672} + m_Target: {fileID: 1001514668} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1001514670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001514667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1001514671 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001514667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 99 +--- !u!114 &1001514672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1001514667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 502b0000512b0000522b0000532b0000542b0000552b0000562b0000572b0000582b0000592b00005a2b00005b2b00005c2b00005d2b00005e2b00005f2b0000602b0000612b0000622b0000632b0000642b0000652b0000662b0000672b0000682b0000692b00006a2b00006b2b00006c2b00006d2b00006e2b00006f2b0000702b0000712b0000722b0000732b0000742b0000752b0000762b0000772b0000782b0000792b00007a2b00007b2b00007c2b00007d2b00007e2b00007f2b0000802b0000812b0000822b0000832b0000842b0000852b0000862b0000872b0000882b0000892b00008a2b00008b2b00008c2b00008d2b00008e2b00008f2b0000902b0000912b0000922b0000932b0000942b0000952b0000962b0000972b0000982b0000992b00009a2b00009b2b00009c2b00009d2b00009e2b00009f2b0000a02b0000a12b0000a22b0000a32b0000a42b0000a52b0000a62b0000a72b0000a82b0000a92b0000aa2b0000ab2b0000ac2b0000ad2b0000ae2b0000af2b0000b02b0000b12b0000b22b0000b32b0000b42b0000b52b0000b62b0000b72b0000b82b0000b92b0000ba2b0000bb2b0000bc2b0000bd2b0000be2b0000bf2b0000 + m_AlignBytes: 16 + groupID: 100 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11088 + particle2: 11089 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11089 + particle2: 11090 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11090 + particle2: 11091 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11091 + particle2: 11092 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11092 + particle2: 11093 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11093 + particle2: 11094 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11094 + particle2: 11095 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11095 + particle2: 11096 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11096 + particle2: 11097 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11097 + particle2: 11098 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11098 + particle2: 11099 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1002464891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1002464896} + - component: {fileID: 1002464895} + - component: {fileID: 1002464893} + - component: {fileID: 1002464892} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1002464892 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 +--- !u!124 &1002464893 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 +--- !u!20 &1002464895 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 75 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1002464896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + serializedVersion: 2 + m_LocalRotation: {x: 0.14555489, y: 0.3786732, z: -0.060435172, w: 0.9120132} + m_LocalPosition: {x: -3.68, y: 4.2, z: -4.1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 18.136, y: 45.097, z: 0} +--- !u!1 &1022784182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1022784183} + - component: {fileID: 1022784187} + - component: {fileID: 1022784186} + - component: {fileID: 1022784185} + - component: {fileID: 1022784184} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1022784183 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022784182} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1022784184 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022784182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1022784187} + m_Target: {fileID: 1022784183} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1022784185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022784182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1022784186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022784182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 100 +--- !u!114 &1022784187 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022784182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c02b0000c12b0000c22b0000c32b0000c42b0000c52b0000c62b0000c72b0000c82b0000c92b0000ca2b0000cb2b0000cc2b0000cd2b0000ce2b0000cf2b0000d02b0000d12b0000d22b0000d32b0000d42b0000d52b0000d62b0000d72b0000d82b0000d92b0000da2b0000db2b0000dc2b0000dd2b0000de2b0000df2b0000e02b0000e12b0000e22b0000e32b0000e42b0000e52b0000e62b0000e72b0000e82b0000e92b0000ea2b0000eb2b0000ec2b0000ed2b0000ee2b0000ef2b0000f02b0000f12b0000f22b0000f32b0000f42b0000f52b0000f62b0000f72b0000f82b0000f92b0000fa2b0000fb2b0000fc2b0000fd2b0000fe2b0000ff2b0000002c0000012c0000022c0000032c0000042c0000052c0000062c0000072c0000082c0000092c00000a2c00000b2c00000c2c00000d2c00000e2c00000f2c0000102c0000112c0000122c0000132c0000142c0000152c0000162c0000172c0000182c0000192c00001a2c00001b2c00001c2c00001d2c00001e2c00001f2c0000202c0000212c0000222c0000232c0000242c0000252c0000262c0000272c0000282c0000292c00002a2c00002b2c00002c2c00002d2c00002e2c00002f2c0000 + m_AlignBytes: 16 + groupID: 101 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11200 + particle2: 11201 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11201 + particle2: 11202 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11202 + particle2: 11203 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11203 + particle2: 11204 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11204 + particle2: 11205 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11205 + particle2: 11206 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11206 + particle2: 11207 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11207 + particle2: 11208 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11208 + particle2: 11209 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11209 + particle2: 11210 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11210 + particle2: 11211 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1027659675 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1027659676} + m_Layer: 0 + m_Name: Group + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1027659676 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1027659675} + serializedVersion: 2 + m_LocalRotation: {x: 0.0008726948, y: 0, z: 0, w: 0.99999964} + m_LocalPosition: {x: -1.11, y: 1.59, z: 1.61} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2009678977} + - {fileID: 472161722} + - {fileID: 1306593279} + - {fileID: 1628171963} + - {fileID: 249029318} + - {fileID: 779073863} + - {fileID: 1240601735} + - {fileID: 1640435994} + - {fileID: 893001395} + - {fileID: 1241971666} + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0.1, y: 0, z: 0} +--- !u!1 &1040360818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1040360819} + - component: {fileID: 1040360823} + - component: {fileID: 1040360822} + - component: {fileID: 1040360821} + - component: {fileID: 1040360820} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1040360819 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040360818} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1040360820 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040360818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1040360823} + m_Target: {fileID: 1040360819} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1040360821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040360818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1040360822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040360818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 101 +--- !u!114 &1040360823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040360818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 302c0000312c0000322c0000332c0000342c0000352c0000362c0000372c0000382c0000392c00003a2c00003b2c00003c2c00003d2c00003e2c00003f2c0000402c0000412c0000422c0000432c0000442c0000452c0000462c0000472c0000482c0000492c00004a2c00004b2c00004c2c00004d2c00004e2c00004f2c0000502c0000512c0000522c0000532c0000542c0000552c0000562c0000572c0000582c0000592c00005a2c00005b2c00005c2c00005d2c00005e2c00005f2c0000602c0000612c0000622c0000632c0000642c0000652c0000662c0000672c0000682c0000692c00006a2c00006b2c00006c2c00006d2c00006e2c00006f2c0000702c0000712c0000722c0000732c0000742c0000752c0000762c0000772c0000782c0000792c00007a2c00007b2c00007c2c00007d2c00007e2c00007f2c0000802c0000812c0000822c0000832c0000842c0000852c0000862c0000872c0000882c0000892c00008a2c00008b2c00008c2c00008d2c00008e2c00008f2c0000902c0000912c0000922c0000932c0000942c0000952c0000962c0000972c0000982c0000992c00009a2c00009b2c00009c2c00009d2c00009e2c00009f2c0000 + m_AlignBytes: 16 + groupID: 102 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11312 + particle2: 11313 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11313 + particle2: 11314 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11314 + particle2: 11315 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11315 + particle2: 11316 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11316 + particle2: 11317 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11317 + particle2: 11318 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11318 + particle2: 11319 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11319 + particle2: 11320 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11320 + particle2: 11321 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11321 + particle2: 11322 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11322 + particle2: 11323 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1058904399 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1058904400} + - component: {fileID: 1058904404} + - component: {fileID: 1058904403} + - component: {fileID: 1058904402} + - component: {fileID: 1058904401} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1058904400 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058904399} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1058904401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058904399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1058904404} + m_Target: {fileID: 1058904400} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1058904402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058904399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1058904403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058904399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 102 +--- !u!114 &1058904404 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1058904399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a02c0000a12c0000a22c0000a32c0000a42c0000a52c0000a62c0000a72c0000a82c0000a92c0000aa2c0000ab2c0000ac2c0000ad2c0000ae2c0000af2c0000b02c0000b12c0000b22c0000b32c0000b42c0000b52c0000b62c0000b72c0000b82c0000b92c0000ba2c0000bb2c0000bc2c0000bd2c0000be2c0000bf2c0000c02c0000c12c0000c22c0000c32c0000c42c0000c52c0000c62c0000c72c0000c82c0000c92c0000ca2c0000cb2c0000cc2c0000cd2c0000ce2c0000cf2c0000d02c0000d12c0000d22c0000d32c0000d42c0000d52c0000d62c0000d72c0000d82c0000d92c0000da2c0000db2c0000dc2c0000dd2c0000de2c0000df2c0000e02c0000e12c0000e22c0000e32c0000e42c0000e52c0000e62c0000e72c0000e82c0000e92c0000ea2c0000eb2c0000ec2c0000ed2c0000ee2c0000ef2c0000f02c0000f12c0000f22c0000f32c0000f42c0000f52c0000f62c0000f72c0000f82c0000f92c0000fa2c0000fb2c0000fc2c0000fd2c0000fe2c0000ff2c0000002d0000012d0000022d0000032d0000042d0000052d0000062d0000072d0000082d0000092d00000a2d00000b2d00000c2d00000d2d00000e2d00000f2d0000 + m_AlignBytes: 16 + groupID: 103 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11424 + particle2: 11425 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11425 + particle2: 11426 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11426 + particle2: 11427 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11427 + particle2: 11428 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11428 + particle2: 11429 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11429 + particle2: 11430 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11430 + particle2: 11431 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11431 + particle2: 11432 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11432 + particle2: 11433 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11433 + particle2: 11434 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11434 + particle2: 11435 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1061430264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1061430265} + - component: {fileID: 1061430269} + - component: {fileID: 1061430268} + - component: {fileID: 1061430267} + - component: {fileID: 1061430266} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1061430265 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061430264} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1061430266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061430264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1061430269} + m_Target: {fileID: 1061430265} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1061430267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061430264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1061430268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061430264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 103 +--- !u!114 &1061430269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1061430264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 102d0000112d0000122d0000132d0000142d0000152d0000162d0000172d0000182d0000192d00001a2d00001b2d00001c2d00001d2d00001e2d00001f2d0000202d0000212d0000222d0000232d0000242d0000252d0000262d0000272d0000282d0000292d00002a2d00002b2d00002c2d00002d2d00002e2d00002f2d0000302d0000312d0000322d0000332d0000342d0000352d0000362d0000372d0000382d0000392d00003a2d00003b2d00003c2d00003d2d00003e2d00003f2d0000402d0000412d0000422d0000432d0000442d0000452d0000462d0000472d0000482d0000492d00004a2d00004b2d00004c2d00004d2d00004e2d00004f2d0000502d0000512d0000522d0000532d0000542d0000552d0000562d0000572d0000582d0000592d00005a2d00005b2d00005c2d00005d2d00005e2d00005f2d0000602d0000612d0000622d0000632d0000642d0000652d0000662d0000672d0000682d0000692d00006a2d00006b2d00006c2d00006d2d00006e2d00006f2d0000702d0000712d0000722d0000732d0000742d0000752d0000762d0000772d0000782d0000792d00007a2d00007b2d00007c2d00007d2d00007e2d00007f2d0000 + m_AlignBytes: 16 + groupID: 104 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11536 + particle2: 11537 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11537 + particle2: 11538 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11538 + particle2: 11539 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11539 + particle2: 11540 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11540 + particle2: 11541 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11541 + particle2: 11542 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11542 + particle2: 11543 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11543 + particle2: 11544 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11544 + particle2: 11545 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11545 + particle2: 11546 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11546 + particle2: 11547 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1062536480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1062536481} + m_Layer: 0 + m_Name: Row (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1062536481 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062536480} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.6} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1098754171} + - {fileID: 1107509114} + - {fileID: 1121401526} + - {fileID: 139383575} + - {fileID: 1621912098} + - {fileID: 1440395744} + - {fileID: 869213058} + - {fileID: 2058503950} + - {fileID: 949070424} + - {fileID: 156100545} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1084473019 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1084473020} + - component: {fileID: 1084473024} + - component: {fileID: 1084473023} + - component: {fileID: 1084473022} + - component: {fileID: 1084473021} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1084473020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1084473019} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1084473021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1084473019} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1084473024} + m_Target: {fileID: 1084473020} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1084473022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1084473019} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1084473023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1084473019} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 104 +--- !u!114 &1084473024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1084473019} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 802d0000812d0000822d0000832d0000842d0000852d0000862d0000872d0000882d0000892d00008a2d00008b2d00008c2d00008d2d00008e2d00008f2d0000902d0000912d0000922d0000932d0000942d0000952d0000962d0000972d0000982d0000992d00009a2d00009b2d00009c2d00009d2d00009e2d00009f2d0000a02d0000a12d0000a22d0000a32d0000a42d0000a52d0000a62d0000a72d0000a82d0000a92d0000aa2d0000ab2d0000ac2d0000ad2d0000ae2d0000af2d0000b02d0000b12d0000b22d0000b32d0000b42d0000b52d0000b62d0000b72d0000b82d0000b92d0000ba2d0000bb2d0000bc2d0000bd2d0000be2d0000bf2d0000c02d0000c12d0000c22d0000c32d0000c42d0000c52d0000c62d0000c72d0000c82d0000c92d0000ca2d0000cb2d0000cc2d0000cd2d0000ce2d0000cf2d0000d02d0000d12d0000d22d0000d32d0000d42d0000d52d0000d62d0000d72d0000d82d0000d92d0000da2d0000db2d0000dc2d0000dd2d0000de2d0000df2d0000e02d0000e12d0000e22d0000e32d0000e42d0000e52d0000e62d0000e72d0000e82d0000e92d0000ea2d0000eb2d0000ec2d0000ed2d0000ee2d0000ef2d0000 + m_AlignBytes: 16 + groupID: 105 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11648 + particle2: 11649 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11649 + particle2: 11650 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11650 + particle2: 11651 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11651 + particle2: 11652 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11652 + particle2: 11653 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11653 + particle2: 11654 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11654 + particle2: 11655 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11655 + particle2: 11656 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11656 + particle2: 11657 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11657 + particle2: 11658 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11658 + particle2: 11659 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1092735639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1092735640} + - component: {fileID: 1092735644} + - component: {fileID: 1092735643} + - component: {fileID: 1092735642} + - component: {fileID: 1092735641} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1092735640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092735639} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1092735641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092735639} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1092735644} + m_Target: {fileID: 1092735640} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1092735642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092735639} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1092735643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092735639} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 105 +--- !u!114 &1092735644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092735639} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f02d0000f12d0000f22d0000f32d0000f42d0000f52d0000f62d0000f72d0000f82d0000f92d0000fa2d0000fb2d0000fc2d0000fd2d0000fe2d0000ff2d0000002e0000012e0000022e0000032e0000042e0000052e0000062e0000072e0000082e0000092e00000a2e00000b2e00000c2e00000d2e00000e2e00000f2e0000102e0000112e0000122e0000132e0000142e0000152e0000162e0000172e0000182e0000192e00001a2e00001b2e00001c2e00001d2e00001e2e00001f2e0000202e0000212e0000222e0000232e0000242e0000252e0000262e0000272e0000282e0000292e00002a2e00002b2e00002c2e00002d2e00002e2e00002f2e0000302e0000312e0000322e0000332e0000342e0000352e0000362e0000372e0000382e0000392e00003a2e00003b2e00003c2e00003d2e00003e2e00003f2e0000402e0000412e0000422e0000432e0000442e0000452e0000462e0000472e0000482e0000492e00004a2e00004b2e00004c2e00004d2e00004e2e00004f2e0000502e0000512e0000522e0000532e0000542e0000552e0000562e0000572e0000582e0000592e00005a2e00005b2e00005c2e00005d2e00005e2e00005f2e0000 + m_AlignBytes: 16 + groupID: 106 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11760 + particle2: 11761 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11761 + particle2: 11762 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11762 + particle2: 11763 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11763 + particle2: 11764 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11764 + particle2: 11765 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11765 + particle2: 11766 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11766 + particle2: 11767 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11767 + particle2: 11768 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11768 + particle2: 11769 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11769 + particle2: 11770 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11770 + particle2: 11771 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1098754170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1098754171} + - component: {fileID: 1098754175} + - component: {fileID: 1098754174} + - component: {fileID: 1098754173} + - component: {fileID: 1098754172} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1098754171 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098754170} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1098754172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098754170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1098754175} + m_Target: {fileID: 1098754171} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1098754173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098754170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1098754174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098754170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 106 +--- !u!114 &1098754175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098754170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 602e0000612e0000622e0000632e0000642e0000652e0000662e0000672e0000682e0000692e00006a2e00006b2e00006c2e00006d2e00006e2e00006f2e0000702e0000712e0000722e0000732e0000742e0000752e0000762e0000772e0000782e0000792e00007a2e00007b2e00007c2e00007d2e00007e2e00007f2e0000802e0000812e0000822e0000832e0000842e0000852e0000862e0000872e0000882e0000892e00008a2e00008b2e00008c2e00008d2e00008e2e00008f2e0000902e0000912e0000922e0000932e0000942e0000952e0000962e0000972e0000982e0000992e00009a2e00009b2e00009c2e00009d2e00009e2e00009f2e0000a02e0000a12e0000a22e0000a32e0000a42e0000a52e0000a62e0000a72e0000a82e0000a92e0000aa2e0000ab2e0000ac2e0000ad2e0000ae2e0000af2e0000b02e0000b12e0000b22e0000b32e0000b42e0000b52e0000b62e0000b72e0000b82e0000b92e0000ba2e0000bb2e0000bc2e0000bd2e0000be2e0000bf2e0000c02e0000c12e0000c22e0000c32e0000c42e0000c52e0000c62e0000c72e0000c82e0000c92e0000ca2e0000cb2e0000cc2e0000cd2e0000ce2e0000cf2e0000 + m_AlignBytes: 16 + groupID: 107 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11872 + particle2: 11873 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11873 + particle2: 11874 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11874 + particle2: 11875 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11875 + particle2: 11876 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11876 + particle2: 11877 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11877 + particle2: 11878 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11878 + particle2: 11879 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11879 + particle2: 11880 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11880 + particle2: 11881 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11881 + particle2: 11882 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11882 + particle2: 11883 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1100467795 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1100467796} + - component: {fileID: 1100467800} + - component: {fileID: 1100467799} + - component: {fileID: 1100467798} + - component: {fileID: 1100467797} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1100467796 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100467795} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1100467797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100467795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1100467800} + m_Target: {fileID: 1100467796} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1100467798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100467795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1100467799 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100467795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 107 +--- !u!114 &1100467800 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100467795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d02e0000d12e0000d22e0000d32e0000d42e0000d52e0000d62e0000d72e0000d82e0000d92e0000da2e0000db2e0000dc2e0000dd2e0000de2e0000df2e0000e02e0000e12e0000e22e0000e32e0000e42e0000e52e0000e62e0000e72e0000e82e0000e92e0000ea2e0000eb2e0000ec2e0000ed2e0000ee2e0000ef2e0000f02e0000f12e0000f22e0000f32e0000f42e0000f52e0000f62e0000f72e0000f82e0000f92e0000fa2e0000fb2e0000fc2e0000fd2e0000fe2e0000ff2e0000002f0000012f0000022f0000032f0000042f0000052f0000062f0000072f0000082f0000092f00000a2f00000b2f00000c2f00000d2f00000e2f00000f2f0000102f0000112f0000122f0000132f0000142f0000152f0000162f0000172f0000182f0000192f00001a2f00001b2f00001c2f00001d2f00001e2f00001f2f0000202f0000212f0000222f0000232f0000242f0000252f0000262f0000272f0000282f0000292f00002a2f00002b2f00002c2f00002d2f00002e2f00002f2f0000302f0000312f0000322f0000332f0000342f0000352f0000362f0000372f0000382f0000392f00003a2f00003b2f00003c2f00003d2f00003e2f00003f2f0000 + m_AlignBytes: 16 + groupID: 108 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 11984 + particle2: 11985 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 11985 + particle2: 11986 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 11986 + particle2: 11987 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 11987 + particle2: 11988 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 11988 + particle2: 11989 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 11989 + particle2: 11990 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 11990 + particle2: 11991 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 11991 + particle2: 11992 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 11992 + particle2: 11993 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 11993 + particle2: 11994 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 11994 + particle2: 11995 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1101870349 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101870350} + - component: {fileID: 1101870354} + - component: {fileID: 1101870353} + - component: {fileID: 1101870352} + - component: {fileID: 1101870351} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1101870350 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101870349} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1101870351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101870349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1101870354} + m_Target: {fileID: 1101870350} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1101870352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101870349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1101870353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101870349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 108 +--- !u!114 &1101870354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101870349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 402f0000412f0000422f0000432f0000442f0000452f0000462f0000472f0000482f0000492f00004a2f00004b2f00004c2f00004d2f00004e2f00004f2f0000502f0000512f0000522f0000532f0000542f0000552f0000562f0000572f0000582f0000592f00005a2f00005b2f00005c2f00005d2f00005e2f00005f2f0000602f0000612f0000622f0000632f0000642f0000652f0000662f0000672f0000682f0000692f00006a2f00006b2f00006c2f00006d2f00006e2f00006f2f0000702f0000712f0000722f0000732f0000742f0000752f0000762f0000772f0000782f0000792f00007a2f00007b2f00007c2f00007d2f00007e2f00007f2f0000802f0000812f0000822f0000832f0000842f0000852f0000862f0000872f0000882f0000892f00008a2f00008b2f00008c2f00008d2f00008e2f00008f2f0000902f0000912f0000922f0000932f0000942f0000952f0000962f0000972f0000982f0000992f00009a2f00009b2f00009c2f00009d2f00009e2f00009f2f0000a02f0000a12f0000a22f0000a32f0000a42f0000a52f0000a62f0000a72f0000a82f0000a92f0000aa2f0000ab2f0000ac2f0000ad2f0000ae2f0000af2f0000 + m_AlignBytes: 16 + groupID: 109 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12096 + particle2: 12097 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12097 + particle2: 12098 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12098 + particle2: 12099 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12099 + particle2: 12100 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12100 + particle2: 12101 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12101 + particle2: 12102 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12102 + particle2: 12103 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12103 + particle2: 12104 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 12104 + particle2: 12105 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 12105 + particle2: 12106 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 12106 + particle2: 12107 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1107509113 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1107509114} + - component: {fileID: 1107509118} + - component: {fileID: 1107509117} + - component: {fileID: 1107509116} + - component: {fileID: 1107509115} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1107509114 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107509113} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1107509115 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107509113} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1107509118} + m_Target: {fileID: 1107509114} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1107509116 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107509113} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1107509117 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107509113} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 109 +--- !u!114 &1107509118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1107509113} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b02f0000b12f0000b22f0000b32f0000b42f0000b52f0000b62f0000b72f0000b82f0000b92f0000ba2f0000bb2f0000bc2f0000bd2f0000be2f0000bf2f0000c02f0000c12f0000c22f0000c32f0000c42f0000c52f0000c62f0000c72f0000c82f0000c92f0000ca2f0000cb2f0000cc2f0000cd2f0000ce2f0000cf2f0000d02f0000d12f0000d22f0000d32f0000d42f0000d52f0000d62f0000d72f0000d82f0000d92f0000da2f0000db2f0000dc2f0000dd2f0000de2f0000df2f0000e02f0000e12f0000e22f0000e32f0000e42f0000e52f0000e62f0000e72f0000e82f0000e92f0000ea2f0000eb2f0000ec2f0000ed2f0000ee2f0000ef2f0000f02f0000f12f0000f22f0000f32f0000f42f0000f52f0000f62f0000f72f0000f82f0000f92f0000fa2f0000fb2f0000fc2f0000fd2f0000fe2f0000ff2f0000003000000130000002300000033000000430000005300000063000000730000008300000093000000a3000000b3000000c3000000d3000000e3000000f300000103000001130000012300000133000001430000015300000163000001730000018300000193000001a3000001b3000001c3000001d3000001e3000001f300000 + m_AlignBytes: 16 + groupID: 110 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12208 + particle2: 12209 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12209 + particle2: 12210 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12210 + particle2: 12211 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12211 + particle2: 12212 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12212 + particle2: 12213 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12213 + particle2: 12214 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12214 + particle2: 12215 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12215 + particle2: 12216 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 12216 + particle2: 12217 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 12217 + particle2: 12218 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 12218 + particle2: 12219 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1117186088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1117186089} + - component: {fileID: 1117186093} + - component: {fileID: 1117186092} + - component: {fileID: 1117186091} + - component: {fileID: 1117186090} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1117186089 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1117186088} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1117186090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1117186088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1117186093} + m_Target: {fileID: 1117186089} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1117186091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1117186088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1117186092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1117186088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 110 +--- !u!114 &1117186093 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1117186088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 203000002130000022300000233000002430000025300000263000002730000028300000293000002a3000002b3000002c3000002d3000002e3000002f300000303000003130000032300000333000003430000035300000363000003730000038300000393000003a3000003b3000003c3000003d3000003e3000003f300000403000004130000042300000433000004430000045300000463000004730000048300000493000004a3000004b3000004c3000004d3000004e3000004f300000503000005130000052300000533000005430000055300000563000005730000058300000593000005a3000005b3000005c3000005d3000005e3000005f300000603000006130000062300000633000006430000065300000663000006730000068300000693000006a3000006b3000006c3000006d3000006e3000006f300000703000007130000072300000733000007430000075300000763000007730000078300000793000007a3000007b3000007c3000007d3000007e3000007f300000803000008130000082300000833000008430000085300000863000008730000088300000893000008a3000008b3000008c3000008d3000008e3000008f300000 + m_AlignBytes: 16 + groupID: 111 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12320 + particle2: 12321 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12321 + particle2: 12322 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12322 + particle2: 12323 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12323 + particle2: 12324 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12324 + particle2: 12325 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12325 + particle2: 12326 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12326 + particle2: 12327 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12327 + particle2: 12328 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 12328 + particle2: 12329 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 12329 + particle2: 12330 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 12330 + particle2: 12331 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1121401525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1121401526} + - component: {fileID: 1121401530} + - component: {fileID: 1121401529} + - component: {fileID: 1121401528} + - component: {fileID: 1121401527} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1121401526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121401525} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1121401527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121401525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1121401530} + m_Target: {fileID: 1121401526} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1121401528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121401525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1121401529 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121401525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 111 +--- !u!114 &1121401530 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121401525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 903000009130000092300000933000009430000095300000963000009730000098300000993000009a3000009b3000009c3000009d3000009e3000009f300000a0300000a1300000a2300000a3300000a4300000a5300000a6300000a7300000a8300000a9300000aa300000ab300000ac300000ad300000ae300000af300000b0300000b1300000b2300000b3300000b4300000b5300000b6300000b7300000b8300000b9300000ba300000bb300000bc300000bd300000be300000bf300000c0300000c1300000c2300000c3300000c4300000c5300000c6300000c7300000c8300000c9300000ca300000cb300000cc300000cd300000ce300000cf300000d0300000d1300000d2300000d3300000d4300000d5300000d6300000d7300000d8300000d9300000da300000db300000dc300000dd300000de300000df300000e0300000e1300000e2300000e3300000e4300000e5300000e6300000e7300000e8300000e9300000ea300000eb300000ec300000ed300000ee300000ef300000f0300000f1300000f2300000f3300000f4300000f5300000f6300000f7300000f8300000f9300000fa300000fb300000fc300000fd300000fe300000ff300000 + m_AlignBytes: 16 + groupID: 112 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12432 + particle2: 12433 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12433 + particle2: 12434 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12434 + particle2: 12435 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12435 + particle2: 12436 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12436 + particle2: 12437 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12437 + particle2: 12438 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12438 + particle2: 12439 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12439 + particle2: 12440 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 12440 + particle2: 12441 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 12441 + particle2: 12442 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 12442 + particle2: 12443 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1143427709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1143427710} + - component: {fileID: 1143427714} + - component: {fileID: 1143427713} + - component: {fileID: 1143427712} + - component: {fileID: 1143427711} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1143427710 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143427709} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1143427711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143427709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1143427714} + m_Target: {fileID: 1143427710} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1143427712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143427709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1143427713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143427709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 112 +--- !u!114 &1143427714 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143427709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 003100000131000002310000033100000431000005310000063100000731000008310000093100000a3100000b3100000c3100000d3100000e3100000f310000103100001131000012310000133100001431000015310000163100001731000018310000193100001a3100001b3100001c3100001d3100001e3100001f310000203100002131000022310000233100002431000025310000263100002731000028310000293100002a3100002b3100002c3100002d3100002e3100002f310000303100003131000032310000333100003431000035310000363100003731000038310000393100003a3100003b3100003c3100003d3100003e3100003f310000403100004131000042310000433100004431000045310000463100004731000048310000493100004a3100004b3100004c3100004d3100004e3100004f310000503100005131000052310000533100005431000055310000563100005731000058310000593100005a3100005b3100005c3100005d3100005e3100005f310000603100006131000062310000633100006431000065310000663100006731000068310000693100006a3100006b3100006c3100006d3100006e3100006f310000 + m_AlignBytes: 16 + groupID: 113 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12544 + particle2: 12545 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12545 + particle2: 12546 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12546 + particle2: 12547 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12547 + particle2: 12548 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12548 + particle2: 12549 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12549 + particle2: 12550 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12550 + particle2: 12551 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12551 + particle2: 12552 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 12552 + particle2: 12553 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 12553 + particle2: 12554 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 12554 + particle2: 12555 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1143771885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1143771886} + - component: {fileID: 1143771890} + - component: {fileID: 1143771889} + - component: {fileID: 1143771888} + - component: {fileID: 1143771887} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1143771886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143771885} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1143771887 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143771885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1143771890} + m_Target: {fileID: 1143771886} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1143771888 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143771885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1143771889 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143771885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 113 +--- !u!114 &1143771890 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143771885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 703100007131000072310000733100007431000075310000763100007731000078310000793100007a3100007b3100007c3100007d3100007e3100007f310000803100008131000082310000833100008431000085310000863100008731000088310000893100008a3100008b3100008c3100008d3100008e3100008f310000903100009131000092310000933100009431000095310000963100009731000098310000993100009a3100009b3100009c3100009d3100009e3100009f310000a0310000a1310000a2310000a3310000a4310000a5310000a6310000a7310000a8310000a9310000aa310000ab310000ac310000ad310000ae310000af310000b0310000b1310000b2310000b3310000b4310000b5310000b6310000b7310000b8310000b9310000ba310000bb310000bc310000bd310000be310000bf310000c0310000c1310000c2310000c3310000c4310000c5310000c6310000c7310000c8310000c9310000ca310000cb310000cc310000cd310000ce310000cf310000d0310000d1310000d2310000d3310000d4310000d5310000d6310000d7310000d8310000d9310000da310000db310000dc310000dd310000de310000df310000 + m_AlignBytes: 16 + groupID: 114 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12656 + particle2: 12657 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12657 + particle2: 12658 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12658 + particle2: 12659 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12659 + particle2: 12660 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12660 + particle2: 12661 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12661 + particle2: 12662 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12662 + particle2: 12663 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12663 + particle2: 12664 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 12664 + particle2: 12665 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 12665 + particle2: 12666 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 12666 + particle2: 12667 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1152767234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1152767235} + - component: {fileID: 1152767239} + - component: {fileID: 1152767238} + - component: {fileID: 1152767237} + - component: {fileID: 1152767236} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1152767235 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152767234} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1152767236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152767234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1152767239} + m_Target: {fileID: 1152767235} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1152767237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152767234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1152767238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152767234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 114 +--- !u!114 &1152767239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152767234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0310000e1310000e2310000e3310000e4310000e5310000e6310000e7310000e8310000e9310000ea310000eb310000ec310000ed310000ee310000ef310000f0310000f1310000f2310000f3310000f4310000f5310000f6310000f7310000f8310000f9310000fa310000fb310000fc310000fd310000fe310000ff310000003200000132000002320000033200000432000005320000063200000732000008320000093200000a3200000b3200000c3200000d3200000e3200000f320000103200001132000012320000133200001432000015320000163200001732000018320000193200001a3200001b3200001c3200001d3200001e3200001f320000203200002132000022320000233200002432000025320000263200002732000028320000293200002a3200002b3200002c3200002d3200002e3200002f320000303200003132000032320000333200003432000035320000363200003732000038320000393200003a3200003b3200003c3200003d3200003e3200003f320000403200004132000042320000433200004432000045320000463200004732000048320000493200004a3200004b3200004c3200004d3200004e3200004f320000 + m_AlignBytes: 16 + groupID: 115 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12768 + particle2: 12769 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12769 + particle2: 12770 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12770 + particle2: 12771 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12771 + particle2: 12772 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12772 + particle2: 12773 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12773 + particle2: 12774 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12774 + particle2: 12775 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12775 + particle2: 12776 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 12776 + particle2: 12777 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 12777 + particle2: 12778 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 12778 + particle2: 12779 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1153529339 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1153529340} + - component: {fileID: 1153529344} + - component: {fileID: 1153529343} + - component: {fileID: 1153529342} + - component: {fileID: 1153529341} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1153529340 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153529339} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1153529341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153529339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1153529344} + m_Target: {fileID: 1153529340} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1153529342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153529339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1153529343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153529339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 115 +--- !u!114 &1153529344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153529339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 503200005132000052320000533200005432000055320000563200005732000058320000593200005a3200005b3200005c3200005d3200005e3200005f320000603200006132000062320000633200006432000065320000663200006732000068320000693200006a3200006b3200006c3200006d3200006e3200006f320000703200007132000072320000733200007432000075320000763200007732000078320000793200007a3200007b3200007c3200007d3200007e3200007f320000803200008132000082320000833200008432000085320000863200008732000088320000893200008a3200008b3200008c3200008d3200008e3200008f320000903200009132000092320000933200009432000095320000963200009732000098320000993200009a3200009b3200009c3200009d3200009e3200009f320000a0320000a1320000a2320000a3320000a4320000a5320000a6320000a7320000a8320000a9320000aa320000ab320000ac320000ad320000ae320000af320000b0320000b1320000b2320000b3320000b4320000b5320000b6320000b7320000b8320000b9320000ba320000bb320000bc320000bd320000be320000bf320000 + m_AlignBytes: 16 + groupID: 116 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12880 + particle2: 12881 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12881 + particle2: 12882 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12882 + particle2: 12883 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12883 + particle2: 12884 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12884 + particle2: 12885 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12885 + particle2: 12886 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12886 + particle2: 12887 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12887 + particle2: 12888 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 12888 + particle2: 12889 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 12889 + particle2: 12890 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 12890 + particle2: 12891 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1175446144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1175446146} + - component: {fileID: 1175446145} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1175446145 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.03 + m_NormalBias: 0.01 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + serializedVersion: 2 + m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} +--- !u!1 &1189976173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1189976174} + - component: {fileID: 1189976178} + - component: {fileID: 1189976177} + - component: {fileID: 1189976176} + - component: {fileID: 1189976175} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1189976174 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189976173} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1189976175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189976173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1189976178} + m_Target: {fileID: 1189976174} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1189976176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189976173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1189976177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189976173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 116 +--- !u!114 &1189976178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189976173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0320000c1320000c2320000c3320000c4320000c5320000c6320000c7320000c8320000c9320000ca320000cb320000cc320000cd320000ce320000cf320000d0320000d1320000d2320000d3320000d4320000d5320000d6320000d7320000d8320000d9320000da320000db320000dc320000dd320000de320000df320000e0320000e1320000e2320000e3320000e4320000e5320000e6320000e7320000e8320000e9320000ea320000eb320000ec320000ed320000ee320000ef320000f0320000f1320000f2320000f3320000f4320000f5320000f6320000f7320000f8320000f9320000fa320000fb320000fc320000fd320000fe320000ff320000003300000133000002330000033300000433000005330000063300000733000008330000093300000a3300000b3300000c3300000d3300000e3300000f330000103300001133000012330000133300001433000015330000163300001733000018330000193300001a3300001b3300001c3300001d3300001e3300001f330000203300002133000022330000233300002433000025330000263300002733000028330000293300002a3300002b3300002c3300002d3300002e3300002f330000 + m_AlignBytes: 16 + groupID: 117 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 12992 + particle2: 12993 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 12993 + particle2: 12994 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 12994 + particle2: 12995 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 12995 + particle2: 12996 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 12996 + particle2: 12997 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 12997 + particle2: 12998 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 12998 + particle2: 12999 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 12999 + particle2: 13000 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13000 + particle2: 13001 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13001 + particle2: 13002 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13002 + particle2: 13003 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1228595149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1228595150} + - component: {fileID: 1228595154} + - component: {fileID: 1228595153} + - component: {fileID: 1228595152} + - component: {fileID: 1228595151} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1228595150 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228595149} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1228595151 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228595149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1228595154} + m_Target: {fileID: 1228595150} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1228595152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228595149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1228595153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228595149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 117 +--- !u!114 &1228595154 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228595149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 303300003133000032330000333300003433000035330000363300003733000038330000393300003a3300003b3300003c3300003d3300003e3300003f330000403300004133000042330000433300004433000045330000463300004733000048330000493300004a3300004b3300004c3300004d3300004e3300004f330000503300005133000052330000533300005433000055330000563300005733000058330000593300005a3300005b3300005c3300005d3300005e3300005f330000603300006133000062330000633300006433000065330000663300006733000068330000693300006a3300006b3300006c3300006d3300006e3300006f330000703300007133000072330000733300007433000075330000763300007733000078330000793300007a3300007b3300007c3300007d3300007e3300007f330000803300008133000082330000833300008433000085330000863300008733000088330000893300008a3300008b3300008c3300008d3300008e3300008f330000903300009133000092330000933300009433000095330000963300009733000098330000993300009a3300009b3300009c3300009d3300009e3300009f330000 + m_AlignBytes: 16 + groupID: 118 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 13104 + particle2: 13105 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 13105 + particle2: 13106 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 13106 + particle2: 13107 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 13107 + particle2: 13108 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 13108 + particle2: 13109 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13109 + particle2: 13110 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 13110 + particle2: 13111 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 13111 + particle2: 13112 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13112 + particle2: 13113 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13113 + particle2: 13114 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13114 + particle2: 13115 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1237247125 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1237247126} + - component: {fileID: 1237247130} + - component: {fileID: 1237247129} + - component: {fileID: 1237247128} + - component: {fileID: 1237247127} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1237247126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237247125} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1237247127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237247125} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1237247130} + m_Target: {fileID: 1237247126} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1237247128 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237247125} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1237247129 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237247125} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 118 +--- !u!114 &1237247130 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1237247125} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0330000a1330000a2330000a3330000a4330000a5330000a6330000a7330000a8330000a9330000aa330000ab330000ac330000ad330000ae330000af330000b0330000b1330000b2330000b3330000b4330000b5330000b6330000b7330000b8330000b9330000ba330000bb330000bc330000bd330000be330000bf330000c0330000c1330000c2330000c3330000c4330000c5330000c6330000c7330000c8330000c9330000ca330000cb330000cc330000cd330000ce330000cf330000d0330000d1330000d2330000d3330000d4330000d5330000d6330000d7330000d8330000d9330000da330000db330000dc330000dd330000de330000df330000e0330000e1330000e2330000e3330000e4330000e5330000e6330000e7330000e8330000e9330000ea330000eb330000ec330000ed330000ee330000ef330000f0330000f1330000f2330000f3330000f4330000f5330000f6330000f7330000f8330000f9330000fa330000fb330000fc330000fd330000fe330000ff330000003400000134000002340000033400000434000005340000063400000734000008340000093400000a3400000b3400000c3400000d3400000e3400000f340000 + m_AlignBytes: 16 + groupID: 119 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 13216 + particle2: 13217 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 13217 + particle2: 13218 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 13218 + particle2: 13219 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 13219 + particle2: 13220 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 13220 + particle2: 13221 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13221 + particle2: 13222 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 13222 + particle2: 13223 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 13223 + particle2: 13224 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13224 + particle2: 13225 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13225 + particle2: 13226 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13226 + particle2: 13227 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1240601734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1240601735} + m_Layer: 0 + m_Name: Row (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1240601735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1240601734} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 941225759} + - {fileID: 1551337444} + - {fileID: 503533459} + - {fileID: 531482358} + - {fileID: 1937961235} + - {fileID: 39329229} + - {fileID: 356687288} + - {fileID: 1288966894} + - {fileID: 1595267027} + - {fileID: 746024797} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1241971665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1241971666} + m_Layer: 0 + m_Name: Row (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1241971666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241971665} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.8} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 949981033} + - {fileID: 1268175475} + - {fileID: 1237247126} + - {fileID: 640325667} + - {fileID: 386703047} + - {fileID: 600063430} + - {fileID: 1336151026} + - {fileID: 1812706183} + - {fileID: 983686049} + - {fileID: 1901308916} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1268175474 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1268175475} + - component: {fileID: 1268175479} + - component: {fileID: 1268175478} + - component: {fileID: 1268175477} + - component: {fileID: 1268175476} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1268175475 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268175474} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1268175476 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268175474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1268175479} + m_Target: {fileID: 1268175475} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1268175477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268175474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1268175478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268175474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 119 +--- !u!114 &1268175479 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268175474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 103400001134000012340000133400001434000015340000163400001734000018340000193400001a3400001b3400001c3400001d3400001e3400001f340000203400002134000022340000233400002434000025340000263400002734000028340000293400002a3400002b3400002c3400002d3400002e3400002f340000303400003134000032340000333400003434000035340000363400003734000038340000393400003a3400003b3400003c3400003d3400003e3400003f340000403400004134000042340000433400004434000045340000463400004734000048340000493400004a3400004b3400004c3400004d3400004e3400004f340000503400005134000052340000533400005434000055340000563400005734000058340000593400005a3400005b3400005c3400005d3400005e3400005f340000603400006134000062340000633400006434000065340000663400006734000068340000693400006a3400006b3400006c3400006d3400006e3400006f340000703400007134000072340000733400007434000075340000763400007734000078340000793400007a3400007b3400007c3400007d3400007e3400007f340000 + m_AlignBytes: 16 + groupID: 120 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 13328 + particle2: 13329 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 13329 + particle2: 13330 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 13330 + particle2: 13331 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 13331 + particle2: 13332 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 13332 + particle2: 13333 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13333 + particle2: 13334 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 13334 + particle2: 13335 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 13335 + particle2: 13336 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13336 + particle2: 13337 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13337 + particle2: 13338 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13338 + particle2: 13339 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1288966893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1288966894} + - component: {fileID: 1288966898} + - component: {fileID: 1288966897} + - component: {fileID: 1288966896} + - component: {fileID: 1288966895} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1288966894 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288966893} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1288966895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288966893} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1288966898} + m_Target: {fileID: 1288966894} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1288966896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288966893} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1288966897 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288966893} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 120 +--- !u!114 &1288966898 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288966893} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 803400008134000082340000833400008434000085340000863400008734000088340000893400008a3400008b3400008c3400008d3400008e3400008f340000903400009134000092340000933400009434000095340000963400009734000098340000993400009a3400009b3400009c3400009d3400009e3400009f340000a0340000a1340000a2340000a3340000a4340000a5340000a6340000a7340000a8340000a9340000aa340000ab340000ac340000ad340000ae340000af340000b0340000b1340000b2340000b3340000b4340000b5340000b6340000b7340000b8340000b9340000ba340000bb340000bc340000bd340000be340000bf340000c0340000c1340000c2340000c3340000c4340000c5340000c6340000c7340000c8340000c9340000ca340000cb340000cc340000cd340000ce340000cf340000d0340000d1340000d2340000d3340000d4340000d5340000d6340000d7340000d8340000d9340000da340000db340000dc340000dd340000de340000df340000e0340000e1340000e2340000e3340000e4340000e5340000e6340000e7340000e8340000e9340000ea340000eb340000ec340000ed340000ee340000ef340000 + m_AlignBytes: 16 + groupID: 121 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 13440 + particle2: 13441 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 13441 + particle2: 13442 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 13442 + particle2: 13443 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 13443 + particle2: 13444 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 13444 + particle2: 13445 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13445 + particle2: 13446 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 13446 + particle2: 13447 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 13447 + particle2: 13448 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13448 + particle2: 13449 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13449 + particle2: 13450 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13450 + particle2: 13451 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1297311440 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1297311441} + - component: {fileID: 1297311445} + - component: {fileID: 1297311444} + - component: {fileID: 1297311443} + - component: {fileID: 1297311442} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1297311441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297311440} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1297311442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297311440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1297311445} + m_Target: {fileID: 1297311441} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1297311443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297311440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1297311444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297311440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 121 +--- !u!114 &1297311445 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297311440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f0340000f1340000f2340000f3340000f4340000f5340000f6340000f7340000f8340000f9340000fa340000fb340000fc340000fd340000fe340000ff340000003500000135000002350000033500000435000005350000063500000735000008350000093500000a3500000b3500000c3500000d3500000e3500000f350000103500001135000012350000133500001435000015350000163500001735000018350000193500001a3500001b3500001c3500001d3500001e3500001f350000203500002135000022350000233500002435000025350000263500002735000028350000293500002a3500002b3500002c3500002d3500002e3500002f350000303500003135000032350000333500003435000035350000363500003735000038350000393500003a3500003b3500003c3500003d3500003e3500003f350000403500004135000042350000433500004435000045350000463500004735000048350000493500004a3500004b3500004c3500004d3500004e3500004f350000503500005135000052350000533500005435000055350000563500005735000058350000593500005a3500005b3500005c3500005d3500005e3500005f350000 + m_AlignBytes: 16 + groupID: 122 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 13552 + particle2: 13553 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 13553 + particle2: 13554 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 13554 + particle2: 13555 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 13555 + particle2: 13556 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 13556 + particle2: 13557 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13557 + particle2: 13558 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 13558 + particle2: 13559 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 13559 + particle2: 13560 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13560 + particle2: 13561 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13561 + particle2: 13562 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13562 + particle2: 13563 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1299859296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1299859297} + - component: {fileID: 1299859301} + - component: {fileID: 1299859300} + - component: {fileID: 1299859299} + - component: {fileID: 1299859298} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1299859297 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299859296} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1299859298 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299859296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1299859301} + m_Target: {fileID: 1299859297} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1299859299 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299859296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1299859300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299859296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 122 +--- !u!114 &1299859301 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299859296} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 603500006135000062350000633500006435000065350000663500006735000068350000693500006a3500006b3500006c3500006d3500006e3500006f350000703500007135000072350000733500007435000075350000763500007735000078350000793500007a3500007b3500007c3500007d3500007e3500007f350000803500008135000082350000833500008435000085350000863500008735000088350000893500008a3500008b3500008c3500008d3500008e3500008f350000903500009135000092350000933500009435000095350000963500009735000098350000993500009a3500009b3500009c3500009d3500009e3500009f350000a0350000a1350000a2350000a3350000a4350000a5350000a6350000a7350000a8350000a9350000aa350000ab350000ac350000ad350000ae350000af350000b0350000b1350000b2350000b3350000b4350000b5350000b6350000b7350000b8350000b9350000ba350000bb350000bc350000bd350000be350000bf350000c0350000c1350000c2350000c3350000c4350000c5350000c6350000c7350000c8350000c9350000ca350000cb350000cc350000cd350000ce350000cf350000 + m_AlignBytes: 16 + groupID: 123 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 13664 + particle2: 13665 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 13665 + particle2: 13666 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 13666 + particle2: 13667 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 13667 + particle2: 13668 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 13668 + particle2: 13669 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13669 + particle2: 13670 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 13670 + particle2: 13671 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 13671 + particle2: 13672 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13672 + particle2: 13673 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13673 + particle2: 13674 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13674 + particle2: 13675 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1300868597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1300868598} + - component: {fileID: 1300868602} + - component: {fileID: 1300868601} + - component: {fileID: 1300868600} + - component: {fileID: 1300868599} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1300868598 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300868597} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1300868599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300868597} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1300868602} + m_Target: {fileID: 1300868598} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1300868600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300868597} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1300868601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300868597} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 123 +--- !u!114 &1300868602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1300868597} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d0350000d1350000d2350000d3350000d4350000d5350000d6350000d7350000d8350000d9350000da350000db350000dc350000dd350000de350000df350000e0350000e1350000e2350000e3350000e4350000e5350000e6350000e7350000e8350000e9350000ea350000eb350000ec350000ed350000ee350000ef350000f0350000f1350000f2350000f3350000f4350000f5350000f6350000f7350000f8350000f9350000fa350000fb350000fc350000fd350000fe350000ff350000003600000136000002360000033600000436000005360000063600000736000008360000093600000a3600000b3600000c3600000d3600000e3600000f360000103600001136000012360000133600001436000015360000163600001736000018360000193600001a3600001b3600001c3600001d3600001e3600001f360000203600002136000022360000233600002436000025360000263600002736000028360000293600002a3600002b3600002c3600002d3600002e3600002f360000303600003136000032360000333600003436000035360000363600003736000038360000393600003a3600003b3600003c3600003d3600003e3600003f360000 + m_AlignBytes: 16 + groupID: 124 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 13776 + particle2: 13777 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 13777 + particle2: 13778 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 13778 + particle2: 13779 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 13779 + particle2: 13780 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 13780 + particle2: 13781 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13781 + particle2: 13782 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 13782 + particle2: 13783 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 13783 + particle2: 13784 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13784 + particle2: 13785 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13785 + particle2: 13786 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13786 + particle2: 13787 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1304270658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1304270659} + - component: {fileID: 1304270663} + - component: {fileID: 1304270662} + - component: {fileID: 1304270661} + - component: {fileID: 1304270660} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1304270659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1304270658} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1304270660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1304270658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1304270663} + m_Target: {fileID: 1304270659} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1304270661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1304270658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1304270662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1304270658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 124 +--- !u!114 &1304270663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1304270658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 403600004136000042360000433600004436000045360000463600004736000048360000493600004a3600004b3600004c3600004d3600004e3600004f360000503600005136000052360000533600005436000055360000563600005736000058360000593600005a3600005b3600005c3600005d3600005e3600005f360000603600006136000062360000633600006436000065360000663600006736000068360000693600006a3600006b3600006c3600006d3600006e3600006f360000703600007136000072360000733600007436000075360000763600007736000078360000793600007a3600007b3600007c3600007d3600007e3600007f360000803600008136000082360000833600008436000085360000863600008736000088360000893600008a3600008b3600008c3600008d3600008e3600008f360000903600009136000092360000933600009436000095360000963600009736000098360000993600009a3600009b3600009c3600009d3600009e3600009f360000a0360000a1360000a2360000a3360000a4360000a5360000a6360000a7360000a8360000a9360000aa360000ab360000ac360000ad360000ae360000af360000 + m_AlignBytes: 16 + groupID: 125 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 13888 + particle2: 13889 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 13889 + particle2: 13890 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 13890 + particle2: 13891 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 13891 + particle2: 13892 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 13892 + particle2: 13893 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13893 + particle2: 13894 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 13894 + particle2: 13895 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 13895 + particle2: 13896 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 13896 + particle2: 13897 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 13897 + particle2: 13898 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 13898 + particle2: 13899 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1306593278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1306593279} + m_Layer: 0 + m_Name: Row (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1306593279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306593278} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1758285766} + - {fileID: 888913399} + - {fileID: 474752659} + - {fileID: 1886039167} + - {fileID: 547327667} + - {fileID: 170149755} + - {fileID: 360658608} + - {fileID: 733963101} + - {fileID: 1964761414} + - {fileID: 1228595150} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1332770745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1332770746} + - component: {fileID: 1332770750} + - component: {fileID: 1332770749} + - component: {fileID: 1332770748} + - component: {fileID: 1332770747} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1332770746 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332770745} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1332770747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332770745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1332770750} + m_Target: {fileID: 1332770746} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1332770748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332770745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1332770749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332770745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 125 +--- !u!114 &1332770750 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332770745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b0360000b1360000b2360000b3360000b4360000b5360000b6360000b7360000b8360000b9360000ba360000bb360000bc360000bd360000be360000bf360000c0360000c1360000c2360000c3360000c4360000c5360000c6360000c7360000c8360000c9360000ca360000cb360000cc360000cd360000ce360000cf360000d0360000d1360000d2360000d3360000d4360000d5360000d6360000d7360000d8360000d9360000da360000db360000dc360000dd360000de360000df360000e0360000e1360000e2360000e3360000e4360000e5360000e6360000e7360000e8360000e9360000ea360000eb360000ec360000ed360000ee360000ef360000f0360000f1360000f2360000f3360000f4360000f5360000f6360000f7360000f8360000f9360000fa360000fb360000fc360000fd360000fe360000ff360000003700000137000002370000033700000437000005370000063700000737000008370000093700000a3700000b3700000c3700000d3700000e3700000f370000103700001137000012370000133700001437000015370000163700001737000018370000193700001a3700001b3700001c3700001d3700001e3700001f370000 + m_AlignBytes: 16 + groupID: 126 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14000 + particle2: 14001 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14001 + particle2: 14002 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14002 + particle2: 14003 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14003 + particle2: 14004 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14004 + particle2: 14005 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14005 + particle2: 14006 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14006 + particle2: 14007 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14007 + particle2: 14008 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14008 + particle2: 14009 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14009 + particle2: 14010 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14010 + particle2: 14011 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1333859661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1333859662} + - component: {fileID: 1333859666} + - component: {fileID: 1333859665} + - component: {fileID: 1333859664} + - component: {fileID: 1333859663} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1333859662 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333859661} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1333859663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333859661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1333859666} + m_Target: {fileID: 1333859662} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1333859664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333859661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1333859665 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333859661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 126 +--- !u!114 &1333859666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333859661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 203700002137000022370000233700002437000025370000263700002737000028370000293700002a3700002b3700002c3700002d3700002e3700002f370000303700003137000032370000333700003437000035370000363700003737000038370000393700003a3700003b3700003c3700003d3700003e3700003f370000403700004137000042370000433700004437000045370000463700004737000048370000493700004a3700004b3700004c3700004d3700004e3700004f370000503700005137000052370000533700005437000055370000563700005737000058370000593700005a3700005b3700005c3700005d3700005e3700005f370000603700006137000062370000633700006437000065370000663700006737000068370000693700006a3700006b3700006c3700006d3700006e3700006f370000703700007137000072370000733700007437000075370000763700007737000078370000793700007a3700007b3700007c3700007d3700007e3700007f370000803700008137000082370000833700008437000085370000863700008737000088370000893700008a3700008b3700008c3700008d3700008e3700008f370000 + m_AlignBytes: 16 + groupID: 127 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14112 + particle2: 14113 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14113 + particle2: 14114 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14114 + particle2: 14115 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14115 + particle2: 14116 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14116 + particle2: 14117 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14117 + particle2: 14118 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14118 + particle2: 14119 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14119 + particle2: 14120 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14120 + particle2: 14121 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14121 + particle2: 14122 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14122 + particle2: 14123 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1336151025 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1336151026} + - component: {fileID: 1336151030} + - component: {fileID: 1336151029} + - component: {fileID: 1336151028} + - component: {fileID: 1336151027} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1336151026 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1336151025} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1336151027 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1336151025} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1336151030} + m_Target: {fileID: 1336151026} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1336151028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1336151025} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1336151029 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1336151025} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 127 +--- !u!114 &1336151030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1336151025} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 903700009137000092370000933700009437000095370000963700009737000098370000993700009a3700009b3700009c3700009d3700009e3700009f370000a0370000a1370000a2370000a3370000a4370000a5370000a6370000a7370000a8370000a9370000aa370000ab370000ac370000ad370000ae370000af370000b0370000b1370000b2370000b3370000b4370000b5370000b6370000b7370000b8370000b9370000ba370000bb370000bc370000bd370000be370000bf370000c0370000c1370000c2370000c3370000c4370000c5370000c6370000c7370000c8370000c9370000ca370000cb370000cc370000cd370000ce370000cf370000d0370000d1370000d2370000d3370000d4370000d5370000d6370000d7370000d8370000d9370000da370000db370000dc370000dd370000de370000df370000e0370000e1370000e2370000e3370000e4370000e5370000e6370000e7370000e8370000e9370000ea370000eb370000ec370000ed370000ee370000ef370000f0370000f1370000f2370000f3370000f4370000f5370000f6370000f7370000f8370000f9370000fa370000fb370000fc370000fd370000fe370000ff370000 + m_AlignBytes: 16 + groupID: 128 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14224 + particle2: 14225 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14225 + particle2: 14226 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14226 + particle2: 14227 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14227 + particle2: 14228 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14228 + particle2: 14229 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14229 + particle2: 14230 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14230 + particle2: 14231 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14231 + particle2: 14232 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14232 + particle2: 14233 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14233 + particle2: 14234 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14234 + particle2: 14235 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1374969020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1374969021} + - component: {fileID: 1374969025} + - component: {fileID: 1374969024} + - component: {fileID: 1374969023} + - component: {fileID: 1374969022} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1374969021 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1374969020} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1374969022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1374969020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1374969025} + m_Target: {fileID: 1374969021} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1374969023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1374969020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1374969024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1374969020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 128 +--- !u!114 &1374969025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1374969020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 003800000138000002380000033800000438000005380000063800000738000008380000093800000a3800000b3800000c3800000d3800000e3800000f380000103800001138000012380000133800001438000015380000163800001738000018380000193800001a3800001b3800001c3800001d3800001e3800001f380000203800002138000022380000233800002438000025380000263800002738000028380000293800002a3800002b3800002c3800002d3800002e3800002f380000303800003138000032380000333800003438000035380000363800003738000038380000393800003a3800003b3800003c3800003d3800003e3800003f380000403800004138000042380000433800004438000045380000463800004738000048380000493800004a3800004b3800004c3800004d3800004e3800004f380000503800005138000052380000533800005438000055380000563800005738000058380000593800005a3800005b3800005c3800005d3800005e3800005f380000603800006138000062380000633800006438000065380000663800006738000068380000693800006a3800006b3800006c3800006d3800006e3800006f380000 + m_AlignBytes: 16 + groupID: 129 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14336 + particle2: 14337 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14337 + particle2: 14338 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14338 + particle2: 14339 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14339 + particle2: 14340 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14340 + particle2: 14341 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14341 + particle2: 14342 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14342 + particle2: 14343 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14343 + particle2: 14344 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14344 + particle2: 14345 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14345 + particle2: 14346 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14346 + particle2: 14347 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1375015037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1375015038} + - component: {fileID: 1375015042} + - component: {fileID: 1375015041} + - component: {fileID: 1375015040} + - component: {fileID: 1375015039} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1375015038 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375015037} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1375015039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375015037} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1375015042} + m_Target: {fileID: 1375015038} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1375015040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375015037} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1375015041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375015037} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 129 +--- !u!114 &1375015042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375015037} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 703800007138000072380000733800007438000075380000763800007738000078380000793800007a3800007b3800007c3800007d3800007e3800007f380000803800008138000082380000833800008438000085380000863800008738000088380000893800008a3800008b3800008c3800008d3800008e3800008f380000903800009138000092380000933800009438000095380000963800009738000098380000993800009a3800009b3800009c3800009d3800009e3800009f380000a0380000a1380000a2380000a3380000a4380000a5380000a6380000a7380000a8380000a9380000aa380000ab380000ac380000ad380000ae380000af380000b0380000b1380000b2380000b3380000b4380000b5380000b6380000b7380000b8380000b9380000ba380000bb380000bc380000bd380000be380000bf380000c0380000c1380000c2380000c3380000c4380000c5380000c6380000c7380000c8380000c9380000ca380000cb380000cc380000cd380000ce380000cf380000d0380000d1380000d2380000d3380000d4380000d5380000d6380000d7380000d8380000d9380000da380000db380000dc380000dd380000de380000df380000 + m_AlignBytes: 16 + groupID: 130 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14448 + particle2: 14449 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14449 + particle2: 14450 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14450 + particle2: 14451 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14451 + particle2: 14452 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14452 + particle2: 14453 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14453 + particle2: 14454 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14454 + particle2: 14455 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14455 + particle2: 14456 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14456 + particle2: 14457 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14457 + particle2: 14458 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14458 + particle2: 14459 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1424048100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1424048101} + - component: {fileID: 1424048105} + - component: {fileID: 1424048104} + - component: {fileID: 1424048103} + - component: {fileID: 1424048102} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1424048101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424048100} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1424048102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424048100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1424048105} + m_Target: {fileID: 1424048101} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1424048103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424048100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1424048104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424048100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 130 +--- !u!114 &1424048105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424048100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0380000e1380000e2380000e3380000e4380000e5380000e6380000e7380000e8380000e9380000ea380000eb380000ec380000ed380000ee380000ef380000f0380000f1380000f2380000f3380000f4380000f5380000f6380000f7380000f8380000f9380000fa380000fb380000fc380000fd380000fe380000ff380000003900000139000002390000033900000439000005390000063900000739000008390000093900000a3900000b3900000c3900000d3900000e3900000f390000103900001139000012390000133900001439000015390000163900001739000018390000193900001a3900001b3900001c3900001d3900001e3900001f390000203900002139000022390000233900002439000025390000263900002739000028390000293900002a3900002b3900002c3900002d3900002e3900002f390000303900003139000032390000333900003439000035390000363900003739000038390000393900003a3900003b3900003c3900003d3900003e3900003f390000403900004139000042390000433900004439000045390000463900004739000048390000493900004a3900004b3900004c3900004d3900004e3900004f390000 + m_AlignBytes: 16 + groupID: 131 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14560 + particle2: 14561 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14561 + particle2: 14562 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14562 + particle2: 14563 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14563 + particle2: 14564 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14564 + particle2: 14565 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14565 + particle2: 14566 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14566 + particle2: 14567 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14567 + particle2: 14568 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14568 + particle2: 14569 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14569 + particle2: 14570 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14570 + particle2: 14571 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1431270382 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1431270383} + - component: {fileID: 1431270387} + - component: {fileID: 1431270386} + - component: {fileID: 1431270385} + - component: {fileID: 1431270384} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1431270383 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431270382} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1431270384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431270382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1431270387} + m_Target: {fileID: 1431270383} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1431270385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431270382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1431270386 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431270382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 131 +--- !u!114 &1431270387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431270382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 503900005139000052390000533900005439000055390000563900005739000058390000593900005a3900005b3900005c3900005d3900005e3900005f390000603900006139000062390000633900006439000065390000663900006739000068390000693900006a3900006b3900006c3900006d3900006e3900006f390000703900007139000072390000733900007439000075390000763900007739000078390000793900007a3900007b3900007c3900007d3900007e3900007f390000803900008139000082390000833900008439000085390000863900008739000088390000893900008a3900008b3900008c3900008d3900008e3900008f390000903900009139000092390000933900009439000095390000963900009739000098390000993900009a3900009b3900009c3900009d3900009e3900009f390000a0390000a1390000a2390000a3390000a4390000a5390000a6390000a7390000a8390000a9390000aa390000ab390000ac390000ad390000ae390000af390000b0390000b1390000b2390000b3390000b4390000b5390000b6390000b7390000b8390000b9390000ba390000bb390000bc390000bd390000be390000bf390000 + m_AlignBytes: 16 + groupID: 132 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14672 + particle2: 14673 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14673 + particle2: 14674 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14674 + particle2: 14675 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14675 + particle2: 14676 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14676 + particle2: 14677 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14677 + particle2: 14678 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14678 + particle2: 14679 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14679 + particle2: 14680 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14680 + particle2: 14681 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14681 + particle2: 14682 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14682 + particle2: 14683 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1437781648 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1437781649} + - component: {fileID: 1437781653} + - component: {fileID: 1437781652} + - component: {fileID: 1437781651} + - component: {fileID: 1437781650} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1437781649 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437781648} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1437781650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437781648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1437781653} + m_Target: {fileID: 1437781649} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1437781651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437781648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1437781652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437781648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 132 +--- !u!114 &1437781653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437781648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0390000c1390000c2390000c3390000c4390000c5390000c6390000c7390000c8390000c9390000ca390000cb390000cc390000cd390000ce390000cf390000d0390000d1390000d2390000d3390000d4390000d5390000d6390000d7390000d8390000d9390000da390000db390000dc390000dd390000de390000df390000e0390000e1390000e2390000e3390000e4390000e5390000e6390000e7390000e8390000e9390000ea390000eb390000ec390000ed390000ee390000ef390000f0390000f1390000f2390000f3390000f4390000f5390000f6390000f7390000f8390000f9390000fa390000fb390000fc390000fd390000fe390000ff390000003a0000013a0000023a0000033a0000043a0000053a0000063a0000073a0000083a0000093a00000a3a00000b3a00000c3a00000d3a00000e3a00000f3a0000103a0000113a0000123a0000133a0000143a0000153a0000163a0000173a0000183a0000193a00001a3a00001b3a00001c3a00001d3a00001e3a00001f3a0000203a0000213a0000223a0000233a0000243a0000253a0000263a0000273a0000283a0000293a00002a3a00002b3a00002c3a00002d3a00002e3a00002f3a0000 + m_AlignBytes: 16 + groupID: 133 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14784 + particle2: 14785 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14785 + particle2: 14786 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14786 + particle2: 14787 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14787 + particle2: 14788 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14788 + particle2: 14789 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14789 + particle2: 14790 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14790 + particle2: 14791 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14791 + particle2: 14792 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14792 + particle2: 14793 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14793 + particle2: 14794 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14794 + particle2: 14795 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1438254938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1438254939} + - component: {fileID: 1438254943} + - component: {fileID: 1438254942} + - component: {fileID: 1438254941} + - component: {fileID: 1438254940} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1438254939 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438254938} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1438254940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438254938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1438254943} + m_Target: {fileID: 1438254939} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1438254941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438254938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1438254942 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438254938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 133 +--- !u!114 &1438254943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438254938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 303a0000313a0000323a0000333a0000343a0000353a0000363a0000373a0000383a0000393a00003a3a00003b3a00003c3a00003d3a00003e3a00003f3a0000403a0000413a0000423a0000433a0000443a0000453a0000463a0000473a0000483a0000493a00004a3a00004b3a00004c3a00004d3a00004e3a00004f3a0000503a0000513a0000523a0000533a0000543a0000553a0000563a0000573a0000583a0000593a00005a3a00005b3a00005c3a00005d3a00005e3a00005f3a0000603a0000613a0000623a0000633a0000643a0000653a0000663a0000673a0000683a0000693a00006a3a00006b3a00006c3a00006d3a00006e3a00006f3a0000703a0000713a0000723a0000733a0000743a0000753a0000763a0000773a0000783a0000793a00007a3a00007b3a00007c3a00007d3a00007e3a00007f3a0000803a0000813a0000823a0000833a0000843a0000853a0000863a0000873a0000883a0000893a00008a3a00008b3a00008c3a00008d3a00008e3a00008f3a0000903a0000913a0000923a0000933a0000943a0000953a0000963a0000973a0000983a0000993a00009a3a00009b3a00009c3a00009d3a00009e3a00009f3a0000 + m_AlignBytes: 16 + groupID: 134 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 14896 + particle2: 14897 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 14897 + particle2: 14898 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 14898 + particle2: 14899 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 14899 + particle2: 14900 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 14900 + particle2: 14901 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 14901 + particle2: 14902 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 14902 + particle2: 14903 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 14903 + particle2: 14904 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 14904 + particle2: 14905 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 14905 + particle2: 14906 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 14906 + particle2: 14907 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1440395743 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1440395744} + - component: {fileID: 1440395748} + - component: {fileID: 1440395747} + - component: {fileID: 1440395746} + - component: {fileID: 1440395745} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1440395744 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1440395743} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1440395745 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1440395743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1440395748} + m_Target: {fileID: 1440395744} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1440395746 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1440395743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1440395747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1440395743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 134 +--- !u!114 &1440395748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1440395743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a03a0000a13a0000a23a0000a33a0000a43a0000a53a0000a63a0000a73a0000a83a0000a93a0000aa3a0000ab3a0000ac3a0000ad3a0000ae3a0000af3a0000b03a0000b13a0000b23a0000b33a0000b43a0000b53a0000b63a0000b73a0000b83a0000b93a0000ba3a0000bb3a0000bc3a0000bd3a0000be3a0000bf3a0000c03a0000c13a0000c23a0000c33a0000c43a0000c53a0000c63a0000c73a0000c83a0000c93a0000ca3a0000cb3a0000cc3a0000cd3a0000ce3a0000cf3a0000d03a0000d13a0000d23a0000d33a0000d43a0000d53a0000d63a0000d73a0000d83a0000d93a0000da3a0000db3a0000dc3a0000dd3a0000de3a0000df3a0000e03a0000e13a0000e23a0000e33a0000e43a0000e53a0000e63a0000e73a0000e83a0000e93a0000ea3a0000eb3a0000ec3a0000ed3a0000ee3a0000ef3a0000f03a0000f13a0000f23a0000f33a0000f43a0000f53a0000f63a0000f73a0000f83a0000f93a0000fa3a0000fb3a0000fc3a0000fd3a0000fe3a0000ff3a0000003b0000013b0000023b0000033b0000043b0000053b0000063b0000073b0000083b0000093b00000a3b00000b3b00000c3b00000d3b00000e3b00000f3b0000 + m_AlignBytes: 16 + groupID: 135 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15008 + particle2: 15009 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15009 + particle2: 15010 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15010 + particle2: 15011 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15011 + particle2: 15012 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15012 + particle2: 15013 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15013 + particle2: 15014 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15014 + particle2: 15015 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15015 + particle2: 15016 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15016 + particle2: 15017 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15017 + particle2: 15018 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15018 + particle2: 15019 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1454186979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1454186980} + - component: {fileID: 1454186984} + - component: {fileID: 1454186983} + - component: {fileID: 1454186982} + - component: {fileID: 1454186981} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1454186980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454186979} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1454186981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454186979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1454186984} + m_Target: {fileID: 1454186980} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1454186982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454186979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1454186983 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454186979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 135 +--- !u!114 &1454186984 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1454186979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 103b0000113b0000123b0000133b0000143b0000153b0000163b0000173b0000183b0000193b00001a3b00001b3b00001c3b00001d3b00001e3b00001f3b0000203b0000213b0000223b0000233b0000243b0000253b0000263b0000273b0000283b0000293b00002a3b00002b3b00002c3b00002d3b00002e3b00002f3b0000303b0000313b0000323b0000333b0000343b0000353b0000363b0000373b0000383b0000393b00003a3b00003b3b00003c3b00003d3b00003e3b00003f3b0000403b0000413b0000423b0000433b0000443b0000453b0000463b0000473b0000483b0000493b00004a3b00004b3b00004c3b00004d3b00004e3b00004f3b0000503b0000513b0000523b0000533b0000543b0000553b0000563b0000573b0000583b0000593b00005a3b00005b3b00005c3b00005d3b00005e3b00005f3b0000603b0000613b0000623b0000633b0000643b0000653b0000663b0000673b0000683b0000693b00006a3b00006b3b00006c3b00006d3b00006e3b00006f3b0000703b0000713b0000723b0000733b0000743b0000753b0000763b0000773b0000783b0000793b00007a3b00007b3b00007c3b00007d3b00007e3b00007f3b0000 + m_AlignBytes: 16 + groupID: 136 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15120 + particle2: 15121 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15121 + particle2: 15122 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15122 + particle2: 15123 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15123 + particle2: 15124 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15124 + particle2: 15125 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15125 + particle2: 15126 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15126 + particle2: 15127 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15127 + particle2: 15128 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15128 + particle2: 15129 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15129 + particle2: 15130 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15130 + particle2: 15131 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1461467371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1461467372} + - component: {fileID: 1461467376} + - component: {fileID: 1461467375} + - component: {fileID: 1461467374} + - component: {fileID: 1461467373} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1461467372 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461467371} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1461467373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461467371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1461467376} + m_Target: {fileID: 1461467372} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1461467374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461467371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1461467375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461467371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 136 +--- !u!114 &1461467376 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1461467371} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 803b0000813b0000823b0000833b0000843b0000853b0000863b0000873b0000883b0000893b00008a3b00008b3b00008c3b00008d3b00008e3b00008f3b0000903b0000913b0000923b0000933b0000943b0000953b0000963b0000973b0000983b0000993b00009a3b00009b3b00009c3b00009d3b00009e3b00009f3b0000a03b0000a13b0000a23b0000a33b0000a43b0000a53b0000a63b0000a73b0000a83b0000a93b0000aa3b0000ab3b0000ac3b0000ad3b0000ae3b0000af3b0000b03b0000b13b0000b23b0000b33b0000b43b0000b53b0000b63b0000b73b0000b83b0000b93b0000ba3b0000bb3b0000bc3b0000bd3b0000be3b0000bf3b0000c03b0000c13b0000c23b0000c33b0000c43b0000c53b0000c63b0000c73b0000c83b0000c93b0000ca3b0000cb3b0000cc3b0000cd3b0000ce3b0000cf3b0000d03b0000d13b0000d23b0000d33b0000d43b0000d53b0000d63b0000d73b0000d83b0000d93b0000da3b0000db3b0000dc3b0000dd3b0000de3b0000df3b0000e03b0000e13b0000e23b0000e33b0000e43b0000e53b0000e63b0000e73b0000e83b0000e93b0000ea3b0000eb3b0000ec3b0000ed3b0000ee3b0000ef3b0000 + m_AlignBytes: 16 + groupID: 137 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15232 + particle2: 15233 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15233 + particle2: 15234 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15234 + particle2: 15235 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15235 + particle2: 15236 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15236 + particle2: 15237 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15237 + particle2: 15238 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15238 + particle2: 15239 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15239 + particle2: 15240 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15240 + particle2: 15241 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15241 + particle2: 15242 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15242 + particle2: 15243 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1464717034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1464717035} + m_Layer: 0 + m_Name: Row (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1464717035 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1464717034} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1117186089} + - {fileID: 1635734355} + - {fileID: 1431270383} + - {fileID: 2127388785} + - {fileID: 975387945} + - {fileID: 1001514668} + - {fileID: 1040360819} + - {fileID: 674074861} + - {fileID: 1970184123} + - {fileID: 686144124} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1472901346 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1472901347} + - component: {fileID: 1472901351} + - component: {fileID: 1472901350} + - component: {fileID: 1472901349} + - component: {fileID: 1472901348} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1472901347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472901346} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1472901348 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472901346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1472901351} + m_Target: {fileID: 1472901347} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1472901349 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472901346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1472901350 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472901346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 137 +--- !u!114 &1472901351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472901346} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f03b0000f13b0000f23b0000f33b0000f43b0000f53b0000f63b0000f73b0000f83b0000f93b0000fa3b0000fb3b0000fc3b0000fd3b0000fe3b0000ff3b0000003c0000013c0000023c0000033c0000043c0000053c0000063c0000073c0000083c0000093c00000a3c00000b3c00000c3c00000d3c00000e3c00000f3c0000103c0000113c0000123c0000133c0000143c0000153c0000163c0000173c0000183c0000193c00001a3c00001b3c00001c3c00001d3c00001e3c00001f3c0000203c0000213c0000223c0000233c0000243c0000253c0000263c0000273c0000283c0000293c00002a3c00002b3c00002c3c00002d3c00002e3c00002f3c0000303c0000313c0000323c0000333c0000343c0000353c0000363c0000373c0000383c0000393c00003a3c00003b3c00003c3c00003d3c00003e3c00003f3c0000403c0000413c0000423c0000433c0000443c0000453c0000463c0000473c0000483c0000493c00004a3c00004b3c00004c3c00004d3c00004e3c00004f3c0000503c0000513c0000523c0000533c0000543c0000553c0000563c0000573c0000583c0000593c00005a3c00005b3c00005c3c00005d3c00005e3c00005f3c0000 + m_AlignBytes: 16 + groupID: 138 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15344 + particle2: 15345 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15345 + particle2: 15346 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15346 + particle2: 15347 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15347 + particle2: 15348 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15348 + particle2: 15349 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15349 + particle2: 15350 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15350 + particle2: 15351 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15351 + particle2: 15352 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15352 + particle2: 15353 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15353 + particle2: 15354 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15354 + particle2: 15355 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1479240941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1479240942} + - component: {fileID: 1479240946} + - component: {fileID: 1479240945} + - component: {fileID: 1479240944} + - component: {fileID: 1479240943} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1479240942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479240941} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1479240943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479240941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1479240946} + m_Target: {fileID: 1479240942} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1479240944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479240941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1479240945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479240941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 138 +--- !u!114 &1479240946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479240941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 603c0000613c0000623c0000633c0000643c0000653c0000663c0000673c0000683c0000693c00006a3c00006b3c00006c3c00006d3c00006e3c00006f3c0000703c0000713c0000723c0000733c0000743c0000753c0000763c0000773c0000783c0000793c00007a3c00007b3c00007c3c00007d3c00007e3c00007f3c0000803c0000813c0000823c0000833c0000843c0000853c0000863c0000873c0000883c0000893c00008a3c00008b3c00008c3c00008d3c00008e3c00008f3c0000903c0000913c0000923c0000933c0000943c0000953c0000963c0000973c0000983c0000993c00009a3c00009b3c00009c3c00009d3c00009e3c00009f3c0000a03c0000a13c0000a23c0000a33c0000a43c0000a53c0000a63c0000a73c0000a83c0000a93c0000aa3c0000ab3c0000ac3c0000ad3c0000ae3c0000af3c0000b03c0000b13c0000b23c0000b33c0000b43c0000b53c0000b63c0000b73c0000b83c0000b93c0000ba3c0000bb3c0000bc3c0000bd3c0000be3c0000bf3c0000c03c0000c13c0000c23c0000c33c0000c43c0000c53c0000c63c0000c73c0000c83c0000c93c0000ca3c0000cb3c0000cc3c0000cd3c0000ce3c0000cf3c0000 + m_AlignBytes: 16 + groupID: 139 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15456 + particle2: 15457 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15457 + particle2: 15458 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15458 + particle2: 15459 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15459 + particle2: 15460 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15460 + particle2: 15461 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15461 + particle2: 15462 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15462 + particle2: 15463 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15463 + particle2: 15464 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15464 + particle2: 15465 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15465 + particle2: 15466 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15466 + particle2: 15467 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1501728738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1501728739} + - component: {fileID: 1501728743} + - component: {fileID: 1501728742} + - component: {fileID: 1501728741} + - component: {fileID: 1501728740} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1501728739 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501728738} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1501728740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501728738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1501728743} + m_Target: {fileID: 1501728739} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1501728741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501728738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1501728742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501728738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 139 +--- !u!114 &1501728743 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501728738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d03c0000d13c0000d23c0000d33c0000d43c0000d53c0000d63c0000d73c0000d83c0000d93c0000da3c0000db3c0000dc3c0000dd3c0000de3c0000df3c0000e03c0000e13c0000e23c0000e33c0000e43c0000e53c0000e63c0000e73c0000e83c0000e93c0000ea3c0000eb3c0000ec3c0000ed3c0000ee3c0000ef3c0000f03c0000f13c0000f23c0000f33c0000f43c0000f53c0000f63c0000f73c0000f83c0000f93c0000fa3c0000fb3c0000fc3c0000fd3c0000fe3c0000ff3c0000003d0000013d0000023d0000033d0000043d0000053d0000063d0000073d0000083d0000093d00000a3d00000b3d00000c3d00000d3d00000e3d00000f3d0000103d0000113d0000123d0000133d0000143d0000153d0000163d0000173d0000183d0000193d00001a3d00001b3d00001c3d00001d3d00001e3d00001f3d0000203d0000213d0000223d0000233d0000243d0000253d0000263d0000273d0000283d0000293d00002a3d00002b3d00002c3d00002d3d00002e3d00002f3d0000303d0000313d0000323d0000333d0000343d0000353d0000363d0000373d0000383d0000393d00003a3d00003b3d00003c3d00003d3d00003e3d00003f3d0000 + m_AlignBytes: 16 + groupID: 140 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15568 + particle2: 15569 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15569 + particle2: 15570 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15570 + particle2: 15571 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15571 + particle2: 15572 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15572 + particle2: 15573 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15573 + particle2: 15574 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15574 + particle2: 15575 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15575 + particle2: 15576 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15576 + particle2: 15577 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15577 + particle2: 15578 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15578 + particle2: 15579 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1503252369 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1503252370} + - component: {fileID: 1503252374} + - component: {fileID: 1503252373} + - component: {fileID: 1503252372} + - component: {fileID: 1503252371} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1503252370 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1503252369} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1503252371 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1503252369} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1503252374} + m_Target: {fileID: 1503252370} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1503252372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1503252369} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1503252373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1503252369} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 140 +--- !u!114 &1503252374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1503252369} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 403d0000413d0000423d0000433d0000443d0000453d0000463d0000473d0000483d0000493d00004a3d00004b3d00004c3d00004d3d00004e3d00004f3d0000503d0000513d0000523d0000533d0000543d0000553d0000563d0000573d0000583d0000593d00005a3d00005b3d00005c3d00005d3d00005e3d00005f3d0000603d0000613d0000623d0000633d0000643d0000653d0000663d0000673d0000683d0000693d00006a3d00006b3d00006c3d00006d3d00006e3d00006f3d0000703d0000713d0000723d0000733d0000743d0000753d0000763d0000773d0000783d0000793d00007a3d00007b3d00007c3d00007d3d00007e3d00007f3d0000803d0000813d0000823d0000833d0000843d0000853d0000863d0000873d0000883d0000893d00008a3d00008b3d00008c3d00008d3d00008e3d00008f3d0000903d0000913d0000923d0000933d0000943d0000953d0000963d0000973d0000983d0000993d00009a3d00009b3d00009c3d00009d3d00009e3d00009f3d0000a03d0000a13d0000a23d0000a33d0000a43d0000a53d0000a63d0000a73d0000a83d0000a93d0000aa3d0000ab3d0000ac3d0000ad3d0000ae3d0000af3d0000 + m_AlignBytes: 16 + groupID: 141 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15680 + particle2: 15681 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15681 + particle2: 15682 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15682 + particle2: 15683 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15683 + particle2: 15684 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15684 + particle2: 15685 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15685 + particle2: 15686 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15686 + particle2: 15687 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15687 + particle2: 15688 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15688 + particle2: 15689 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15689 + particle2: 15690 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15690 + particle2: 15691 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1517801621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1517801622} + - component: {fileID: 1517801626} + - component: {fileID: 1517801625} + - component: {fileID: 1517801624} + - component: {fileID: 1517801623} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1517801622 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517801621} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1517801623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517801621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1517801626} + m_Target: {fileID: 1517801622} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1517801624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517801621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1517801625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517801621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 141 +--- !u!114 &1517801626 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517801621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b03d0000b13d0000b23d0000b33d0000b43d0000b53d0000b63d0000b73d0000b83d0000b93d0000ba3d0000bb3d0000bc3d0000bd3d0000be3d0000bf3d0000c03d0000c13d0000c23d0000c33d0000c43d0000c53d0000c63d0000c73d0000c83d0000c93d0000ca3d0000cb3d0000cc3d0000cd3d0000ce3d0000cf3d0000d03d0000d13d0000d23d0000d33d0000d43d0000d53d0000d63d0000d73d0000d83d0000d93d0000da3d0000db3d0000dc3d0000dd3d0000de3d0000df3d0000e03d0000e13d0000e23d0000e33d0000e43d0000e53d0000e63d0000e73d0000e83d0000e93d0000ea3d0000eb3d0000ec3d0000ed3d0000ee3d0000ef3d0000f03d0000f13d0000f23d0000f33d0000f43d0000f53d0000f63d0000f73d0000f83d0000f93d0000fa3d0000fb3d0000fc3d0000fd3d0000fe3d0000ff3d0000003e0000013e0000023e0000033e0000043e0000053e0000063e0000073e0000083e0000093e00000a3e00000b3e00000c3e00000d3e00000e3e00000f3e0000103e0000113e0000123e0000133e0000143e0000153e0000163e0000173e0000183e0000193e00001a3e00001b3e00001c3e00001d3e00001e3e00001f3e0000 + m_AlignBytes: 16 + groupID: 142 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15792 + particle2: 15793 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15793 + particle2: 15794 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15794 + particle2: 15795 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15795 + particle2: 15796 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15796 + particle2: 15797 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15797 + particle2: 15798 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15798 + particle2: 15799 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15799 + particle2: 15800 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15800 + particle2: 15801 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15801 + particle2: 15802 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15802 + particle2: 15803 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1521845707 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1521845708} + - component: {fileID: 1521845712} + - component: {fileID: 1521845711} + - component: {fileID: 1521845710} + - component: {fileID: 1521845709} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1521845708 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521845707} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1521845709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521845707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1521845712} + m_Target: {fileID: 1521845708} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1521845710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521845707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1521845711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521845707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 142 +--- !u!114 &1521845712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521845707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 203e0000213e0000223e0000233e0000243e0000253e0000263e0000273e0000283e0000293e00002a3e00002b3e00002c3e00002d3e00002e3e00002f3e0000303e0000313e0000323e0000333e0000343e0000353e0000363e0000373e0000383e0000393e00003a3e00003b3e00003c3e00003d3e00003e3e00003f3e0000403e0000413e0000423e0000433e0000443e0000453e0000463e0000473e0000483e0000493e00004a3e00004b3e00004c3e00004d3e00004e3e00004f3e0000503e0000513e0000523e0000533e0000543e0000553e0000563e0000573e0000583e0000593e00005a3e00005b3e00005c3e00005d3e00005e3e00005f3e0000603e0000613e0000623e0000633e0000643e0000653e0000663e0000673e0000683e0000693e00006a3e00006b3e00006c3e00006d3e00006e3e00006f3e0000703e0000713e0000723e0000733e0000743e0000753e0000763e0000773e0000783e0000793e00007a3e00007b3e00007c3e00007d3e00007e3e00007f3e0000803e0000813e0000823e0000833e0000843e0000853e0000863e0000873e0000883e0000893e00008a3e00008b3e00008c3e00008d3e00008e3e00008f3e0000 + m_AlignBytes: 16 + groupID: 143 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 15904 + particle2: 15905 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 15905 + particle2: 15906 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 15906 + particle2: 15907 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 15907 + particle2: 15908 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 15908 + particle2: 15909 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 15909 + particle2: 15910 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 15910 + particle2: 15911 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 15911 + particle2: 15912 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 15912 + particle2: 15913 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 15913 + particle2: 15914 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 15914 + particle2: 15915 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1523215162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1523215163} + - component: {fileID: 1523215167} + - component: {fileID: 1523215166} + - component: {fileID: 1523215165} + - component: {fileID: 1523215164} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1523215163 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1523215162} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1523215164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1523215162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1523215167} + m_Target: {fileID: 1523215163} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1523215165 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1523215162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1523215166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1523215162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 143 +--- !u!114 &1523215167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1523215162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 903e0000913e0000923e0000933e0000943e0000953e0000963e0000973e0000983e0000993e00009a3e00009b3e00009c3e00009d3e00009e3e00009f3e0000a03e0000a13e0000a23e0000a33e0000a43e0000a53e0000a63e0000a73e0000a83e0000a93e0000aa3e0000ab3e0000ac3e0000ad3e0000ae3e0000af3e0000b03e0000b13e0000b23e0000b33e0000b43e0000b53e0000b63e0000b73e0000b83e0000b93e0000ba3e0000bb3e0000bc3e0000bd3e0000be3e0000bf3e0000c03e0000c13e0000c23e0000c33e0000c43e0000c53e0000c63e0000c73e0000c83e0000c93e0000ca3e0000cb3e0000cc3e0000cd3e0000ce3e0000cf3e0000d03e0000d13e0000d23e0000d33e0000d43e0000d53e0000d63e0000d73e0000d83e0000d93e0000da3e0000db3e0000dc3e0000dd3e0000de3e0000df3e0000e03e0000e13e0000e23e0000e33e0000e43e0000e53e0000e63e0000e73e0000e83e0000e93e0000ea3e0000eb3e0000ec3e0000ed3e0000ee3e0000ef3e0000f03e0000f13e0000f23e0000f33e0000f43e0000f53e0000f63e0000f73e0000f83e0000f93e0000fa3e0000fb3e0000fc3e0000fd3e0000fe3e0000ff3e0000 + m_AlignBytes: 16 + groupID: 144 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16016 + particle2: 16017 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16017 + particle2: 16018 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16018 + particle2: 16019 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16019 + particle2: 16020 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16020 + particle2: 16021 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16021 + particle2: 16022 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16022 + particle2: 16023 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16023 + particle2: 16024 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16024 + particle2: 16025 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16025 + particle2: 16026 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16026 + particle2: 16027 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1537736704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1537736705} + - component: {fileID: 1537736709} + - component: {fileID: 1537736708} + - component: {fileID: 1537736707} + - component: {fileID: 1537736706} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1537736705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537736704} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472161722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1537736706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537736704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1537736709} + m_Target: {fileID: 1537736705} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1537736707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537736704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1537736708 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537736704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 144 +--- !u!114 &1537736709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537736704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 003f0000013f0000023f0000033f0000043f0000053f0000063f0000073f0000083f0000093f00000a3f00000b3f00000c3f00000d3f00000e3f00000f3f0000103f0000113f0000123f0000133f0000143f0000153f0000163f0000173f0000183f0000193f00001a3f00001b3f00001c3f00001d3f00001e3f00001f3f0000203f0000213f0000223f0000233f0000243f0000253f0000263f0000273f0000283f0000293f00002a3f00002b3f00002c3f00002d3f00002e3f00002f3f0000303f0000313f0000323f0000333f0000343f0000353f0000363f0000373f0000383f0000393f00003a3f00003b3f00003c3f00003d3f00003e3f00003f3f0000403f0000413f0000423f0000433f0000443f0000453f0000463f0000473f0000483f0000493f00004a3f00004b3f00004c3f00004d3f00004e3f00004f3f0000503f0000513f0000523f0000533f0000543f0000553f0000563f0000573f0000583f0000593f00005a3f00005b3f00005c3f00005d3f00005e3f00005f3f0000603f0000613f0000623f0000633f0000643f0000653f0000663f0000673f0000683f0000693f00006a3f00006b3f00006c3f00006d3f00006e3f00006f3f0000 + m_AlignBytes: 16 + groupID: 145 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16128 + particle2: 16129 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16129 + particle2: 16130 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16130 + particle2: 16131 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16131 + particle2: 16132 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16132 + particle2: 16133 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16133 + particle2: 16134 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16134 + particle2: 16135 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16135 + particle2: 16136 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16136 + particle2: 16137 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16137 + particle2: 16138 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16138 + particle2: 16139 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1551337443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1551337444} + - component: {fileID: 1551337448} + - component: {fileID: 1551337447} + - component: {fileID: 1551337446} + - component: {fileID: 1551337445} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1551337444 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551337443} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1551337445 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551337443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1551337448} + m_Target: {fileID: 1551337444} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1551337446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551337443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1551337447 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551337443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 145 +--- !u!114 &1551337448 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551337443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 703f0000713f0000723f0000733f0000743f0000753f0000763f0000773f0000783f0000793f00007a3f00007b3f00007c3f00007d3f00007e3f00007f3f0000803f0000813f0000823f0000833f0000843f0000853f0000863f0000873f0000883f0000893f00008a3f00008b3f00008c3f00008d3f00008e3f00008f3f0000903f0000913f0000923f0000933f0000943f0000953f0000963f0000973f0000983f0000993f00009a3f00009b3f00009c3f00009d3f00009e3f00009f3f0000a03f0000a13f0000a23f0000a33f0000a43f0000a53f0000a63f0000a73f0000a83f0000a93f0000aa3f0000ab3f0000ac3f0000ad3f0000ae3f0000af3f0000b03f0000b13f0000b23f0000b33f0000b43f0000b53f0000b63f0000b73f0000b83f0000b93f0000ba3f0000bb3f0000bc3f0000bd3f0000be3f0000bf3f0000c03f0000c13f0000c23f0000c33f0000c43f0000c53f0000c63f0000c73f0000c83f0000c93f0000ca3f0000cb3f0000cc3f0000cd3f0000ce3f0000cf3f0000d03f0000d13f0000d23f0000d33f0000d43f0000d53f0000d63f0000d73f0000d83f0000d93f0000da3f0000db3f0000dc3f0000dd3f0000de3f0000df3f0000 + m_AlignBytes: 16 + groupID: 146 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16240 + particle2: 16241 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16241 + particle2: 16242 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16242 + particle2: 16243 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16243 + particle2: 16244 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16244 + particle2: 16245 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16245 + particle2: 16246 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16246 + particle2: 16247 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16247 + particle2: 16248 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16248 + particle2: 16249 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16249 + particle2: 16250 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16250 + particle2: 16251 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1561375947 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1561375948} + - component: {fileID: 1561375949} + m_Layer: 0 + m_Name: FanRoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1561375948 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1561375947} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.25, y: 0, z: 2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 792243030} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!95 &1561375949 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1561375947} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 07415f30e4149416b920c1da07bdc3b7, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!1 &1569249537 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1569249538} + - component: {fileID: 1569249542} + - component: {fileID: 1569249541} + - component: {fileID: 1569249540} + - component: {fileID: 1569249539} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1569249538 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569249537} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1569249539 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569249537} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1569249542} + m_Target: {fileID: 1569249538} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1569249540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569249537} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1569249541 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569249537} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 146 +--- !u!114 &1569249542 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569249537} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e03f0000e13f0000e23f0000e33f0000e43f0000e53f0000e63f0000e73f0000e83f0000e93f0000ea3f0000eb3f0000ec3f0000ed3f0000ee3f0000ef3f0000f03f0000f13f0000f23f0000f33f0000f43f0000f53f0000f63f0000f73f0000f83f0000f93f0000fa3f0000fb3f0000fc3f0000fd3f0000fe3f0000ff3f0000004000000140000002400000034000000440000005400000064000000740000008400000094000000a4000000b4000000c4000000d4000000e4000000f400000104000001140000012400000134000001440000015400000164000001740000018400000194000001a4000001b4000001c4000001d4000001e4000001f400000204000002140000022400000234000002440000025400000264000002740000028400000294000002a4000002b4000002c4000002d4000002e4000002f400000304000003140000032400000334000003440000035400000364000003740000038400000394000003a4000003b4000003c4000003d4000003e4000003f400000404000004140000042400000434000004440000045400000464000004740000048400000494000004a4000004b4000004c4000004d4000004e4000004f400000 + m_AlignBytes: 16 + groupID: 147 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16352 + particle2: 16353 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16353 + particle2: 16354 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16354 + particle2: 16355 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16355 + particle2: 16356 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16356 + particle2: 16357 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16357 + particle2: 16358 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16358 + particle2: 16359 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16359 + particle2: 16360 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16360 + particle2: 16361 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16361 + particle2: 16362 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16362 + particle2: 16363 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1572775138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1572775139} + - component: {fileID: 1572775143} + - component: {fileID: 1572775142} + - component: {fileID: 1572775141} + - component: {fileID: 1572775140} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1572775139 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572775138} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1572775140 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572775138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1572775143} + m_Target: {fileID: 1572775139} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1572775141 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572775138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1572775142 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572775138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 147 +--- !u!114 &1572775143 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572775138} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 504000005140000052400000534000005440000055400000564000005740000058400000594000005a4000005b4000005c4000005d4000005e4000005f400000604000006140000062400000634000006440000065400000664000006740000068400000694000006a4000006b4000006c4000006d4000006e4000006f400000704000007140000072400000734000007440000075400000764000007740000078400000794000007a4000007b4000007c4000007d4000007e4000007f400000804000008140000082400000834000008440000085400000864000008740000088400000894000008a4000008b4000008c4000008d4000008e4000008f400000904000009140000092400000934000009440000095400000964000009740000098400000994000009a4000009b4000009c4000009d4000009e4000009f400000a0400000a1400000a2400000a3400000a4400000a5400000a6400000a7400000a8400000a9400000aa400000ab400000ac400000ad400000ae400000af400000b0400000b1400000b2400000b3400000b4400000b5400000b6400000b7400000b8400000b9400000ba400000bb400000bc400000bd400000be400000bf400000 + m_AlignBytes: 16 + groupID: 148 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16464 + particle2: 16465 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16465 + particle2: 16466 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16466 + particle2: 16467 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16467 + particle2: 16468 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16468 + particle2: 16469 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16469 + particle2: 16470 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16470 + particle2: 16471 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16471 + particle2: 16472 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16472 + particle2: 16473 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16473 + particle2: 16474 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16474 + particle2: 16475 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1588242873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1588242874} + - component: {fileID: 1588242878} + - component: {fileID: 1588242877} + - component: {fileID: 1588242876} + - component: {fileID: 1588242875} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1588242874 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588242873} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1588242875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588242873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1588242878} + m_Target: {fileID: 1588242874} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1588242876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588242873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1588242877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588242873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 148 +--- !u!114 &1588242878 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1588242873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0400000c1400000c2400000c3400000c4400000c5400000c6400000c7400000c8400000c9400000ca400000cb400000cc400000cd400000ce400000cf400000d0400000d1400000d2400000d3400000d4400000d5400000d6400000d7400000d8400000d9400000da400000db400000dc400000dd400000de400000df400000e0400000e1400000e2400000e3400000e4400000e5400000e6400000e7400000e8400000e9400000ea400000eb400000ec400000ed400000ee400000ef400000f0400000f1400000f2400000f3400000f4400000f5400000f6400000f7400000f8400000f9400000fa400000fb400000fc400000fd400000fe400000ff400000004100000141000002410000034100000441000005410000064100000741000008410000094100000a4100000b4100000c4100000d4100000e4100000f410000104100001141000012410000134100001441000015410000164100001741000018410000194100001a4100001b4100001c4100001d4100001e4100001f410000204100002141000022410000234100002441000025410000264100002741000028410000294100002a4100002b4100002c4100002d4100002e4100002f410000 + m_AlignBytes: 16 + groupID: 149 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16576 + particle2: 16577 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16577 + particle2: 16578 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16578 + particle2: 16579 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16579 + particle2: 16580 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16580 + particle2: 16581 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16581 + particle2: 16582 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16582 + particle2: 16583 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16583 + particle2: 16584 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16584 + particle2: 16585 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16585 + particle2: 16586 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16586 + particle2: 16587 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1593990335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1593990336} + - component: {fileID: 1593990340} + - component: {fileID: 1593990339} + - component: {fileID: 1593990338} + - component: {fileID: 1593990337} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1593990336 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593990335} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 648480057} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1593990337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593990335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1593990340} + m_Target: {fileID: 1593990336} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1593990338 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593990335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1593990339 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593990335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 149 +--- !u!114 &1593990340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593990335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 304100003141000032410000334100003441000035410000364100003741000038410000394100003a4100003b4100003c4100003d4100003e4100003f410000404100004141000042410000434100004441000045410000464100004741000048410000494100004a4100004b4100004c4100004d4100004e4100004f410000504100005141000052410000534100005441000055410000564100005741000058410000594100005a4100005b4100005c4100005d4100005e4100005f410000604100006141000062410000634100006441000065410000664100006741000068410000694100006a4100006b4100006c4100006d4100006e4100006f410000704100007141000072410000734100007441000075410000764100007741000078410000794100007a4100007b4100007c4100007d4100007e4100007f410000804100008141000082410000834100008441000085410000864100008741000088410000894100008a4100008b4100008c4100008d4100008e4100008f410000904100009141000092410000934100009441000095410000964100009741000098410000994100009a4100009b4100009c4100009d4100009e4100009f410000 + m_AlignBytes: 16 + groupID: 150 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16688 + particle2: 16689 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16689 + particle2: 16690 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16690 + particle2: 16691 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16691 + particle2: 16692 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16692 + particle2: 16693 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16693 + particle2: 16694 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16694 + particle2: 16695 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16695 + particle2: 16696 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16696 + particle2: 16697 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16697 + particle2: 16698 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16698 + particle2: 16699 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1595267026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1595267027} + - component: {fileID: 1595267031} + - component: {fileID: 1595267030} + - component: {fileID: 1595267029} + - component: {fileID: 1595267028} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1595267027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595267026} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1595267028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595267026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1595267031} + m_Target: {fileID: 1595267027} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1595267029 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595267026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1595267030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595267026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 150 +--- !u!114 &1595267031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1595267026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0410000a1410000a2410000a3410000a4410000a5410000a6410000a7410000a8410000a9410000aa410000ab410000ac410000ad410000ae410000af410000b0410000b1410000b2410000b3410000b4410000b5410000b6410000b7410000b8410000b9410000ba410000bb410000bc410000bd410000be410000bf410000c0410000c1410000c2410000c3410000c4410000c5410000c6410000c7410000c8410000c9410000ca410000cb410000cc410000cd410000ce410000cf410000d0410000d1410000d2410000d3410000d4410000d5410000d6410000d7410000d8410000d9410000da410000db410000dc410000dd410000de410000df410000e0410000e1410000e2410000e3410000e4410000e5410000e6410000e7410000e8410000e9410000ea410000eb410000ec410000ed410000ee410000ef410000f0410000f1410000f2410000f3410000f4410000f5410000f6410000f7410000f8410000f9410000fa410000fb410000fc410000fd410000fe410000ff410000004200000142000002420000034200000442000005420000064200000742000008420000094200000a4200000b4200000c4200000d4200000e4200000f420000 + m_AlignBytes: 16 + groupID: 151 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16800 + particle2: 16801 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16801 + particle2: 16802 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16802 + particle2: 16803 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16803 + particle2: 16804 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16804 + particle2: 16805 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16805 + particle2: 16806 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16806 + particle2: 16807 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16807 + particle2: 16808 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16808 + particle2: 16809 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16809 + particle2: 16810 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16810 + particle2: 16811 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1600426036 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1600426037} + - component: {fileID: 1600426041} + - component: {fileID: 1600426040} + - component: {fileID: 1600426039} + - component: {fileID: 1600426038} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1600426037 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600426036} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1600426038 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600426036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1600426041} + m_Target: {fileID: 1600426037} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1600426039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600426036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1600426040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600426036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 151 +--- !u!114 &1600426041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600426036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 104200001142000012420000134200001442000015420000164200001742000018420000194200001a4200001b4200001c4200001d4200001e4200001f420000204200002142000022420000234200002442000025420000264200002742000028420000294200002a4200002b4200002c4200002d4200002e4200002f420000304200003142000032420000334200003442000035420000364200003742000038420000394200003a4200003b4200003c4200003d4200003e4200003f420000404200004142000042420000434200004442000045420000464200004742000048420000494200004a4200004b4200004c4200004d4200004e4200004f420000504200005142000052420000534200005442000055420000564200005742000058420000594200005a4200005b4200005c4200005d4200005e4200005f420000604200006142000062420000634200006442000065420000664200006742000068420000694200006a4200006b4200006c4200006d4200006e4200006f420000704200007142000072420000734200007442000075420000764200007742000078420000794200007a4200007b4200007c4200007d4200007e4200007f420000 + m_AlignBytes: 16 + groupID: 152 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 16912 + particle2: 16913 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 16913 + particle2: 16914 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 16914 + particle2: 16915 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 16915 + particle2: 16916 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 16916 + particle2: 16917 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 16917 + particle2: 16918 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 16918 + particle2: 16919 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 16919 + particle2: 16920 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 16920 + particle2: 16921 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 16921 + particle2: 16922 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16922 + particle2: 16923 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1605421488 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1605421489} + - component: {fileID: 1605421493} + - component: {fileID: 1605421492} + - component: {fileID: 1605421491} + - component: {fileID: 1605421490} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1605421489 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1605421488} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1605421490 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1605421488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1605421493} + m_Target: {fileID: 1605421489} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1605421491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1605421488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1605421492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1605421488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 152 +--- !u!114 &1605421493 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1605421488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 804200008142000082420000834200008442000085420000864200008742000088420000894200008a4200008b4200008c4200008d4200008e4200008f420000904200009142000092420000934200009442000095420000964200009742000098420000994200009a4200009b4200009c4200009d4200009e4200009f420000a0420000a1420000a2420000a3420000a4420000a5420000a6420000a7420000a8420000a9420000aa420000ab420000ac420000ad420000ae420000af420000b0420000b1420000b2420000b3420000b4420000b5420000b6420000b7420000b8420000b9420000ba420000bb420000bc420000bd420000be420000bf420000c0420000c1420000c2420000c3420000c4420000c5420000c6420000c7420000c8420000c9420000ca420000cb420000cc420000cd420000ce420000cf420000d0420000d1420000d2420000d3420000d4420000d5420000d6420000d7420000d8420000d9420000da420000db420000dc420000dd420000de420000df420000e0420000e1420000e2420000e3420000e4420000e5420000e6420000e7420000e8420000e9420000ea420000eb420000ec420000ed420000ee420000ef420000 + m_AlignBytes: 16 + groupID: 153 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17024 + particle2: 17025 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17025 + particle2: 17026 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17026 + particle2: 17027 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17027 + particle2: 17028 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17028 + particle2: 17029 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17029 + particle2: 17030 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17030 + particle2: 17031 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17031 + particle2: 17032 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17032 + particle2: 17033 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17033 + particle2: 17034 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17034 + particle2: 17035 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1613103432 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1613103433} + - component: {fileID: 1613103437} + - component: {fileID: 1613103436} + - component: {fileID: 1613103435} + - component: {fileID: 1613103434} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1613103433 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613103432} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1613103434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613103432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1613103437} + m_Target: {fileID: 1613103433} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1613103435 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613103432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1613103436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613103432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 153 +--- !u!114 &1613103437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1613103432} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f0420000f1420000f2420000f3420000f4420000f5420000f6420000f7420000f8420000f9420000fa420000fb420000fc420000fd420000fe420000ff420000004300000143000002430000034300000443000005430000064300000743000008430000094300000a4300000b4300000c4300000d4300000e4300000f430000104300001143000012430000134300001443000015430000164300001743000018430000194300001a4300001b4300001c4300001d4300001e4300001f430000204300002143000022430000234300002443000025430000264300002743000028430000294300002a4300002b4300002c4300002d4300002e4300002f430000304300003143000032430000334300003443000035430000364300003743000038430000394300003a4300003b4300003c4300003d4300003e4300003f430000404300004143000042430000434300004443000045430000464300004743000048430000494300004a4300004b4300004c4300004d4300004e4300004f430000504300005143000052430000534300005443000055430000564300005743000058430000594300005a4300005b4300005c4300005d4300005e4300005f430000 + m_AlignBytes: 16 + groupID: 154 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17136 + particle2: 17137 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17137 + particle2: 17138 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17138 + particle2: 17139 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17139 + particle2: 17140 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17140 + particle2: 17141 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17141 + particle2: 17142 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17142 + particle2: 17143 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17143 + particle2: 17144 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17144 + particle2: 17145 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17145 + particle2: 17146 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17146 + particle2: 17147 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1621912097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1621912098} + - component: {fileID: 1621912102} + - component: {fileID: 1621912101} + - component: {fileID: 1621912100} + - component: {fileID: 1621912099} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1621912098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1621912097} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1621912099 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1621912097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1621912102} + m_Target: {fileID: 1621912098} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1621912100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1621912097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1621912101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1621912097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 154 +--- !u!114 &1621912102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1621912097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 604300006143000062430000634300006443000065430000664300006743000068430000694300006a4300006b4300006c4300006d4300006e4300006f430000704300007143000072430000734300007443000075430000764300007743000078430000794300007a4300007b4300007c4300007d4300007e4300007f430000804300008143000082430000834300008443000085430000864300008743000088430000894300008a4300008b4300008c4300008d4300008e4300008f430000904300009143000092430000934300009443000095430000964300009743000098430000994300009a4300009b4300009c4300009d4300009e4300009f430000a0430000a1430000a2430000a3430000a4430000a5430000a6430000a7430000a8430000a9430000aa430000ab430000ac430000ad430000ae430000af430000b0430000b1430000b2430000b3430000b4430000b5430000b6430000b7430000b8430000b9430000ba430000bb430000bc430000bd430000be430000bf430000c0430000c1430000c2430000c3430000c4430000c5430000c6430000c7430000c8430000c9430000ca430000cb430000cc430000cd430000ce430000cf430000 + m_AlignBytes: 16 + groupID: 155 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17248 + particle2: 17249 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17249 + particle2: 17250 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17250 + particle2: 17251 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17251 + particle2: 17252 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17252 + particle2: 17253 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17253 + particle2: 17254 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17254 + particle2: 17255 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17255 + particle2: 17256 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17256 + particle2: 17257 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17257 + particle2: 17258 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17258 + particle2: 17259 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1628171962 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1628171963} + m_Layer: 0 + m_Name: Row (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1628171963 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1628171962} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.6} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 449353293} + - {fileID: 1946747526} + - {fileID: 1572775139} + - {fileID: 1646474109} + - {fileID: 1824546302} + - {fileID: 549530596} + - {fileID: 1454186980} + - {fileID: 1734157832} + - {fileID: 1332770746} + - {fileID: 353133264} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1632801443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1632801444} + - component: {fileID: 1632801448} + - component: {fileID: 1632801447} + - component: {fileID: 1632801446} + - component: {fileID: 1632801445} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1632801444 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1632801443} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1632801445 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1632801443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1632801448} + m_Target: {fileID: 1632801444} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1632801446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1632801443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1632801447 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1632801443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 155 +--- !u!114 &1632801448 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1632801443} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d0430000d1430000d2430000d3430000d4430000d5430000d6430000d7430000d8430000d9430000da430000db430000dc430000dd430000de430000df430000e0430000e1430000e2430000e3430000e4430000e5430000e6430000e7430000e8430000e9430000ea430000eb430000ec430000ed430000ee430000ef430000f0430000f1430000f2430000f3430000f4430000f5430000f6430000f7430000f8430000f9430000fa430000fb430000fc430000fd430000fe430000ff430000004400000144000002440000034400000444000005440000064400000744000008440000094400000a4400000b4400000c4400000d4400000e4400000f440000104400001144000012440000134400001444000015440000164400001744000018440000194400001a4400001b4400001c4400001d4400001e4400001f440000204400002144000022440000234400002444000025440000264400002744000028440000294400002a4400002b4400002c4400002d4400002e4400002f440000304400003144000032440000334400003444000035440000364400003744000038440000394400003a4400003b4400003c4400003d4400003e4400003f440000 + m_AlignBytes: 16 + groupID: 156 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17360 + particle2: 17361 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17361 + particle2: 17362 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17362 + particle2: 17363 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17363 + particle2: 17364 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17364 + particle2: 17365 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17365 + particle2: 17366 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17366 + particle2: 17367 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17367 + particle2: 17368 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17368 + particle2: 17369 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17369 + particle2: 17370 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17370 + particle2: 17371 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1634777943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1634777944} + - component: {fileID: 1634777948} + - component: {fileID: 1634777947} + - component: {fileID: 1634777946} + - component: {fileID: 1634777945} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1634777944 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634777943} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1977632070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1634777945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634777943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1634777948} + m_Target: {fileID: 1634777944} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1634777946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634777943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1634777947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634777943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 156 +--- !u!114 &1634777948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634777943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 404400004144000042440000434400004444000045440000464400004744000048440000494400004a4400004b4400004c4400004d4400004e4400004f440000504400005144000052440000534400005444000055440000564400005744000058440000594400005a4400005b4400005c4400005d4400005e4400005f440000604400006144000062440000634400006444000065440000664400006744000068440000694400006a4400006b4400006c4400006d4400006e4400006f440000704400007144000072440000734400007444000075440000764400007744000078440000794400007a4400007b4400007c4400007d4400007e4400007f440000804400008144000082440000834400008444000085440000864400008744000088440000894400008a4400008b4400008c4400008d4400008e4400008f440000904400009144000092440000934400009444000095440000964400009744000098440000994400009a4400009b4400009c4400009d4400009e4400009f440000a0440000a1440000a2440000a3440000a4440000a5440000a6440000a7440000a8440000a9440000aa440000ab440000ac440000ad440000ae440000af440000 + m_AlignBytes: 16 + groupID: 157 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17472 + particle2: 17473 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17473 + particle2: 17474 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17474 + particle2: 17475 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17475 + particle2: 17476 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17476 + particle2: 17477 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17477 + particle2: 17478 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17478 + particle2: 17479 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17479 + particle2: 17480 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17480 + particle2: 17481 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17481 + particle2: 17482 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17482 + particle2: 17483 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1635734354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1635734355} + - component: {fileID: 1635734359} + - component: {fileID: 1635734358} + - component: {fileID: 1635734357} + - component: {fileID: 1635734356} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1635734355 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1635734354} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1635734356 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1635734354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1635734359} + m_Target: {fileID: 1635734355} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1635734357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1635734354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1635734358 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1635734354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 157 +--- !u!114 &1635734359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1635734354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b0440000b1440000b2440000b3440000b4440000b5440000b6440000b7440000b8440000b9440000ba440000bb440000bc440000bd440000be440000bf440000c0440000c1440000c2440000c3440000c4440000c5440000c6440000c7440000c8440000c9440000ca440000cb440000cc440000cd440000ce440000cf440000d0440000d1440000d2440000d3440000d4440000d5440000d6440000d7440000d8440000d9440000da440000db440000dc440000dd440000de440000df440000e0440000e1440000e2440000e3440000e4440000e5440000e6440000e7440000e8440000e9440000ea440000eb440000ec440000ed440000ee440000ef440000f0440000f1440000f2440000f3440000f4440000f5440000f6440000f7440000f8440000f9440000fa440000fb440000fc440000fd440000fe440000ff440000004500000145000002450000034500000445000005450000064500000745000008450000094500000a4500000b4500000c4500000d4500000e4500000f450000104500001145000012450000134500001445000015450000164500001745000018450000194500001a4500001b4500001c4500001d4500001e4500001f450000 + m_AlignBytes: 16 + groupID: 158 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17584 + particle2: 17585 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17585 + particle2: 17586 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17586 + particle2: 17587 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17587 + particle2: 17588 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17588 + particle2: 17589 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17589 + particle2: 17590 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17590 + particle2: 17591 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17591 + particle2: 17592 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17592 + particle2: 17593 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17593 + particle2: 17594 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17594 + particle2: 17595 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1640435993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1640435994} + m_Layer: 0 + m_Name: Row (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1640435994 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1640435993} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 938771666} + - {fileID: 1374969021} + - {fileID: 1501728739} + - {fileID: 1297311441} + - {fileID: 1853955320} + - {fileID: 1808557641} + - {fileID: 1923931438} + - {fileID: 386305778} + - {fileID: 452192106} + - {fileID: 1822342381} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1646474108 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1646474109} + - component: {fileID: 1646474113} + - component: {fileID: 1646474112} + - component: {fileID: 1646474111} + - component: {fileID: 1646474110} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1646474109 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646474108} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1646474110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646474108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1646474113} + m_Target: {fileID: 1646474109} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1646474111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646474108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1646474112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646474108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 158 +--- !u!114 &1646474113 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646474108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 204500002145000022450000234500002445000025450000264500002745000028450000294500002a4500002b4500002c4500002d4500002e4500002f450000304500003145000032450000334500003445000035450000364500003745000038450000394500003a4500003b4500003c4500003d4500003e4500003f450000404500004145000042450000434500004445000045450000464500004745000048450000494500004a4500004b4500004c4500004d4500004e4500004f450000504500005145000052450000534500005445000055450000564500005745000058450000594500005a4500005b4500005c4500005d4500005e4500005f450000604500006145000062450000634500006445000065450000664500006745000068450000694500006a4500006b4500006c4500006d4500006e4500006f450000704500007145000072450000734500007445000075450000764500007745000078450000794500007a4500007b4500007c4500007d4500007e4500007f450000804500008145000082450000834500008445000085450000864500008745000088450000894500008a4500008b4500008c4500008d4500008e4500008f450000 + m_AlignBytes: 16 + groupID: 159 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17696 + particle2: 17697 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17697 + particle2: 17698 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17698 + particle2: 17699 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17699 + particle2: 17700 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17700 + particle2: 17701 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17701 + particle2: 17702 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17702 + particle2: 17703 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17703 + particle2: 17704 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17704 + particle2: 17705 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17705 + particle2: 17706 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17706 + particle2: 17707 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1649225305 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1649225306} + - component: {fileID: 1649225310} + - component: {fileID: 1649225309} + - component: {fileID: 1649225308} + - component: {fileID: 1649225307} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1649225306 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649225305} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1649225307 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649225305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1649225310} + m_Target: {fileID: 1649225306} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1649225308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649225305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1649225309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649225305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 159 +--- !u!114 &1649225310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1649225305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 904500009145000092450000934500009445000095450000964500009745000098450000994500009a4500009b4500009c4500009d4500009e4500009f450000a0450000a1450000a2450000a3450000a4450000a5450000a6450000a7450000a8450000a9450000aa450000ab450000ac450000ad450000ae450000af450000b0450000b1450000b2450000b3450000b4450000b5450000b6450000b7450000b8450000b9450000ba450000bb450000bc450000bd450000be450000bf450000c0450000c1450000c2450000c3450000c4450000c5450000c6450000c7450000c8450000c9450000ca450000cb450000cc450000cd450000ce450000cf450000d0450000d1450000d2450000d3450000d4450000d5450000d6450000d7450000d8450000d9450000da450000db450000dc450000dd450000de450000df450000e0450000e1450000e2450000e3450000e4450000e5450000e6450000e7450000e8450000e9450000ea450000eb450000ec450000ed450000ee450000ef450000f0450000f1450000f2450000f3450000f4450000f5450000f6450000f7450000f8450000f9450000fa450000fb450000fc450000fd450000fe450000ff450000 + m_AlignBytes: 16 + groupID: 160 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17808 + particle2: 17809 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17809 + particle2: 17810 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17810 + particle2: 17811 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17811 + particle2: 17812 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17812 + particle2: 17813 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17813 + particle2: 17814 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17814 + particle2: 17815 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17815 + particle2: 17816 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17816 + particle2: 17817 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17817 + particle2: 17818 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17818 + particle2: 17819 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1707229807 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1707229808} + - component: {fileID: 1707229812} + - component: {fileID: 1707229811} + - component: {fileID: 1707229810} + - component: {fileID: 1707229809} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1707229808 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707229807} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1707229809 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707229807} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1707229812} + m_Target: {fileID: 1707229808} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1707229810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707229807} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1707229811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707229807} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 160 +--- !u!114 &1707229812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707229807} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 004600000146000002460000034600000446000005460000064600000746000008460000094600000a4600000b4600000c4600000d4600000e4600000f460000104600001146000012460000134600001446000015460000164600001746000018460000194600001a4600001b4600001c4600001d4600001e4600001f460000204600002146000022460000234600002446000025460000264600002746000028460000294600002a4600002b4600002c4600002d4600002e4600002f460000304600003146000032460000334600003446000035460000364600003746000038460000394600003a4600003b4600003c4600003d4600003e4600003f460000404600004146000042460000434600004446000045460000464600004746000048460000494600004a4600004b4600004c4600004d4600004e4600004f460000504600005146000052460000534600005446000055460000564600005746000058460000594600005a4600005b4600005c4600005d4600005e4600005f460000604600006146000062460000634600006446000065460000664600006746000068460000694600006a4600006b4600006c4600006d4600006e4600006f460000 + m_AlignBytes: 16 + groupID: 161 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 17920 + particle2: 17921 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 17921 + particle2: 17922 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 17922 + particle2: 17923 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 17923 + particle2: 17924 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 17924 + particle2: 17925 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 17925 + particle2: 17926 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 17926 + particle2: 17927 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 17927 + particle2: 17928 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 17928 + particle2: 17929 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 17929 + particle2: 17930 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 17930 + particle2: 17931 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1734157831 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1734157832} + - component: {fileID: 1734157836} + - component: {fileID: 1734157835} + - component: {fileID: 1734157834} + - component: {fileID: 1734157833} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1734157832 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1734157831} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1734157833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1734157831} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1734157836} + m_Target: {fileID: 1734157832} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1734157834 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1734157831} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1734157835 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1734157831} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 161 +--- !u!114 &1734157836 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1734157831} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 704600007146000072460000734600007446000075460000764600007746000078460000794600007a4600007b4600007c4600007d4600007e4600007f460000804600008146000082460000834600008446000085460000864600008746000088460000894600008a4600008b4600008c4600008d4600008e4600008f460000904600009146000092460000934600009446000095460000964600009746000098460000994600009a4600009b4600009c4600009d4600009e4600009f460000a0460000a1460000a2460000a3460000a4460000a5460000a6460000a7460000a8460000a9460000aa460000ab460000ac460000ad460000ae460000af460000b0460000b1460000b2460000b3460000b4460000b5460000b6460000b7460000b8460000b9460000ba460000bb460000bc460000bd460000be460000bf460000c0460000c1460000c2460000c3460000c4460000c5460000c6460000c7460000c8460000c9460000ca460000cb460000cc460000cd460000ce460000cf460000d0460000d1460000d2460000d3460000d4460000d5460000d6460000d7460000d8460000d9460000da460000db460000dc460000dd460000de460000df460000 + m_AlignBytes: 16 + groupID: 162 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18032 + particle2: 18033 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18033 + particle2: 18034 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18034 + particle2: 18035 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18035 + particle2: 18036 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18036 + particle2: 18037 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18037 + particle2: 18038 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18038 + particle2: 18039 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18039 + particle2: 18040 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18040 + particle2: 18041 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18041 + particle2: 18042 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18042 + particle2: 18043 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1739484932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1739484933} + - component: {fileID: 1739484937} + - component: {fileID: 1739484936} + - component: {fileID: 1739484935} + - component: {fileID: 1739484934} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1739484933 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739484932} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 510728467} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1739484934 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739484932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1739484937} + m_Target: {fileID: 1739484933} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1739484935 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739484932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1739484936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739484932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 162 +--- !u!114 &1739484937 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739484932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0460000e1460000e2460000e3460000e4460000e5460000e6460000e7460000e8460000e9460000ea460000eb460000ec460000ed460000ee460000ef460000f0460000f1460000f2460000f3460000f4460000f5460000f6460000f7460000f8460000f9460000fa460000fb460000fc460000fd460000fe460000ff460000004700000147000002470000034700000447000005470000064700000747000008470000094700000a4700000b4700000c4700000d4700000e4700000f470000104700001147000012470000134700001447000015470000164700001747000018470000194700001a4700001b4700001c4700001d4700001e4700001f470000204700002147000022470000234700002447000025470000264700002747000028470000294700002a4700002b4700002c4700002d4700002e4700002f470000304700003147000032470000334700003447000035470000364700003747000038470000394700003a4700003b4700003c4700003d4700003e4700003f470000404700004147000042470000434700004447000045470000464700004747000048470000494700004a4700004b4700004c4700004d4700004e4700004f470000 + m_AlignBytes: 16 + groupID: 163 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18144 + particle2: 18145 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18145 + particle2: 18146 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18146 + particle2: 18147 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18147 + particle2: 18148 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18148 + particle2: 18149 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18149 + particle2: 18150 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18150 + particle2: 18151 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18151 + particle2: 18152 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18152 + particle2: 18153 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18153 + particle2: 18154 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18154 + particle2: 18155 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1743992357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1743992358} + - component: {fileID: 1743992362} + - component: {fileID: 1743992361} + - component: {fileID: 1743992360} + - component: {fileID: 1743992359} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1743992358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743992357} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 249029318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1743992359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743992357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1743992362} + m_Target: {fileID: 1743992358} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1743992360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743992357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1743992361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743992357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 163 +--- !u!114 &1743992362 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1743992357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 504700005147000052470000534700005447000055470000564700005747000058470000594700005a4700005b4700005c4700005d4700005e4700005f470000604700006147000062470000634700006447000065470000664700006747000068470000694700006a4700006b4700006c4700006d4700006e4700006f470000704700007147000072470000734700007447000075470000764700007747000078470000794700007a4700007b4700007c4700007d4700007e4700007f470000804700008147000082470000834700008447000085470000864700008747000088470000894700008a4700008b4700008c4700008d4700008e4700008f470000904700009147000092470000934700009447000095470000964700009747000098470000994700009a4700009b4700009c4700009d4700009e4700009f470000a0470000a1470000a2470000a3470000a4470000a5470000a6470000a7470000a8470000a9470000aa470000ab470000ac470000ad470000ae470000af470000b0470000b1470000b2470000b3470000b4470000b5470000b6470000b7470000b8470000b9470000ba470000bb470000bc470000bd470000be470000bf470000 + m_AlignBytes: 16 + groupID: 164 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18256 + particle2: 18257 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18257 + particle2: 18258 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18258 + particle2: 18259 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18259 + particle2: 18260 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18260 + particle2: 18261 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18261 + particle2: 18262 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18262 + particle2: 18263 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18263 + particle2: 18264 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18264 + particle2: 18265 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18265 + particle2: 18266 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18266 + particle2: 18267 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1746497395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1746497396} + - component: {fileID: 1746497400} + - component: {fileID: 1746497399} + - component: {fileID: 1746497398} + - component: {fileID: 1746497397} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1746497396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746497395} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1746497397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746497395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1746497400} + m_Target: {fileID: 1746497396} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1746497398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746497395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1746497399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746497395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 164 +--- !u!114 &1746497400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746497395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0470000c1470000c2470000c3470000c4470000c5470000c6470000c7470000c8470000c9470000ca470000cb470000cc470000cd470000ce470000cf470000d0470000d1470000d2470000d3470000d4470000d5470000d6470000d7470000d8470000d9470000da470000db470000dc470000dd470000de470000df470000e0470000e1470000e2470000e3470000e4470000e5470000e6470000e7470000e8470000e9470000ea470000eb470000ec470000ed470000ee470000ef470000f0470000f1470000f2470000f3470000f4470000f5470000f6470000f7470000f8470000f9470000fa470000fb470000fc470000fd470000fe470000ff470000004800000148000002480000034800000448000005480000064800000748000008480000094800000a4800000b4800000c4800000d4800000e4800000f480000104800001148000012480000134800001448000015480000164800001748000018480000194800001a4800001b4800001c4800001d4800001e4800001f480000204800002148000022480000234800002448000025480000264800002748000028480000294800002a4800002b4800002c4800002d4800002e4800002f480000 + m_AlignBytes: 16 + groupID: 165 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18368 + particle2: 18369 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18369 + particle2: 18370 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18370 + particle2: 18371 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18371 + particle2: 18372 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18372 + particle2: 18373 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18373 + particle2: 18374 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18374 + particle2: 18375 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18375 + particle2: 18376 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18376 + particle2: 18377 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18377 + particle2: 18378 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18378 + particle2: 18379 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1753057673 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1753057674} + - component: {fileID: 1753057678} + - component: {fileID: 1753057677} + - component: {fileID: 1753057676} + - component: {fileID: 1753057675} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1753057674 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753057673} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1753057675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753057673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1753057678} + m_Target: {fileID: 1753057674} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1753057676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753057673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1753057677 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753057673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 165 +--- !u!114 &1753057678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753057673} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 304800003148000032480000334800003448000035480000364800003748000038480000394800003a4800003b4800003c4800003d4800003e4800003f480000404800004148000042480000434800004448000045480000464800004748000048480000494800004a4800004b4800004c4800004d4800004e4800004f480000504800005148000052480000534800005448000055480000564800005748000058480000594800005a4800005b4800005c4800005d4800005e4800005f480000604800006148000062480000634800006448000065480000664800006748000068480000694800006a4800006b4800006c4800006d4800006e4800006f480000704800007148000072480000734800007448000075480000764800007748000078480000794800007a4800007b4800007c4800007d4800007e4800007f480000804800008148000082480000834800008448000085480000864800008748000088480000894800008a4800008b4800008c4800008d4800008e4800008f480000904800009148000092480000934800009448000095480000964800009748000098480000994800009a4800009b4800009c4800009d4800009e4800009f480000 + m_AlignBytes: 16 + groupID: 166 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18480 + particle2: 18481 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18481 + particle2: 18482 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18482 + particle2: 18483 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18483 + particle2: 18484 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18484 + particle2: 18485 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18485 + particle2: 18486 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18486 + particle2: 18487 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18487 + particle2: 18488 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18488 + particle2: 18489 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18489 + particle2: 18490 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18490 + particle2: 18491 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1758285765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1758285766} + - component: {fileID: 1758285770} + - component: {fileID: 1758285769} + - component: {fileID: 1758285768} + - component: {fileID: 1758285767} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1758285766 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1758285765} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1758285767 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1758285765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1758285770} + m_Target: {fileID: 1758285766} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1758285768 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1758285765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1758285769 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1758285765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 166 +--- !u!114 &1758285770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1758285765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0480000a1480000a2480000a3480000a4480000a5480000a6480000a7480000a8480000a9480000aa480000ab480000ac480000ad480000ae480000af480000b0480000b1480000b2480000b3480000b4480000b5480000b6480000b7480000b8480000b9480000ba480000bb480000bc480000bd480000be480000bf480000c0480000c1480000c2480000c3480000c4480000c5480000c6480000c7480000c8480000c9480000ca480000cb480000cc480000cd480000ce480000cf480000d0480000d1480000d2480000d3480000d4480000d5480000d6480000d7480000d8480000d9480000da480000db480000dc480000dd480000de480000df480000e0480000e1480000e2480000e3480000e4480000e5480000e6480000e7480000e8480000e9480000ea480000eb480000ec480000ed480000ee480000ef480000f0480000f1480000f2480000f3480000f4480000f5480000f6480000f7480000f8480000f9480000fa480000fb480000fc480000fd480000fe480000ff480000004900000149000002490000034900000449000005490000064900000749000008490000094900000a4900000b4900000c4900000d4900000e4900000f490000 + m_AlignBytes: 16 + groupID: 167 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18592 + particle2: 18593 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18593 + particle2: 18594 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18594 + particle2: 18595 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18595 + particle2: 18596 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18596 + particle2: 18597 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18597 + particle2: 18598 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18598 + particle2: 18599 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18599 + particle2: 18600 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18600 + particle2: 18601 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18601 + particle2: 18602 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18602 + particle2: 18603 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1760688767 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1760688768} + m_Layer: 0 + m_Name: Group (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1760688768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760688767} + serializedVersion: 2 + m_LocalRotation: {x: 0.0008726948, y: 0, z: 0, w: 0.99999964} + m_LocalPosition: {x: -1.11, y: 1.59, z: -0.39} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 940408952} + - {fileID: 1464717035} + - {fileID: 510728467} + - {fileID: 1062536481} + - {fileID: 713844502} + - {fileID: 1977632070} + - {fileID: 54623967} + - {fileID: 648480057} + - {fileID: 426164209} + - {fileID: 1798495239} + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0.1, y: 0, z: 0} +--- !u!1 &1771245891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1771245892} + - component: {fileID: 1771245896} + - component: {fileID: 1771245895} + - component: {fileID: 1771245894} + - component: {fileID: 1771245893} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1771245892 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771245891} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1771245893 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771245891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1771245896} + m_Target: {fileID: 1771245892} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1771245894 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771245891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1771245895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771245891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 167 +--- !u!114 &1771245896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771245891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 104900001149000012490000134900001449000015490000164900001749000018490000194900001a4900001b4900001c4900001d4900001e4900001f490000204900002149000022490000234900002449000025490000264900002749000028490000294900002a4900002b4900002c4900002d4900002e4900002f490000304900003149000032490000334900003449000035490000364900003749000038490000394900003a4900003b4900003c4900003d4900003e4900003f490000404900004149000042490000434900004449000045490000464900004749000048490000494900004a4900004b4900004c4900004d4900004e4900004f490000504900005149000052490000534900005449000055490000564900005749000058490000594900005a4900005b4900005c4900005d4900005e4900005f490000604900006149000062490000634900006449000065490000664900006749000068490000694900006a4900006b4900006c4900006d4900006e4900006f490000704900007149000072490000734900007449000075490000764900007749000078490000794900007a4900007b4900007c4900007d4900007e4900007f490000 + m_AlignBytes: 16 + groupID: 168 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18704 + particle2: 18705 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18705 + particle2: 18706 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18706 + particle2: 18707 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18707 + particle2: 18708 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18708 + particle2: 18709 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18709 + particle2: 18710 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18710 + particle2: 18711 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18711 + particle2: 18712 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18712 + particle2: 18713 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18713 + particle2: 18714 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18714 + particle2: 18715 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1772381103 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1772381104} + - component: {fileID: 1772381108} + - component: {fileID: 1772381107} + - component: {fileID: 1772381106} + - component: {fileID: 1772381105} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1772381104 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772381103} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1772381105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772381103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1772381108} + m_Target: {fileID: 1772381104} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1772381106 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772381103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1772381107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772381103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 168 +--- !u!114 &1772381108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772381103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 804900008149000082490000834900008449000085490000864900008749000088490000894900008a4900008b4900008c4900008d4900008e4900008f490000904900009149000092490000934900009449000095490000964900009749000098490000994900009a4900009b4900009c4900009d4900009e4900009f490000a0490000a1490000a2490000a3490000a4490000a5490000a6490000a7490000a8490000a9490000aa490000ab490000ac490000ad490000ae490000af490000b0490000b1490000b2490000b3490000b4490000b5490000b6490000b7490000b8490000b9490000ba490000bb490000bc490000bd490000be490000bf490000c0490000c1490000c2490000c3490000c4490000c5490000c6490000c7490000c8490000c9490000ca490000cb490000cc490000cd490000ce490000cf490000d0490000d1490000d2490000d3490000d4490000d5490000d6490000d7490000d8490000d9490000da490000db490000dc490000dd490000de490000df490000e0490000e1490000e2490000e3490000e4490000e5490000e6490000e7490000e8490000e9490000ea490000eb490000ec490000ed490000ee490000ef490000 + m_AlignBytes: 16 + groupID: 169 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18816 + particle2: 18817 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18817 + particle2: 18818 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18818 + particle2: 18819 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18819 + particle2: 18820 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18820 + particle2: 18821 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18821 + particle2: 18822 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18822 + particle2: 18823 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18823 + particle2: 18824 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18824 + particle2: 18825 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18825 + particle2: 18826 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18826 + particle2: 18827 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1789705480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1789705481} + - component: {fileID: 1789705485} + - component: {fileID: 1789705484} + - component: {fileID: 1789705483} + - component: {fileID: 1789705482} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1789705481 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789705480} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1789705482 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789705480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1789705485} + m_Target: {fileID: 1789705481} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1789705483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789705480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1789705484 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789705480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 169 +--- !u!114 &1789705485 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789705480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f0490000f1490000f2490000f3490000f4490000f5490000f6490000f7490000f8490000f9490000fa490000fb490000fc490000fd490000fe490000ff490000004a0000014a0000024a0000034a0000044a0000054a0000064a0000074a0000084a0000094a00000a4a00000b4a00000c4a00000d4a00000e4a00000f4a0000104a0000114a0000124a0000134a0000144a0000154a0000164a0000174a0000184a0000194a00001a4a00001b4a00001c4a00001d4a00001e4a00001f4a0000204a0000214a0000224a0000234a0000244a0000254a0000264a0000274a0000284a0000294a00002a4a00002b4a00002c4a00002d4a00002e4a00002f4a0000304a0000314a0000324a0000334a0000344a0000354a0000364a0000374a0000384a0000394a00003a4a00003b4a00003c4a00003d4a00003e4a00003f4a0000404a0000414a0000424a0000434a0000444a0000454a0000464a0000474a0000484a0000494a00004a4a00004b4a00004c4a00004d4a00004e4a00004f4a0000504a0000514a0000524a0000534a0000544a0000554a0000564a0000574a0000584a0000594a00005a4a00005b4a00005c4a00005d4a00005e4a00005f4a0000 + m_AlignBytes: 16 + groupID: 170 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 18928 + particle2: 18929 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 18929 + particle2: 18930 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 18930 + particle2: 18931 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 18931 + particle2: 18932 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 18932 + particle2: 18933 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 18933 + particle2: 18934 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 18934 + particle2: 18935 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 18935 + particle2: 18936 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 18936 + particle2: 18937 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 18937 + particle2: 18938 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 18938 + particle2: 18939 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1796031223 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1796031224} + - component: {fileID: 1796031228} + - component: {fileID: 1796031227} + - component: {fileID: 1796031226} + - component: {fileID: 1796031225} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1796031224 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796031223} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1796031225 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796031223} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1796031228} + m_Target: {fileID: 1796031224} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1796031226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796031223} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1796031227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796031223} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 170 +--- !u!114 &1796031228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1796031223} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 604a0000614a0000624a0000634a0000644a0000654a0000664a0000674a0000684a0000694a00006a4a00006b4a00006c4a00006d4a00006e4a00006f4a0000704a0000714a0000724a0000734a0000744a0000754a0000764a0000774a0000784a0000794a00007a4a00007b4a00007c4a00007d4a00007e4a00007f4a0000804a0000814a0000824a0000834a0000844a0000854a0000864a0000874a0000884a0000894a00008a4a00008b4a00008c4a00008d4a00008e4a00008f4a0000904a0000914a0000924a0000934a0000944a0000954a0000964a0000974a0000984a0000994a00009a4a00009b4a00009c4a00009d4a00009e4a00009f4a0000a04a0000a14a0000a24a0000a34a0000a44a0000a54a0000a64a0000a74a0000a84a0000a94a0000aa4a0000ab4a0000ac4a0000ad4a0000ae4a0000af4a0000b04a0000b14a0000b24a0000b34a0000b44a0000b54a0000b64a0000b74a0000b84a0000b94a0000ba4a0000bb4a0000bc4a0000bd4a0000be4a0000bf4a0000c04a0000c14a0000c24a0000c34a0000c44a0000c54a0000c64a0000c74a0000c84a0000c94a0000ca4a0000cb4a0000cc4a0000cd4a0000ce4a0000cf4a0000 + m_AlignBytes: 16 + groupID: 171 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19040 + particle2: 19041 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19041 + particle2: 19042 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19042 + particle2: 19043 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19043 + particle2: 19044 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19044 + particle2: 19045 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19045 + particle2: 19046 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19046 + particle2: 19047 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19047 + particle2: 19048 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19048 + particle2: 19049 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19049 + particle2: 19050 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19050 + particle2: 19051 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1798495238 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1798495239} + m_Layer: 0 + m_Name: Row (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1798495239 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1798495238} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1.8} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 258800385} + - {fileID: 23157} + - {fileID: 1479240942} + - {fileID: 765011064} + - {fileID: 1022784183} + - {fileID: 1988484819} + - {fileID: 1632801444} + - {fileID: 469876705} + - {fileID: 1772381104} + - {fileID: 84035660} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1808557640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1808557641} + - component: {fileID: 1808557645} + - component: {fileID: 1808557644} + - component: {fileID: 1808557643} + - component: {fileID: 1808557642} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1808557641 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808557640} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1808557642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808557640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1808557645} + m_Target: {fileID: 1808557641} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1808557643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808557640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1808557644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808557640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 171 +--- !u!114 &1808557645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808557640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d04a0000d14a0000d24a0000d34a0000d44a0000d54a0000d64a0000d74a0000d84a0000d94a0000da4a0000db4a0000dc4a0000dd4a0000de4a0000df4a0000e04a0000e14a0000e24a0000e34a0000e44a0000e54a0000e64a0000e74a0000e84a0000e94a0000ea4a0000eb4a0000ec4a0000ed4a0000ee4a0000ef4a0000f04a0000f14a0000f24a0000f34a0000f44a0000f54a0000f64a0000f74a0000f84a0000f94a0000fa4a0000fb4a0000fc4a0000fd4a0000fe4a0000ff4a0000004b0000014b0000024b0000034b0000044b0000054b0000064b0000074b0000084b0000094b00000a4b00000b4b00000c4b00000d4b00000e4b00000f4b0000104b0000114b0000124b0000134b0000144b0000154b0000164b0000174b0000184b0000194b00001a4b00001b4b00001c4b00001d4b00001e4b00001f4b0000204b0000214b0000224b0000234b0000244b0000254b0000264b0000274b0000284b0000294b00002a4b00002b4b00002c4b00002d4b00002e4b00002f4b0000304b0000314b0000324b0000334b0000344b0000354b0000364b0000374b0000384b0000394b00003a4b00003b4b00003c4b00003d4b00003e4b00003f4b0000 + m_AlignBytes: 16 + groupID: 172 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19152 + particle2: 19153 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19153 + particle2: 19154 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19154 + particle2: 19155 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19155 + particle2: 19156 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19156 + particle2: 19157 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19157 + particle2: 19158 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19158 + particle2: 19159 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19159 + particle2: 19160 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19160 + particle2: 19161 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19161 + particle2: 19162 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19162 + particle2: 19163 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1812706182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1812706183} + - component: {fileID: 1812706187} + - component: {fileID: 1812706186} + - component: {fileID: 1812706185} + - component: {fileID: 1812706184} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1812706183 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812706182} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1812706184 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812706182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1812706187} + m_Target: {fileID: 1812706183} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1812706185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812706182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1812706186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812706182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 172 +--- !u!114 &1812706187 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812706182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 404b0000414b0000424b0000434b0000444b0000454b0000464b0000474b0000484b0000494b00004a4b00004b4b00004c4b00004d4b00004e4b00004f4b0000504b0000514b0000524b0000534b0000544b0000554b0000564b0000574b0000584b0000594b00005a4b00005b4b00005c4b00005d4b00005e4b00005f4b0000604b0000614b0000624b0000634b0000644b0000654b0000664b0000674b0000684b0000694b00006a4b00006b4b00006c4b00006d4b00006e4b00006f4b0000704b0000714b0000724b0000734b0000744b0000754b0000764b0000774b0000784b0000794b00007a4b00007b4b00007c4b00007d4b00007e4b00007f4b0000804b0000814b0000824b0000834b0000844b0000854b0000864b0000874b0000884b0000894b00008a4b00008b4b00008c4b00008d4b00008e4b00008f4b0000904b0000914b0000924b0000934b0000944b0000954b0000964b0000974b0000984b0000994b00009a4b00009b4b00009c4b00009d4b00009e4b00009f4b0000a04b0000a14b0000a24b0000a34b0000a44b0000a54b0000a64b0000a74b0000a84b0000a94b0000aa4b0000ab4b0000ac4b0000ad4b0000ae4b0000af4b0000 + m_AlignBytes: 16 + groupID: 173 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19264 + particle2: 19265 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19265 + particle2: 19266 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19266 + particle2: 19267 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19267 + particle2: 19268 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19268 + particle2: 19269 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19269 + particle2: 19270 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19270 + particle2: 19271 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19271 + particle2: 19272 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19272 + particle2: 19273 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19273 + particle2: 19274 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19274 + particle2: 19275 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1822342380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1822342381} + - component: {fileID: 1822342385} + - component: {fileID: 1822342384} + - component: {fileID: 1822342383} + - component: {fileID: 1822342382} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1822342381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822342380} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1822342382 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822342380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1822342385} + m_Target: {fileID: 1822342381} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1822342383 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822342380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1822342384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822342380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 173 +--- !u!114 &1822342385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822342380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b04b0000b14b0000b24b0000b34b0000b44b0000b54b0000b64b0000b74b0000b84b0000b94b0000ba4b0000bb4b0000bc4b0000bd4b0000be4b0000bf4b0000c04b0000c14b0000c24b0000c34b0000c44b0000c54b0000c64b0000c74b0000c84b0000c94b0000ca4b0000cb4b0000cc4b0000cd4b0000ce4b0000cf4b0000d04b0000d14b0000d24b0000d34b0000d44b0000d54b0000d64b0000d74b0000d84b0000d94b0000da4b0000db4b0000dc4b0000dd4b0000de4b0000df4b0000e04b0000e14b0000e24b0000e34b0000e44b0000e54b0000e64b0000e74b0000e84b0000e94b0000ea4b0000eb4b0000ec4b0000ed4b0000ee4b0000ef4b0000f04b0000f14b0000f24b0000f34b0000f44b0000f54b0000f64b0000f74b0000f84b0000f94b0000fa4b0000fb4b0000fc4b0000fd4b0000fe4b0000ff4b0000004c0000014c0000024c0000034c0000044c0000054c0000064c0000074c0000084c0000094c00000a4c00000b4c00000c4c00000d4c00000e4c00000f4c0000104c0000114c0000124c0000134c0000144c0000154c0000164c0000174c0000184c0000194c00001a4c00001b4c00001c4c00001d4c00001e4c00001f4c0000 + m_AlignBytes: 16 + groupID: 174 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19376 + particle2: 19377 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19377 + particle2: 19378 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19378 + particle2: 19379 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19379 + particle2: 19380 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19380 + particle2: 19381 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19381 + particle2: 19382 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19382 + particle2: 19383 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19383 + particle2: 19384 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19384 + particle2: 19385 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19385 + particle2: 19386 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19386 + particle2: 19387 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1824546301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1824546302} + - component: {fileID: 1824546306} + - component: {fileID: 1824546305} + - component: {fileID: 1824546304} + - component: {fileID: 1824546303} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1824546302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824546301} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1824546303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824546301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1824546306} + m_Target: {fileID: 1824546302} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1824546304 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824546301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1824546305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824546301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 174 +--- !u!114 &1824546306 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824546301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 204c0000214c0000224c0000234c0000244c0000254c0000264c0000274c0000284c0000294c00002a4c00002b4c00002c4c00002d4c00002e4c00002f4c0000304c0000314c0000324c0000334c0000344c0000354c0000364c0000374c0000384c0000394c00003a4c00003b4c00003c4c00003d4c00003e4c00003f4c0000404c0000414c0000424c0000434c0000444c0000454c0000464c0000474c0000484c0000494c00004a4c00004b4c00004c4c00004d4c00004e4c00004f4c0000504c0000514c0000524c0000534c0000544c0000554c0000564c0000574c0000584c0000594c00005a4c00005b4c00005c4c00005d4c00005e4c00005f4c0000604c0000614c0000624c0000634c0000644c0000654c0000664c0000674c0000684c0000694c00006a4c00006b4c00006c4c00006d4c00006e4c00006f4c0000704c0000714c0000724c0000734c0000744c0000754c0000764c0000774c0000784c0000794c00007a4c00007b4c00007c4c00007d4c00007e4c00007f4c0000804c0000814c0000824c0000834c0000844c0000854c0000864c0000874c0000884c0000894c00008a4c00008b4c00008c4c00008d4c00008e4c00008f4c0000 + m_AlignBytes: 16 + groupID: 175 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19488 + particle2: 19489 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19489 + particle2: 19490 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19490 + particle2: 19491 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19491 + particle2: 19492 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19492 + particle2: 19493 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19493 + particle2: 19494 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19494 + particle2: 19495 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19495 + particle2: 19496 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19496 + particle2: 19497 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19497 + particle2: 19498 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19498 + particle2: 19499 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1853955319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1853955320} + - component: {fileID: 1853955324} + - component: {fileID: 1853955323} + - component: {fileID: 1853955322} + - component: {fileID: 1853955321} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1853955320 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1853955319} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1853955321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1853955319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1853955324} + m_Target: {fileID: 1853955320} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1853955322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1853955319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1853955323 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1853955319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 175 +--- !u!114 &1853955324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1853955319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 904c0000914c0000924c0000934c0000944c0000954c0000964c0000974c0000984c0000994c00009a4c00009b4c00009c4c00009d4c00009e4c00009f4c0000a04c0000a14c0000a24c0000a34c0000a44c0000a54c0000a64c0000a74c0000a84c0000a94c0000aa4c0000ab4c0000ac4c0000ad4c0000ae4c0000af4c0000b04c0000b14c0000b24c0000b34c0000b44c0000b54c0000b64c0000b74c0000b84c0000b94c0000ba4c0000bb4c0000bc4c0000bd4c0000be4c0000bf4c0000c04c0000c14c0000c24c0000c34c0000c44c0000c54c0000c64c0000c74c0000c84c0000c94c0000ca4c0000cb4c0000cc4c0000cd4c0000ce4c0000cf4c0000d04c0000d14c0000d24c0000d34c0000d44c0000d54c0000d64c0000d74c0000d84c0000d94c0000da4c0000db4c0000dc4c0000dd4c0000de4c0000df4c0000e04c0000e14c0000e24c0000e34c0000e44c0000e54c0000e64c0000e74c0000e84c0000e94c0000ea4c0000eb4c0000ec4c0000ed4c0000ee4c0000ef4c0000f04c0000f14c0000f24c0000f34c0000f44c0000f54c0000f64c0000f74c0000f84c0000f94c0000fa4c0000fb4c0000fc4c0000fd4c0000fe4c0000ff4c0000 + m_AlignBytes: 16 + groupID: 176 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19600 + particle2: 19601 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19601 + particle2: 19602 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19602 + particle2: 19603 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19603 + particle2: 19604 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19604 + particle2: 19605 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19605 + particle2: 19606 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19606 + particle2: 19607 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19607 + particle2: 19608 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19608 + particle2: 19609 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19609 + particle2: 19610 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19610 + particle2: 19611 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1886039166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1886039167} + - component: {fileID: 1886039171} + - component: {fileID: 1886039170} + - component: {fileID: 1886039169} + - component: {fileID: 1886039168} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1886039167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886039166} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1886039168 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886039166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1886039171} + m_Target: {fileID: 1886039167} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1886039169 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886039166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1886039170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886039166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 176 +--- !u!114 &1886039171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1886039166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 004d0000014d0000024d0000034d0000044d0000054d0000064d0000074d0000084d0000094d00000a4d00000b4d00000c4d00000d4d00000e4d00000f4d0000104d0000114d0000124d0000134d0000144d0000154d0000164d0000174d0000184d0000194d00001a4d00001b4d00001c4d00001d4d00001e4d00001f4d0000204d0000214d0000224d0000234d0000244d0000254d0000264d0000274d0000284d0000294d00002a4d00002b4d00002c4d00002d4d00002e4d00002f4d0000304d0000314d0000324d0000334d0000344d0000354d0000364d0000374d0000384d0000394d00003a4d00003b4d00003c4d00003d4d00003e4d00003f4d0000404d0000414d0000424d0000434d0000444d0000454d0000464d0000474d0000484d0000494d00004a4d00004b4d00004c4d00004d4d00004e4d00004f4d0000504d0000514d0000524d0000534d0000544d0000554d0000564d0000574d0000584d0000594d00005a4d00005b4d00005c4d00005d4d00005e4d00005f4d0000604d0000614d0000624d0000634d0000644d0000654d0000664d0000674d0000684d0000694d00006a4d00006b4d00006c4d00006d4d00006e4d00006f4d0000 + m_AlignBytes: 16 + groupID: 177 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19712 + particle2: 19713 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19713 + particle2: 19714 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19714 + particle2: 19715 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19715 + particle2: 19716 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19716 + particle2: 19717 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19717 + particle2: 19718 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19718 + particle2: 19719 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19719 + particle2: 19720 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19720 + particle2: 19721 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19721 + particle2: 19722 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19722 + particle2: 19723 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1895783474 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1895783475} + - component: {fileID: 1895783479} + - component: {fileID: 1895783478} + - component: {fileID: 1895783477} + - component: {fileID: 1895783476} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1895783475 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895783474} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1895783476 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895783474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1895783479} + m_Target: {fileID: 1895783475} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1895783477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895783474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1895783478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895783474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 177 +--- !u!114 &1895783479 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895783474} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 704d0000714d0000724d0000734d0000744d0000754d0000764d0000774d0000784d0000794d00007a4d00007b4d00007c4d00007d4d00007e4d00007f4d0000804d0000814d0000824d0000834d0000844d0000854d0000864d0000874d0000884d0000894d00008a4d00008b4d00008c4d00008d4d00008e4d00008f4d0000904d0000914d0000924d0000934d0000944d0000954d0000964d0000974d0000984d0000994d00009a4d00009b4d00009c4d00009d4d00009e4d00009f4d0000a04d0000a14d0000a24d0000a34d0000a44d0000a54d0000a64d0000a74d0000a84d0000a94d0000aa4d0000ab4d0000ac4d0000ad4d0000ae4d0000af4d0000b04d0000b14d0000b24d0000b34d0000b44d0000b54d0000b64d0000b74d0000b84d0000b94d0000ba4d0000bb4d0000bc4d0000bd4d0000be4d0000bf4d0000c04d0000c14d0000c24d0000c34d0000c44d0000c54d0000c64d0000c74d0000c84d0000c94d0000ca4d0000cb4d0000cc4d0000cd4d0000ce4d0000cf4d0000d04d0000d14d0000d24d0000d34d0000d44d0000d54d0000d64d0000d74d0000d84d0000d94d0000da4d0000db4d0000dc4d0000dd4d0000de4d0000df4d0000 + m_AlignBytes: 16 + groupID: 178 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19824 + particle2: 19825 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19825 + particle2: 19826 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19826 + particle2: 19827 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19827 + particle2: 19828 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19828 + particle2: 19829 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19829 + particle2: 19830 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19830 + particle2: 19831 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19831 + particle2: 19832 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19832 + particle2: 19833 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19833 + particle2: 19834 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19834 + particle2: 19835 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1898534084 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1898534085} + - component: {fileID: 1898534089} + - component: {fileID: 1898534088} + - component: {fileID: 1898534087} + - component: {fileID: 1898534086} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1898534085 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898534084} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1898534086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898534084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1898534089} + m_Target: {fileID: 1898534085} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1898534087 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898534084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1898534088 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898534084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 178 +--- !u!114 &1898534089 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898534084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e04d0000e14d0000e24d0000e34d0000e44d0000e54d0000e64d0000e74d0000e84d0000e94d0000ea4d0000eb4d0000ec4d0000ed4d0000ee4d0000ef4d0000f04d0000f14d0000f24d0000f34d0000f44d0000f54d0000f64d0000f74d0000f84d0000f94d0000fa4d0000fb4d0000fc4d0000fd4d0000fe4d0000ff4d0000004e0000014e0000024e0000034e0000044e0000054e0000064e0000074e0000084e0000094e00000a4e00000b4e00000c4e00000d4e00000e4e00000f4e0000104e0000114e0000124e0000134e0000144e0000154e0000164e0000174e0000184e0000194e00001a4e00001b4e00001c4e00001d4e00001e4e00001f4e0000204e0000214e0000224e0000234e0000244e0000254e0000264e0000274e0000284e0000294e00002a4e00002b4e00002c4e00002d4e00002e4e00002f4e0000304e0000314e0000324e0000334e0000344e0000354e0000364e0000374e0000384e0000394e00003a4e00003b4e00003c4e00003d4e00003e4e00003f4e0000404e0000414e0000424e0000434e0000444e0000454e0000464e0000474e0000484e0000494e00004a4e00004b4e00004c4e00004d4e00004e4e00004f4e0000 + m_AlignBytes: 16 + groupID: 179 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 19936 + particle2: 19937 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 19937 + particle2: 19938 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 19938 + particle2: 19939 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 19939 + particle2: 19940 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 19940 + particle2: 19941 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 19941 + particle2: 19942 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 19942 + particle2: 19943 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 19943 + particle2: 19944 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 19944 + particle2: 19945 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 19945 + particle2: 19946 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 19946 + particle2: 19947 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1901308915 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1901308916} + - component: {fileID: 1901308920} + - component: {fileID: 1901308919} + - component: {fileID: 1901308918} + - component: {fileID: 1901308917} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1901308916 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901308915} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1241971666} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1901308917 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901308915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1901308920} + m_Target: {fileID: 1901308916} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1901308918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901308915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1901308919 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901308915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 179 +--- !u!114 &1901308920 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901308915} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 504e0000514e0000524e0000534e0000544e0000554e0000564e0000574e0000584e0000594e00005a4e00005b4e00005c4e00005d4e00005e4e00005f4e0000604e0000614e0000624e0000634e0000644e0000654e0000664e0000674e0000684e0000694e00006a4e00006b4e00006c4e00006d4e00006e4e00006f4e0000704e0000714e0000724e0000734e0000744e0000754e0000764e0000774e0000784e0000794e00007a4e00007b4e00007c4e00007d4e00007e4e00007f4e0000804e0000814e0000824e0000834e0000844e0000854e0000864e0000874e0000884e0000894e00008a4e00008b4e00008c4e00008d4e00008e4e00008f4e0000904e0000914e0000924e0000934e0000944e0000954e0000964e0000974e0000984e0000994e00009a4e00009b4e00009c4e00009d4e00009e4e00009f4e0000a04e0000a14e0000a24e0000a34e0000a44e0000a54e0000a64e0000a74e0000a84e0000a94e0000aa4e0000ab4e0000ac4e0000ad4e0000ae4e0000af4e0000b04e0000b14e0000b24e0000b34e0000b44e0000b54e0000b64e0000b74e0000b84e0000b94e0000ba4e0000bb4e0000bc4e0000bd4e0000be4e0000bf4e0000 + m_AlignBytes: 16 + groupID: 180 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20048 + particle2: 20049 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20049 + particle2: 20050 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20050 + particle2: 20051 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20051 + particle2: 20052 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20052 + particle2: 20053 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20053 + particle2: 20054 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20054 + particle2: 20055 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20055 + particle2: 20056 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20056 + particle2: 20057 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20057 + particle2: 20058 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20058 + particle2: 20059 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1919837742 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1919837743} + - component: {fileID: 1919837747} + - component: {fileID: 1919837746} + - component: {fileID: 1919837745} + - component: {fileID: 1919837744} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1919837743 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919837742} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1919837744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919837742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1919837747} + m_Target: {fileID: 1919837743} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1919837745 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919837742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1919837746 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919837742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 180 +--- !u!114 &1919837747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919837742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c04e0000c14e0000c24e0000c34e0000c44e0000c54e0000c64e0000c74e0000c84e0000c94e0000ca4e0000cb4e0000cc4e0000cd4e0000ce4e0000cf4e0000d04e0000d14e0000d24e0000d34e0000d44e0000d54e0000d64e0000d74e0000d84e0000d94e0000da4e0000db4e0000dc4e0000dd4e0000de4e0000df4e0000e04e0000e14e0000e24e0000e34e0000e44e0000e54e0000e64e0000e74e0000e84e0000e94e0000ea4e0000eb4e0000ec4e0000ed4e0000ee4e0000ef4e0000f04e0000f14e0000f24e0000f34e0000f44e0000f54e0000f64e0000f74e0000f84e0000f94e0000fa4e0000fb4e0000fc4e0000fd4e0000fe4e0000ff4e0000004f0000014f0000024f0000034f0000044f0000054f0000064f0000074f0000084f0000094f00000a4f00000b4f00000c4f00000d4f00000e4f00000f4f0000104f0000114f0000124f0000134f0000144f0000154f0000164f0000174f0000184f0000194f00001a4f00001b4f00001c4f00001d4f00001e4f00001f4f0000204f0000214f0000224f0000234f0000244f0000254f0000264f0000274f0000284f0000294f00002a4f00002b4f00002c4f00002d4f00002e4f00002f4f0000 + m_AlignBytes: 16 + groupID: 181 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20160 + particle2: 20161 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20161 + particle2: 20162 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20162 + particle2: 20163 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20163 + particle2: 20164 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20164 + particle2: 20165 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20165 + particle2: 20166 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20166 + particle2: 20167 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20167 + particle2: 20168 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20168 + particle2: 20169 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20169 + particle2: 20170 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20170 + particle2: 20171 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1923931437 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1923931438} + - component: {fileID: 1923931442} + - component: {fileID: 1923931441} + - component: {fileID: 1923931440} + - component: {fileID: 1923931439} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1923931438 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923931437} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1640435994} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1923931439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923931437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1923931442} + m_Target: {fileID: 1923931438} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1923931440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923931437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1923931441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923931437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 181 +--- !u!114 &1923931442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923931437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 304f0000314f0000324f0000334f0000344f0000354f0000364f0000374f0000384f0000394f00003a4f00003b4f00003c4f00003d4f00003e4f00003f4f0000404f0000414f0000424f0000434f0000444f0000454f0000464f0000474f0000484f0000494f00004a4f00004b4f00004c4f00004d4f00004e4f00004f4f0000504f0000514f0000524f0000534f0000544f0000554f0000564f0000574f0000584f0000594f00005a4f00005b4f00005c4f00005d4f00005e4f00005f4f0000604f0000614f0000624f0000634f0000644f0000654f0000664f0000674f0000684f0000694f00006a4f00006b4f00006c4f00006d4f00006e4f00006f4f0000704f0000714f0000724f0000734f0000744f0000754f0000764f0000774f0000784f0000794f00007a4f00007b4f00007c4f00007d4f00007e4f00007f4f0000804f0000814f0000824f0000834f0000844f0000854f0000864f0000874f0000884f0000894f00008a4f00008b4f00008c4f00008d4f00008e4f00008f4f0000904f0000914f0000924f0000934f0000944f0000954f0000964f0000974f0000984f0000994f00009a4f00009b4f00009c4f00009d4f00009e4f00009f4f0000 + m_AlignBytes: 16 + groupID: 182 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20272 + particle2: 20273 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20273 + particle2: 20274 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20274 + particle2: 20275 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20275 + particle2: 20276 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20276 + particle2: 20277 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20277 + particle2: 20278 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20278 + particle2: 20279 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20279 + particle2: 20280 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20280 + particle2: 20281 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20281 + particle2: 20282 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20282 + particle2: 20283 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1937961234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1937961235} + - component: {fileID: 1937961239} + - component: {fileID: 1937961238} + - component: {fileID: 1937961237} + - component: {fileID: 1937961236} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1937961235 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937961234} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1240601735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1937961236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937961234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1937961239} + m_Target: {fileID: 1937961235} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1937961237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937961234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1937961238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937961234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 182 +--- !u!114 &1937961239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1937961234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a04f0000a14f0000a24f0000a34f0000a44f0000a54f0000a64f0000a74f0000a84f0000a94f0000aa4f0000ab4f0000ac4f0000ad4f0000ae4f0000af4f0000b04f0000b14f0000b24f0000b34f0000b44f0000b54f0000b64f0000b74f0000b84f0000b94f0000ba4f0000bb4f0000bc4f0000bd4f0000be4f0000bf4f0000c04f0000c14f0000c24f0000c34f0000c44f0000c54f0000c64f0000c74f0000c84f0000c94f0000ca4f0000cb4f0000cc4f0000cd4f0000ce4f0000cf4f0000d04f0000d14f0000d24f0000d34f0000d44f0000d54f0000d64f0000d74f0000d84f0000d94f0000da4f0000db4f0000dc4f0000dd4f0000de4f0000df4f0000e04f0000e14f0000e24f0000e34f0000e44f0000e54f0000e64f0000e74f0000e84f0000e94f0000ea4f0000eb4f0000ec4f0000ed4f0000ee4f0000ef4f0000f04f0000f14f0000f24f0000f34f0000f44f0000f54f0000f64f0000f74f0000f84f0000f94f0000fa4f0000fb4f0000fc4f0000fd4f0000fe4f0000ff4f0000005000000150000002500000035000000450000005500000065000000750000008500000095000000a5000000b5000000c5000000d5000000e5000000f500000 + m_AlignBytes: 16 + groupID: 183 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20384 + particle2: 20385 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20385 + particle2: 20386 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20386 + particle2: 20387 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20387 + particle2: 20388 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20388 + particle2: 20389 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20389 + particle2: 20390 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20390 + particle2: 20391 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20391 + particle2: 20392 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20392 + particle2: 20393 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20393 + particle2: 20394 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20394 + particle2: 20395 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1946747525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1946747526} + - component: {fileID: 1946747530} + - component: {fileID: 1946747529} + - component: {fileID: 1946747528} + - component: {fileID: 1946747527} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1946747526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946747525} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1628171963} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1946747527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946747525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1946747530} + m_Target: {fileID: 1946747526} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1946747528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946747525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1946747529 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946747525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 183 +--- !u!114 &1946747530 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946747525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 105000001150000012500000135000001450000015500000165000001750000018500000195000001a5000001b5000001c5000001d5000001e5000001f500000205000002150000022500000235000002450000025500000265000002750000028500000295000002a5000002b5000002c5000002d5000002e5000002f500000305000003150000032500000335000003450000035500000365000003750000038500000395000003a5000003b5000003c5000003d5000003e5000003f500000405000004150000042500000435000004450000045500000465000004750000048500000495000004a5000004b5000004c5000004d5000004e5000004f500000505000005150000052500000535000005450000055500000565000005750000058500000595000005a5000005b5000005c5000005d5000005e5000005f500000605000006150000062500000635000006450000065500000665000006750000068500000695000006a5000006b5000006c5000006d5000006e5000006f500000705000007150000072500000735000007450000075500000765000007750000078500000795000007a5000007b5000007c5000007d5000007e5000007f500000 + m_AlignBytes: 16 + groupID: 184 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20496 + particle2: 20497 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20497 + particle2: 20498 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20498 + particle2: 20499 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20499 + particle2: 20500 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20500 + particle2: 20501 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20501 + particle2: 20502 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20502 + particle2: 20503 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20503 + particle2: 20504 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20504 + particle2: 20505 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20505 + particle2: 20506 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20506 + particle2: 20507 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1948354617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1948354618} + - component: {fileID: 1948354622} + - component: {fileID: 1948354621} + - component: {fileID: 1948354620} + - component: {fileID: 1948354619} + m_Layer: 0 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1948354618 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948354617} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1948354619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948354617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1948354622} + m_Target: {fileID: 1948354618} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1948354620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948354617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1948354621 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948354617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 184 +--- !u!114 &1948354622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948354617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 805000008150000082500000835000008450000085500000865000008750000088500000895000008a5000008b5000008c5000008d5000008e5000008f500000905000009150000092500000935000009450000095500000965000009750000098500000995000009a5000009b5000009c5000009d5000009e5000009f500000a0500000a1500000a2500000a3500000a4500000a5500000a6500000a7500000a8500000a9500000aa500000ab500000ac500000ad500000ae500000af500000b0500000b1500000b2500000b3500000b4500000b5500000b6500000b7500000b8500000b9500000ba500000bb500000bc500000bd500000be500000bf500000c0500000c1500000c2500000c3500000c4500000c5500000c6500000c7500000c8500000c9500000ca500000cb500000cc500000cd500000ce500000cf500000d0500000d1500000d2500000d3500000d4500000d5500000d6500000d7500000d8500000d9500000da500000db500000dc500000dd500000de500000df500000e0500000e1500000e2500000e3500000e4500000e5500000e6500000e7500000e8500000e9500000ea500000eb500000ec500000ed500000ee500000ef500000 + m_AlignBytes: 16 + groupID: 185 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20608 + particle2: 20609 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20609 + particle2: 20610 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20610 + particle2: 20611 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20611 + particle2: 20612 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20612 + particle2: 20613 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20613 + particle2: 20614 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20614 + particle2: 20615 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20615 + particle2: 20616 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20616 + particle2: 20617 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20617 + particle2: 20618 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20618 + particle2: 20619 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1948398664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1948398665} + - component: {fileID: 1948398669} + - component: {fileID: 1948398668} + - component: {fileID: 1948398667} + - component: {fileID: 1948398666} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1948398665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948398664} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1948398666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948398664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1948398669} + m_Target: {fileID: 1948398665} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1948398667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948398664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1948398668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948398664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 185 +--- !u!114 &1948398669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1948398664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: f0500000f1500000f2500000f3500000f4500000f5500000f6500000f7500000f8500000f9500000fa500000fb500000fc500000fd500000fe500000ff500000005100000151000002510000035100000451000005510000065100000751000008510000095100000a5100000b5100000c5100000d5100000e5100000f510000105100001151000012510000135100001451000015510000165100001751000018510000195100001a5100001b5100001c5100001d5100001e5100001f510000205100002151000022510000235100002451000025510000265100002751000028510000295100002a5100002b5100002c5100002d5100002e5100002f510000305100003151000032510000335100003451000035510000365100003751000038510000395100003a5100003b5100003c5100003d5100003e5100003f510000405100004151000042510000435100004451000045510000465100004751000048510000495100004a5100004b5100004c5100004d5100004e5100004f510000505100005151000052510000535100005451000055510000565100005751000058510000595100005a5100005b5100005c5100005d5100005e5100005f510000 + m_AlignBytes: 16 + groupID: 186 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20720 + particle2: 20721 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20721 + particle2: 20722 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20722 + particle2: 20723 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20723 + particle2: 20724 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20724 + particle2: 20725 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20725 + particle2: 20726 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20726 + particle2: 20727 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20727 + particle2: 20728 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20728 + particle2: 20729 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20729 + particle2: 20730 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20730 + particle2: 20731 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1964761413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1964761414} + - component: {fileID: 1964761418} + - component: {fileID: 1964761417} + - component: {fileID: 1964761416} + - component: {fileID: 1964761415} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1964761414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964761413} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1306593279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1964761415 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964761413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1964761418} + m_Target: {fileID: 1964761414} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1964761416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964761413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1964761417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964761413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 186 +--- !u!114 &1964761418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964761413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 605100006151000062510000635100006451000065510000665100006751000068510000695100006a5100006b5100006c5100006d5100006e5100006f510000705100007151000072510000735100007451000075510000765100007751000078510000795100007a5100007b5100007c5100007d5100007e5100007f510000805100008151000082510000835100008451000085510000865100008751000088510000895100008a5100008b5100008c5100008d5100008e5100008f510000905100009151000092510000935100009451000095510000965100009751000098510000995100009a5100009b5100009c5100009d5100009e5100009f510000a0510000a1510000a2510000a3510000a4510000a5510000a6510000a7510000a8510000a9510000aa510000ab510000ac510000ad510000ae510000af510000b0510000b1510000b2510000b3510000b4510000b5510000b6510000b7510000b8510000b9510000ba510000bb510000bc510000bd510000be510000bf510000c0510000c1510000c2510000c3510000c4510000c5510000c6510000c7510000c8510000c9510000ca510000cb510000cc510000cd510000ce510000cf510000 + m_AlignBytes: 16 + groupID: 187 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20832 + particle2: 20833 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20833 + particle2: 20834 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20834 + particle2: 20835 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20835 + particle2: 20836 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20836 + particle2: 20837 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20837 + particle2: 20838 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20838 + particle2: 20839 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20839 + particle2: 20840 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20840 + particle2: 20841 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20841 + particle2: 20842 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20842 + particle2: 20843 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1970184122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1970184123} + - component: {fileID: 1970184127} + - component: {fileID: 1970184126} + - component: {fileID: 1970184125} + - component: {fileID: 1970184124} + m_Layer: 0 + m_Name: Obi Rope (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1970184123 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970184122} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1970184124 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970184122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1970184127} + m_Target: {fileID: 1970184123} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1970184125 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970184122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1970184126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970184122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 187 +--- !u!114 &1970184127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1970184122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: d0510000d1510000d2510000d3510000d4510000d5510000d6510000d7510000d8510000d9510000da510000db510000dc510000dd510000de510000df510000e0510000e1510000e2510000e3510000e4510000e5510000e6510000e7510000e8510000e9510000ea510000eb510000ec510000ed510000ee510000ef510000f0510000f1510000f2510000f3510000f4510000f5510000f6510000f7510000f8510000f9510000fa510000fb510000fc510000fd510000fe510000ff510000005200000152000002520000035200000452000005520000065200000752000008520000095200000a5200000b5200000c5200000d5200000e5200000f520000105200001152000012520000135200001452000015520000165200001752000018520000195200001a5200001b5200001c5200001d5200001e5200001f520000205200002152000022520000235200002452000025520000265200002752000028520000295200002a5200002b5200002c5200002d5200002e5200002f520000305200003152000032520000335200003452000035520000365200003752000038520000395200003a5200003b5200003c5200003d5200003e5200003f520000 + m_AlignBytes: 16 + groupID: 188 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 20944 + particle2: 20945 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 20945 + particle2: 20946 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 20946 + particle2: 20947 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 20947 + particle2: 20948 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 20948 + particle2: 20949 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 20949 + particle2: 20950 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 20950 + particle2: 20951 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 20951 + particle2: 20952 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 20952 + particle2: 20953 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 20953 + particle2: 20954 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 20954 + particle2: 20955 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1977632069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1977632070} + m_Layer: 0 + m_Name: Row (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1977632070 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1977632069} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1600426037} + - {fileID: 1001012758} + - {fileID: 274966134} + - {fileID: 1189976174} + - {fileID: 1634777944} + - {fileID: 489080965} + - {fileID: 535373372} + - {fileID: 399904146} + - {fileID: 557556286} + - {fileID: 1472901347} + m_Father: {fileID: 1760688768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1988484818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1988484819} + - component: {fileID: 1988484823} + - component: {fileID: 1988484822} + - component: {fileID: 1988484821} + - component: {fileID: 1988484820} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1988484819 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988484818} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798495239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1988484820 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988484818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1988484823} + m_Target: {fileID: 1988484819} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1988484821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988484818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1988484822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988484818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 188 +--- !u!114 &1988484823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1988484818} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 405200004152000042520000435200004452000045520000465200004752000048520000495200004a5200004b5200004c5200004d5200004e5200004f520000505200005152000052520000535200005452000055520000565200005752000058520000595200005a5200005b5200005c5200005d5200005e5200005f520000605200006152000062520000635200006452000065520000665200006752000068520000695200006a5200006b5200006c5200006d5200006e5200006f520000705200007152000072520000735200007452000075520000765200007752000078520000795200007a5200007b5200007c5200007d5200007e5200007f520000805200008152000082520000835200008452000085520000865200008752000088520000895200008a5200008b5200008c5200008d5200008e5200008f520000905200009152000092520000935200009452000095520000965200009752000098520000995200009a5200009b5200009c5200009d5200009e5200009f520000a0520000a1520000a2520000a3520000a4520000a5520000a6520000a7520000a8520000a9520000aa520000ab520000ac520000ad520000ae520000af520000 + m_AlignBytes: 16 + groupID: 189 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21056 + particle2: 21057 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21057 + particle2: 21058 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21058 + particle2: 21059 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21059 + particle2: 21060 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21060 + particle2: 21061 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21061 + particle2: 21062 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21062 + particle2: 21063 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21063 + particle2: 21064 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21064 + particle2: 21065 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21065 + particle2: 21066 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21066 + particle2: 21067 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &1994012441 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1994012442} + - component: {fileID: 1994012446} + - component: {fileID: 1994012445} + - component: {fileID: 1994012444} + - component: {fileID: 1994012443} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1994012442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994012441} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 779073863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1994012443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994012441} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1994012446} + m_Target: {fileID: 1994012442} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1994012444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994012441} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &1994012445 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994012441} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 189 +--- !u!114 &1994012446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994012441} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: b0520000b1520000b2520000b3520000b4520000b5520000b6520000b7520000b8520000b9520000ba520000bb520000bc520000bd520000be520000bf520000c0520000c1520000c2520000c3520000c4520000c5520000c6520000c7520000c8520000c9520000ca520000cb520000cc520000cd520000ce520000cf520000d0520000d1520000d2520000d3520000d4520000d5520000d6520000d7520000d8520000d9520000da520000db520000dc520000dd520000de520000df520000e0520000e1520000e2520000e3520000e4520000e5520000e6520000e7520000e8520000e9520000ea520000eb520000ec520000ed520000ee520000ef520000f0520000f1520000f2520000f3520000f4520000f5520000f6520000f7520000f8520000f9520000fa520000fb520000fc520000fd520000fe520000ff520000005300000153000002530000035300000453000005530000065300000753000008530000095300000a5300000b5300000c5300000d5300000e5300000f530000105300001153000012530000135300001453000015530000165300001753000018530000195300001a5300001b5300001c5300001d5300001e5300001f530000 + m_AlignBytes: 16 + groupID: 190 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21168 + particle2: 21169 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21169 + particle2: 21170 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21170 + particle2: 21171 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21171 + particle2: 21172 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21172 + particle2: 21173 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21173 + particle2: 21174 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21174 + particle2: 21175 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21175 + particle2: 21176 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21176 + particle2: 21177 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21177 + particle2: 21178 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21178 + particle2: 21179 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2009678976 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2009678977} + m_Layer: 0 + m_Name: Row + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2009678977 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009678976} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 163656624} + - {fileID: 2054724672} + - {fileID: 964498383} + - {fileID: 666418979} + - {fileID: 769380902} + - {fileID: 1437781649} + - {fileID: 1061430265} + - {fileID: 161507646} + - {fileID: 824780549} + - {fileID: 347068007} + m_Father: {fileID: 1027659676} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2017265026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2017265027} + - component: {fileID: 2017265031} + - component: {fileID: 2017265030} + - component: {fileID: 2017265029} + - component: {fileID: 2017265028} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2017265027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017265026} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 713844502} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2017265028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017265026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2017265031} + m_Target: {fileID: 2017265027} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2017265029 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017265026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2017265030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017265026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 190 +--- !u!114 &2017265031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017265026} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 205300002153000022530000235300002453000025530000265300002753000028530000295300002a5300002b5300002c5300002d5300002e5300002f530000305300003153000032530000335300003453000035530000365300003753000038530000395300003a5300003b5300003c5300003d5300003e5300003f530000405300004153000042530000435300004453000045530000465300004753000048530000495300004a5300004b5300004c5300004d5300004e5300004f530000505300005153000052530000535300005453000055530000565300005753000058530000595300005a5300005b5300005c5300005d5300005e5300005f530000605300006153000062530000635300006453000065530000665300006753000068530000695300006a5300006b5300006c5300006d5300006e5300006f530000705300007153000072530000735300007453000075530000765300007753000078530000795300007a5300007b5300007c5300007d5300007e5300007f530000805300008153000082530000835300008453000085530000865300008753000088530000895300008a5300008b5300008c5300008d5300008e5300008f530000 + m_AlignBytes: 16 + groupID: 191 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21280 + particle2: 21281 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21281 + particle2: 21282 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21282 + particle2: 21283 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21283 + particle2: 21284 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21284 + particle2: 21285 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21285 + particle2: 21286 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21286 + particle2: 21287 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21287 + particle2: 21288 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21288 + particle2: 21289 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21289 + particle2: 21290 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21290 + particle2: 21291 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2028909268 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2028909269} + - component: {fileID: 2028909273} + - component: {fileID: 2028909272} + - component: {fileID: 2028909271} + - component: {fileID: 2028909270} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2028909269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2028909268} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 893001395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2028909270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2028909268} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2028909273} + m_Target: {fileID: 2028909269} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2028909271 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2028909268} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2028909272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2028909268} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 191 +--- !u!114 &2028909273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2028909268} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 905300009153000092530000935300009453000095530000965300009753000098530000995300009a5300009b5300009c5300009d5300009e5300009f530000a0530000a1530000a2530000a3530000a4530000a5530000a6530000a7530000a8530000a9530000aa530000ab530000ac530000ad530000ae530000af530000b0530000b1530000b2530000b3530000b4530000b5530000b6530000b7530000b8530000b9530000ba530000bb530000bc530000bd530000be530000bf530000c0530000c1530000c2530000c3530000c4530000c5530000c6530000c7530000c8530000c9530000ca530000cb530000cc530000cd530000ce530000cf530000d0530000d1530000d2530000d3530000d4530000d5530000d6530000d7530000d8530000d9530000da530000db530000dc530000dd530000de530000df530000e0530000e1530000e2530000e3530000e4530000e5530000e6530000e7530000e8530000e9530000ea530000eb530000ec530000ed530000ee530000ef530000f0530000f1530000f2530000f3530000f4530000f5530000f6530000f7530000f8530000f9530000fa530000fb530000fc530000fd530000fe530000ff530000 + m_AlignBytes: 16 + groupID: 192 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21392 + particle2: 21393 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21393 + particle2: 21394 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21394 + particle2: 21395 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21395 + particle2: 21396 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21396 + particle2: 21397 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21397 + particle2: 21398 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21398 + particle2: 21399 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21399 + particle2: 21400 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21400 + particle2: 21401 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21401 + particle2: 21402 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21402 + particle2: 21403 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2033391598 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2033391599} + - component: {fileID: 2033391603} + - component: {fileID: 2033391602} + - component: {fileID: 2033391601} + - component: {fileID: 2033391600} + m_Layer: 0 + m_Name: Obi Rope (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2033391599 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033391598} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 940408952} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2033391600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033391598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2033391603} + m_Target: {fileID: 2033391599} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2033391601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033391598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2033391602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033391598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 192 +--- !u!114 &2033391603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033391598} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 005400000154000002540000035400000454000005540000065400000754000008540000095400000a5400000b5400000c5400000d5400000e5400000f540000105400001154000012540000135400001454000015540000165400001754000018540000195400001a5400001b5400001c5400001d5400001e5400001f540000205400002154000022540000235400002454000025540000265400002754000028540000295400002a5400002b5400002c5400002d5400002e5400002f540000305400003154000032540000335400003454000035540000365400003754000038540000395400003a5400003b5400003c5400003d5400003e5400003f540000405400004154000042540000435400004454000045540000465400004754000048540000495400004a5400004b5400004c5400004d5400004e5400004f540000505400005154000052540000535400005454000055540000565400005754000058540000595400005a5400005b5400005c5400005d5400005e5400005f540000605400006154000062540000635400006454000065540000665400006754000068540000695400006a5400006b5400006c5400006d5400006e5400006f540000 + m_AlignBytes: 16 + groupID: 193 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21504 + particle2: 21505 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21505 + particle2: 21506 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21506 + particle2: 21507 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21507 + particle2: 21508 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21508 + particle2: 21509 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21509 + particle2: 21510 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21510 + particle2: 21511 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21511 + particle2: 21512 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21512 + particle2: 21513 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21513 + particle2: 21514 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21514 + particle2: 21515 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2039851349 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2039851350} + - component: {fileID: 2039851354} + - component: {fileID: 2039851353} + - component: {fileID: 2039851352} + - component: {fileID: 2039851351} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2039851350 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039851349} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2039851351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039851349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2039851354} + m_Target: {fileID: 2039851350} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2039851352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039851349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2039851353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039851349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 193 +--- !u!114 &2039851354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039851349} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 705400007154000072540000735400007454000075540000765400007754000078540000795400007a5400007b5400007c5400007d5400007e5400007f540000805400008154000082540000835400008454000085540000865400008754000088540000895400008a5400008b5400008c5400008d5400008e5400008f540000905400009154000092540000935400009454000095540000965400009754000098540000995400009a5400009b5400009c5400009d5400009e5400009f540000a0540000a1540000a2540000a3540000a4540000a5540000a6540000a7540000a8540000a9540000aa540000ab540000ac540000ad540000ae540000af540000b0540000b1540000b2540000b3540000b4540000b5540000b6540000b7540000b8540000b9540000ba540000bb540000bc540000bd540000be540000bf540000c0540000c1540000c2540000c3540000c4540000c5540000c6540000c7540000c8540000c9540000ca540000cb540000cc540000cd540000ce540000cf540000d0540000d1540000d2540000d3540000d4540000d5540000d6540000d7540000d8540000d9540000da540000db540000dc540000dd540000de540000df540000 + m_AlignBytes: 16 + groupID: 194 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21616 + particle2: 21617 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21617 + particle2: 21618 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21618 + particle2: 21619 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21619 + particle2: 21620 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21620 + particle2: 21621 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21621 + particle2: 21622 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21622 + particle2: 21623 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21623 + particle2: 21624 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21624 + particle2: 21625 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21625 + particle2: 21626 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21626 + particle2: 21627 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2054724671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2054724672} + - component: {fileID: 2054724676} + - component: {fileID: 2054724675} + - component: {fileID: 2054724674} + - component: {fileID: 2054724673} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2054724672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2054724671} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2009678977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2054724673 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2054724671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2054724676} + m_Target: {fileID: 2054724672} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2054724674 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2054724671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2054724675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2054724671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 194 +--- !u!114 &2054724676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2054724671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0540000e1540000e2540000e3540000e4540000e5540000e6540000e7540000e8540000e9540000ea540000eb540000ec540000ed540000ee540000ef540000f0540000f1540000f2540000f3540000f4540000f5540000f6540000f7540000f8540000f9540000fa540000fb540000fc540000fd540000fe540000ff540000005500000155000002550000035500000455000005550000065500000755000008550000095500000a5500000b5500000c5500000d5500000e5500000f550000105500001155000012550000135500001455000015550000165500001755000018550000195500001a5500001b5500001c5500001d5500001e5500001f550000205500002155000022550000235500002455000025550000265500002755000028550000295500002a5500002b5500002c5500002d5500002e5500002f550000305500003155000032550000335500003455000035550000365500003755000038550000395500003a5500003b5500003c5500003d5500003e5500003f550000405500004155000042550000435500004455000045550000465500004755000048550000495500004a5500004b5500004c5500004d5500004e5500004f550000 + m_AlignBytes: 16 + groupID: 195 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21728 + particle2: 21729 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21729 + particle2: 21730 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21730 + particle2: 21731 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21731 + particle2: 21732 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21732 + particle2: 21733 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21733 + particle2: 21734 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21734 + particle2: 21735 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21735 + particle2: 21736 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21736 + particle2: 21737 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21737 + particle2: 21738 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21738 + particle2: 21739 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2058503949 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2058503950} + - component: {fileID: 2058503954} + - component: {fileID: 2058503953} + - component: {fileID: 2058503952} + - component: {fileID: 2058503951} + m_Layer: 0 + m_Name: Obi Rope (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2058503950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058503949} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1062536481} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2058503951 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058503949} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2058503954} + m_Target: {fileID: 2058503950} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2058503952 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058503949} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2058503953 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058503949} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 195 +--- !u!114 &2058503954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2058503949} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 505500005155000052550000535500005455000055550000565500005755000058550000595500005a5500005b5500005c5500005d5500005e5500005f550000605500006155000062550000635500006455000065550000665500006755000068550000695500006a5500006b5500006c5500006d5500006e5500006f550000705500007155000072550000735500007455000075550000765500007755000078550000795500007a5500007b5500007c5500007d5500007e5500007f550000805500008155000082550000835500008455000085550000865500008755000088550000895500008a5500008b5500008c5500008d5500008e5500008f550000905500009155000092550000935500009455000095550000965500009755000098550000995500009a5500009b5500009c5500009d5500009e5500009f550000a0550000a1550000a2550000a3550000a4550000a5550000a6550000a7550000a8550000a9550000aa550000ab550000ac550000ad550000ae550000af550000b0550000b1550000b2550000b3550000b4550000b5550000b6550000b7550000b8550000b9550000ba550000bb550000bc550000bd550000be550000bf550000 + m_AlignBytes: 16 + groupID: 196 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21840 + particle2: 21841 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21841 + particle2: 21842 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21842 + particle2: 21843 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21843 + particle2: 21844 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21844 + particle2: 21845 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21845 + particle2: 21846 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21846 + particle2: 21847 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21847 + particle2: 21848 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21848 + particle2: 21849 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21849 + particle2: 21850 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21850 + particle2: 21851 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2078944945 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2078944946} + - component: {fileID: 2078944950} + - component: {fileID: 2078944949} + - component: {fileID: 2078944948} + - component: {fileID: 2078944947} + m_Layer: 0 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2078944946 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078944945} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2078944947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078944945} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2078944950} + m_Target: {fileID: 2078944946} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2078944948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078944945} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2078944949 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078944945} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 196 +--- !u!114 &2078944950 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078944945} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: c0550000c1550000c2550000c3550000c4550000c5550000c6550000c7550000c8550000c9550000ca550000cb550000cc550000cd550000ce550000cf550000d0550000d1550000d2550000d3550000d4550000d5550000d6550000d7550000d8550000d9550000da550000db550000dc550000dd550000de550000df550000e0550000e1550000e2550000e3550000e4550000e5550000e6550000e7550000e8550000e9550000ea550000eb550000ec550000ed550000ee550000ef550000f0550000f1550000f2550000f3550000f4550000f5550000f6550000f7550000f8550000f9550000fa550000fb550000fc550000fd550000fe550000ff550000005600000156000002560000035600000456000005560000065600000756000008560000095600000a5600000b5600000c5600000d5600000e5600000f560000105600001156000012560000135600001456000015560000165600001756000018560000195600001a5600001b5600001c5600001d5600001e5600001f560000205600002156000022560000235600002456000025560000265600002756000028560000295600002a5600002b5600002c5600002d5600002e5600002f560000 + m_AlignBytes: 16 + groupID: 197 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 21952 + particle2: 21953 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 21953 + particle2: 21954 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 21954 + particle2: 21955 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 21955 + particle2: 21956 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 21956 + particle2: 21957 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 21957 + particle2: 21958 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 21958 + particle2: 21959 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 21959 + particle2: 21960 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 21960 + particle2: 21961 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 21961 + particle2: 21962 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 21962 + particle2: 21963 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2102841794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2102841797} + - component: {fileID: 2102841796} + m_Layer: 0 + m_Name: Obi Solver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2102841796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + m_EditorClassIdentifier: + simulateWhenInvisible: 1 + m_Backend: 0 + substeps: 2 + maxStepsPerFrame: 1 + synchronization: 0 + parameters: + mode: 0 + interpolation: 0 + gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 + damping: 0 + maxAnisotropy: 3 + sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 10 + collisionMargin: 0.02 + maxDepenetration: 5 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + skinConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + volumeConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + shapeMatchingConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + pinConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 5 + SORFactor: 1 + enabled: 0 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + stretchShearConstraintParameters: + evaluationOrder: 0 + iterations: 10 + SORFactor: 1 + enabled: 0 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 20 + SORFactor: 1 + enabled: 0 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 +--- !u!4 &2102841797 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1027659676} + - {fileID: 1760688768} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2120568195 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2120568196} + - component: {fileID: 2120568200} + - component: {fileID: 2120568199} + - component: {fileID: 2120568198} + - component: {fileID: 2120568197} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2120568196 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2120568195} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54623967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2120568197 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2120568195} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2120568200} + m_Target: {fileID: 2120568196} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2120568198 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2120568195} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2120568199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2120568195} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 197 +--- !u!114 &2120568200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2120568195} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 305600003156000032560000335600003456000035560000365600003756000038560000395600003a5600003b5600003c5600003d5600003e5600003f560000405600004156000042560000435600004456000045560000465600004756000048560000495600004a5600004b5600004c5600004d5600004e5600004f560000505600005156000052560000535600005456000055560000565600005756000058560000595600005a5600005b5600005c5600005d5600005e5600005f560000605600006156000062560000635600006456000065560000665600006756000068560000695600006a5600006b5600006c5600006d5600006e5600006f560000705600007156000072560000735600007456000075560000765600007756000078560000795600007a5600007b5600007c5600007d5600007e5600007f560000805600008156000082560000835600008456000085560000865600008756000088560000895600008a5600008b5600008c5600008d5600008e5600008f560000905600009156000092560000935600009456000095560000965600009756000098560000995600009a5600009b5600009c5600009d5600009e5600009f560000 + m_AlignBytes: 16 + groupID: 198 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 22064 + particle2: 22065 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 22065 + particle2: 22066 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 22066 + particle2: 22067 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 22067 + particle2: 22068 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 22068 + particle2: 22069 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 22069 + particle2: 22070 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 22070 + particle2: 22071 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 22071 + particle2: 22072 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 22072 + particle2: 22073 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 22073 + particle2: 22074 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 22074 + particle2: 22075 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2127388784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2127388785} + - component: {fileID: 2127388789} + - component: {fileID: 2127388788} + - component: {fileID: 2127388787} + - component: {fileID: 2127388786} + m_Layer: 0 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2127388785 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127388784} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1464717035} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2127388786 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127388784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2127388789} + m_Target: {fileID: 2127388785} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2127388787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127388784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2127388788 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127388784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 198 +--- !u!114 &2127388789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127388784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: a0560000a1560000a2560000a3560000a4560000a5560000a6560000a7560000a8560000a9560000aa560000ab560000ac560000ad560000ae560000af560000b0560000b1560000b2560000b3560000b4560000b5560000b6560000b7560000b8560000b9560000ba560000bb560000bc560000bd560000be560000bf560000c0560000c1560000c2560000c3560000c4560000c5560000c6560000c7560000c8560000c9560000ca560000cb560000cc560000cd560000ce560000cf560000d0560000d1560000d2560000d3560000d4560000d5560000d6560000d7560000d8560000d9560000da560000db560000dc560000dd560000de560000df560000e0560000e1560000e2560000e3560000e4560000e5560000e6560000e7560000e8560000e9560000ea560000eb560000ec560000ed560000ee560000ef560000f0560000f1560000f2560000f3560000f4560000f5560000f6560000f7560000f8560000f9560000fa560000fb560000fc560000fd560000fe560000ff560000005700000157000002570000035700000457000005570000065700000757000008570000095700000a5700000b5700000c5700000d5700000e5700000f570000 + m_AlignBytes: 16 + groupID: 199 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 22176 + particle2: 22177 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 22177 + particle2: 22178 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 22178 + particle2: 22179 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 22179 + particle2: 22180 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 22180 + particle2: 22181 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 22181 + particle2: 22182 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 22182 + particle2: 22183 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 22183 + particle2: 22184 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 22184 + particle2: 22185 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 22185 + particle2: 22186 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 22186 + particle2: 22187 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2145370370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2145370371} + - component: {fileID: 2145370375} + - component: {fileID: 2145370374} + - component: {fileID: 2145370373} + - component: {fileID: 2145370372} + m_Layer: 0 + m_Name: Obi Rope (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2145370371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2145370370} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 1.2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 426164209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2145370372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2145370370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2145370375} + m_Target: {fileID: 2145370371} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &2145370373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2145370370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.5 +--- !u!114 &2145370374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2145370370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 199 +--- !u!114 &2145370375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2145370370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 105700001157000012570000135700001457000015570000165700001757000018570000195700001a5700001b5700001c5700001d5700001e5700001f570000205700002157000022570000235700002457000025570000265700002757000028570000295700002a5700002b5700002c5700002d5700002e5700002f570000305700003157000032570000335700003457000035570000365700003757000038570000395700003a5700003b5700003c5700003d5700003e5700003f570000405700004157000042570000435700004457000045570000465700004757000048570000495700004a5700004b5700004c5700004d5700004e5700004f570000505700005157000052570000535700005457000055570000565700005757000058570000595700005a5700005b5700005c5700005d5700005e5700005f570000605700006157000062570000635700006457000065570000665700006757000068570000695700006a5700006b5700006c5700006d5700006e5700006f570000705700007157000072570000735700007457000075570000765700007757000078570000795700007a5700007b5700007c5700007d5700007e5700007f570000 + m_AlignBytes: 16 + groupID: 200 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 22288 + particle2: 22289 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 22289 + particle2: 22290 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 22290 + particle2: 22291 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 22291 + particle2: 22292 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 22292 + particle2: 22293 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 22293 + particle2: 22294 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 22294 + particle2: 22295 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 22295 + particle2: 22296 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 22296 + particle2: 22297 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 22297 + particle2: 22298 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 22298 + particle2: 22299 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &2045321430961851743 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2045321430962147711} + - component: {fileID: 2045321430962147714} + - component: {fileID: 2045321430962147713} + - component: {fileID: 2045321430962147712} + m_Layer: 0 + m_Name: Wind + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2045321430962147711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045321430961851743} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 792243030} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!114 &2045321430962147712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045321430961851743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 2045321430962147714} + m_DistanceField: {fileID: 0} +--- !u!114 &2045321430962147713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045321430961851743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4978a525b6164476d96f5d28d8b309f8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SourceCollider: {fileID: 2045321430962147712} + type: 0 + mode: 2 + intensity: 10 + dampingDir: 0 + damping: 0 + minDistance: 0 + maxDistance: 0.1 + falloffPower: 1 + color: {r: 0, g: 0, b: 0, a: 0} + pulseIntensity: 0 + pulseFrequency: 0 + pulseSeed: 0 +--- !u!136 &2045321430962147714 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045321430961851743} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 1.5 + m_Height: 5 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 2.5} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 920811577} + - {fileID: 1561375948} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta new file mode 100644 index 000000000..d25af1a9d --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8fafd98b75e9b44ee8b37edf6f1adcd5 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane.meta deleted file mode 100644 index 11e3db36c..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fefc229caf416a54a93e01d60bb97359 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane.unity index 6bfdb493a..6e63fe874 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane.unity @@ -93,8 +93,8 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: e2ca4a3b6a61b014a8f1b1be22bf04cf, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: f586ee2c62b1cac46a4e4e9da8aa2e05, type: 2} + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 664654699} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 @@ -129,7 +129,6 @@ GameObject: m_Component: - component: {fileID: 60958072} - component: {fileID: 60958074} - - component: {fileID: 60958076} - component: {fileID: 60958075} m_Layer: 0 m_Name: Crane @@ -177,23 +176,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.3 maxAnisotropy: 3 - sleepThreshold: 0.003 + sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.005 maxDepenetration: 5 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 0 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 2 @@ -249,6 +282,11 @@ MonoBehaviour: iterations: 1 SORFactor: 1 enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 2 @@ -286,21 +324,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5551d37f45fd044ff8768019501c20a5, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &60958076 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 60958071} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 434ec3c1822e84ae79a7f64f950b1bf9, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 60958074} - substeps: 4 + speed: 1 --- !u!1 &71297249 GameObject: m_ObjectHideFlags: 0 @@ -355,6 +379,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -376,6 +402,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -565,6 +592,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -586,6 +615,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -653,52 +683,6 @@ PrefabInstance: insertIndex: -1 addedObject: {fileID: 506459883} m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} ---- !u!1 &459217661 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 459217663} - - component: {fileID: 459217662} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &459217662 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 459217661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: - cellSpans: - m_AlignBytes: 16 ---- !u!4 &459217663 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 459217661} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &476562058 GameObject: m_ObjectHideFlags: 0 @@ -775,6 +759,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -796,6 +782,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -821,6 +808,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 476562060} @@ -865,10 +853,72 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 506459882} m_DistanceField: {fileID: 11400000, guid: 5eb5ff1af3a3f4a14977448198c232ae, type: 2} +--- !u!850595691 &664654699 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &665462091 GameObject: m_ObjectHideFlags: 0 @@ -1001,6 +1051,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1022,6 +1074,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1046,8 +1099,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} - - component: {fileID: 1002464898} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -1137,70 +1188,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 ---- !u!114 &1002464898 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_VolumeFrameworkUpdateModeOption: 2 - m_RenderPostProcessing: 0 - m_Antialiasing: 0 - m_AntialiasingQuality: 2 - m_StopNaN: 0 - m_Dithering: 0 - m_ClearDepth: 1 - m_AllowXRRendering: 1 - m_AllowHDROutput: 1 - m_UseScreenCoordOverride: 0 - m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} - m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_Version: 2 - m_TaaSettings: - m_Quality: 3 - m_FrameInfluence: 0.1 - m_JitterScale: 1 - m_MipBias: 0 - m_VarianceClampScale: 0.9 - m_ContrastAdaptiveSharpening: 0 --- !u!1 &1060357566 GameObject: m_ObjectHideFlags: 0 @@ -1243,6 +1230,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1264,6 +1253,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1319,10 +1309,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1060357566} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -1365,6 +1355,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1060357568} @@ -1423,6 +1414,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1444,6 +1437,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1487,7 +1481,6 @@ GameObject: m_Component: - component: {fileID: 1175446146} - component: {fileID: 1175446145} - - component: {fileID: 1175446147} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -1575,29 +1568,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!114 &1175446147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 3 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 --- !u!1 &1327725106 GameObject: m_ObjectHideFlags: 0 @@ -1675,8 +1645,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1346965650} - - component: {fileID: 1346965645} - - component: {fileID: 1346965644} - component: {fileID: 1346965646} - component: {fileID: 1346965643} - component: {fileID: 1346965642} @@ -1706,6 +1674,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 10 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 1 uvScale: {x: 1, y: 3} normalizeV: 0 @@ -1726,59 +1703,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 ---- !u!23 &1346965644 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1346965645 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Mesh: {fileID: 1695596024} + indexInSystem: 0 --- !u!114 &1346965646 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1791,11 +1716,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f00000090000000910000009200000093000000940000009500000096000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f00000090000000910000009200000093000000940000009500000096000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 1 + m_MassScale: 1 m_SelfCollisions: 1 - restLength_: 7.78888 + restLength_: 7.7972555 elements: - particle1: 0 particle2: 1 @@ -1859,127 +1788,127 @@ MonoBehaviour: tearResistance: 1 - particle1: 12 particle2: 13 - restLength: 0.14537717 + restLength: 0.14537738 constraintForce: 0 tearResistance: 1 - particle1: 13 particle2: 14 - restLength: 0.145376 + restLength: 0.1453759 constraintForce: 0 tearResistance: 1 - particle1: 14 particle2: 15 - restLength: 0.14537315 + restLength: 0.1453736 constraintForce: 0 tearResistance: 1 - particle1: 15 particle2: 16 - restLength: 0.14536862 + restLength: 0.1453681 constraintForce: 0 tearResistance: 1 - particle1: 16 particle2: 17 - restLength: 0.14536047 + restLength: 0.14536066 constraintForce: 0 tearResistance: 1 - particle1: 17 particle2: 18 - restLength: 0.14534782 + restLength: 0.14534824 constraintForce: 0 tearResistance: 1 - particle1: 18 particle2: 19 - restLength: 0.14533179 + restLength: 0.14533304 constraintForce: 0 tearResistance: 1 - particle1: 19 particle2: 20 - restLength: 0.15333234 + restLength: 0.15357469 constraintForce: 0 tearResistance: 1 - particle1: 20 particle2: 21 - restLength: 0.15336941 + restLength: 0.15364002 constraintForce: 0 tearResistance: 1 - particle1: 21 particle2: 22 - restLength: 0.15329686 + restLength: 0.15353157 constraintForce: 0 tearResistance: 1 - particle1: 22 particle2: 23 - restLength: 0.15281764 + restLength: 0.15287247 constraintForce: 0 tearResistance: 1 - particle1: 23 particle2: 24 - restLength: 0.16120628 + restLength: 0.16127203 constraintForce: 0 tearResistance: 1 - particle1: 24 particle2: 25 - restLength: 0.16455178 + restLength: 0.16471474 constraintForce: 0 tearResistance: 1 - particle1: 25 particle2: 26 - restLength: 0.16564642 + restLength: 0.16590177 constraintForce: 0 tearResistance: 1 - particle1: 26 particle2: 27 - restLength: 0.16537806 + restLength: 0.16516913 constraintForce: 0 tearResistance: 1 - particle1: 27 particle2: 28 - restLength: 0.16589169 + restLength: 0.16577673 constraintForce: 0 tearResistance: 1 - particle1: 28 particle2: 29 - restLength: 0.16580167 + restLength: 0.16574559 constraintForce: 0 tearResistance: 1 - particle1: 29 particle2: 30 - restLength: 0.16541299 + restLength: 0.16543151 constraintForce: 0 tearResistance: 1 - particle1: 30 particle2: 31 - restLength: 0.1656078 + restLength: 0.16553983 constraintForce: 0 tearResistance: 1 - particle1: 31 particle2: 32 - restLength: 0.16568695 + restLength: 0.16564094 constraintForce: 0 tearResistance: 1 - particle1: 32 particle2: 33 - restLength: 0.16556904 + restLength: 0.16553965 constraintForce: 0 tearResistance: 1 - particle1: 33 particle2: 34 - restLength: 0.164986 + restLength: 0.1649676 constraintForce: 0 tearResistance: 1 - particle1: 34 particle2: 35 - restLength: 0.16632591 + restLength: 0.1661948 constraintForce: 0 tearResistance: 1 - particle1: 35 particle2: 36 - restLength: 0.16450676 + restLength: 0.164499 constraintForce: 0 tearResistance: 1 - particle1: 36 particle2: 37 - restLength: 0.16437778 + restLength: 0.16432038 constraintForce: 0 tearResistance: 1 - particle1: 37 @@ -2029,24 +1958,27 @@ MonoBehaviour: tearResistance: 1 - particle1: 46 particle2: 47 - restLength: 0.14413904 + restLength: 0.14609504 constraintForce: 0 tearResistance: 1 - particle1: 47 particle2: 48 - restLength: 0.14454886 + restLength: 0.1464947 constraintForce: 0 tearResistance: 1 - particle1: 48 particle2: 49 - restLength: 0.14459378 + restLength: 0.14654693 constraintForce: 0 tearResistance: 1 - particle1: 49 particle2: 50 - restLength: 0.14410257 + restLength: 0.1460539 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.01 m_RopeBlueprint: {fileID: 11400000, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -2056,8 +1988,8 @@ MonoBehaviour: _stretchCompliance: 0 _maxCompression: 0 _bendConstraintsEnabled: 1 - _bendCompliance: 0.1 - _maxBending: 0.01 + _bendCompliance: 0.0001 + _maxBending: 0.02 _plasticYield: 0 _plasticCreep: 0 --- !u!114 &1346965647 @@ -2077,8 +2009,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1448059488115486757, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965648 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2096,8 +2029,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 8966044903772103319, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965649 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2115,8 +2049,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -4315519228067560828, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!4 &1346965650 Transform: m_ObjectHideFlags: 0 @@ -2149,8 +2084,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1429558885246807610, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965652 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2168,8 +2104,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 7435677298537737283, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965653 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2197,54 +2134,17 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} m_Name: m_EditorClassIdentifier: - render: 1 - shader: {fileID: 4800000, guid: 801733041f66b49e1b3c2101471db877, type: 3} - particleColor: {r: 1, g: 1, b: 1, a: 1} - radiusScale: 1 ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + material: {fileID: 2100000, guid: 1679a1802f2014f3ebb22f30f3a94662, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + k__BackingField: {r: 1, g: 1, b: 1, a: 1} + k__BackingField: 1 --- !u!1 &1623874905 GameObject: m_ObjectHideFlags: 0 @@ -2299,6 +2199,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2320,6 +2222,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2408,6 +2311,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2429,6 +2334,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2471,10 +2377,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1625299419} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -2545,6 +2451,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2566,6 +2474,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2599,171 +2508,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1647661430} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!43 &1695596024 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 2400 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 459 - localAABB: - m_Center: {x: 0.9784075, y: -1.5820001, z: -0.0000000018626451} - m_Extent: {x: 1.3333801, y: 1.8391398, z: 0.03992135} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 0 - m_KeepIndices: 0 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b0063006c00640064006c006d0064006d00650065006d006e0065006e00660066006e006f0066006f00670067006f007000670070006800680070007100680071006900690071007200690072006a006a00720073006a0073006b006b00730074006c0075006d006d00750076006d0076006e006e00760077006e0077006f006f00770078006f0078007000700078007900700079007100710079007a0071007a00720072007a007b0072007b00730073007b007c0073007c00740074007c007d0075007e00760076007e007f0076007f00770077007f008000770080007800780080008100780081007900790081008200790082007a007a00820083007a0083007b007b00830084007b0084007c007c00840085007c0085007d007d00850086007e0087007f007f00870088007f0088008000800088008900800089008100810089008a0081008a00820082008a008b0082008b00830083008b008c0083008c00840084008c008d0084008d00850085008d008e0085008e00860086008e008f00870090008800880090009100880091008900890091009200890092008a008a00920093008a0093008b008b00930094008b0094008c008c00940095008c0095008d008d00950096008d0096008e008e00960097008e0097008f008f0097009800900099009100910099009a0091009a00920092009a009b0092009b00930093009b009c0093009c00940094009c009d0094009d00950095009d009e0095009e00960096009e009f0096009f00970097009f00a0009700a00098009800a000a1009900a2009a009a00a200a3009a00a3009b009b00a300a4009b00a4009c009c00a400a5009c00a5009d009d00a500a6009d00a6009e009e00a600a7009e00a7009f009f00a700a8009f00a800a000a000a800a900a000a900a100a100a900aa00a200ab00a300a300ab00ac00a300ac00a400a400ac00ad00a400ad00a500a500ad00ae00a500ae00a600a600ae00af00a600af00a700a700af00b000a700b000a800a800b000b100a800b100a900a900b100b200a900b200aa00aa00b200b300ab00b400ac00ac00b400b500ac00b500ad00ad00b500b600ad00b600ae00ae00b600b700ae00b700af00af00b700b800af00b800b000b000b800b900b000b900b100b100b900ba00b100ba00b200b200ba00bb00b200bb00b300b300bb00bc00b400bd00b500b500bd00be00b500be00b600b600be00bf00b600bf00b700b700bf00c000b700c000b800b800c000c100b800c100b900b900c100c200b900c200ba00ba00c200c300ba00c300bb00bb00c300c400bb00c400bc00bc00c400c500bd00c600be00be00c600c700be00c700bf00bf00c700c800bf00c800c000c000c800c900c000c900c100c100c900ca00c100ca00c200c200ca00cb00c200cb00c300c300cb00cc00c300cc00c400c400cc00cd00c400cd00c500c500cd00ce00c600cf00c700c700cf00d000c700d000c800c800d000d100c800d100c900c900d100d200c900d200ca00ca00d200d300ca00d300cb00cb00d300d400cb00d400cc00cc00d400d500cc00d500cd00cd00d500d600cd00d600ce00ce00d600d700cf00d800d000d000d800d900d000d900d100d100d900da00d100da00d200d200da00db00d200db00d300d300db00dc00d300dc00d400d400dc00dd00d400dd00d500d500dd00de00d500de00d600d600de00df00d600df00d700d700df00e000d800e100d900d900e100e200d900e200da00da00e200e300da00e300db00db00e300e400db00e400dc00dc00e400e500dc00e500dd00dd00e500e600dd00e600de00de00e600e700de00e700df00df00e700e800df00e800e000e000e800e900e100ea00e200e200ea00eb00e200eb00e300e300eb00ec00e300ec00e400e400ec00ed00e400ed00e500e500ed00ee00e500ee00e600e600ee00ef00e600ef00e700e700ef00f000e700f000e800e800f000f100e800f100e900e900f100f200ea00f300eb00eb00f300f400eb00f400ec00ec00f400f500ec00f500ed00ed00f500f600ed00f600ee00ee00f600f700ee00f700ef00ef00f700f800ef00f800f000f000f800f900f000f900f100f100f900fa00f100fa00f200f200fa00fb00f300fc00f400f400fc00fd00f400fd00f500f500fd00fe00f500fe00f600f600fe00ff00f600ff00f700f700ff000001f7000001f800f80000010101f8000101f900f90001010201f9000201fa00fa0002010301fa000301fb00fb0003010401fc000501fd00fd0005010601fd000601fe00fe0006010701fe000701ff00ff0007010801ff0008010001000108010901000109010101010109010a0101010a01020102010a010b0102010b01030103010b010c0103010c01040104010c010d0105010e01060106010e010f0106010f01070107010f011001070110010801080110011101080111010901090111011201090112010a010a01120113010a0113010b010b01130114010b0114010c010c01140115010c0115010d010d01150116010e0117010f010f01170118010f0118011001100118011901100119011101110119011a0111011a01120112011a011b0112011b01130113011b011c0113011c01140114011c011d0114011d01150115011d011e0115011e01160116011e011f01170120011801180120012101180121011901190121012201190122011a011a01220123011a0123011b011b01230124011b0124011c011c01240125011c0125011d011d01250126011d0126011e011e01260127011e0127011f011f0127012801200129012101210129012a0121012a01220122012a012b0122012b01230123012b012c0123012c01240124012c012d0124012d01250125012d012e0125012e01260126012e012f0126012f01270127012f013001270130012801280130013101290132012a012a01320133012a0133012b012b01330134012b0134012c012c01340135012c0135012d012d01350136012d0136012e012e01360137012e0137012f012f01370138012f0138013001300138013901300139013101310139013a0132013b01330133013b013c0133013c01340134013c013d0134013d01350135013d013e0135013e01360136013e013f0136013f01370137013f014001370140013801380140014101380141013901390141014201390142013a013a01420143013b0144013c013c01440145013c0145013d013d01450146013d0146013e013e01460147013e0147013f013f01470148013f0148014001400148014901400149014101410149014a0141014a01420142014a014b0142014b01430143014b014c0144014d01450145014d014e0145014e01460146014e014f0146014f01470147014f015001470150014801480150015101480151014901490151015201490152014a014a01520153014a0153014b014b01530154014b0154014c014c01540155014d0156014e014e01560157014e0157014f014f01570158014f0158015001500158015901500159015101510159015a0151015a01520152015a015b0152015b01530153015b015c0153015c01540154015c015d0154015d01550155015d015e0156015f01570157015f016001570160015801580160016101580161015901590161016201590162015a015a01620163015a0163015b015b01630164015b0164015c015c01640165015c0165015d015d01650166015d0166015e015e01660167015f0168016001600168016901600169016101610169016a0161016a01620162016a016b0162016b01630163016b016c0163016c01640164016c016d0164016d01650165016d016e0165016e01660166016e016f0166016f01670167016f017001680171016901690171017201690172016a016a01720173016a0173016b016b01730174016b0174016c016c01740175016c0175016d016d01750176016d0176016e016e01760177016e0177016f016f01770178016f017801700170017801790171017a01720172017a017b0172017b01730173017b017c0173017c01740174017c017d0174017d01750175017d017e0175017e01760176017e017f0176017f01770177017f0180017701800178017801800181017801810179017901810182017a0183017b017b01830184017b0184017c017c01840185017c0185017d017d01850186017d0186017e017e01860187017e0187017f017f01870188017f0188018001800188018901800189018101810189018a0181018a01820182018a018b0183018c01840184018c018d0184018d01850185018d018e0185018e01860186018e018f0186018f01870187018f019001870190018801880190019101880191018901890191019201890192018a018a01920193018a0193018b018b01930194018c0195018d018d01950196018d0196018e018e01960197018e0197018f018f01970198018f0198019001900198019901900199019101910199019a0191019a01920192019a019b0192019b01930193019b019c0193019c01940194019c019d0195019e01960196019e019f0196019f01970197019f01a0019701a00198019801a001a1019801a10199019901a101a2019901a2019a019a01a201a3019a01a3019b019b01a301a4019b01a4019c019c01a401a5019c01a5019d019d01a501a6019e01a7019f019f01a701a8019f01a801a001a001a801a901a001a901a101a101a901aa01a101aa01a201a201aa01ab01a201ab01a301a301ab01ac01a301ac01a401a401ac01ad01a401ad01a501a501ad01ae01a501ae01a601a601ae01af01a701b001a801a801b001b101a801b101a901a901b101b201a901b201aa01aa01b201b301aa01b301ab01ab01b301b401ab01b401ac01ac01b401b501ac01b501ad01ad01b501b601ad01b601ae01ae01b601b701ae01b701af01af01b701b801b001b901b101b101b901ba01b101ba01b201b201ba01bb01b201bb01b301b301bb01bc01b301bc01b401b401bc01bd01b401bd01b501b501bd01be01b501be01b601b601be01bf01b601bf01b701b701bf01c001b701c001b801b801c001c101b901c201ba01ba01c201c301ba01c301bb01bb01c301c401bb01c401bc01bc01c401c501bc01c501bd01bd01c501c601bd01c601be01be01c601c701be01c701bf01bf01c701c801bf01c801c001c001c801c901c001c901c101c101c901ca01 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 459 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 29376 - _typelessdata: aca0a2be63c85ac0918423bd23fd23bbf7c82439918423bd4232233d24fd23bbd94f24bb000080bf0000803f0000803f0000803f0000803f00000000e1eebac1e6d393be21e65ac0bcc5f5bcbc4cd83ca259d9babcc5f5bc054af53cf57af6bad5b9d83c000080bf0000803f0000803f0000803f0000803f0000003ee1eebac16af28cbef5f35ac0d34f24bb4232233d23fd23bbd34f24bb1dfd233bfbc824b99284233d000080bf0000803f0000803f0000803f0000803f0000803ee1eebac1120492bec5e95ac0d4b9d83c054af53cf47af6bad4b9d83cbc4cd8bca259d93abdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ee1eebac1b810a0be89cd5ac09184233d14fd233be7c824b99184233d423223bd24fd233bca4f243b000080bf0000803f0000803f0000803f0000803f0000003fe1eebac17eddaebecbaf5ac0bac5f53cbf4cd8bca559d93abac5f53c034af5bcf37af63ad8b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fe1eebac1fabeb5bef7a15ac0d84f243b423223bd23fd233bd84f243b22fd23bb00c92439928423bd000080bf0000803f0000803f0000803f0000803f0000403fe1eebac152adb0be27ac5ac0d9b9d8bc014af5bcef7af63ad9b9d8bcc14cd83ca759d9bab9c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fe1eebac1aca0a2be63c85ac0928423bd05fd23bbd8c82439928423bd4332233d25fd23bbbb4f24bb000080bf0000803f0000803f0000803f0000803f0000803fe1eebac172ca9dbee72751c0908423bdf20624bb58b61a39908423bd033c233dfaf619bbd84f24bb000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000d150b7c1c9fc8ebed44351c0bbc5f5bcab59d83c7510ccbabbc5f5bcb058f53cf169e7bad2b9d83c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ed150b7c1e41a88bed05051c0d24f24bb043c233dfbf619bbd24f24bbeb06243b5db61ab99084233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ed150b7c1d92c8dbe3f4751c0d3b9d83cb058f53cf069e7bad3b9d83cab59d8bc7510cc3abac5f53c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03ed150b7c1563a9bbebd2c51c09084233de306243b4ab61ab99084233d033c23bdfaf6193bc94f243b000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003fd150b7c1ff07aabed01051c0b9c5f53cae59d8bc7810cc3ab9c5f53cae58f5bcef69e73ad5b9d8bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203fd150b7c1e4e9b0bed40351c0d74f243b043c23bdfbf6193bd74f243bf00624bb61b61a39908423bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403fd150b7c1efd7abbe650d51c0d8b9d8bcac58f5bceb69e73ad8b9d8bcb059d83c7a10ccbab6c5f5bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603fd150b7c172ca9dbee72751c0918423bdd40624bb3cb61a39918423bd043c233dfbf619bbba4f24bb000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803fd150b7c1f38799bead7e47c0918423bd1f3124bbaaeec838918423bdfd65233d29f6c7bad94f24bb000080bf0000803f0000803f0000803f0000803f00000000a1afb3c17cb68abecf9047c0bcc5f5bc4d91d83c9e8384babcc5f5bcc797f53c344696bad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003ea1afb3c1d1d283be3e9947c0d34f24bbfe65233d29f6c7bad34f24bb1931243bb8eec8b89284233d000080bf0000803f0000803f0000803f0000803f0000803ea1afb3c115e688be089347c0d4b9d83cc797f53c324696bad4b9d83c4d91d8bc9e83843abcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ea1afb3c12ff796bed18147c09184233d1131243b98eec8b89184233dfd6523bd29f6c73acb4f243b000080bf0000803f0000803f0000803f0000803f0000003fa1afb3c1a6c8a5beaf6f47c0bac5f53c5091d8bca083843abac5f53cc597f5bc3346963ad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fa1afb3c151acacbe406747c0d84f243bfe6523bd29f6c73ad84f243b1e3124bbbeeec838928423bd000080bf0000803f0000803f0000803f0000803f0000403fa1afb3c10d99a7be766d47c0d9b9d8bcc297f5bc2f46963ad9b9d8bc5291d83ca18384bab7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fa1afb3c1f38799bead7e47c0928423bd023124bb85eec838928423bdfe65233d2af6c7babc4f24bb000080bf0000803f0000803f0000803f0000803f0000803fa1afb3c1bfe197bef1d73dc0918423bda64f24bbb5c70137918423bd5f84233ddd2701b9da4f24bb000080bf0000803f0000803f0000803f0000803f000000005a10b0c1870d89be67d93dc0bcc5f5bc90b9d83caf2eabb8bcc5f5bc70c5f53c0420c2b8d4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e5a10b0c1942882be16da3dc0d34f24bb5e84233dcd2701b9d34f24bba04f243b68c801b79284233d000080bf0000803f0000803f0000803f0000803f0000803e5a10b0c1c93c87be95d93dc0d4b9d83c6fc5f53cdd1fc2b8d4b9d83c91b9d8bcb62eab38bcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e5a10b0c1815095be31d83dc09184233d974f243ba9c701b79184233d5f8423bddd270139cb4f243b000080bf0000803f0000803f0000803f0000803f0000003f5a10b0c1b924a4bebbd63dc0bac5f53c93b9d8bcb12eab38bac5f53c6ec5f5bc0220c238d7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f5a10b0c1ac09abbe0cd63dc0d84f243b5e8423bdcd270139d84f243ba54f24bb6cc80137928423bd000080bf0000803f0000803f0000803f0000803f0000403f5a10b0c177f5a5be8dd63dc0d9b9d8bc6bc5f5bcd91fc238d9b9d8bc96b9d83cba2eabb8b8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f5a10b0c1bfe197bef1d73dc0928423bd884f24bb9dc70137928423bd6084233dde2701b9bc4f24bb000080bf0000803f0000803f0000803f0000803f0000803f5a10b0c1e30d99be942e34c0918423bd373724bb39ecb3b8918423bd0d6c233d880db33ada4f24bb000080bf0000803f0000803f0000803f0000803f000000002970acc1e03b8abe571e34c0bcc5f5bc5699d83ce5506d3abcc5f5bce4a0f53c9e8f863ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e2970acc1f35783beca1634c0d34f24bb0e6c233d8c0db33ad34f24bb3137243b19ecb3389284233d000080bf0000803f0000803f0000803f0000803f0000803e2970acc1676b88be5a1c34c0d4b9d83ce4a0f53ca28f863ad4b9d83c5699d8bce2506dbabdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e2970acc1077d96bec42b34c09184233d2837243b29ecb3389184233d0d6c23bd880db3bacb4f243b000080bf0000803f0000803f0000803f0000803f0000003f2970acc10b4fa5be013c34c0bac5f53c5999d8bce8506dbabac5f53ce2a0f5bc9d8f86bad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f2970acc1f732acbe8e4334c0d84f243b0e6c23bd8c0db3bad84f243b363724bb1fecb3b8928423bd000080bf0000803f0000803f0000803f0000803f0000403f2970acc1831fa7befe3d34c0d9b9d8bcdfa0f5bca08f86bad9b9d8bc5b99d83ce7506d3ab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f2970acc1e30d99be942e34c0928423bd193724bb18ecb3b8928423bd0e6c233d890db33abc4f24bb000080bf0000803f0000803f0000803f0000803f0000803f2970acc1e52c9dbe39852ac0918423bd251a24bb31ce04b9918423bd1f4f233dd729043bd94f24bb000080bf0000803f0000803f0000803f0000803f0000000015cfa8c1815d8ebe416d2ac0bcc5f5bcfe72d83c3f2baf3abcc5f5bc6875f53c50a5c63ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e15cfa8c1cd7a87be1c622ac0d34f24bb204f233dda29043bd34f24bb1f1a243b1fce04399284233d000080bf0000803f0000803f0000803f0000803f0000803e15cfa8c15a8d8cbe516a2ac0d4b9d83c6875f53c55a5c63ad4b9d83cfe72d8bc3c2bafbabcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e15cfa8c17d9c9abe13812ac09184233d161a243b25ce04399184233d1f4f23bdd72904bbca4f243b000080bf0000803f0000803f0000803f0000803f0000003f15cfa8c1e16ba9be0b992ac0bac5f53c0173d8bc412bafbabac5f53c6675f5bc4ea5c6bad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f15cfa8c1954eb0be30a42ac0d84f243b1f4f23bdda2904bbd84f243b241a24bb23ce04b9918423bd000080bf0000803f0000803f0000803f0000803f0000403f15cfa8c1073cabbefb9b2ac0d9b9d8bc6375f5bc51a5c6bad9b9d8bc0373d83c402baf3ab7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f15cfa8c1e52c9dbe39852ac0928423bd071a24bb19ce04b9928423bd204f233dd729043bbb4f24bb000080bf0000803f0000803f0000803f0000803f0000803f15cfa8c131c1a0bec42621c0918423bdeb3e24bbe02b95b8918423bdb873233d3973943ada4f24bb000080bf0000803f0000803f0000803f0000803f00000000fa4aa5c17bee91be4e1921c0bcc5f5bc7fa3d83c56c1443abcc5f5bc69acf53c06205f3ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003efa4aa5c13c0a8bbe0c1321c0d34f24bbb873233d3e73943ad34f24bbe53e243bc02b95389284233d000080bf0000803f0000803f0000803f0000803f0000803efa4aa5c1ec1d90bea81721c0d4b9d83c69acf53c10205f3ad4b9d83c7fa3d8bc51c144babdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03efa4aa5c135309ebe702421c09184233ddc3e243bd22b95389184233db87323bd397394bacb4f243b000080bf0000803f0000803f0000803f0000803f0000003ffa4aa5c1eb02adbee63121c0bac5f53c81a3d8bc59c144babac5f53c67acf5bc04205fbad6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203ffa4aa5c12ae7b3be283821c0d84f243bb87323bd3e7394bad84f243bea3e24bbc42b95b8928423bd000080bf0000803f0000803f0000803f0000803f0000403ffa4aa5c179d3aebe8c3321c0d9b9d8bc64acf5bc0c205fbad9b9d8bc84a3d83c56c1443ab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603ffa4aa5c131c1a0bec42621c0928423bdcd3e24bbc52b95b8928423bdb973233d3a73943abc4f24bb000080bf0000803f0000803f0000803f0000803f0000803ffa4aa5c1cd6ea1beabc417c0918423bda74f24bb95b50037918423bd5f84233d2b1700b9da4f24bb000080bf0000803f0000803f0000803f0000803f00000000a3c6a1c1959a92be1fc617c0bcc5f5bc92b9d83c20c5a9b8bcc5f5bc71c5f53c2586c0b8d5b9d83c000080bf0000803f0000803f0000803f0000803f0000003ea3c6a1c1a2b58bbecbc617c0d34f24bb6084233d011700b9d34f24bba14f243b63b600b79384233d000080bf0000803f0000803f0000803f0000803f0000803ea3c6a1c1d7c990be4cc617c0d4b9d83c71c5f53cd885c0b8d4b9d83c92b9d8bc48c5a938bdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ea3c6a1c18fdd9ebeebc417c09184233d984f243b89b500b79184233d5f8423bd2b170039cb4f243b000080bf0000803f0000803f0000803f0000803f0000003fa3c6a1c1c7b1adbe77c317c0bac5f53c94b9d8bc22c5a938bac5f53c6fc5f5bc2486c038d7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fa3c6a1c1ba96b4becbc217c0d84f243b5f8423bd01170039d84f243ba64f24bb67b60037928423bd000080bf0000803f0000803f0000803f0000803f0000403fa3c6a1c18582afbe4ac317c0d9b9d8bc6dc5f5bcd485c038d9b9d8bc97b9d83c4cc5a9b8b9c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fa3c6a1c1cd6ea1beabc417c0928423bd894f24bb7eb50037928423bd6084233d2c1700b9bc4f24bb000080bf0000803f0000803f0000803f0000803f0000803fa3c6a1c1b54ba0be0e630ec0918423bd634624bb7b0d5f38918423bd267b233db8f95dbad94f24bb000080bf0000803f0000803f0000803f0000803f0000000035429ec1527891be1f6d0ec0bcc5f5bc59add83c471a13babcc5f5bc94b7f53c69d126bad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e35429ec1c3938abecd710ec0d34f24bb277b233db0f95dbad34f24bb5c46243ba40d5fb89284233d000080bf0000803f0000803f0000803f0000803f0000803e35429ec1afa78fbe5a6e0ec0d4b9d83c95b7f53c62d126bad4b9d83c58add8bc4a1a133abcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e35429ec19bba9dbecc640ec09184233d5446243b660d5fb89184233d267b23bdb8f95d3aca4f243b000080bf0000803f0000803f0000803f0000803f0000003f35429ec1fe8dacbebb5a0ec0bac5f53c5badd8bc491a133abac5f53c92b7f5bc68d1263ad6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f35429ec18d72b3be0d560ec0d84f243b277b23bdb0f95d3ad84f243b614624bbab0d5f38928423bd000080bf0000803f0000803f0000803f0000803f0000403f35429ec1a15eaebe80590ec0d9b9d8bc90b7f5bc5fd1263ad9b9d8bc5dadd83c4e1a13bab7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f35429ec1b54ba0be0e630ec0928423bd454624bb520d5f38928423bd277b233db9f95dbabb4f24bb000080bf0000803f0000803f0000803f0000803f0000803f35429ec1cb3f9ebe780205c0918423bd623f24bb3f1c9338918423bd2e74233d586692bada4f24bb000080bf0000803f0000803f0000803f0000803f00000000c2bd9ac10a6d8fbebf0f05c0bcc5f5bc1ca4d83ca20942babcc5f5bc1badf53c1f0b5cbad5b9d83c000080bf0000803f0000803f0000803f0000803f0000003ec2bd9ac1c68888beeb1505c0d34f24bb2e74233d546692bad34f24bb5c3f243b531c93b89284233d000080bf0000803f0000803f0000803f0000803f0000803ec2bd9ac17a9c8dbe5f1105c0d4b9d83c1badf53c160b5cbad4b9d83c1ca4d8bca609423abdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ec2bd9ac1cdae9bbec40405c09184233d533f243b311c93b89184233d2e7423bd5866923acb4f243b000080bf0000803f0000803f0000803f0000803f0000003fc2bd9ac18e81aabe7df704c0bac5f53c1ea4d8bca409423abac5f53c19adf5bc1d0b5c3ad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fc2bd9ac1d265b1be51f104c0d84f243b2e7423bd5466923ad84f243b613f24bb581c9338928423bd000080bf0000803f0000803f0000803f0000803f0000403fc2bd9ac11d52acbeddf504c0d9b9d8bc16adf5bc120b5c3ad9b9d8bc21a4d83cab0942bab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fc2bd9ac1cb3f9ebe780205c0928423bd443f24bb241c9338928423bd2f74233d596692babc4f24bb000080bf0000803f0000803f0000803f0000803f0000803fc2bd9ac1c8189cbeeb44f7bf918423bd704324bb9f757f38918423bd3778233dc5397ebada4f24bb000080bf0000803f0000803f0000803f0000803f00000000543997c1aa458dbef95bf7bfbcc5f5bc75a9d83c8b7928babcc5f5bc2bb3f53cf70d3fbad5b9d83c000080bf0000803f0000803f0000803f0000803f0000003e543997c13a6186beb166f7bfd34f24bb3778233dbd397ebad34f24bb6943243bc8757fb89284233d000080bf0000803f0000803f0000803f0000803f0000803e543997c10e758bbecc5ef7bfd4b9d83c2bb3f53cef0d3fbad4b9d83c75a9d8bc8f79283abcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e543997c1ba8799bee948f7bf9184233d6143243b87757fb89184233d377823bdc5397e3acb4f243b000080bf0000803f0000803f0000803f0000803f0000003f543997c1d85aa8bedb31f7bfbac5f53c77a9d8bc8e79283abac5f53c29b3f5bcf50d3f3ad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f543997c1483fafbe2327f7bfd84f243b377823bdbd397e3ad84f243b6e4324bbd0757f38928423bd000080bf0000803f0000803f0000803f0000803f0000403f543997c1732baabe082ff7bfd9b9d8bc27b3f5bceb0d3f3ad9b9d8bc7aa9d83c937928bab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f543997c1c8189cbeeb44f7bf928423bd524324bb70757f38928423bd3878233dc7397ebabc4f24bb000080bf0000803f0000803f0000803f0000803f0000803f543997c1a79a9abef884e4bf918423bda14d24bb3d40d837918423bd5a82233d1935d7b9da4f24bb000080bf0000803f0000803f0000803f0000803f00000000f1b493c19ec68bbeba8ee4bfbcc5f5bce5b6d83c0f9e8eb9bcc5f5bc68c2f53c52bba1b9d4b9d83c000080bf0000803f0000803f0000803f0000803f0000003ef1b493c1c1e184be4393e4bfd34f24bb5b82233d0935d7b9d34f24bb9a4d243b9b40d8b79184233d000080bf0000803f0000803f0000803f0000803f0000803ef1b493c1e5f589beec8fe4bfd4b9d83c69c2f53c42bba1b9d4b9d83ce5b6d8bc169e8e39bcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ef1b493c1710998bea886e4bf9184233d924d243b2940d8b79184233d5a8223bd1935d739cb4f243b000080bf0000803f0000803f0000803f0000803f0000003ff1b493c17adda6bee67ce4bfbac5f53ce8b6d8bc109e8e39bac5f53c66c2f5bc50bba139d7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203ff1b493c157c2adbe5d78e4bfd84f243b5b8223bd0935d739d84f243b9f4d24bba240d837918423bd000080bf0000803f0000803f0000803f0000803f0000403ff1b493c132aea8beb47be4bfd9b9d8bc64c2f5bc3fbba139d9b9d8bceab6d83c199e8eb9b7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603ff1b493c1a79a9abef884e4bf928423bd834d24bb1640d837928423bd5b82233d1a35d7b9bc4f24bb000080bf0000803f0000803f0000803f0000803f0000803ff1b493c1e48d9abed5c4d1bf918423bdd14d24bbb8cfceb7918423bd8a82233d6ecfcd39d94f24bb000080bf0000803f0000803f0000803f0000803f000000009b3090c1d6b98bbe80bbd1bfbcc5f5bc26b7d83ce7638839bcc5f5bcb0c2f53c6dab9a39d4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e9b3090c1f6d484be29b7d1bfd34f24bb8c82233d86cfcd39d34f24bbca4d243b42cfce379284233d000080bf0000803f0000803f0000803f0000803f0000803e9b3090c11de989be5bbad1bfd4b9d83cb2c2f53c82ab9a39d4b9d83c25b7d8bcdb6388b9bcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e9b3090c1acfc97be37c3d1bf9184233dc24d243ba5cfce379184233d8a8223bd6ecfcdb9ca4f243b000080bf0000803f0000803f0000803f0000803f0000003f9b3090c1bad0a6be8cccd1bfbac5f53c28b7d8bce86388b9bac5f53caec2f5bc6bab9ab9d6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f9b3090c19ab5adbee3d0d1bfd84f243b8c8223bd86cfcdb9d84f243bcf4d24bb49cfceb7928423bd000080bf0000803f0000803f0000803f0000803f0000403f9b3090c173a1a8beb1cdd1bfd9b9d8bcadc2f5bc7fab9ab9d9b9d8bc2ab7d83cde638839b7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f9b3090c1e38d9abed5c4d1bf928423bdb34d24bb92cfceb7928423bd8b82233d6fcfcd39bb4f24bb000080bf0000803f0000803f0000803f0000803f0000803f9b3090c1c9129cbe582bbfbf918423bdca4224bb710b83b8918423bd9177233d3569823adb4f24bb000080bf0000803f0000803f0000803f0000803f0000000068b38cc1ba3f8dbeb113bfbfbcc5f5bc98a8d83ca5d82c3abcc5f5bc31b2f53c0103443ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e68b38cc1515b86beb208bfbfd34f24bb9177233d3c69823ad34f24bbc242243b500b83389284233d000080bf0000803f0000803f0000803f0000803f0000803e68b38cc1206f8bbecc10bfbfd4b9d83c31b2f53c0d03443ad4b9d83c98a8d8bc9fd82cbabdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e68b38cc1be8199be4027bfbf9184233dbb42243b650b83389184233d917723bd356982bacc4f243b000080bf0000803f0000803f0000803f0000803f0000003f68b38cc1cd54a8bee73ebfbfbac5f53c9ba8d8bca7d82cbabac5f53c2fb2f5bc000344bad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f68b38cc13539afbee649bfbfd84f243b917723bd3b6982bad84f243bc74224bb540b83b8928423bd000080bf0000803f0000803f0000803f0000803f0000403f68b38cc16625aabecc41bfbfd9b9d8bc2db2f5bc090344bad9b9d8bc9da8d83ca3d82c3ab9c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f68b38cc1c8129cbe582bbfbf928423bdac4224bb590b83b8928423bd9277233d3669823abd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f68b38cc190439ebe0c92acbf918423bd6a3e24bbdc6397b8918423bd3673233d73a8963ada4f24bb000080bf0000803f0000803f0000803f0000803f00000000373689c1e6708fbeb876acbfbcc5f5bcd3a2d83c80ae473abcc5f5bca6abf53c9571623ad3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e373689c1ac8c88be046aacbfd34f24bb3773233d7ba8963ad34f24bb623e243bb96397389284233d000080bf0000803f0000803f0000803f0000803f0000803e373689c159a08dbe6073acbfd4b9d83ca7abf53ca271623ad4b9d83cd3a2d8bc78ae47babcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e373689c196b29bbe508dacbf9184233d5b3e243bce6397389184233d367323bd73a896bacb4f243b000080bf0000803f0000803f0000803f0000803f0000003f373689c14085aabea4a8acbfbac5f53cd6a2d8bc83ae47babac5f53ca4abf5bc937162bad6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f373689c17a69b1be58b5acbfd84f243b377323bd7ba896bad84f243b673e24bbbe6397b8928423bd000080bf0000803f0000803f0000803f0000803f0000403f373689c1cd55acbefcabacbfd9b9d8bca2abf5bc9e7162bad9b9d8bcd8a2d83c7dae473ab7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f373689c190439ebe0c92acbf928423bd4c3e24bbc06397b8928423bd3773233d74a8963abc4f24bb000080bf0000803f0000803f0000803f0000803f0000803f373689c10e5ca0bec8f799bf918423bdb74524bb04de66b8918423bd7b7a233d2dc0653adb4f24bb000080bf0000803f0000803f0000803f0000803f000000000bb985c1bc8891bef2e299bfbcc5f5bc74acd83c6441183abcc5f5bc93b6f53c45a92c3ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e0bb985c134a48abe42d999bfd34f24bb7a7a233d3bc0653ad34f24bbb045243bc3dd66389184233d000080bf0000803f0000803f0000803f0000803f0000803e0bb985c11ab88fbe65e099bfd4b9d83c92b6f53c52a92c3ad4b9d83c75acd8bc5d4118babdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e0bb985c1f8ca9dbe2cf499bf9184233da845243befdd66389184233d7b7a23bd2dc065bacc4f243b000080bf0000803f0000803f0000803f0000803f0000003f0bb985c14a9eacbe02099abfbac5f53c77acd8bc664118babac5f53c91b6f5bc44a92cbad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f0bb985c1d282b3beb2129abfd84f243b7a7a23bd3bc065bad84f243bb54524bbcadd66b8918423bd000080bf0000803f0000803f0000803f0000803f0000403f0bb985c1ec6eaebe8f0b9abfd9b9d8bc8db6f5bc4ea92cbad9b9d8bc7aacd83c6041183ab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f0bb985c10e5ca0bec8f799bf928423bd994524bbdadd66b8928423bd7c7a233d2ec0653abd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f0bb985c14d88a1be6b5b87bf918423bd994f24bbbbc011b7918423bd5084233d980b1139d94f24bb000080bf0000803f0000803f0000803f0000803f00000000e63b82c116b492be215887bfbcc5f5bc7eb9d83c3d3ec038bcc5f5bc5bc5f53cf101da38d3b9d83c000080bf0000803f0000803f0000803f0000803f0000003ee63b82c124cf8bbe9a5687bfd34f24bb5184233dc50b1139d34f24bb924f243be4bf11379184233d000080bf0000803f0000803f0000803f0000803f0000803ee63b82c158e390beba5787bfd4b9d83c5bc5f53c4202da38d4b9d83c7eb9d8bc113ec0b8bbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ee63b82c10ff79ebed95a87bf9184233d8a4f243baec011379184233d508423bd980b11b9ca4f243b000080bf0000803f0000803f0000803f0000803f0000003fe63b82c146cbadbe235e87bfbac5f53c81b9d8bc3f3ec0b8bac5f53c59c5f5bcef01dab8d6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fe63b82c138b0b4beaa5f87bfd84f243b518423bdc50b11b9d84f243b974f24bbe8bf11b7918423bd000080bf0000803f0000803f0000803f0000803f0000403fe63b82c1039cafbe8a5e87bfd9b9d8bc57c5f5bc3e02dab8d9b9d8bc83b9d83c153ec038b7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fe63b82c14d88a1be6b5b87bf928423bd7b4f24bba0c011b7928423bd5184233d990b1139bb4f24bb000080bf0000803f0000803f0000803f0000803f0000803fe63b82c109e0a0beba7b69bf918423bd903f24bba24d9238918423bd5c74233dba9891bad94f24bb000080bf0000803f0000803f0000803f0000803f000000009c7d7dc1440d92be8ab069bfbcc5f5bc58a4d83c1bf940babcc5f5bc60adf53c11d65abad3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e9c7d7dc1fe288bbe18c969bfd34f24bb5c74233db69891bad34f24bb8a3f243bb54d92b89184233d000080bf0000803f0000803f0000803f0000803f0000803e9c7d7dc1b43c90be02b769bfd4b9d83c5fadf53c09d65abad4b9d83c59a4d8bc1ff9403abbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e9c7d7dc10b4f9ebede8469bf9184233d813f243b954d92b89184233d5c7423bdba98913aca4f243b000080bf0000803f0000803f0000803f0000803f0000003f9c7d7dc1d021adbe0e5069bfbac5f53c5ba4d8bc1ef9403abac5f53c5eadf5bc0fd65a3ad6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f9c7d7dc11606b4be803769bfd84f243b5c7423bdb698913ad84f243b8f3f24bbb94d9238918423bd000080bf0000803f0000803f0000803f0000803f0000403f9c7d7dc160f2aebe964969bfd9b9d8bc5aadf5bc05d65a3ad9b9d8bc5ea4d83c24f940bab6c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f9c7d7dc109e0a0beba7b69bf928423bd723f24bb874d9238928423bd5d74233dbb9891babb4f24bb000080bf0000803f0000803f0000803f0000803f0000803f9c7d7dc160639dbe344944bf918423bd39df23bb74414039918423bd7c14233da5533fbbda4f24bb000080bf0000803f0000803f0000803f0000803f00000000938376c14e998ebe03d444bfbcc5f5bc4525d83c6b95fdbabcc5f5bc461df53cf7c80fbbd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e938376c112b987be8c1445bfd34f24bb7c14233da3533fbbd34f24bb33df233b784140b99184233d000080bf0000803f0000803f0000803f0000803f0000803e938376c1cec98cbe01e544bfd4b9d83c451df53cf5c80fbbd4b9d83c4725d8bc6d95fd3abcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e938376c1e4d39abe3c6144bf9184233d2adf233b634140b99184233d7c1423bda5533f3bcb4f243b000080bf0000803f0000803f0000803f0000803f0000003f938376c1f69da9be6dd643bfbac5f53c4825d8bc6e95fd3abac5f53c441df5bcf6c80f3bd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f938376c1327eb0bee49543bfd84f243b7c1423bda3533f3bd84f243b38df23bb7e414039918423bd000080bf0000803f0000803f0000803f0000803f0000403f938376c1766dabbe6fc543bfd9b9d8bc401df5bcf3c80f3bd9b9d8bc4c25d83c7395fdbab7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f938376c160639dbe344944bf928423bd1bdf23bb51414039928423bd7d14233da6533fbbbc4f24bb000080bf0000803f0000803f0000803f0000803f0000803f938376c1bafd95bef8411fbf918423bdebb723bbb03e5f39918423bd5fed223d8a2a5ebbda4f24bb000080bf0000803f0000803f0000803f0000803f00000000bd896fc1333787be27e31fbfbcc5f5bc6df1d73ca43a13bbbcc5f5bc7be2f43c1af626bbd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003ebd896fc19e5880be172e20bfd34f24bb5eed223d892a5ebbd34f24bbe5b7233bb33e5fb99184233d000080bf0000803f0000803f0000803f0000803f0000803ebd896fc1226885bee2f61fbfd4b9d83c7ae2f43c18f626bbd4b9d83c6ff1d7bca53a133bbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ebd896fc1da6e93bee05d1fbf9184233ddcb7233b9c3e5fb99184233d5fed22bd8a2a5e3bcb4f243b000080bf0000803f0000803f0000803f0000803f0000003fbd896fc16135a2beb1bc1ebfbac5f53c70f1d7bca63a133bbac5f53c79e2f4bc19f6263bd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fbd896fc1f613a9bec1711ebfd84f243b5eed22bd892a5e3bd84f243beab723bbba3e5f39918423bd000080bf0000803f0000803f0000803f0000803f0000403fbd896fc17104a4bef6a81ebfd9b9d8bc76e2f4bc15f6263bd9b9d8bc74f1d73ca93a13bbb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fbd896fc1bafd95bef8411fbf928423bdcdb723bb883e5f39928423bd60ed223d8c2a5ebbbc4f24bb000080bf0000803f0000803f0000803f0000803f0000803fbd896fc12e6890be3745f0be918423bda33324bb5088c038918423bd7e68233d359abfbad84f24bb000080bf0000803f0000803f0000803f0000803f00000000972d68c17d9681be39d0f0bebcc5f5bc9e94d83ceff27dbabcc5f5bc8a9bf53cfefd8fbad3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e972d68c16e6575beda10f1bed34f24bb7e68233d329abfbad34f24bb9d33243b6088c0b89084233d000080bf0000803f0000803f0000803f0000803f0000803e972d68c11d8c7fbe3ee1f0bed4b9d83c8a9bf53cfbfd8fbad4b9d83c9e94d8bcf3f27d3abbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e972d68c160d78dbe495df0be9184233d9433243b3f88c0b89184233d7e6823bd359abf3ac94f243b000080bf0000803f0000803f0000803f0000803f0000003f972d68c111a99cbe47d2efbebac5f53ca194d8bcf3f27d3abac5f53c889bf5bcfdfd8f3ad6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f972d68c1d78ca3bea691efbed84f243b7e6823bd329abf3ad84f243ba23324bb6688c038908423bd000080bf0000803f0000803f0000803f0000803f0000403f972d68c17f799ebe42c1efbed9b9d8bc859bf5bcf8fd8f3ad9b9d8bca394d83cf9f27dbab6c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f972d68c12e6890be3745f0be928423bd853324bb2d88c038928423bd7f68233d369abfbaba4f24bb000080bf0000803f0000803f0000803f0000803f0000803f972d68c1ba3f90beddc4a1be918423bde14824bba76a3f38918423bda17d233d097e3ebad94f24bb000080bf0000803f0000803f0000803f0000803f00000000fcd060c11e6c81bef709a2bebcc5f5bca2b0d83c427afcb9bcc5f5bc4fbbf53c6f280fbad3b9d83c000080bf0000803f0000803f0000803f0000803f0000003efcd060c1e80e75be172aa2bed34f24bba17d233dfd7d3ebad34f24bbdb48243bd36a3fb89084233d000080bf0000803f0000803f0000803f0000803f0000803efcd060c1e6367fbe6c12a2bed4b9d83c4fbbf53c64280fbad4b9d83ca2b0d8bc4f7afc39bbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03efcd060c196ae8dbed3d0a1be9184233dd248243b966a3fb89184233da17d23bd097e3e3aca4f243b000080bf0000803f0000803f0000803f0000803f0000003ffcd060c132829cbeb98ba1bebac5f53ca5b0d8bc457afc39bac5f53c4dbbf5bc6e280f3ad6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203ffcd060c1dc66a3be996ba1bed84f243ba17d23bdfd7d3e3ad84f243be04824bbd96a3f38908423bd000080bf0000803f0000803f0000803f0000803f0000403ffcd060c1dd529ebe4483a1bed9b9d8bc4abbf5bc62280f3ad9b9d8bca7b0d83c557afcb9b6c5f5bc000080bf0000803f0000803f0000803f0000803f0000603ffcd060c1ba3f90beddc4a1be928423bdc34824bb846a3f38928423bda27d233d0a7e3ebabb4f24bb000080bf0000803f0000803f0000803f0000803f0000803ffcd060c1238a8dbe855f26be918423bd02f622bbb436a839918423bd662c223d9e66a7bbd94f24bb000080bf0000803f0000803f0000803f0000803f00000000467559c139aa7dbe1d2b2abebcc5f5bcabf1d63c55df5dbbbcc5f5bc71c0f33cd39b7bbbd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e467559c154fd6fbed5ee2bbed34f24bb662c223d9d66a7bbd34f24bbfcf5223bb436a8b99184233d000080bf0000803f0000803f0000803f0000803f0000803e467559c160107abe0fa22abed4b9d83c70c0f33cd19b7bbbd4b9d83cacf1d6bc57df5d3bbbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e467559c14bfe8abebb0727be9184233df3f5223ba536a8b99184233d662c22bd9e66a73bc94f243b000080bf0000803f0000803f0000803f0000803f0000003f467559c152b399be233c23bebac5f53cadf1d6bc58df5d3bbac5f53c6fc0f3bcd19b7b3bd5b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f467559c1c489a0be6b7821bed84f243b662c22bd9d66a73bd84f243b01f622bbb936a839918423bd000080bf0000803f0000803f0000803f0000803f0000403f467559c13e809bbe31c522bed9b9d8bc6bc0f3bccc9b7b3bd9b9d8bcb1f1d63c5cdf5dbbb6c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f467559c1238a8dbe855f26be928423bde4f522bb9536a839928423bd672c223d9f66a7bbba4f24bb000080bf0000803f0000803f0000803f0000803f0000803f467559c1281e78be4e194abc918423bd00d907bb93ddb83a918423bdf030073dddf8b7bcd94f24bb000080bf0000803f0000803f0000803f0000803f00000000731f52c1f3985fbe8085eabcbcc5f5bc8a2eb33c00d673bcbcc5f5bc4f32cb3c07428abcd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e731f52c1883254beaf4914bdd34f24bbef30073ddef8b7bcd34f24bbfcd8073b8cddb8ba9184233d000080bf0000803f0000803f0000803f0000803f0000803e731f52c17a985cbe87dcfabcd4b9d83c4d32cb3c07428abcd4b9d83c8c2eb3bcffd5733cbbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e731f52c160df73beb05078bc9184233df4d8073b82ddb8ba9184233df03007bdddf8b73cca4f243b000080bf0000803f0000803f0000803f0000803f0000003f731f52c14b3286be1808953abac5f53c8c2eb3bc03d6733cbac5f53c4d32cbbc06428a3cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f731f52c180e58bbebcbc0e3cd84f243bef3007bddef8b73cd84f243b00d907bb92ddb83a918423bd000080bf0000803f0000803f0000803f0000803f0000403f731f52c187b287be283c4d3bd9b9d8bc4932cbbc05428a3cd9b9d8bc902eb33c05d673bcb7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f731f52c1281e78be52194abc928423bde7d807bb71ddb83a928423bdf030073ddff8b7bcbb4f24bb000080bf0000803f0000803f0000803f0000803f0000803f731f52c1874fe1bdb9f9a73d918423bd21fd8fba21b3133b918423bdff4a8f3c67fc12bdd94f24bb000080bf0000803f0000803f0000803f0000803f000000008c624ac12352c7bdfc4f653dbcc5f5bc7beb3d3c89d0c2bcbcc5f5bcaf5f573ca9ecdcbcd5b9d83c000080bf0000803f0000803f0000803f0000803f0000003e8c624ac1d33cbbbdd9bb333dd34f24bbfc4a8f3c67fc12bdd34f24bb1dfd8f3a1cb313bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e8c624ac19d23c4bdec41583dd4b9d83cab5f573ca9ecdcbcd4b9d83c7feb3dbc89d0c23cbdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e8c624ac19ecfdcbd87be9e3d9184233d14fd8f3a14b313bb9184233dff4a8fbc67fc123dcb4f243b000080bf0000803f0000803f0000803f0000803f0000003f8c624ac102cdf6bd4310d43dbac5f53c7deb3dbc8bd0c23cbac5f53cad5f57bca7ecdc3cd7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f8c624ac1287101be54daec3dd84f243bfc4a8fbc67fc123dd84f243b21fd8fba21b3133b918423bd000080bf0000803f0000803f0000803f0000803f0000403f8c624ac187fbf9bd4997da3dd9b9d8bca75f57bca5ecdc3cd9b9d8bc83eb3d3c8dd0c2bcb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f8c624ac1864fe1bdb8f9a73d928423bd06fd8fba06b3133b928423bd004b8f3c68fc12bdbb4f24bb000080bf0000803f0000803f0000803f0000803f0000803f8c624ac1b6f1443ddd9f043e918423bde2301eba4a7b1f3b918423bd2f6d1d3cfbb51ebdd94f24bb000080bf0000803f0000803f0000803f0000803f00000000897c42c15a7f613d2cadcf3dbcc5f5bc00a7d03bd15ad2bcbcc5f5bcef9dec3b208ceebcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e897c42c1c4c56e3de2e8b43dd34f24bb2a6d1d3cfcb51ebdd34f24bbdf301e3a437b1fbb9184233d000080bf0000803f0000803f0000803f0000803f0000803e897c42c137fe643dd8a0c83dd4b9d83ce89dec3b218ceebcd4b9d83c07a7d0bbd15ad23cbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e897c42c13de3493d0648ff3d9184233dd4301e3a3b7b1fbb9184233d2f6d1dbcfbb51e3dca4f243b000080bf0000803f0000803f0000803f0000803f0000003f897c42c19a552d3d4a6d1c3ebac5f53c03a7d0bbd35ad23cbac5f53ced9decbb1e8cee3cd5b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f897c42c1300f203d6fcf293ed84f243b2a6d1dbcfcb51e3dd84f243be3301eba487b1f3b918423bd000080bf0000803f0000803f0000803f0000803f0000403f897c42c1bed6293d74f31f3ed9b9d8bce39decbb1c8cee3cd9b9d8bc0ca7d03bd55ad2bcb6c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f897c42c1b7f1443ddd9f043e928423bdc5301eba2d7b1f3b928423bd306d1d3cfcb51ebdbb4f24bb000080bf0000803f0000803f0000803f0000803f0000803f897c42c131d7573e767f253e918423bd0abbdab96a05223b918423bd72acd93bf73c21bdd84f24bb000080bf0000803f0000803f0000803f0000803f0000000012893ac193c65c3ed640083ebcc5f5bc7540903b54b4d5bcbcc5f5bcca95a33b9158f2bcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e12893ac1f2115f3e4450f53dd34f24bb6aacd93bf83c21bdd34f24bb06bbda39640522bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e12893ac13d615d3e4eac043ed4b9d83cc495a33b9158f2bcd4b9d83c7b4090bb54b4d53cbbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e12893ac1ecb1583e4b6f203e9184233df6bada395c0522bb9184233d72acd9bbf73c213dca4f243b000080bf0000803f0000803f0000803f0000803f0000003f12893ac18bc2533eebad3d3ebac5f53c774090bb56b4d53cbac5f53cc995a3bb8f58f23cd5b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f12893ac12c77513e9e464b3ed84f243b6aacd9bbf83c213dd84f243b0cbbdab96905223b918423bd000080bf0000803f0000803f0000803f0000803f0000403f12893ac1e127533e7242413ed9b9d8bcc195a3bb8c58f23cd9b9d8bc7e40903b59b4d5bcb6c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f12893ac132d7573e757f253e928423bde2badab94d05223b928423bd74acd93bf83c21bdbb4f24bb000080bf0000803f0000803f0000803f0000803f0000803f12893ac1e9d4bf3e6e103d3e918423bdc3cf9cb97823233b918423bdc70d9c3ba35922bdd94f24bb000080bf0000803f0000803f0000803f0000803f00000000e89832c1c799c13e2c9e1f3ebcc5f5bc39d54e3ba12dd7bcbcc5f5bcc28d6a3b6f04f4bcd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003ee89832c1546cc23e77ed113ed34f24bbbe0d9c3ba35922bdd34f24bbc1cf9c39722323bb9084233d000080bf0000803f0000803f0000803f0000803f0000803ee89832c138d1c13e52031c3ed4b9d83cb48d6a3b6f04f4bcd4b9d83c46d54ebba12dd73cbbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ee89832c15123c03e52f7373e9184233db4cf9c39692323bb9184233dc70d9cbba359223dca4f243b000080bf0000803f0000803f0000803f0000803f0000003fe89832c1735ebe3e9469553ebac5f53c3cd54ebba32dd73cbac5f53cc08d6abb6d04f43cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fe89832c1e68bbd3e491a633ed84f243bbe0d9cbba359223dd84f243bc6cf9cb97723233b908423bd000080bf0000803f0000803f0000803f0000803f0000403fe89832c10227be3e6d04593ed9b9d8bcb08d6abb6b04f43cd9b9d8bc4bd54e3ba62dd7bcb7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fe89832c1e9d4bf3e6d103d3e928423bda6cf9cb95a23233b928423bdc80d9c3ba45922bdbb4f24bb000080bf0000803f0000803f0000803f0000803f0000803fe89832c143320a3fd8fb4d3e918423bd0fc25ab9f9bd233b918423bd75b3593b66f322bdda4f24bb000080bf0000803f0000803f0000803f0000803f000000006ea22ac134d00a3fb36d303ebcc5f5bc1345103b6bf9d7bcbcc5f5bc0f9b233b8aebf4bcd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e6ea22ac1a2190b3f07b0223ed34f24bb62b3593b65f322bdd34f24bb11c25a39f3bd23bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e6ea22ac18ae30a3f6fcf2c3ed4b9d83c019b233b8aebf4bcd4b9d83c204510bb6cf9d73cbdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e6ea22ac19b4d0a3fe8dd483e9184233dfbc15a39eabd23bb9184233d75b359bb66f3223dcb4f243b000080bf0000803f0000803f0000803f0000803f0000003f6ea22ac1aaaf093f0e6c663ebac5f53c154510bb6df9d73cbac5f53c0e9b23bb88ebf43cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f6ea22ac13c66093fb929743ed84f243b62b359bb65f3223dd84f243b18c25ab9f8bd233b918423bd000080bf0000803f0000803f0000803f0000803f0000403f6ea22ac1549c093f510a6a3ed9b9d8bcfe9a23bb85ebf43cd9b9d8bc2445103b71f9d7bcb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f6ea22ac143320a3fd7fb4d3e928423bde7c15ab9dbbd233b928423bd77b3593b67f322bdbc4f24bb000080bf0000803f0000803f0000803f0000803f0000803f6ea22ac10f91343f7c56593e918423bdd8c808b9e116243b918423bda91f083bdf4b23bddb4f24bb000080bf0000803f0000803f0000803f0000803f000000000fad22c1d1f3343f4ab83b3ebcc5f5bcd86ab43aad6ed8bcbcc5f5bc1e99cc3a8570f5bcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e0fad22c1bc21353f28f32d3ed34f24bb961f083bde4b23bdd34f24bbdec80839da1624bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e0fad22c1e9ff343f1018383ed4b9d83c0299cc3a8470f5bcd4b9d83cf36ab4baaf6ed83cbdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e0fad22c129a2343fc535543e9184233dcbc80839d21624bb9184233da91f08bbdf4b233dcc4f243b000080bf0000803f0000803f0000803f0000803f0000003f0fad22c1673f343ff6d3713ebac5f53cdb6ab4bab06ed83cbac5f53c1d99ccba8370f53cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f0fad22c17c11343f18997f3ed84f243b961f08bbde4b233dd84f243be2c808b9df16243b918423bd000080bf0000803f0000803f0000803f0000803f0000403f0fad22c15033343f3074753ed9b9d8bcfe98ccba7f70f53cd9b9d8bcf86ab43ab46ed8bcb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f0fad22c10f91343f7b56593e928423bdbfc808b9c316243b928423bdaa1f083be04b23bdbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f0fad22c1e9e65e3ff4a25f3e918423bd22a06db81d45243b918423bd567a6c3ae17923bdda4f24bb000080bf0000803f0000803f0000803f0000803f0000000077bc1ac1ce115f3f6bfc413ebcc5f5bc6db61c3aa9abd8bcbcc5f5bc81b7313aabb5f5bcd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e77bc1ac1bf255f3f6833343ed34f24bb087a6c3ae17923bdd34f24bb49a06d38154524bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e77bc1ac10e175f3f2b5b3e3ed4b9d83c47b7313aabb5f5bcd4b9d83ca3b61cbaa9abd83cbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e77bc1ac157ee5e3fcc805a3e9184233d0da06d380e4524bb9184233d567a6cbae179233dcb4f243b000080bf0000803f0000803f0000803f0000803f0000003f77bc1ac172c35e3f5527783ebac5f53c6fb61cbaababd83cbac5f53c7fb731baa9b5f53cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f77bc1ac181af5e3f2cf8823ed84f243b087a6cbae179233dd84f243b51a06db81a45243b918423bd000080bf0000803f0000803f0000803f0000803f0000403f77bc1ac132be5e3f95c87b3ed9b9d8bc43b731baa6b5f53cd9b9d8bca6b61c3aaeabd8bcb7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f77bc1ac1eae65e3ff4a25f3e928423bdf79f6db8ff44243b928423bd587a6c3ae27923bdbc4f24bb000080bf0000803f0000803f0000803f0000803f0000803f77bc1ac160a8843ffbff603e918423bd1c399a37b94e243b918423bde47999b9718323bddb4f24bb000080bf0000803f0000803f0000803f0000803f000000007ac912c16ba1843fb557433ebcc5f5bc886b4bb955b8d8bcbcc5f5bceead66b90bc4f5bcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e7ac912c12e9e843fe48d353ed34f24bb887a99b9718323bdd34f24bbab389ab7b24e24bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e7ac912c191a0843f3fb63f3ed4b9d83cdfae66b90bc4f5bcd4b9d83caa6a4b3956b8d83cbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e7ac912c12ca7843f85dd5b3e9184233d0e399ab7aa4e24bb9184233de47999397183233dcc4f243b000080bf0000803f0000803f0000803f0000803f0000003f7ac912c121ae843fcb85793ebac5f53c8a6b4b3958b8d83cbac5f53cecad663909c4f53cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f7ac912c15eb1843fcea7833ed84f243b887a99397183233dd84f243baf389a37b74e243b918423bd000080bf0000803f0000803f0000803f0000803f0000403f7ac912c1fbae843f41277d3ed9b9d8bcdaae663906c4f53cd9b9d8bcaf6a4bb95bb8d8bcb7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f7ac912c160a8843ffaff603e928423bdff389a379b4e243b928423bde57999b9728323bdbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f7ac912c1e6de993fd8255d3e918423bd78b7d238102e243b918423bda9b2d1baf06223bddb4f24bb000080bf0000803f0000803f0000803f0000803f0000000084d50ac1ddb8993f78833f3ebcc5f5bc80f78aba418dd8bcbcc5f5bc5b979dba3093f5bcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e84d50ac12ea7993f64bc313ed34f24bbd3b2d1baf06223bdd34f24bb52b7d2b8082e24bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e84d50ac135b4993fbae23b3ed4b9d83c7a979dba3193f5bcd4b9d83c64f78a3a428dd83cbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e84d50ac150d8993f6804583e9184233d65b7d2b8012e24bb9184233da9b2d13af062233dcc4f243b000080bf0000803f0000803f0000803f0000803f0000003f84d50ac159fe993fc8a6753ebac5f53c82f78a3a448dd83cbac5f53c59979d3a2e93f53cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f84d50ac108109a3feeb6813ed84f243bd3b2d13af062233dd84f243b58b7d2380d2e243b918423bd000080bf0000803f0000803f0000803f0000803f0000403f84d50ac101039a3f8647793ed9b9d8bc77979d3a2c93f53cd9b9d8bc67f78aba478dd8bcb7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f84d50ac1e6de993fd8255d3e928423bd52b7d238f22d243b928423bdaab2d1baf16223bdbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f84d50ac1790aaf3f7666533e918423bdecd84e3975cd233b918423bdf5d84dbbcd0223bddc4f24bb000080bf0000803f0000803f0000803f0000803f0000000001e302c1cdbfae3f85d5353ebcc5f5bc386a08bbd50dd8bcbcc5f5bc95b21abbb102f5bcd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e01e302c1159dae3f8d16283ed34f24bb09d94dbbcc0223bdd34f24bbd5d84eb96dcd23bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e01e302c1a9b6ae3fea36323ed4b9d83ca4b21abbb002f5bcd4b9d83c2b6a083bd60dd83cbdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e01e302c18bfdae3f0a484e3e9184233ddad84eb966cd23bb9184233df5d84d3bcd02233dcd4f243b000080bf0000803f0000803f0000803f0000803f0000003f01e302c13748af3ffbd86b3ebac5f53c3a6a083bd70dd83cbac5f53c94b21a3baf02f53cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f01e302c1ef6aaf3ff397793ed84f243b09d94d3bcc02233dd84f243bdbd84e3972cd233b918423bd000080bf0000803f0000803f0000803f0000803f0000403f01e302c15b51af3f95776f3ed9b9d8bca1b21a3bab02f53cd9b9d8bc2e6a08bbdb0dd8bcb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f01e302c1790aaf3f7566533e928423bdc7d84e3957cd233b928423bdf6d84dbbce0223bdbe4f24bb000080bf0000803f0000803f0000803f0000803f0000803f01e302c1cc11c43fa380423e918423bd5478a939cff0223b918423bda1a6a8bb382722bdda4f24bb000080bf0000803f0000803f0000803f0000803f0000000050eff5c07097c33f8617253ebcc5f5bc8a875fbbcdead6bcbcc5f5bccf7c7dbba7b8f3bcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003e50eff5c08d5ec33f126b173ed34f24bbaca6a8bb382722bdd34f24bb4478a9b9c7f022bb9184233d000080bf0000803f0000803f0000803f0000803f0000803e50eff5c07688c33fcb7d213ed4b9d83ce07c7dbba7b8f3bcd4b9d83c7b875f3bcdead63cbbc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e50eff5c09cfcc33f1d693d3e9184233d4578a9b9c1f022bb9184233da1a6a83b3827223dcc4f243b000080bf0000803f0000803f0000803f0000803f0000003f50eff5c0f876c43f3ad25a3ebac5f53c8d875f3bd0ead63cbac5f53ccd7c7d3ba5b8f33cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f50eff5c0dbafc43fae7e683ed84f243baca6a83b3827223dd84f243b4978a939ccf0223b918423bd000080bf0000803f0000803f0000803f0000803f0000403f50eff5c0f285c43ff46b5e3ed9b9d8bcdb7c7d3ba2b8f33cd9b9d8bc80875fbbd2ead6bcb6c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f50eff5c0cc11c43fa380423e928423bd3578a939b2f0223b928423bda2a6a8bb392722bdbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f50eff5c0ee1dd93f5fa2273e918423bd3d23053acbe7203b918423bd827e04bcb82020bddb4f24bb000080bf0000803f0000803f0000803f0000803f00000000b0f7e5c0af5dd83f4d970a3ebcc5f5bc7c9bafbb953bd4bcbcc5f5bc9224c7bb55adf0bcd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003eb0f7e5c04d04d83f242dfa3dd34f24bb887e04bcb82020bdd34f24bb332305bac3e720bb9284233d000080bf0000803f0000803f0000803f0000803f0000803eb0f7e5c02546d83f1509073ed4b9d83c9b24c7bb55adf0bcd4b9d83c749baf3b963bd43cbdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03eb0f7e5c0a6fcd83f219b223e9184233d312305babce720bb9184233d827e043cb820203dcc4f243b000080bf0000803f0000803f0000803f0000803f0000003fb0f7e5c0e5bcd93f33a63f3ebac5f53c7e9baf3b983bd43cbac5f53c9124c73b53adf03cd7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fb0f7e5c04716da3fee264d3ed84f243b887e043cb820203dd84f243b3723053ac8e7203b928423bd000080bf0000803f0000803f0000803f0000803f0000403fb0f7e5c06fd4d93f6a34433ed9b9d8bc9724c73b50adf03cd9b9d8bc789bafbb9b3bd4bcb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fb0f7e5c0ee1dd93f5fa2273e928423bd2523053aaee7203b928423bd827e04bcb92020bdbe4f24bb000080bf0000803f0000803f0000803f0000803f0000803fb0f7e5c0e28fed3f47a3fb3d918423bdc1825f3ad8841a3b918423bd356e5ebcabc519bddb4f24bb000080bf0000803f0000803f0000803f0000803f00000000c52cd6c0234dec3f5adbc33dbcc5f5bc816713bc1acfcbbcbcc5f5bcf52827bcd41fe7bcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003ec52cd6c016b7eb3f4aeca93dd34f24bb3c6e5ebcacc519bdd34f24bbb2825fbad0841abb9184233d000080bf0000803f0000803f0000803f0000803f0000803ec52cd6c0a025ec3f2b07bd3dd4b9d83cfa2827bcd41fe7bcd4b9d83c7d67133c1acfcb3cbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ec52cd6c00258ed3ffafaf13d9184233dad825fbaca841abb9184233d356e5e3cabc5193dcc4f243b000080bf0000803f0000803f0000803f0000803f0000003fc52cd6c0c19aee3f74e1143ebac5f53c8367133c1ccfcb3cbac5f53cf328273cd21fe73cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fc52cd6c0ce30ef3ffbd8213ed84f243b3c6e5e3cacc5193dd84f243bb9825f3ad5841a3b918423bd000080bf0000803f0000803f0000803f0000803f0000403fc52cd6c044c2ee3f8a4b183ed9b9d8bcf628273ccf1fe73cd9b9d8bc806713bc1fcfcbbcb6c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fc52cd6c0e28fed3f46a3fb3d928423bd98825f3abc841a3b928423bd376e5ebcacc519bdbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803fc52cd6c03e5200409ad7543d918423bdd82cc03aa149053b918423bd153fbfbcbaa404bddb4f24bb000080bf0000803f0000803f0000803f0000803f000000000565c6c07c79fe3fe637e93cbcc5f5bc2e7a7dbc1aceafbcbcc5f5bc83b98fbc045ec7bcd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e0565c6c07477fd3f8ebc8f3cd34f24bb173fbfbcb9a404bdd34f24bbce2cc0ba9b4905bb9284233d000080bf0000803f0000803f0000803f0000803f0000803e0565c6c08a35fe3ffda7d13cd4b9d83c84b98fbc035ec7bcd4b9d83c2c7a7d3c1cceaf3cbdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e0565c6c032220040672e443d9184233dc62cc0ba944905bb9184233d153fbf3cbaa4043dcc4f243b000080bf0000803f0000803f0000803f0000803f0000003f0565c6c0b23701400735923dbac5f53c317a7d3c1cceaf3cbac5f53c82b98f3c035ec73cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f0565c6c0b6b80140dc93a83dd84f243b173fbf3cb9a4043dd84f243bd42cc03a9f49053b928423bd000080bf0000803f0000803f0000803f0000803f0000403f0565c6c0ab5901400019983dd9b9d8bc81b98f3cff5dc73cd9b9d8bc327a7dbc20ceafbcb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f0565c6c03e52004098d7543d928423bdb52cc03a8849053b928423bd163fbfbcbba404bdbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f0565c6c026aa0740b0f089bd918423bdfcb6053b07fcbe3a918423bd8d1105bdc00fbebcdb4f24bb000080bf0000803f0000803f0000803f0000803f00000000d294b6c0fb270640a469acbdbcc5f5bc585eb0bc1ee87bbcbcc5f5bc9501c8bc8dd58ebcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003ed294b6c0727405408f70bcbdd34f24bb8d1105bdbd0fbebcd34f24bbf5b605bb00fcbeba9184233d000080bf0000803f0000803f0000803f0000803f0000803ed294b6c0b5f8054003a2b0bdd4b9d83c9601c8bc8bd58ebcd4b9d83c585eb03c23e87b3cbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ed294b6c04a67074090e88fbd9184233defb605bbf6fbbeba9184233d8d11053dc00fbe3ccc4f243b000080bf0000803f0000803f0000803f0000803f0000003fd294b6c075e9084038df5abdbac5f53c5b5eb03c21e87b3cbac5f53c9301c83c8cd58e3cd7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fd294b6c0fe9c094062d13abdd84f243b8d11053dbd0fbe3cd84f243bf9b6053b06fcbe3a918423bd000080bf0000803f0000803f0000803f0000803f0000403fd294b6c0bb1809407c6e52bdd9b9d8bc9201c83c89d58e3cd9b9d8bc5c5eb0bc28e87bbcb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fd294b6c026aa0740b0f089bd928423bde3b6053be4fbbe3a928423bd8d1105bdc10fbebcbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803fd294b6c019850c4082fd5bbe918423bde1d7183bd33d713a918423bdc81a18bd611370bcda4f24bb000080bf0000803f0000803f0000803f0000803f00000000efb7a6c0b0cb0a4050e066bebcc5f5bc4e99c9bcfc181fbcbcc5f5bc339ee4bcae6b34bcd3b9d83c000080bf0000803f0000803f0000803f0000803f0000003eefb7a6c078fe0940f6ef6bbed34f24bbc81a18bd591370bcd34f24bbdad718bbcd3d71ba9184233d000080bf0000803f0000803f0000803f0000803f0000803eefb7a6c0a7950a407a3568bed4b9d83c349ee4bca86b34bcd4b9d83c4e99c93c02191f3cbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03eefb7a6c0ad380c40fedf5dbe9184233dd3d718bbbd3d71ba9184233dc81a183d6113703ccb4f243b000080bf0000803f0000803f0000803f0000803f0000003fefb7a6c016f20d4030fd52bebac5f53c5199c93cfe181f3cbac5f53c319ee43cac6b343cd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fefb7a6c04ebf0e408aed4dbed84f243bc81a183d5913703cd84f243bdfd7183bd43d713a918423bd000080bf0000803f0000803f0000803f0000803f0000403fefb7a6c01f280e4006a851bed9b9d8bc2f9ee43ca56b343cd9b9d8bc5399c9bc06191fbcb7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fefb7a6c019850c4082fd5bbe928423bdc5d7183ba73d713a928423bdc91a18bd621370bcbc4f24bb000080bf0000803f0000803f0000803f0000803f0000803fefb7a6c0476b0f40ada4bfbe918423bd55a9203b7dc5093a918423bd8fe21fbd111b09bcdc4f24bb000080bf0000803f0000803f0000803f0000803f00000000e7d796c04b9b0d4070c0c2bebcc5f5bc33e9d3bc1bb8b5bbbcc5f5bce74ff0bcfd12cebbd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003ee7d796c093c30c406832c4bed34f24bb8fe21fbd061b09bcd34f24bb4da920bb7ec509ba9184233d000080bf0000803f0000803f0000803f0000803f0000803ee7d796c07d620d40dc21c3bed4b9d83ce84ff0bcee12cebbd4b9d83c33e9d33c29b8b53bbdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ee7d796c0f31a0f40732ec0be9184233d46a920bb70c509ba9184233d8fe21f3d111b093ccc4f243b000080bf0000803f0000803f0000803f0000803f0000003fe7d796c0efea1040b012bdbebac5f53c36e9d33c1db8b53bbac5f53ce54ff03cfb12ce3bd7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fe7d796c0a7c21140b8a0bbbed84f243b8fe21f3d061b093cd84f243b52a9203b82c5093a918423bd000080bf0000803f0000803f0000803f0000803f0000403fe7d796c0bd23114044b1bcbed9b9d8bce34ff03cea12ce3bd9b9d8bc38e9d3bc2eb8b5bbb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fe7d796c0476b0f40ada4bfbe928423bd37a9203b64c5093a928423bd90e21fbd121b09bcbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803fe7d796c035f6104013da09bf918423bd1a79233b56a88439918423bddbae22bd470484bbdb4f24bb000080bf0000803f0000803f0000803f0000803f0000000087f086c01a1e0f40a1990abfbcc5f5bc939ed7bc55f92ebbbcc5f5bc8584f4bcdb6c46bbd5b9d83c000080bf0000803f0000803f0000803f0000803f0000003e87f086c09c420e40b0f20abfd34f24bbdbae22bd310484bbd34f24bb137923bb61a884b99284233d000080bf0000803f0000803f0000803f0000803f0000803e87f086c04ee40e4015b10abfd4b9d83c8584f4bcba6c46bbd4b9d83c939ed73c74f92e3bbdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e87f086c079a410403dfb09bf9184233d0b7923bb4aa884b99184233ddbae223d4704843bcc4f243b000080bf0000803f0000803f0000803f0000803f0000003f87f086c0947c1240af3b09bfbac5f53c969ed73c57f92e3bbac5f53c8384f43cda6c463bd8b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f87f086c012581340a0e208bfd84f243bdbae223d3104843bd84f243b1879233b65a88439928423bd000080bf0000803f0000803f0000803f0000803f0000403f87f086c060b612403b2409bfd9b9d8bc8084f43cb66c463bd9b9d8bc989ed7bc78f92ebbb8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f87f086c035f6104013da09bf928423bdfd78233b3ea88439928423bddcae22bd480484bbbe4f24bb000080bf0000803f0000803f0000803f0000803f0000803f87f086c0878f11406a4034bf918423bdbe42243b64468338918423bd847723bd3da482badb4f24bb000080bf0000803f0000803f0000803f0000803f00000000b2106ec025b50f40ce6f34bfbcc5f5bc89a8d8bc61262dbabcc5f5bc1fb2f5bcbb5b44bad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003eb2106ec098d80e40d68534bfd34f24bb857723bde2a382bad34f24bbb64224bba14683b89184233d000080bf0000803f0000803f0000803f0000803f0000803eb2106ec0127b0f409b7534bfd4b9d83c20b2f5bc345b44bad4b9d83c88a8d83cdc262d3abdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03eb2106ec0653d11409e4834bf9184233daf4224bb584683b89184233d8477233d3da4823acc4f243b000080bf0000803f0000803f0000803f0000803f0000003fb2106ec0c71713403a1934bfbac5f53c8ca8d83c63262d3abac5f53c1db2f53cba5b443ad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fb2106ec054f41340320334bfd84f243b8577233de2a3823ad84f243bbb42243ba5468338918423bd000080bf0000803f0000803f0000803f0000803f0000403fb2106ec0da5113406d1334bfd9b9d8bc1bb2f53c315b443ad9b9d8bc8da8d8bce0262dbab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fb2106ec0878f11406a4034bf928423bda042243b4c468338928423bd857723bd3ea482babd4f24bb000080bf0000803f0000803f0000803f0000803f0000803fb2106ec0e07d1140ebb05ebf918423bd513e243b91d197b8918423bd1d7323bd7715973adb4f24bb000080bf0000803f0000803f0000803f0000803f00000000c8424ec08ba30f401c7a5ebfbcc5f5bcb2a2d8bc743f483abcc5f5bc80abf5bc6f15633ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003ec8424ec004c70e40a1605ebfd34f24bb1e7323bdd615973ad34f24bb493e24bb44d197389284233d000080bf0000803f0000803f0000803f0000803f0000803ec8424ec079690f4067735ebfd4b9d83c81abf5bcfb15633ad4b9d83cb2a2d83cf53e48babdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ec8424ec0c02b11406da75ebf9184233d423e24bb83d197389184233d1d73233d771597bacc4f243b000080bf0000803f0000803f0000803f0000803f0000003fc8424ec0150613403cde5ebfbac5f53cb5a2d83c773f48babac5f53c7eabf53c6d1563bad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fc8424ec09ce21340b7f75ebfd84f243b1e73233dd61597bad84f243b4e3e243b49d197b8928423bd000080bf0000803f0000803f0000803f0000803f0000403fc8424ec027401340f1e45ebfd9b9d8bc7cabf53cf71563bad9b9d8bcb7a2d8bcfa3e483ab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fc8424ec0e07d1140ebb05ebf928423bd333e243b76d197b8928423bd1e7323bd7815973abd4f24bb000080bf0000803f0000803f0000803f0000803f0000803fc8424ec0b6f21040fb8b84bf918423bd75f3233b07282eb9918423bd9e2823bd6d502d3bdb4f24bb000080bf0000803f0000803f0000803f0000803f00000000696f2ec039190f401d4d84bfbcc5f5bcf53fd8bcfab5e53abcc5f5bc883bf5bc903f023bd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e696f2ec0173d0e40e22f84bfd34f24bb9e2823bd9c502d3bd34f24bb6ef323bbdc272e399284233d000080bf0000803f0000803f0000803f0000803f0000803e696f2ec042df0e406a4584bfd4b9d83c883bf5bcb33f023bd4b9d83cf63fd83cbcb5e5babdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e696f2ec0bca01040198184bf9184233d66f323bbf7272e399184233d9e28233d6d502dbbcc4f243b000080bf0000803f0000803f0000803f0000803f0000003f696f2ec0397a1240f7bf84bfbac5f53cf83fd83cfdb5e5babac5f53c863bf53c8f3f02bbd7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f696f2ec05b56134032dd84bfd84f243b9e28233d9c502dbbd84f243b73f3233be2272eb9928423bd000080bf0000803f0000803f0000803f0000803f0000403f696f2ec030b41240aac784bfd9b9d8bc843bf53cb03f02bbd9b9d8bcfb3fd8bcc1b5e53ab9c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f696f2ec0b6f21040fb8b84bf928423bd57f3233be7272eb9928423bd9f2823bd6e502d3bbd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f696f2ec0d9151040cbb699bf918423bd22ab233b346f68b9918423bda4e022bd7d4f673bdb4f24bb000080bf0000803f0000803f0000803f0000803f00000000f8960ec02d3d0e40e36299bfbcc5f5bc90e0d7bc1e4a193bbcc5f5bc59cff4bc5dd52d3bd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003ef8960ec06b610d40e03b99bfd34f24bba5e022bdaf4f673bd34f24bb1aab23bb046f68399284233d000080bf0000803f0000803f0000803f0000803f0000803ef8960ec04f030e409d5899bfd4b9d83c5acff4bc82d52d3bd4b9d83c8fe0d73cfd4919bbbcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ef8960ec003c40f4045a899bf9184233d13ab23bb1f6f68399184233da4e0223d7d4f67bbcc4f243b000080bf0000803f0000803f0000803f0000803f0000003ff8960ec0af9c11402dfc99bfbac5f53c93e0d73c204a19bbbac5f53c57cff43c5bd52dbbd7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203ff8960ec07178124030239abfd84f243ba5e0223daf4f67bbd84f243b1fab233b0b6f68b9928423bd000080bf0000803f0000803f0000803f0000803f0000403ff8960ec08dd6114073069abfd9b9d8bc55cff43c7ed52dbbd9b9d8bc94e0d7bc004a193bb7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603ff8960ec0d9151040cbb699bf928423bd04ab233b0a6f68b9928423bda5e022bd7f4f673bbc4f24bb000080bf0000803f0000803f0000803f0000803f0000803ff8960ec00c130f404cc4aebf918423bd61e2233bfd8c3db9918423bd9e1723bd54a23c3bda4f24bb000080bf0000803f0000803f0000803f0000803f0000000000b7ddbfc0390d40df7faebfbcc5f5bc6f29d8bc1204fa3abcc5f5bcfb21f5bcefc20d3bd4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e00b7ddbfb45d0c400f60aebfd34f24bba01723bd86a23c3bd34f24bb59e223bbce8c3d399284233d000080bf0000803f0000803f0000803f0000803f0000803e00b7ddbfcfff0c407e77aebfd4b9d83cfd21f5bc14c30d3bd4b9d83c6e29d83ccf03fababcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e00b7ddbf1ac10e4074b8aebf9184233d52e223bbec8c3d399184233d9e17233d54a23cbbcb4f243b000080bf0000803f0000803f0000803f0000803f0000003f00b7ddbf669a1040e1fcaebfbac5f53c7129d83c1504fababac5f53cf921f53ceec20dbbd6b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f00b7ddbf71761140b11cafbfd84f243b9f17233d86a23cbbd84f243b5ee2233bd48c3db9918423bd000080bf0000803f0000803f0000803f0000803f0000403f00b7ddbf57d410404205afbfd9b9d8bcf821f53c11c30dbbd9b9d8bc7329d8bcd503fa3ab7c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f00b7ddbf0c130f404cc4aebf928423bd43e2233bda8c3db9928423bd9f1723bd55a23c3bbc4f24bb000080bf0000803f0000803f0000803f0000803f0000803f00b7ddbf99a80e40962fc1bf918423bd1336243b4010b8b8918423bde96a23bd3c2cb73adb4f24bb000080bf0000803f0000803f0000803f0000803f00000000915da6bf5bce0c405d0ec1bfbcc5f5bcd397d8bc4ac7723abcc5f5bc2c9ff5bc3ea8893ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003e915da6bfdff10b40ebfec0bfd34f24bbea6a23bd9d2cb73ad34f24bb0b3624bbec0fb8389284233d000080bf0000803f0000803f0000803f0000803f0000803e915da6bf4d940c404c0ac1bfd4b9d83c2d9ff5bc86a8893ad4b9d83cd397d83cc7c672babdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e915da6bf7d560e40d629c1bf9184233d043624bb2f10b8389184233de96a233d3c2cb7bacc4f243b000080bf0000803f0000803f0000803f0000803f0000003f915da6bfbb3010400f4bc1bfbac5f53cd697d83c4dc772babac5f53c2a9ff53c3da889bad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f915da6bf370d1140815ac1bfd84f243bea6a233d9d2cb7bad84f243b1036243bf20fb8b8928423bd000080bf0000803f0000803f0000803f0000803f0000403f915da6bfc96a1040204fc1bfd9b9d8bc289ff53c84a889bad9b9d8bcd897d8bccdc6723ab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f915da6bf98a80e40962fc1bf928423bdf535243b1e10b8b8928423bdea6a23bd3d2cb73abd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f915da6bf936d0e40a0add3bf918423bdb345243b191967b8918423bd757a23bd9cfa653adb4f24bb000080bf0000803f0000803f0000803f0000803f00000000a6b75dbf29930c40c598d3bfbcc5f5bc6eacd8bc9768183abcc5f5bc8ab6f5bc30d52c3ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003ea6b75dbf98b60b40138fd3bfd34f24bb767a23bd5cfb653ad34f24bbaa4524bb7b1867389284233d000080bf0000803f0000803f0000803f0000803f0000803ea6b75dbf15590c403796d3bfd4b9d83c8bb6f5bcbed52c3ad4b9d83c6eacd83c166818babcc5f53c000080bf0000803f0000803f0000803f0000803f0000c03ea6b75dbf711b0e4004aad3bf9184233da44524bb041967389184233d757a233d9cfa65bacc4f243b000080bf0000803f0000803f0000803f0000803f0000003fa6b75dbfdbf50f40dfbed3bfbac5f53c71acd83c996818babac5f53c88b6f53c2ed52cbad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203fa6b75dbf6cd2104091c8d3bfd84f243b767a233d5cfb65bad84f243baf45243b821867b8928423bd000080bf0000803f0000803f0000803f0000803f0000403fa6b75dbfef2f10406dc1d3bfd9b9d8bc87b6f53cbad52cbad9b9d8bc73acd8bc1a68183ab8c5f5bc000080bf0000803f0000803f0000803f0000803f0000603fa6b75dbf936d0e40a0add3bf928423bd9545243bef1867b8928423bd767a23bd9efa653abd4f24bb000080bf0000803f0000803f0000803f0000803f0000803fa6b75dbf82400e40632ee6bf918423bdfc49243bfeb02fb8918423bdb97e23bd0ed72e3adb4f24bb000080bf0000803f0000803f0000803f0000803f00000000aa56ddbe0c660c40881ee6bfbcc5f5bc16b2d8bc78bce739bcc5f5bcf4bcf5bc2165033ad4b9d83c000080bf0000803f0000803f0000803f0000803f0000003eaa56ddbe75890b402917e6bfd34f24bbba7e23bdccd72e3ad34f24bbf44924bb63b02f389184233d000080bf0000803f0000803f0000803f0000803f0000803eaa56ddbef62b0c40971ce6bfd4b9d83cf5bcf5bcad65033ad4b9d83c15b2d83c79bbe7b9bdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03eaa56ddbe5eee0d40a52be6bf9184233ded4924bbeeb02f389184233db97e233d0ed72ebacc4f243b000080bf0000803f0000803f0000803f0000803f0000003faa56ddbed4c80f40803be6bfbac5f53c19b2d83c7bbce7b9bac5f53cf2bcf53c1f6503bad7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203faa56ddbe6ba51040df42e6bfd84f243bba7e233dccd72ebad84f243bf949243b69b02fb8918423bd000080bf0000803f0000803f0000803f0000803f0000403faa56ddbeea021040713de6bfd9b9d8bcf1bcf53cab6503bad9b9d8bc1ab2d8bc7fbbe739b9c5f5bc000080bf0000803f0000803f0000803f0000803f0000603faa56ddbe82400e40632ee6bf928423bdde49243bdeb02fb8928423bdba7e23bd0fd72e3abd4f24bb000080bf0000803f0000803f0000803f0000803f0000803faa56ddbe8f1e0e40a89ff8bf918423bd814b243b6a3b17b8918423bd3d8023bdbd7f163adb4f24bb000080bf0000803f0000803f0000803f0000803f000000000000ba3614440c400292f8bfbcc5f5bc18b4d8bc8179c739bcc5f5bc3abff5bc6434e239d5b9d83c000080bf0000803f0000803f0000803f0000803f0000003e0000ba367b670b40aa8bf8bfd34f24bb3e8023bd7a80163ad34f24bb794b24bbd03a17389284233d000080bf0000803f0000803f0000803f0000803f0000803e0000ba36fe090c405790f8bfd4b9d83c3bbff5bc7c35e239d4b9d83c17b4d83c8378c7b9bdc5f53c000080bf0000803f0000803f0000803f0000803f0000c03e0000ba3669cc0d404c9df8bf9184233d724b24bb5c3b17389184233d3d80233dbd7f16bacc4f243b000080bf0000803f0000803f0000803f0000803f0000003f0000ba36e4a60f40f2aaf8bfbac5f53c1ab4d83c8379c7b9bac5f53c38bff53c6234e2b9d7b9d8bc000080bf0000803f0000803f0000803f0000803f0000203f0000ba367d8310404ab1f8bfd84f243b3e80233d7a8016bad84f243b7e4b243bd53a17b8928423bd000080bf0000803f0000803f0000803f0000803f0000403f0000ba36fae00f409dacf8bfd9b9d8bc37bff53c7835e2b9d9b9d8bc1cb4d8bc8778c739b9c5f5bc000080bf0000803f0000803f0000803f0000803f0000603f0000ba368f1e0e40a89ff8bf928423bd634b243b4e3b17b8928423bd3e8023bdbe7f163abd4f24bb000080bf0000803f0000803f0000803f0000803f0000803f0000ba36 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0.9784075, y: -1.5820001, z: -0.0000000018626451} - m_Extent: {x: 1.3333801, y: 1.8391398, z: 0.03992135} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &1704083320 GameObject: m_ObjectHideFlags: 0 @@ -2794,10 +2538,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1704083320} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 2 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -2834,6 +2578,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2855,6 +2601,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2920,6 +2667,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: 56297c6e785b44eb28e469b62cedc016, type: 2} filter: -65535 m_SourceCollider: {fileID: 1704083323} @@ -3052,6 +2800,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -3073,6 +2823,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -3098,6 +2849,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1779091964} @@ -3156,6 +2908,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -3177,6 +2931,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -3212,6 +2967,52 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1929056557} m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2043533587 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2043533589} + - component: {fileID: 2043533588} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2043533588 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2043533587} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &2043533589 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2043533587} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2087273467 GameObject: m_ObjectHideFlags: 0 @@ -3334,5 +3135,4 @@ SceneRoots: - {fileID: 1060357570} - {fileID: 282899377} - {fileID: 1327725109} - - {fileID: 459217663} - - {fileID: 1583418125} + - {fileID: 2043533589} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/LightingData.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/LightingData.asset deleted file mode 100644 index c78023d7e..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/LightingData.asset and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/ReflectionProbe-0.exr b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/ReflectionProbe-0.exr deleted file mode 100644 index e70946aca..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Crane/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CraneSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CraneSettings.lighting deleted file mode 100644 index e27cbc34f..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CraneSettings.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: CraneSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 0 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 1 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CraneSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/CraneSettings.lighting.meta deleted file mode 100644 index e766d0753..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/CraneSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f586ee2c62b1cac46a4e4e9da8aa2e05 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires.meta deleted file mode 100644 index b9c67e788..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9faf59acce8f59e47aef96e4b1b8fdbf -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires.unity index 606896eeb..6b120e289 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires.unity @@ -93,8 +93,8 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: ac581594031bc7e45abd7170d6314cfe, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: d42fe942816a7824e9f82cd422af5cff, type: 2} + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 1941304692} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 @@ -119,171 +119,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!43 &34891206 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 528 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 108 - localAABB: - m_Center: {x: 0, y: -0.000000040978193, z: 0} - m_Extent: {x: 1, y: 0.08000006, z: 0.08000001} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b00 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 108 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 6912 - _typelessdata: ffff7fbf0dd7a33dc36f3e33c36f3e330bd7a33dc36f3e33c159dd28c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000000000000000080bf78b4673d65b467bd4d64d33274b4673d65b467bdafa806b365b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e00000000000080bf067771330cd7a3bd0dd723b2de6a2f330cd7a3bdc36f3eb30cd7a3bddd6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e00000000000080bf5fb467bd76b467bd419f23b363b467bd76b467bdb9a806b376b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e00000000000080bf09d7a3bdf96520b3c36f3eb30bd7a3bdf96520b3a96fbaa8f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f00000000000080bf6db467bd67b4673d4964d3b271b467bd67b4673db0a8063367b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f00000000000080bf5e95f0b20cd7a33d0cd72332d7563ab30cd7a33dc36f3e330cd7a33dd6563a33000080bf0000803f0000803f0000803f0000803f0000403f00000000ffff7fbf6cb4673d70b4673d439f233368b4673d70b4673db6a8063370b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f00000000ffff7fbf0dd7a33d2f5c0233c36f3e330bd7a33d2f5c0233928597282f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f00000000656951bf00d7a33dc36f3e33c36f3e330bd7a33dc36f3e33e5c71228c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000cfc38b3e666951bf5db4673d65b467bd4d64d33274b4673d65b467bdb09632b265b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003ecfc38b3e666951bf62be3fb30cd7a3bd0dd723b2de6a2f330cd7a3bd05907cb20cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803ecfc38b3e676951bf7ab467bd76b467bd419f23b363b467bd76b467bdbd9632b276b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03ecfc38b3e676951bf16d7a3bdf96520b3c36f3eb30bd7a3bdf96520b3d441f7a7f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fcfc38b3e666951bf88b467bd67b4673d4964d3b271b467bd67b4673db196323267b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203fcfc38b3e666951bf06600ab40cd7a33d0cd72332d7563ab30cd7a33d05907c320cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403fcfc38b3e656951bf51b4673d70b4673d439f233368b4673d70b4673db896323270b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603fcfc38b3e656951bf00d7a33d2f5c0233c36f3e330bd7a33d2f5c0233def3c8272f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fcfc38b3e2ed222bf04d7a33dc36f3e33c36f3e330bd7a33dc36f3e33d58855a7c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000bac40b3f2fd222bf66b4673d65b467bd4d64d33274b4673d65b467bd6ce7813165b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003ebac40b3f2fd222bfe03c37b20cd7a3bd0dd723b2de6a2f330cd7a3bd4bb6b7310cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803ebac40b3f30d222bf71b467bd76b467bd419f23b363b467bd76b467bd75e7813176b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03ebac40b3f30d222bf12d7a3bdf96520b3c36f3eb30bd7a3bdf96520b35bda3327f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fbac40b3f2fd222bf7fb467bd67b4673d4964d3b271b467bd67b4673d6de781b167b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203fbac40b3f2fd222bf76c8cbb30cd7a33d0cd72332d7563ab30cd7a33d4bb6b7b10cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403fbac40b3f2ed222bf5ab4673d70b4673d439f233368b4673d70b4673d72e781b170b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603fbac40b3f2ed222bf04d7a33d2f5c0233c36f3e330bd7a33d2f5c0233e02b12a72f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fbac40b3ff827e8be03d7a33dc36f3e33c36f3e330bd7a33dc36f3e33b5bcdb26c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000006e2513ff827e8be64b4673d65b467bd4d64d33274b4673d65b467bd68ad05b165b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e06e2513ff927e8bee82daeb20cd7a3bd0dd723b2de6a2f330cd7a3bd670c3db10cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e06e2513ffa27e8be73b467bd76b467bd419f23b363b467bd76b467bd72ad05b176b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e06e2513ffa27e8be13d7a3bdf96520b3c36f3eb30bd7a3bdf96520b3c413b9a6f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f06e2513ffa27e8be81b467bd67b4673d4964d3b271b467bd67b4673d69ad053167b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f06e2513ff927e8be546ce0b30cd7a33d0cd72332d7563ab30cd7a33d670c3d310cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403f06e2513ff827e8be58b4673d70b4673d439f233368b4673d70b4673d6ead053170b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f06e2513ff827e8be03d7a33d2f5c0233c36f3e330bd7a33d2f5c0233d46a96262f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f06e2513fe3c68abe02d7a33dc36f3e33c36f3e330bd7a33dc36f3e3393b063a6c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f000000006bf58b3fe3c68abe63b4673d65b467bd4d64d33274b4673d65b467bdee838a3065b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e6bf58b3fe4c68abe506dc7b20cd7a3bd0dd723b2de6a2f330cd7a3bdf0e3c3300cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e6bf58b3fe5c68abe74b467bd76b467bd419f23b363b467bd76b467bdf8838a3076b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e6bf58b3fe5c68abe14d7a3bdf96520b3c36f3eb30bd7a3bdf96520b382c63f26f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f6bf58b3fe5c68abe82b467bd67b4673d4964d3b271b467bd67b4673def838ab067b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f6bf58b3fe4c68abe2ebce6b30cd7a33d0cd72332d7563ab30cd7a33df0e3c3b00cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403f6bf58b3fe3c68abe57b4673d70b4673d439f233368b4673d70b4673df4838ab070b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f6bf58b3fe3c68abe02d7a33d2f5c0233c36f3e330bd7a33d2f5c023372dc1ba62f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f6bf58b3ff655b5bd04d7a33dc36f3e33c36f3e330bd7a33dc36f3e33cf0907a8c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000f1ffae3ff955b5bd65b4673d65b467bd4d64d33274b4673d65b467bd2d4d243265b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003ef1ffae3ffd55b5bdacac6cb20cd7a3bd0dd723b2de6a2f330cd7a3bd845b68320cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803ef1ffae3f0156b5bd72b467bd76b467bd419f23b363b467bd76b467bd394d243276b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03ef1ffae3f0256b5bd12d7a3bdf96520b3c36f3eb30bd7a3bdf96520b3fa79e327f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003ff1ffae3fff55b5bd80b467bd67b4673d4964d3b271b467bd67b4673d2e4d24b267b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203ff1ffae3ffb55b5bd7076d2b30cd7a33d0cd72332d7563ab30cd7a33d845b68b20cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403ff1ffae3ff755b5bd59b4673d70b4673d439f233368b4673d70b4673d344d24b270b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603ff1ffae3ff655b5bd04d7a33d2f5c0233c36f3e330bd7a33d2f5c023357e0b8a72f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803ff1ffae3f907ac03d0bd7a33dc36f3e33c36f3e330bd7a33dc36f3e336293b127c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f000000007e0bd23f8d7ac03d73b4673d65b467bd4d64d33274b4673d65b467bd8c0ed8b165b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e7e0bd23f897ac03dbd5725330cd7a3bd0dd723b2de6a2f330cd7a3bd7cc618b20cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e7e0bd23f857ac03d64b467bd76b467bd419f23b363b467bd76b467bd9c0ed8b176b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e7e0bd23f847ac03d0bd7a3bdf96520b3c36f3eb30bd7a3bdf96520b3e99095a7f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f7e0bd23f877ac03d72b467bd67b4673d4964d3b271b467bd67b4673d8e0ed83167b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f7e0bd23f8b7ac03df86944b30cd7a33d0cd72332d7563ab30cd7a33d7cc618320cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403f7e0bd23f8f7ac03d67b4673d70b4673d439f233368b4673d70b4673d960ed83170b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f7e0bd23f907ac03d0bd7a33d2f5c0233c36f3e330bd7a33d2f5c0233e21c73272f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f7e0bd23fe5928d3efed6a33dc36f3e33c36f3e330bd7a33dc36f3e33a8453a28c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f000000001717f53fe5928d3e5ab4673d65b467bd4d64d33274b4673d65b467bd43a362b265b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e1717f53fe4928d3e2e7469b30cd7a3bd0dd723b2de6a2f330cd7a3bdd641a0b20cd7a3bddd6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e1717f53fe3928d3e7db467bd76b467bd419f23b363b467bd76b467bd53a362b276b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e1717f53fe3928d3e18d7a3bdf96520b3c36f3eb30bd7a3bdf96520b307e41ca8f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f1717f53fe3928d3e8bb467bd67b4673d4964d3b271b467bd67b4673d45a3623267b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f1717f53fe4928d3e79cd14b40cd7a33d0cd72332d7563ab30cd7a33dd641a0320cd7a33dd6563a33000080bf0000803f0000803f0000803f0000803f0000403f1717f53fe5928d3e4eb4673d70b4673d439f233368b4673d70b4673d4da3623270b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f1717f53fe5928d3efed6a33d2f5c0233c36f3e330bd7a33d2f5c0233cc04ff272f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f1717f53f2efcea3effd6a33dc36f3e33c36f3e330bd7a33dc36f3e33ad359fa7c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000490f0c402efcea3e5db4673d65b467bd4d64d33274b4673d65b467bdf8b5c13165b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e490f0c402dfcea3e1c3748b30cd7a3bd0dd723b2de6a2f330cd7a3bd6cf908320cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e490f0c402cfcea3e7ab467bd76b467bd419f23b363b467bd76b467bd06b6c13176b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e490f0c402cfcea3e17d7a3bdf96520b3c36f3eb30bd7a3bdf96520b3d2188627f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f490f0c402cfcea3e88b467bd67b4673d4964d3b271b467bd67b4673df9b5c1b167b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f490f0c402dfcea3e347e0cb40cd7a33d0cd72332d7563ab30cd7a33d6cf908b20cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403f490f0c402efcea3e51b4673d70b4673d439f233368b4673d70b4673d01b6c1b170b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f490f0c402efcea3effd6a33d2f5c0233c36f3e330bd7a33d2f5c0233f0f759a72f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f490f0c40b92e243f03d7a33dc36f3e33c36f3e330bd7a33dc36f3e3304a70da8c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000086911d40b82e243f64b4673d65b467bd4d64d33274b4673d65b467bd4e592c3265b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e86911d40b82e243f64959ab20cd7a3bd0dd723b2de6a2f330cd7a3bdfbbc73320cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e86911d40b72e243f73b467bd76b467bd419f23b363b467bd76b467bd5b592c3276b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e86911d40b72e243f13d7a3bdf96520b3c36f3eb30bd7a3bdf96520b33e9eee27f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f86911d40b82e243f81b467bd67b4673d4964d3b271b467bd67b4673d4f592cb267b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f86911d40b82e243f3486dbb30cd7a33d0cd72332d7563ab30cd7a33dfbbc73b20cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403f86911d40b92e243f58b4673d70b4673d439f233368b4673d70b4673d56592cb270b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f86911d40b92e243f03d7a33d2f5c0233c36f3e330bd7a33d2f5c023374eec1a72f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f86911d404dcc523f08d7a33dc36f3e33c36f3e330bd7a33dc36f3e33365ec7a7c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f000000009e0c2f404ccc523f6eb4673d65b467bd4d64d33274b4673d65b467bd5292f23165b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e9e0c2f404ccc523ffccb9a320cd7a3bd0dd723b2de6a2f330cd7a3bd2b862b320cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e9e0c2f404bcc523f69b467bd76b467bd419f23b363b467bd76b467bd6492f23176b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e9e0c2f404bcc523f0ed7a3bdf96520b3c36f3eb30bd7a3bdf96520b3c5eba727f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f9e0c2f404ccc523f77b467bd67b4673d4964d3b271b467bd67b4673d5492f2b167b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f9e0c2f404ccc523fdc2d8eb30cd7a33d0cd72332d7563ab30cd7a33d2b862bb20cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403f9e0c2f404dcc523f62b4673d70b4673d439f233368b4673d70b4673d5e92f2b170b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f9e0c2f404dcc523f08d7a33d2f5c0233c36f3e330bd7a33d2f5c0233557988a72f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f9e0c2f400000803f09d7a33dc36f3e33c36f3e330bd7a33dc36f3e33b63a1ea7c36f3e330bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000020040400000803f70b4673d65b467bd4d64d33274b4673d65b467bd9e84403165b467bd74b467bd000080bf0000803f0000803f0000803f0000803f0000003e020040400000803f4ee9e5320cd7a3bd0dd723b2de6a2f330cd7a3bd812188310cd7a3bdde6a2fb3000080bf0000803f0000803f0000803f0000803f0000803e02004040ffff7f3f67b467bd76b467bd419f23b363b467bd76b467bdac84403176b467bd63b4673d000080bf0000803f0000803f0000803f0000803f0000c03e02004040ffff7f3f0dd7a3bdf96520b3c36f3eb30bd7a3bdf96520b371450527f96520b30bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f020040400000803f75b467bd67b4673d4964d3b271b467bd67b4673da08440b167b4673d71b4673d000080bf0000803f0000803f0000803f0000803f0000203f020040400000803f0ecd76b30cd7a33d0cd72332d7563ab30cd7a33d812188b10cd7a33dd7563a33000080bf0000803f0000803f0000803f0000803f0000403f020040400000803f64b4673d70b4673d439f233368b4673d70b4673da78440b170b4673d68b467bd000080bf0000803f0000803f0000803f0000803f0000603f020040400000803f09d7a33d2f5c0233c36f3e330bd7a33d2f5c023359a0d8a62f5c02330bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f02004040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: -0.000000040978193, z: 0} - m_Extent: {x: 1, y: 0.08000006, z: 0.08000001} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &153317910 GameObject: m_ObjectHideFlags: 0 @@ -324,6 +159,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -345,6 +182,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -406,6 +244,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 153317912} @@ -505,6 +344,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -611,171 +451,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} ---- !u!43 &573424719 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 528 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 108 - localAABB: - m_Center: {x: 0.00000011920929, y: 0.0000000037252903, z: 0} - m_Extent: {x: 0.9999999, y: 0.08000003, z: 0.08000001} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b00 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 108 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 6912 - _typelessdata: fcff7fbf08d7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb217e816271b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000000000000fcff7fbf64b4673d70b467bde08b88b269b4673d70b467bd8d3d1d3270b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e00000000fcff7fbf9eb71db30cd7a3bd0ad723b257398db20cd7a3bd1b5f5e320cd7a3bd56398d32000080bf0000803f0000803f0000803f0000803f0000803e00000000fcff7fbf73b467bd6bb467bd538d25316eb467bd6bb467bd893d1d326bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e00000000fcff7fbf0ed7a3bd2243ab321c5f5e320bd7a3bd2243ab32fe7168a72243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f00000000fcff7fbf6bb467bd72b4673de08b883266b467bd72b4673d8e3d1db272b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f00000000fcff7fbf0052dbb10cd7a33d0bd72332ccc26e320cd7a33d1b5f5eb20cd7a33dcac26eb2000080bf0000803f0000803f0000803f0000803f0000403f00000000fcff7fbf6eb4673d66b4673d6b8d25b173b4673d66b4673d863d1db266b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f00000000fcff7fbf08d7a33db656e7b21d5f5eb20bd7a33db656e7b2f2fd9c27b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f00000000666951bf0cd7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb2901aa0251b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000c3c38b3e666951bf6bb4673d70b467bde08b88b269b4673d70b467bdd8d2a63070b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003ec3c38b3e666951bfa407fab10cd7a3bd0ad723b257398db20cd7a3bd96eceb300cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803ec3c38b3e666951bf6cb467bd6bb467bd538d25316eb467bd6bb467bdd4d2a6306bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03ec3c38b3e666951bf0ad7a3bd2243ab321c5f5e320bd7a3bd2243ab32a59cf6a52243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fc3c38b3e666951bf64b467bd72b4673de08b883266b467bd72b4673dd9d2a6b072b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203fc3c38b3e666951bfd418c6320cd7a33d0bd72332ccc26e320cd7a33d96ecebb00cd7a33dccc26eb2000080bf0000803f0000803f0000803f0000803f0000403fc3c38b3e666951bf75b4673d66b4673d6b8d25b173b4673d66b4673dd1d2a6b066b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603fc3c38b3e666951bf0cd7a33db656e7b21d5f5eb20bd7a33db656e7b25d8f2626b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fc3c38b3e2dd222bf09d7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb28a8e26a51b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000b8c40b3f2dd222bf66b4673d70b467bde08b88b269b4673d70b467bd278c2db070b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003eb8c40b3f2dd222bfe558f8b20cd7a3bd0ad723b257398db20cd7a3bde36e75b00cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803eb8c40b3f2dd222bf71b467bd6bb467bd538d25316eb467bd6bb467bd248c2db06bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03eb8c40b3f2dd222bf0dd7a3bd2243ab321c5f5e320bd7a3bd2243ab329d4680252243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fb8c40b3f2dd222bf69b467bd72b4673de08b883266b467bd72b4673d298c2d3072b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203fb8c40b3f2dd222bf801dc4300cd7a33d0bd72332ccc26e320cd7a33de36e75300cd7a33dccc26eb2000080bf0000803f0000803f0000803f0000803f0000403fb8c40b3f2dd222bf70b4673d66b4673d6b8d25b173b4673d66b4673d208c2d3066b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603fb8c40b3f2dd222bf09d7a33db656e7b21d5f5eb20bd7a33db656e7b2f445ada5b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fb8c40b3ff727e8be0cd7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb293b6b7261b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000003e2513ff827e8be6ab4673d70b467bde08b88b269b4673d70b467bd886cbf3170b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e03e2513ff727e8be0cec42b20cd7a3bd0ad723b257398db20cd7a3bd6e5b07320cd7a3bd56398d32000080bf0000803f0000803f0000803f0000803f0000803e03e2513ff727e8be6db467bd6bb467bd538d25316eb467bd6bb467bd836cbf316bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e03e2513ff727e8be0ad7a3bd2243ab321c5f5e320bd7a3bd2243ab32317d0da72243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f03e2513ff627e8be65b467bd72b4673de08b883266b467bd72b4673d896cbfb172b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f03e2513ff727e8beb724a3320cd7a33d0bd72332ccc26e320cd7a33d6e5b07b20cd7a33dcbc26eb2000080bf0000803f0000803f0000803f0000803f0000403f03e2513ff727e8be74b4673d66b4673d6b8d25b173b4673d66b4673d7f6cbfb166b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f03e2513ff727e8be0cd7a33db656e7b21d5f5eb20bd7a33db656e7b2191f3f27b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f03e2513fe1c68abe0ed7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb2588d4e261b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000006af58b3fe2c68abe6fb4673d70b467bde08b88b269b4673d70b467bdb438573170b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e6af58b3fe1c68abe78a5f1310cd7a3bd0ad723b257398db20cd7a3bd3e2f98310cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803e6af58b3fe1c68abe68b467bd6bb467bd538d25316eb467bd6bb467bdaf3857316bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e6af58b3fe1c68abe08d7a3bd2243ab321c5f5e320bd7a3bd2243ab3229149fa62243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f6af58b3fe0c68abe60b467bd72b4673de08b883266b467bd72b4673db63857b172b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f6af58b3fe1c68abe0e8220330cd7a33d0bd72332ccc26e320cd7a33d3e2f98b10cd7a33dcbc26eb2000080bf0000803f0000803f0000803f0000803f0000403f6af58b3fe1c68abe79b4673d66b4673d6b8d25b173b4673d66b4673daa3857b166b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f6af58b3fe1c68abe0ed7a33db656e7b21d5f5eb20bd7a33db656e7b2a5e1d626b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f6af58b3ff055b5bd0ed7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb2427757251b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000f0ffae3ff055b5bd70b4673d70b467bde08b88b269b4673d70b467bd6482603070b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003ef0ffae3fef55b5bd3a2418320cd7a3bd0ad723b257398db20cd7a3bd86c09e300cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803ef0ffae3fee55b5bd67b467bd6bb467bd538d25316eb467bd6bb467bd5f8260306bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03ef0ffae3fec55b5bd08d7a3bd2243ab321c5f5e320bd7a3bd2243ab329bf1a5a52243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003ff0ffae3fec55b5bd5fb467bd72b4673de08b883266b467bd72b4673d668260b072b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203ff0ffae3fed55b5bd6d5628330cd7a33d0bd72332ccc26e320cd7a33d86c09eb00cd7a33dccc26eb2000080bf0000803f0000803f0000803f0000803f0000403ff0ffae3fee55b5bd7ab4673d66b4673d6b8d25b173b4673d66b4673d5b8260b066b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603ff0ffae3ff055b5bd0ed7a33db656e7b21d5f5eb20bd7a33db656e7b29327e025b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803ff0ffae3f937ac03d0fd7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb22fbbaba61b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000007d0bd23f937ac03d71b4673d70b467bde08b88b269b4673d70b467bd65f0b2b170b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e7d0bd23f947ac03d965e53320cd7a3bd0ad723b257398db20cd7a3bdd70efdb10cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803e7d0bd23f957ac03d66b467bd6bb467bd538d25316eb467bd6bb467bd61f0b2b16bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e7d0bd23f977ac03d07d7a3bd2243ab321c5f5e320bd7a3bd2243ab32cd4204272243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f7d0bd23f977ac03d5eb467bd72b4673de08b883266b467bd72b4673d67f0b23172b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f7d0bd23f967ac03d042537330cd7a33d0bd72332ccc26e320cd7a33dd70efd310cd7a33dcdc26eb2000080bf0000803f0000803f0000803f0000803f0000403f7d0bd23f957ac03d7bb4673d66b4673d6b8d25b173b4673d66b4673d5df0b23166b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f7d0bd23f937ac03d0fd7a33db656e7b21d5f5eb20bd7a33db656e7b203a832a7b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f7d0bd23fe7928d3e0ad7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb29b170da61b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000001617f53fe6928d3e67b4673d70b467bde08b88b269b4673d70b467bd9c0313b170b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e1617f53fe7928d3ec79dd4b20cd7a3bd0ad723b257398db20cd7a3bdc7e84fb10cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803e1617f53fe7928d3e70b467bd6bb467bd538d25316eb467bd6bb467bd990313b16bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e1617f53fe7928d3e0cd7a3bd2243ab321c5f5e320bd7a3bd2243ab32f25359262243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f1617f53fe8928d3e68b467bd72b4673de08b883266b467bd72b4673d9d03133172b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f1617f53fe7928d3ed8f3bf310cd7a33d0bd72332ccc26e320cd7a33dc7e84f310cd7a33dccc26eb2000080bf0000803f0000803f0000803f0000803f0000403f1617f53fe7928d3e71b4673d66b4673d6b8d25b173b4673d66b4673d9603133166b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f1617f53fe7928d3e0ad7a33db656e7b21d5f5eb20bd7a33db656e7b224c892a6b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f1617f53f2ffcea3e0dd7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb2a1f7dfa51b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000490f0c402efcea3e6db4673d70b467bde08b88b269b4673d70b467bd1c5ee9b070b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e490f0c402ffcea3e6011ceb00cd7a3bd0ad723b257398db20cd7a3bd0b0425b10cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803e490f0c402ffcea3e6ab467bd6bb467bd538d25316eb467bd6bb467bd175ee9b06bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e490f0c402ffcea3e09d7a3bd2243ab321c5f5e320bd7a3bd2243ab32c37d2c262243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f490f0c4030fcea3e62b467bd72b4673de08b883266b467bd72b4673d1e5ee93072b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f490f0c402ffcea3ea7b9f7320cd7a33d0bd72332ccc26e320cd7a33d0b0425310cd7a33dccc26eb2000080bf0000803f0000803f0000803f0000803f0000403f490f0c402ffcea3e77b4673d66b4673d6b8d25b173b4673d66b4673d125ee93066b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f490f0c402ffcea3e0dd7a33db656e7b21d5f5eb20bd7a33db656e7b2b6ff68a6b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f490f0c40b82e243f08d7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb2207d52a51b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000085911d40b82e243f64b4673d70b467bde08b88b269b4673d70b467bdc8525bb070b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e85911d40b82e243f505719b30cd7a3bd0ad723b257398db20cd7a3bdc3159bb00cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803e85911d40b82e243f73b467bd6bb467bd538d25316eb467bd6bb467bdc3525bb06bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e85911d40b82e243f0ed7a3bd2243ab321c5f5e320bd7a3bd2243ab32501ca2252243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f85911d40b82e243f6bb467bd72b4673de08b883266b467bd72b4673dca525b3072b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f85911d40b82e243f8c4fb8b10cd7a33d0bd72332ccc26e320cd7a33dc3159b300cd7a33dccc26eb2000080bf0000803f0000803f0000803f0000803f0000403f85911d40b82e243f6eb4673d66b4673d6b8d25b173b4673d66b4673dbe525b3066b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f85911d40b82e243f08d7a33db656e7b21d5f5eb20bd7a33db656e7b210fadaa5b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f85911d404ccc523f0cd7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb2d288ed251b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000009d0c2f404ccc523f6cb4673d70b467bde08b88b269b4673d70b467bd1381f73070b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e9d0c2f404ccc523ff827e4b10cd7a3bd0ad723b257398db20cd7a3bd0a032f310cd7a3bd57398d32000080bf0000803f0000803f0000803f0000803f0000803e9d0c2f404ccc523f6bb467bd6bb467bd538d25316eb467bd6bb467bd0e81f7306bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e9d0c2f404ccc523f0ad7a3bd2243ab321c5f5e320bd7a3bd2243ab32aff036a62243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f9d0c2f404ccc523f63b467bd72b4673de08b883266b467bd72b4673d1581f7b072b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f9d0c2f404ccc523fbf90cb320cd7a33d0bd72332ccc26e320cd7a33d0a032fb10cd7a33dccc26eb2000080bf0000803f0000803f0000803f0000803f0000403f9d0c2f404ccc523f76b4673d66b4673d6b8d25b173b4673d66b4673d0981f7b066b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f9d0c2f404ccc523f0cd7a33db656e7b21d5f5eb20bd7a33db656e7b2f51c7726b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f9d0c2f400000803f0ad7a33d1b5f5eb21b5f5eb20bd7a33d1b5f5eb2f667baa61b5f5eb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000010040400000803f67b4673d70b467bde08b88b269b4673d70b467bddb3ac2b170b467bd69b467bd000080bf0000803f0000803f0000803f0000803f0000003e010040400000803f949ad0b20cd7a3bd0ad723b257398db20cd7a3bd5c5709b20cd7a3bd58398d32000080bf0000803f0000803f0000803f0000803f0000803e010040400000803f70b467bd6bb467bd538d25316eb467bd6bb467bdd73ac2b16bb467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e010040400000803f0cd7a3bd2243ab321c5f5e320bd7a3bd2243ab3223900f272243ab320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f010040400000803f68b467bd72b4673de08b883266b467bd72b4673ddc3ac23172b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f010040400000803fa400d0310cd7a33d0bd72332ccc26e320cd7a33d5c5709320cd7a33dcdc26eb2000080bf0000803f0000803f0000803f0000803f0000403f010040400000803f71b4673d66b4673d6b8d25b173b4673d66b4673dd23ac23166b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f010040400000803f0ad7a33db656e7b21d5f5eb20bd7a33db656e7b249ec41a7b656e7b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f01004040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0.00000011920929, y: 0.0000000037252903, z: 0} - m_Extent: {x: 0.9999999, y: 0.08000003, z: 0.08000001} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &574933228 GameObject: m_ObjectHideFlags: 0 @@ -785,8 +460,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 574933238} - - component: {fileID: 574933237} - - component: {fileID: 574933236} - component: {fileID: 574933229} - component: {fileID: 574933235} - component: {fileID: 574933234} @@ -814,9 +487,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -875,9 +552,12 @@ MonoBehaviour: restLength: 0.17657018 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 61d053dd5abd943919947f833abd0569, type: 2} tearingEnabled: 1 - tearResistanceMultiplier: 450 + tearResistanceMultiplier: 600 tearRate: 1 _distanceConstraintsEnabled: 1 _stretchingScale: 1 @@ -885,7 +565,7 @@ MonoBehaviour: _maxCompression: 0 _bendConstraintsEnabled: 1 _bendCompliance: 0 - _maxBending: 0 + _maxBending: 0.01 _plasticYield: 0 _plasticCreep: 0 --- !u!114 &574933230 @@ -905,8 +585,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &574933231 MonoBehaviour: m_ObjectHideFlags: 0 @@ -924,8 +605,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &574933232 MonoBehaviour: m_ObjectHideFlags: 0 @@ -943,8 +625,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &574933233 MonoBehaviour: m_ObjectHideFlags: 0 @@ -962,8 +645,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &574933234 MonoBehaviour: m_ObjectHideFlags: 0 @@ -976,6 +660,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 1 @@ -996,59 +689,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 ---- !u!23 &574933236 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 574933228} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &574933237 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 574933228} - m_Mesh: {fileID: 573424719} + indexInSystem: 0 --- !u!4 &574933238 Transform: m_ObjectHideFlags: 0 @@ -1172,7 +813,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -1262,191 +902,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 ---- !u!43 &1059497601 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 528 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 108 - localAABB: - m_Center: {x: 0.00000011920929, y: 0.00000008568168, z: 0} - m_Extent: {x: 1, y: 0.0800001, z: 0.08000001} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b00 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 108 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 6912 - _typelessdata: feff7fbf10d7a33d5de5eeb25de5eeb20bd7a33d5de5eeb2ed2a2e285de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000000000000feff7fbf71b4673d72b467bde4d9e2b266b4673d72b467bdcceca83272b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e00000000feff7fbfd4d50d320cd7a3bd0ad723b2947706b30cd7a3bd5ce5ee320cd7a3bd93770633000080bf0000803f0000803f0000803f0000803f0000803e00000000feff7fbf66b467bd68b467bd5dff5d3271b467bd68b467bdc5eca83268b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e00000000feff7fbf06d7a3bd797c15335ee5ee320bd7a3bd797c153372f759a8797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f00000000feff7fbf58b467bd75b4673de3d9e23263b467bd75b4673dcfeca8b275b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f00000000feff7fbf52bc92330cd7a33d0bd723323617f7320cd7a33d5ce5eeb20cd7a33d3417f7b2000080bf0000803f0000803f0000803f0000803f0000403f00000000feff7fbf81b4673d63b4673d67ff5db276b4673d63b4673dc1eca8b263b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f00000000feff7fbf10d7a33d438633b35ee5eeb20bd7a33d438633b3fbe18228438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f00000000656951bf19d7a33d5de5eeb25de5eeb20bd7a33d5de5eeb24c9885275de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000cbc38b3e656951bf82b4673d72b467bde4d9e2b266b4673d72b467bdd392013272b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003ecbc38b3e656951bf309799330cd7a3bd0ad723b2947706b30cd7a3bd9d3e37320cd7a3bd94770633000080bf0000803f0000803f0000803f0000803f0000803ecbc38b3e656951bf55b467bd68b467bd5dff5d3271b467bd68b467bdcd92013268b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03ecbc38b3e656951bffdd6a3bd797c15335ee5ee320bd7a3bd797c1533d630a7a7797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fcbc38b3e656951bf47b467bd75b4673de3d9e23263b467bd75b4673dd49201b275b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203fcbc38b3e656951bf644c0d340cd7a33d0bd723323617f7320cd7a33d9d3e37b20cd7a33d3517f7b2000080bf0000803f0000803f0000803f0000803f0000403fcbc38b3e656951bf92b4673d63b4673d67ff5db276b4673d63b4673dca9201b263b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603fcbc38b3e656951bf19d7a33d438633b35ee5eeb20bd7a33d438633b360c9c827438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fcbc38b3e2fd222bf17d7a33d5de5eeb25de5eeb20bd7a33d5de5eeb20a5aca255de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000b6c40b3f2fd222bf7eb4673d72b467bde4d9e2b266b4673d72b467bdbb42443072b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003eb6c40b3f2fd222bf5ee373330cd7a3bd0ad723b2947706b30cd7a3bdf7c68a300cd7a3bd94770633000080bf0000803f0000803f0000803f0000803f0000803eb6c40b3f2fd222bf59b467bd68b467bd5dff5d3271b467bd68b467bdb242443068b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03eb6c40b3f2fd222bfffd6a3bd797c15335ee5ee320bd7a3bd797c1533fd3cfda5797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fb6c40b3f2fd222bf4bb467bd75b4673de3d9e23263b467bd75b4673dbd4244b075b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203fb6c40b3f2fd222bf46f3fa330cd7a33d0bd723323617f7320cd7a33df7c68ab00cd7a33d3617f7b2000080bf0000803f0000803f0000803f0000803f0000403fb6c40b3f2fd222bf8eb4673d63b4673d67ff5db276b4673d63b4673dae4244b063b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603fb6c40b3f2fd222bf17d7a33d438633b35ee5eeb20bd7a33d438633b3f70f1826438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fb6c40b3ff727e8be19d7a33d5de5eeb25de5eeb20bd7a33d5de5eeb27916ad275de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000004e2513ff727e8be83b4673d72b467bde4d9e2b266b4673d72b467bdace0273272b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e04e2513ff627e8befd78a3330cd7a3bd0ad723b2947706b30cd7a3bd2c6a6d320cd7a3bd94770633000080bf0000803f0000803f0000803f0000803f0000803e04e2513ff627e8be54b467bd68b467bd5dff5d3271b467bd68b467bda4e0273268b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e04e2513ff527e8befdd6a3bd797c15335ee5ee320bd7a3bd797c15337a9dd8a7797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f04e2513ff527e8be46b467bd75b4673de3d9e23263b467bd75b4673daee027b275b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f04e2513ff627e8be4a3d12340cd7a33d0bd723323617f7320cd7a33d2c6a6db20cd7a33d3517f7b2000080bf0000803f0000803f0000803f0000803f0000403f04e2513ff627e8be93b4673d63b4673d67ff5db276b4673d63b4673da1e027b263b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f04e2513ff727e8be19d7a33d438633b35ee5eeb20bd7a33d438633b33d120228438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f04e2513fe1c68abe1fd7a33d5de5eeb25de5eeb20bd7a33d5de5eeb29c9798a75de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000006af58b3fe1c68abe8fb4673d72b467bde4d9e2b266b4673d72b467bdbeff13b272b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e6af58b3fe0c68abebeaa00340cd7a3bd0ad723b2947706b30cd7a3bd584d51b20cd7a3bd94770633000080bf0000803f0000803f0000803f0000803f0000803e6af58b3fe0c68abe48b467bd68b467bd5dff5d3271b467bd68b467bdb8ff13b268b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e6af58b3fdfc68abef7d6a3bd797c15335ee5ee320bd7a3bd797c153327f7be27797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f6af58b3fdfc68abe3ab467bd75b4673de3d9e23263b467bd75b4673dc0ff133275b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f6af58b3fe0c68abe8a2b41340cd7a33d0bd723323617f7320cd7a33d584d51320cd7a33d3717f7b2000080bf0000803f0000803f0000803f0000803f0000403f6af58b3fe0c68abe9fb4673d63b4673d67ff5db276b4673d63b4673db5ff133263b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f6af58b3fe1c68abe1fd7a33d438633b35ee5eeb20bd7a33d438633b3b256e5a7438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f6af58b3ffb55b5bd12d7a33d5de5eeb25de5eeb20bd7a33d5de5eeb25ba112275de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000efffae3ffb55b5bd74b4673d72b467bde4d9e2b266b4673d72b467bd6e378e3172b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003eefffae3ff855b5bd6291b0320cd7a3bd0ad723b2947706b30cd7a3bddd1fc9310cd7a3bd94770633000080bf0000803f0000803f0000803f0000803f0000803eefffae3ff555b5bd63b467bd68b467bd5dff5d3271b467bd68b467bd68378e3168b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03eefffae3ff355b5bd04d7a3bd797c15335ee5ee320bd7a3bd797c1533158137a7797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fefffae3ff355b5bd55b467bd75b4673de3d9e23263b467bd75b4673d70378eb175b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203fefffae3ff655b5bdf025ad330cd7a33d0bd723323617f7320cd7a33ddd1fc9b10cd7a33d3617f7b2000080bf0000803f0000803f0000803f0000803f0000403fefffae3ff955b5bd84b4673d63b4673d67ff5db276b4673d63b4673d65378eb163b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603fefffae3ffb55b5bd12d7a33d438633b35ee5eeb20bd7a33d438633b3ce605c27438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fefffae3f887ac03d23d7a33d5de5eeb25de5eeb20bd7a33d5de5eeb22fb3db275de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000007b0bd23f887ac03d96b4673d72b467bde4d9e2b266b4673d72b467bd3116553272b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e7b0bd23f8b7ac03d6f581d340cd7a3bd0ad723b2947706b30cd7a3bdccac96320cd7a3bd93770633000080bf0000803f0000803f0000803f0000803f0000803e7b0bd23f8e7ac03d41b467bd68b467bd5dff5d3271b467bd68b467bd2716553268b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e7b0bd23f907ac03df3d6a3bd797c15335ee5ee320bd7a3bd797c15337c7909a8797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f7b0bd23f907ac03d33b467bd75b4673de3d9e23263b467bd75b4673d331655b275b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f7b0bd23f8d7ac03d3bd95d340cd7a33d0bd723323617f7320cd7a33dccac96b20cd7a33d3517f7b2000080bf0000803f0000803f0000803f0000803f0000403f7b0bd23f8a7ac03da6b4673d63b4673d67ff5db276b4673d63b4673d231655b263b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f7b0bd23f887ac03d23d7a33d438633b35ee5eeb20bd7a33d438633b360192528438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f7b0bd23fe6928d3e1dd7a33d5de5eeb25de5eeb20bd7a33d5de5eeb28bc792a65de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000001417f53fe6928d3e89b4673d72b467bde4d9e2b266b4673d72b467bd785c0eb172b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e1417f53fe7928d3efa07d8330cd7a3bd0ad723b2947706b30cd7a3bd3e5449b10cd7a3bd94770633000080bf0000803f0000803f0000803f0000803f0000803e1417f53fe7928d3e4eb467bd68b467bd5dff5d3271b467bd68b467bd725c0eb168b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e1417f53fe8928d3ef9d6a3bd797c15335ee5ee320bd7a3bd797c1533dfb0b726797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f1417f53fe8928d3e40b467bd75b4673de3d9e23263b467bd75b4673d7a5c0e3175b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f1417f53fe7928d3ec9842c340cd7a33d0bd723323617f7320cd7a33d3e5449310cd7a33d3617f7b2000080bf0000803f0000803f0000803f0000803f0000403f1417f53fe7928d3e99b4673d63b4673d67ff5db276b4673d63b4673d6f5c0e3163b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f1417f53fe6928d3e1dd7a33d438633b35ee5eeb20bd7a33d438633b3339adca6438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f1417f53f2ffcea3e21d7a33d5de5eeb25de5eeb20bd7a33d5de5eeb2d35d3ea85de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000480f0c402ffcea3e92b4673d72b467bde4d9e2b266b4673d72b467bddfa2b8b272b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e480f0c4030fcea3e77fe0e340cd7a3bd0ad723b2947706b30cd7a3bdb78e02b30cd7a3bd95770633000080bf0000803f0000803f0000803f0000803f0000803e480f0c4030fcea3e45b467bd68b467bd5dff5d3271b467bd68b467bdd7a2b8b268b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e480f0c4031fcea3ef5d6a3bd797c15335ee5ee320bd7a3bd797c1533303d6e28797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f480f0c4031fcea3e37b467bd75b4673de3d9e23263b467bd75b4673de1a2b83275b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f480f0c4030fcea3e437f4f340cd7a33d0bd723323617f7320cd7a33db78e02330cd7a33d3817f7b2000080bf0000803f0000803f0000803f0000803f0000403f480f0c4030fcea3ea2b4673d63b4673d67ff5db276b4673d63b4673dd3a2b83263b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f480f0c402ffcea3e21d7a33d438633b35ee5eeb20bd7a33d438633b3460e8fa8438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f480f0c40b92e243f0ad7a33d5de5eeb25de5eeb20bd7a33d5de5eeb2315b88a65de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000084911d40b92e243f64b4673d72b467bde4d9e2b266b4673d72b467bd704004b172b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e84911d40b92e243fab5223b30cd7a3bd0ad723b2947706b30cd7a3bd38083bb10cd7a3bd94770633000080bf0000803f0000803f0000803f0000803f0000803e84911d40b92e243f73b467bd68b467bd5dff5d3271b467bd68b467bd6a4004b168b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e84911d40b92e243f0cd7a3bd797c15335ee5ee320bd7a3bd797c15337fa5aa26797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f84911d40b92e243f65b467bd75b4673de3d9e23263b467bd75b4673d7240043175b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f84911d40b92e243f0961bd320cd7a33d0bd723323617f7320cd7a33d38083b310cd7a33d3617f7b2000080bf0000803f0000803f0000803f0000803f0000403f84911d40b92e243f74b4673d63b4673d67ff5db276b4673d63b4673d6840043163b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f84911d40b92e243f0ad7a33d438633b35ee5eeb20bd7a33d438633b3cdefcca6438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f84911d404dcc523f1fd7a33d5de5eeb25de5eeb20bd7a33d5de5eeb2039c56285de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000009c0c2f404dcc523f8fb4673d72b467bde4d9e2b266b4673d72b467bd3e26d03272b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e9c0c2f404dcc523f0bae01340cd7a3bd0ad723b2947706b30cd7a3bd0d2f13330cd7a3bd93770633000080bf0000803f0000803f0000803f0000803f0000803e9c0c2f404dcc523f48b467bd68b467bd5dff5d3271b467bd68b467bd3526d03268b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e9c0c2f404dcc523ff7d6a3bd797c15335ee5ee320bd7a3bd797c15330a4a86a8797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f9c0c2f404dcc523f3ab467bd75b4673de3d9e23263b467bd75b4673d4126d0b275b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f9c0c2f404dcc523fd72e42340cd7a33d0bd723323617f7320cd7a33d0d2f13b30cd7a33d3417f7b2000080bf0000803f0000803f0000803f0000803f0000403f9c0c2f404dcc523f9fb4673d63b4673d67ff5db276b4673d63b4673d3126d0b263b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f9c0c2f404dcc523f1fd7a33d438633b35ee5eeb20bd7a33d438633b31346a128438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f9c0c2f400100803f1fd7a33d5de5eeb25de5eeb20bd7a33d5de5eeb23e696aa65de5eeb20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000000040400100803f8db4673d72b467bde4d9e2b266b4673d72b467bde35ae3b072b467bd66b467bd000080bf0000803f0000803f0000803f0000803f0000003e000040400100803f7845f8330cd7a3bd0ad723b2947706b30cd7a3bda4c320b10cd7a3bd94770633000080bf0000803f0000803f0000803f0000803f0000803e000040400100803f4ab467bd68b467bd5dff5d3271b467bd68b467bdd95ae3b068b467bd71b4673d000080bf0000803f0000803f0000803f0000803f0000c03e000040400100803ff7d6a3bd797c15335ee5ee320bd7a3bd797c15330dae9226797c15330bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f000040400100803f3cb467bd75b4673de3d9e23263b467bd75b4673de65ae33075b4673d63b4673d000080bf0000803f0000803f0000803f0000803f0000203f000040400100803f88a33c340cd7a33d0bd723323617f7320cd7a33da4c320310cd7a33d3617f7b2000080bf0000803f0000803f0000803f0000803f0000403f000040400100803f9db4673d63b4673d67ff5db276b4673d63b4673dd45ae33063b4673d76b467bd000080bf0000803f0000803f0000803f0000803f0000603f000040400100803f1fd7a33d438633b35ee5eeb20bd7a33d438633b37a27b0a6438633b30bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f00004040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0.00000011920929, y: 0.00000008568168, z: 0} - m_Extent: {x: 1, y: 0.0800001, z: 0.08000001} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &1083562909 GameObject: m_ObjectHideFlags: 0 @@ -1558,171 +1013,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1083562909} m_CullTransparentMesh: 0 ---- !u!43 &1160988149 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 528 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 108 - localAABB: - m_Center: {x: 0.00000008940697, y: 0.00000022351742, z: 0} - m_Extent: {x: 0.9999999, y: 0.08000011, z: 0.08000001} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b00 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 108 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 6912 - _typelessdata: fdff7fbf28d7a33d4899fc324899fc320bd7a33d4899fc3286b842284899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000000000000fdff7fbfacb4673d68b467bd4e60713271b4673d68b467bd3c9db2b268b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e00000000fdff7fbf4a3783340cd7a3bd0cd723b27e8fde320cd7a3bd4599fcb20cd7a3bd7c8fdeb2000080bf0000803f0000803f0000803f0000803f0000803e00000000fdff7fbf2bb467bd73b467bd5d8aecb266b467bd73b467bd459db2b273b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e00000000fdff7fbfeed6a3bdb385c0b24799fcb20bd7a3bdb385c0b2de6814a8b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f00000000fdff7fbf33b467bd6ab4673d496071b26eb467bd6ab4673d3e9db2326ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f00000000fdff7fbfb60f4c340cd7a33d0bd723326f67f4b20cd7a33d4599fc320cd7a33d6d67f432000080bf0000803f0000803f0000803f0000803f0000403f00000000fdff7fbfa6b4673d6eb4673d5f8aec326bb4673d6eb4673d419db2326eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f00000000fdff7fbf28d7a33d1e7284324799fc320bd7a33d1e7284326a32cc271e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f00000000666951bf1fd7a33d4899fc324899fc320bd7a33d4899fc328b9a14284899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000c6c38b3e666951bf9ab4673d68b467bd4e60713271b4673d68b467bdcd4f88b268b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003ec6c38b3e666951bfe19a3e340cd7a3bd0cd723b27e8fde320cd7a3bd22c6c0b20cd7a3bd7c8fdeb2000080bf0000803f0000803f0000803f0000803f0000803ec6c38b3e666951bf3db467bd73b467bd5d8aecb266b467bd73b467bdd44f88b273b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03ec6c38b3e666951bff7d6a3bdb385c0b24799fcb20bd7a3bdb385c0b27d85e2a7b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fc6c38b3e666951bf45b467bd6ab4673d496071b26eb467bd6ab4673dcf4f88326ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203fc6c38b3e666951bf033c04340cd7a33d0bd723326f67f4b20cd7a33d22c6c0320cd7a33d6d67f432000080bf0000803f0000803f0000803f0000803f0000403fc6c38b3e666951bf94b4673d6eb4673d5f8aec326bb4673d6eb4673dd14f88326eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603fc6c38b3e666951bf1fd7a33d1e7284324799fc320bd7a33d1e728432e4d59b271e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fc6c38b3e2ed222bf1bd7a33d4899fc324899fc320bd7a33d4899fc320f7742a74899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000b8c40b3f2ed222bf90b4673d68b467bd4e60713271b4673d68b467bd2f61b23168b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003eb8c40b3f2ed222bf38cc18340cd7a3bd0cd723b27e8fde320cd7a3bd5844fc310cd7a3bd7e8fdeb2000080bf0000803f0000803f0000803f0000803f0000803eb8c40b3f2ed222bf47b467bd73b467bd5d8aecb266b467bd73b467bd3861b23173b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03eb8c40b3f2ed222bffbd6a3bdb385c0b24799fcb20bd7a3bdb385c0b2f8361427b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fb8c40b3f2ed222bf4fb467bd6ab4673d496071b26eb467bd6ab4673d3161b2b16ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203fb8c40b3f2ed222bfb4dabc330cd7a33d0bd723326f67f4b20cd7a33d5844fcb10cd7a33d6f67f432000080bf0000803f0000803f0000803f0000803f0000403fb8c40b3f2ed222bf8ab4673d6eb4673d5f8aec326bb4673d6eb4673d3461b2b16eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603fb8c40b3f2ed222bf1bd7a33d1e7284324799fc320bd7a33d1e728432c3edcba61e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fb8c40b3ff427e8be24d7a33d4899fc324899fc320bd7a33d4899fc32889379a84899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000006e2513ff527e8bea3b4673d68b467bd4e60713271b4673d68b467bda9eee43268b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e06e2513ff527e8be258862340cd7a3bd0cd723b27e8fde320cd7a3bd2ee121330cd7a3bd818fdeb2000080bf0000803f0000803f0000803f0000803f0000803e06e2513ff627e8be34b467bd73b467bd5d8aecb266b467bd73b467bdb3eee43273b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e06e2513ff627e8bef2d6a3bdb385c0b24799fcb20bd7a3bdb385c0b2f9373e28b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f06e2513ff527e8be3cb467bd6ab4673d496071b26eb467bd6ab4673dabeee4b26ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f06e2513ff527e8be472928340cd7a33d0bd723326f67f4b20cd7a33d2ee121b30cd7a33d7267f432000080bf0000803f0000803f0000803f0000803f0000403f06e2513ff427e8be9db4673d6eb4673d5f8aec326bb4673d6eb4673dafeee4b26eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f06e2513ff427e8be24d7a33d1e7284324799fc320bd7a33d1e7284326adc02a81e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f06e2513fdfc68abe32d7a33d4899fc324899fc320bd7a33d4899fc3284aa2da84899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f000000006bf58b3fe0c68abebeb4673d68b467bd4e60713271b4673d68b467bd124d9f3268b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e6bf58b3fe0c68abea7b6a8340cd7a3bd0cd723b27e8fde320cd7a3bd2949e1320cd7a3bd808fdeb2000080bf0000803f0000803f0000803f0000803f0000803e6bf58b3fe1c68abe19b467bd73b467bd5d8aecb266b467bd73b467bd194d9f3273b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e6bf58b3fe1c68abee4d6a3bdb385c0b24799fcb20bd7a3bdb385c0b2c85c0428b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f6bf58b3fe0c68abe21b467bd6ab4673d496071b26eb467bd6ab4673d134d9fb26ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f6bf58b3fe0c68abe38878b340cd7a33d0bd723326f67f4b20cd7a33d2949e1b20cd7a33d7167f432000080bf0000803f0000803f0000803f0000803f0000403f6bf58b3fdfc68abeb8b4673d6eb4673d5f8aec326bb4673d6eb4673d164d9fb26eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f6bf58b3fdfc68abe32d7a33d1e7284324799fc320bd7a33d1e728432191eb6a71e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f6bf58b3ff055b5bd34d7a33d4899fc324899fc320bd7a33d4899fc32a5e477a74899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000f0ffae3ff255b5bdc3b4673d68b467bd4e60713271b4673d68b467bd6a63e33168b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003ef0ffae3ff555b5bdd77cb1340cd7a3bd0cd723b27e8fde320cd7a3bdb3c920320cd7a3bd7f8fdeb2000080bf0000803f0000803f0000803f0000803f0000803ef0ffae3ff855b5bd14b467bd73b467bd5d8aecb266b467bd73b467bd7563e33173b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03ef0ffae3ff855b5bde2d6a3bdb385c0b24799fcb20bd7a3bdb385c0b291ef3c27b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003ff0ffae3ff655b5bd1cb467bd6ab4673d496071b26eb467bd6ab4673d6c63e3b16ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203ff0ffae3ff355b5bd684d94340cd7a33d0bd723326f67f4b20cd7a33db3c920b20cd7a33d7067f432000080bf0000803f0000803f0000803f0000803f0000403ff0ffae3ff055b5bdbdb4673d6eb4673d5f8aec326bb4673d6eb4673d7063e3b16eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603ff0ffae3ff055b5bd34d7a33d1e7284324799fc320bd7a33d1e7284327dfa01a71e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803ff0ffae3f9b7ac03d37d7a33d4899fc324899fc320bd7a33d4899fc32574506284899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f000000007d0bd23f997ac03dcab4673d68b467bd4e60713271b4673d68b467bd345476b268b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e7d0bd23f967ac03deea3bf340cd7a3bd0cd723b27e8fde320cd7a3bd502eaeb20cd7a3bd7d8fdeb2000080bf0000803f0000803f0000803f0000803f0000803e7d0bd23f937ac03d0db467bd73b467bd5d8aecb266b467bd73b467bd405476b273b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e7d0bd23f937ac03ddfd6a3bdb385c0b24799fcb20bd7a3bdb385c0b267accca7b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f7d0bd23f957ac03d15b467bd6ab4673d496071b26eb467bd6ab4673d365476326ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f7d0bd23f987ac03d7f74a2340cd7a33d0bd723326f67f4b20cd7a33d502eae320cd7a33d6e67f432000080bf0000803f0000803f0000803f0000803f0000403f7d0bd23f9b7ac03dc4b4673d6eb4673d5f8aec326bb4673d6eb4673d3b5476326eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f7d0bd23f9b7ac03d37d7a33d1e7284324799fc320bd7a33d1e72843220ce8c271e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f7d0bd23fe8928d3e27d7a33d4899fc324899fc320bd7a33d4899fc32ac9201274899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f000000001617f53fe7928d3eaab4673d68b467bd4e60713271b4673d68b467bdd5b56db168b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e1617f53fe7928d3e7e9f7f340cd7a3bd0cd723b27e8fde320cd7a3bd2c16a8b10cd7a3bd7e8fdeb2000080bf0000803f0000803f0000803f0000803f0000803e1617f53fe6928d3e2db467bd73b467bd5d8aecb266b467bd73b467bde1b56db173b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e1617f53fe6928d3eefd6a3bdb385c0b24799fcb20bd7a3bdb385c0b22483c5a6b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f1617f53fe7928d3e35b467bd6ab4673d496071b26eb467bd6ab4673dd7b56d316ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f1617f53fe7928d3ea04045340cd7a33d0bd723326f67f4b20cd7a33d2c16a8310cd7a33d6f67f432000080bf0000803f0000803f0000803f0000803f0000403f1617f53fe8928d3ea4b4673d6eb4673d5f8aec326bb4673d6eb4673ddbb56d316eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f1617f53fe8928d3e27d7a33d1e7284324799fc320bd7a33d1e728432efe087261e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f1617f53f30fcea3e34d7a33d4899fc324899fc320bd7a33d4899fc32398e0da84899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000490f0c402ffcea3ec4b4673d68b467bd4e60713271b4673d68b467bdbbd8813268b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e490f0c402ffcea3e97a8b3340cd7a3bd0cd723b27e8fde320cd7a3bd82a1b7320cd7a3bd7f8fdeb2000080bf0000803f0000803f0000803f0000803f0000803e490f0c402efcea3e13b467bd73b467bd5d8aecb266b467bd73b467bdc1d8813273b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e490f0c402efcea3ee2d6a3bdb385c0b24799fcb20bd7a3bdb385c0b21bc7d727b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f490f0c402ffcea3e1bb467bd6ab4673d496071b26eb467bd6ab4673dbcd881b26ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f490f0c402ffcea3e287996340cd7a33d0bd723326f67f4b20cd7a33d82a1b7b20cd7a33d7067f432000080bf0000803f0000803f0000803f0000803f0000403f490f0c4030fcea3ebeb4673d6eb4673d5f8aec326bb4673d6eb4673dbed881b26eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f490f0c4030fcea3e34d7a33d1e7284324799fc320bd7a33d1e728432c47194a71e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f490f0c40b82e243f35d7a33d4899fc324899fc320bd7a33d4899fc322c11db274899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000085911d40b82e243fc4b4673d68b467bd4e60713271b4673d68b467bd58f248b268b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e85911d40b82e243f6d26b4340cd7a3bd0cd723b27e8fde320cd7a3bd3e178eb20cd7a3bd7d8fdeb2000080bf0000803f0000803f0000803f0000803f0000803e85911d40b82e243f13b467bd73b467bd5d8aecb266b467bd73b467bd61f248b273b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e85911d40b82e243fe1d6a3bdb385c0b24799fcb20bd7a3bdb385c0b22ef7a6a7b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f85911d40b82e243f1bb467bd6ab4673d496071b26eb467bd6ab4673d59f248326ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f85911d40b82e243ffef696340cd7a33d0bd723326f67f4b20cd7a33d3e178e320cd7a33d6e67f432000080bf0000803f0000803f0000803f0000803f0000403f85911d40b82e243fbeb4673d6eb4673d5f8aec326bb4673d6eb4673d5df248326eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f85911d40b82e243f35d7a33d1e7284324799fc320bd7a33d1e72843260ba65271e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f85911d404ccc523f2ad7a33d4899fc324899fc320bd7a33d4899fc32a4dfd9274899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f000000009d0c2f404ccc523fb0b4673d68b467bd4e60713271b4673d68b467bd16da47b268b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e9d0c2f404ccc523fe5328b340cd7a3bd0cd723b27e8fde320cd7a3bd12518db20cd7a3bd7d8fdeb2000080bf0000803f0000803f0000803f0000803f0000803e9d0c2f404ccc523f27b467bd73b467bd5d8aecb266b467bd73b467bd1fda47b273b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e9d0c2f404ccc523fecd6a3bdb385c0b24799fcb20bd7a3bdb385c0b2510ea6a7b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f9d0c2f404ccc523f2fb467bd6ab4673d496071b26eb467bd6ab4673d17da47326ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f9d0c2f404ccc523fed065c340cd7a33d0bd723326f67f4b20cd7a33d12518d320cd7a33d6e67f432000080bf0000803f0000803f0000803f0000803f0000403f9d0c2f404ccc523faab4673d6eb4673d5f8aec326bb4673d6eb4673d1bda47326eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f9d0c2f404ccc523f2ad7a33d1e7284324799fc320bd7a33d1e728432fa7964271e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f9d0c2f400000803f2bd7a33d4899fc324899fc320bd7a33d4899fc32ec11f2a54899fc320bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000010040400000803fb0b4673d68b467bd4e60713271b4673d68b467bdff0b5e3068b467bd71b467bd000080bf0000803f0000803f0000803f0000803f0000003e010040400000803f708d8c340cd7a3bd0cd723b27e8fde320cd7a3bdca029d300cd7a3bd7e8fdeb2000080bf0000803f0000803f0000803f0000803f0000803e010040400000803f27b467bd73b467bd5d8aecb266b467bd73b467bd0a0c5e3073b467bd66b4673d000080bf0000803f0000803f0000803f0000803f0000c03e010040400000803febd6a3bdb385c0b24799fcb20bd7a3bdb385c0b2637fb825b385c0b20bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f010040400000803f2fb467bd6ab4673d496071b26eb467bd6ab4673d010c5eb06ab4673d6eb4673d000080bf0000803f0000803f0000803f0000803f0000203f010040400000803f03bc5e340cd7a33d0bd723326f67f4b20cd7a33dca029db00cd7a33d6f67f432000080bf0000803f0000803f0000803f0000803f0000403f010040400000803faab4673d6eb4673d5f8aec326bb4673d6eb4673d050c5eb06eb4673d6bb467bd000080bf0000803f0000803f0000803f0000803f0000603f010040400000803f2bd7a33d1e7284324799fc320bd7a33d1e728432b4d97da51e7284320bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f01004040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0.00000008940697, y: 0.00000022351742, z: 0} - m_Extent: {x: 0.9999999, y: 0.08000011, z: 0.08000001} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &1175446144 GameObject: m_ObjectHideFlags: 0 @@ -1733,7 +1023,6 @@ GameObject: m_Component: - component: {fileID: 1175446146} - component: {fileID: 1175446145} - - component: {fileID: 1175446147} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -1821,29 +1110,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!114 &1175446147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 3 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 --- !u!1 &1189404431 GameObject: m_ObjectHideFlags: 0 @@ -1886,6 +1152,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1907,6 +1175,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1999,6 +1268,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1189404433} @@ -2012,8 +1282,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1346965650} - - component: {fileID: 1346965645} - - component: {fileID: 1346965644} - component: {fileID: 1346965642} - component: {fileID: 1346965646} - component: {fileID: 1346965643} @@ -2041,9 +1309,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000 + solverIndices: + serializedContents: 700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000 + m_AlignBytes: 16 + groupID: 2 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -2102,6 +1374,9 @@ MonoBehaviour: restLength: 0.17657018 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 61d053dd5abd943919947f833abd0569, type: 2} tearingEnabled: 1 tearResistanceMultiplier: 450 @@ -2127,64 +1402,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 1 section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} thicknessScale: 0.8 ---- !u!23 &1346965644 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1346965645 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Mesh: {fileID: 1392407401} --- !u!114 &1346965646 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2200,6 +1431,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 1 --- !u!114 &1346965647 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2217,8 +1449,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965648 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2236,8 +1469,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965649 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2255,8 +1489,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!4 &1346965650 Transform: m_ObjectHideFlags: 0 @@ -2289,8 +1524,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965652 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2308,217 +1544,6 @@ MonoBehaviour: plugTears: 1 plugStart: 0 plugEnd: 0 ---- !u!43 &1392407401 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 528 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 108 - localAABB: - m_Center: {x: 0.000000059604645, y: 0, z: 0} - m_Extent: {x: 0.99999994, y: 0.080000006, z: 0.08000001} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b00 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 108 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 6912 - _typelessdata: feff7fbf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000000000000feff7fbf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e00000000feff7fbf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e00000000feff7fbf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e00000000feff7fbf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f00000000feff7fbf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f00000000feff7fbf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f00000000feff7fbf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f00000000feff7fbf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f00000000666951bf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000c9c38b3e666951bf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003ec9c38b3e666951bf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803ec9c38b3e666951bf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03ec9c38b3e666951bf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fc9c38b3e666951bf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203fc9c38b3e666951bf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403fc9c38b3e666951bf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603fc9c38b3e666951bf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fc9c38b3e2ed222bf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000b9c40b3f2ed222bf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003eb9c40b3f2ed222bf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803eb9c40b3f2ed222bf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03eb9c40b3f2ed222bf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fb9c40b3f2ed222bf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203fb9c40b3f2ed222bf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403fb9c40b3f2ed222bf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603fb9c40b3f2ed222bf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fb9c40b3ff827e8be0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000005e2513ff827e8be6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e05e2513ff827e8be504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e05e2513ff827e8be6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e05e2513ff827e8be0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f05e2513ff827e8be69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f05e2513ff827e8be8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f05e2513ff827e8be70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f05e2513ff827e8be0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f05e2513fe4c68abe0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000006af58b3fe4c68abe6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e6af58b3fe4c68abe504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e6af58b3fe4c68abe6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e6af58b3fe4c68abe0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f6af58b3fe4c68abe69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f6af58b3fe4c68abe8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f6af58b3fe4c68abe70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f6af58b3fe4c68abe0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f6af58b3ff055b5bd0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000f1ffae3ff155b5bd6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003ef1ffae3ff155b5bd504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803ef1ffae3ff155b5bd6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03ef1ffae3ff055b5bd0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003ff1ffae3fef55b5bd69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203ff1ffae3fef55b5bd8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403ff1ffae3fef55b5bd70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603ff1ffae3ff055b5bd0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803ff1ffae3f907ac03d0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000007d0bd23f8f7ac03d6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e7d0bd23f8f7ac03d504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e7d0bd23f8f7ac03d6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e7d0bd23f907ac03d0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f7d0bd23f917ac03d69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f7d0bd23f917ac03d8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f7d0bd23f917ac03d70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f7d0bd23f907ac03d0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f7d0bd23fe6928d3e0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000001617f53fe6928d3e6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e1617f53fe6928d3e504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e1617f53fe6928d3e6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e1617f53fe6928d3e0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f1617f53fe6928d3e69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f1617f53fe6928d3e8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f1617f53fe6928d3e70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f1617f53fe6928d3e0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f1617f53f2efcea3e0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000490f0c402efcea3e6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e490f0c402efcea3e504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e490f0c402efcea3e6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e490f0c402efcea3e0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f490f0c402efcea3e69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f490f0c402efcea3e8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f490f0c402efcea3e70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f490f0c402efcea3e0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f490f0c40b82e243f0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000086911d40b82e243f6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e86911d40b82e243f504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e86911d40b82e243f6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e86911d40b82e243f0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f86911d40b82e243f69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f86911d40b82e243f8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f86911d40b82e243f70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f86911d40b82e243f0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f86911d404ccc523f0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000009e0c2f404ccc523f6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e9e0c2f404ccc523f504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e9e0c2f404ccc523f6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e9e0c2f404ccc523f0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f9e0c2f404ccc523f69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f9e0c2f404ccc523f8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f9e0c2f404ccc523f70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f9e0c2f404ccc523f0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f9e0c2f400000803f0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000020040400000803f6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e020040400000803f504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e020040400000803f6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e020040400000803f0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f020040400000803f69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f020040400000803f8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f020040400000803f70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f020040400000803f0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f02004040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0.000000059604645, y: 0, z: 0} - m_Extent: {x: 0.99999994, y: 0.080000006, z: 0.08000001} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: ---- !u!1 &1395255069 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1395255071} - - component: {fileID: 1395255070} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1395255070 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395255069} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: - cellSpans: - m_AlignBytes: 16 ---- !u!4 &1395255071 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1395255069} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1544324415 GameObject: m_ObjectHideFlags: 0 @@ -2528,8 +1553,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1544324425} - - component: {fileID: 1544324424} - - component: {fileID: 1544324423} - component: {fileID: 1544324416} - component: {fileID: 1544324422} - component: {fileID: 1544324421} @@ -2557,9 +1580,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000 + solverIndices: + serializedContents: e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000 + m_AlignBytes: 16 + groupID: 3 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -2618,9 +1645,12 @@ MonoBehaviour: restLength: 0.17657018 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 61d053dd5abd943919947f833abd0569, type: 2} tearingEnabled: 1 - tearResistanceMultiplier: 450 + tearResistanceMultiplier: 530 tearRate: 1 _distanceConstraintsEnabled: 1 _stretchingScale: 1 @@ -2648,8 +1678,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1544324418 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2667,8 +1698,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1544324419 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2686,8 +1718,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1544324420 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2705,8 +1738,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1544324421 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2719,6 +1753,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 1 @@ -2739,59 +1782,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 ---- !u!23 &1544324423 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1544324415} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1544324424 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1544324415} - m_Mesh: {fileID: 34891206} + indexInSystem: 2 --- !u!4 &1544324425 Transform: m_ObjectHideFlags: 0 @@ -2824,50 +1815,6 @@ MonoBehaviour: plugTears: 1 plugStart: 0 plugEnd: 0 ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1634024679 GameObject: m_ObjectHideFlags: 0 @@ -2877,8 +1824,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1634024689} - - component: {fileID: 1634024688} - - component: {fileID: 1634024687} - component: {fileID: 1634024680} - component: {fileID: 1634024686} - component: {fileID: 1634024685} @@ -2906,9 +1851,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000 + solverIndices: + serializedContents: 500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000 + m_AlignBytes: 16 + groupID: 4 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -2967,9 +1916,12 @@ MonoBehaviour: restLength: 0.17657018 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 61d053dd5abd943919947f833abd0569, type: 2} tearingEnabled: 1 - tearResistanceMultiplier: 450 + tearResistanceMultiplier: 300 tearRate: 1 _distanceConstraintsEnabled: 1 _stretchingScale: 1 @@ -2977,7 +1929,7 @@ MonoBehaviour: _maxCompression: 0 _bendConstraintsEnabled: 1 _bendCompliance: 0 - _maxBending: 0 + _maxBending: 0.03 _plasticYield: 0 _plasticCreep: 0 --- !u!114 &1634024681 @@ -2997,8 +1949,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1634024682 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3016,8 +1969,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1634024683 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3035,8 +1989,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1634024684 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3054,8 +2009,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1634024685 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3068,6 +2024,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 1 @@ -3088,59 +2053,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 ---- !u!23 &1634024687 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634024679} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1634024688 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634024679} - m_Mesh: {fileID: 1160988149} + indexInSystem: 3 --- !u!4 &1634024689 Transform: m_ObjectHideFlags: 0 @@ -3173,171 +2086,67 @@ MonoBehaviour: plugTears: 1 plugStart: 0 plugEnd: 0 ---- !u!43 &1936003734 -Mesh: +--- !u!850595691 &1941304692 +LightingSettings: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 528 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 108 - localAABB: - m_Center: {x: 0.000000029802322, y: 0.00000011175871, z: 0} - m_Extent: {x: 0.9999999, y: 0.08000009, z: 0.08000001} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b00 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 108 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 6912 - _typelessdata: feff7fbf14d7a33d8dc483b28dc483b20bd7a33d8dc483b293f253278dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000000000000feff7fbf7ab4673d70b467bd9f1997b268b4673d70b467bd0a593a3270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e00000000feff7fbfc0ff49330cd7a3bd0ad723b257cea1b20cd7a3bd8dc483320cd7a3bd56cea132000080bf0000803f0000803f0000803f0000803f0000803e00000000feff7fbf5cb467bd6ab467bda5fd8c316eb467bd6ab467bd05593a326ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e00000000feff7fbf02d7a3bd22d8bf328ec483320bd7a3bd22d8bf32434a9aa722d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f00000000feff7fbf54b467bd73b4673d9f19973266b467bd73b4673d0d593ab273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f00000000feff7fbf1071b0330cd7a33d0bd7233266f68b320cd7a33d8dc483b20cd7a33d65f68bb2000080bf0000803f0000803f0000803f0000803f0000403f00000000feff7fbf85b4673d65b4673db3fd8cb173b4673d65b4673d01593ab265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f00000000feff7fbf14d7a33db7ebfbb28ec483b20bd7a33db7ebfbb23d9bca27b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f00000000666951bf19d7a33d8dc483b28dc483b20bd7a33d8dc483b2b305b7278dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000c9c38b3e666951bf83b4673d70b467bd9f1997b268b4673d70b467bd8deaa03270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003ec9c38b3e666951bfb8efaf330cd7a3bd0ad723b257cea1b20cd7a3bde191e3320cd7a3bd55cea132000080bf0000803f0000803f0000803f0000803f0000803ec9c38b3e666951bf53b467bd6ab467bda5fd8c316eb467bd6ab467bd89eaa0326ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03ec9c38b3e666951bffdd6a3bd22d8bf328ec483320bd7a3bd22d8bf32c93b05a822d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fc9c38b3e666951bf4bb467bd73b4673d9f19973266b467bd73b4673d8feaa0b273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203fc9c38b3e666951bfe860fb330cd7a33d0bd7233266f68b320cd7a33de191e3b20cd7a33d64f68bb2000080bf0000803f0000803f0000803f0000803f0000403fc9c38b3e666951bf8eb4673d65b4673db3fd8cb173b4673d65b4673d85eaa0b265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603fc9c38b3e666951bf19d7a33db7ebfbb28ec483b20bd7a33db7ebfbb2b8f42e28b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fc9c38b3e2fd222bf24d7a33d8dc483b28dc483b20bd7a33d8dc483b2365692278dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000b8c40b3f2fd222bf9ab4673d70b467bd9f1997b268b4673d70b467bd66a9803270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003eb8c40b3f2fd222bf4dec33340cd7a3bd0ad723b257cea1b20cd7a3bd82f4b5320cd7a3bd56cea132000080bf0000803f0000803f0000803f0000803f0000803eb8c40b3f2fd222bf3cb467bd6ab467bda5fd8c316eb467bd6ab467bd63a980326ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03eb8c40b3f2fd222bff2d6a3bd22d8bf328ec483320bd7a3bd22d8bf32400ed5a722d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fb8c40b3f2fd222bf34b467bd73b4673d9f19973266b467bd73b4673d68a980b273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203fb8c40b3f2fd222bfe5a459340cd7a33d0bd7233266f68b320cd7a33d82f4b5b20cd7a33d65f68bb2000080bf0000803f0000803f0000803f0000803f0000403fb8c40b3f2fd222bfa5b4673d65b4673db3fd8cb173b4673d65b4673d60a980b265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603fb8c40b3f2fd222bf24d7a33db7ebfbb28ec483b20bd7a33db7ebfbb224e30b28b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fb8c40b3ff827e8be25d7a33d8dc483b28dc483b20bd7a33d8dc483b2caaef0a78dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000006e2513ff827e8be9db4673d70b467bd9f1997b268b4673d70b467bdbf9cd3b270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e06e2513ff727e8be119f3f340cd7a3bd0ad723b257cea1b20cd7a3bde9a115b30cd7a3bd59cea132000080bf0000803f0000803f0000803f0000803f0000803e06e2513ff727e8be39b467bd6ab467bda5fd8c316eb467bd6ab467bdba9cd3b26ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e06e2513ff627e8bef1d6a3bd22d8bf328ec483320bd7a3bd22d8bf3252352f2822d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f06e2513ff627e8be31b467bd73b4673d9f19973266b467bd73b4673dc29cd33273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f06e2513ff727e8bea95765340cd7a33d0bd7233266f68b320cd7a33de9a115330cd7a33d68f68bb2000080bf0000803f0000803f0000803f0000803f0000403f06e2513ff727e8bea8b4673d65b4673db3fd8cb173b4673d65b4673db59cd33265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f06e2513ff827e8be25d7a33db7ebfbb28ec483b20bd7a33db7ebfbb23e1366a8b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f06e2513fe4c68abe0fd7a33d8dc483b28dc483b20bd7a33d8dc483b21767e7a48dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000006bf58b3fe4c68abe6fb4673d70b467bd9f1997b268b4673d70b467bdfe73cbaf70b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e6bf58b3fe3c68abe9e3114320cd7a3bd0ad723b257cea1b20cd7a3bdf0dc0fb00cd7a3bd57cea132000080bf0000803f0000803f0000803f0000803f0000803e6bf58b3fe3c68abe67b467bd6ab467bda5fd8c316eb467bd6ab467bdf873cbaf6ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e6bf58b3fe2c68abe07d7a3bd22d8bf328ec483320bd7a3bd22d8bf32e573282522d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f6bf58b3fe2c68abe5fb467bd73b4673d9f19973266b467bd73b4673d0074cb2f73b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f6bf58b3fe3c68abec6ee3b330cd7a33d0bd7233266f68b320cd7a33df0dc0f300cd7a33d66f68bb2000080bf0000803f0000803f0000803f0000803f0000403f6bf58b3fe3c68abe7ab4673d65b4673db3fd8cb173b4673d65b4673df473cb2f65b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f6bf58b3fe4c68abe0fd7a33db7ebfbb28ec483b20bd7a33db7ebfbb23f345da5b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f6bf58b3ff455b5bd25d7a33d8dc483b28dc483b20bd7a33d8dc483b2f306e6278dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000f2ffae3ff455b5bd9cb4673d70b467bd9f1997b268b4673d70b467bd623eca3270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003ef2ffae3ff355b5bde50e3d340cd7a3bd0ad723b257cea1b20cd7a3bd03020f330cd7a3bd55cea132000080bf0000803f0000803f0000803f0000803f0000803ef2ffae3ff155b5bd3ab467bd6ab467bda5fd8c316eb467bd6ab467bd5d3eca326ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03ef2ffae3ff055b5bdf1d6a3bd22d8bf328ec483320bd7a3bd22d8bf328d7327a822d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003ff2ffae3ff055b5bd32b467bd73b4673d9f19973266b467bd73b4673d653ecab273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203ff2ffae3ff155b5bd7dc762340cd7a33d0bd7233266f68b320cd7a33d03020fb30cd7a33d64f68bb2000080bf0000803f0000803f0000803f0000803f0000403ff2ffae3ff355b5bda7b4673d65b4673db3fd8cb173b4673d65b4673d593ecab265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603ff2ffae3ff455b5bd25d7a33db7ebfbb28ec483b20bd7a33db7ebfbb2a1e35b28b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803ff2ffae3f887ac03d23d7a33d8dc483b28dc483b20bd7a33d8dc483b2f898e9a78dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000007e0bd23f887ac03d98b4673d70b467bd9f1997b268b4673d70b467bd0162cdb270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e7e0bd23f897ac03d18652c340cd7a3bd0ad723b257cea1b20cd7a3bd423a11b30cd7a3bd59cea132000080bf0000803f0000803f0000803f0000803f0000803e7e0bd23f8b7ac03d3eb467bd6ab467bda5fd8c316eb467bd6ab467bdfc61cdb26ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e7e0bd23f8c7ac03df3d6a3bd22d8bf328ec483320bd7a3bd22d8bf32ec0c2a2822d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f7e0bd23f8c7ac03d36b467bd73b4673d9f19973266b467bd73b4673d0462cd3273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f7e0bd23f8b7ac03db01d52340cd7a33d0bd7233266f68b320cd7a33d423a11330cd7a33d68f68bb2000080bf0000803f0000803f0000803f0000803f0000403f7e0bd23f897ac03da3b4673d65b4673db3fd8cb173b4673d65b4673df761cd3265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f7e0bd23f887ac03d23d7a33db7ebfbb28ec483b20bd7a33db7ebfbb25d4d5fa8b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f7e0bd23fe5928d3e10d7a33d8dc483b28dc483b20bd7a33d8dc483b24b15a4a78dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000001817f53fe5928d3e73b4673d70b467bd9f1997b268b4673d70b467bdc04390b270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e1817f53fe6928d3e4511bb320cd7a3bd0ad723b257cea1b20cd7a3bd6005ccb20cd7a3bd59cea132000080bf0000803f0000803f0000803f0000803f0000803e1817f53fe6928d3e63b467bd6ab467bda5fd8c316eb467bd6ab467bdbd4390b26ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e1817f53fe7928d3e06d7a3bd22d8bf328ec483320bd7a3bd22d8bf32a5e4ee2722d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f1817f53fe7928d3e5bb467bd73b4673d9f19973266b467bd73b4673dc243903273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f1817f53fe6928d3e016b74330cd7a33d0bd7233266f68b320cd7a33d6005cc320cd7a33d68f68bb2000080bf0000803f0000803f0000803f0000803f0000403f1817f53fe6928d3e7eb4673d65b4673db3fd8cb173b4673d65b4673dba43903265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f1817f53fe5928d3e10d7a33db7ebfbb28ec483b20bd7a33db7ebfbb2ffd91ca8b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f1817f53f2cfcea3e15d7a33d8dc483b28dc483b20bd7a33d8dc483b2c8cf91258dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000490f0c402cfcea3e7bb4673d70b467bd9f1997b268b4673d70b467bd3533803070b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e490f0c402dfcea3e763160330cd7a3bd0ad723b257cea1b20cd7a3bd5c4db5300cd7a3bd57cea132000080bf0000803f0000803f0000803f0000803f0000803e490f0c402dfcea3e5bb467bd6ab467bda5fd8c316eb467bd6ab467bd323380306ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e490f0c402efcea3e01d7a3bd22d8bf328ec483320bd7a3bd22d8bf32874ad4a522d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f490f0c402efcea3e53b467bd73b4673d9f19973266b467bd73b4673d373380b073b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f490f0c402dfcea3eea89bb330cd7a33d0bd7233266f68b320cd7a33d5c4db5b00cd7a33d66f68bb2000080bf0000803f0000803f0000803f0000803f0000403f490f0c402dfcea3e86b4673d65b4673db3fd8cb173b4673d65b4673d2f3380b065b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f490f0c402cfcea3e15d7a33db7ebfbb28ec483b20bd7a33db7ebfbb2a3620b26b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f490f0c40b82e243f11d7a33d8dc483b28dc483b20bd7a33d8dc483b29094a2278dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000086911d40b82e243f75b4673d70b467bd9f1997b268b4673d70b467bd7df18e3270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e86911d40b82e243f09beee320cd7a3bd0ad723b257cea1b20cd7a3bd0027ca320cd7a3bd55cea132000080bf0000803f0000803f0000803f0000803f0000803e86911d40b82e243f61b467bd6ab467bda5fd8c316eb467bd6ab467bd7af18e326ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e86911d40b82e243f05d7a3bd22d8bf328ec483320bd7a3bd22d8bf3280b4eca722d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f86911d40b82e243f59b467bd73b4673d9f19973266b467bd73b4673d7ff18eb273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f86911d40b82e243fb22087330cd7a33d0bd7233266f68b320cd7a33d0027cab20cd7a33d64f68bb2000080bf0000803f0000803f0000803f0000803f0000403f86911d40b82e243f80b4673d65b4673db3fd8cb173b4673d65b4673d76f18eb265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f86911d40b82e243f11d7a33db7ebfbb28ec483b20bd7a33db7ebfbb2386a1b28b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f86911d404bcc523f23d7a33d8dc483b28dc483b20bd7a33d8dc483b2becb30278dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f000000009d0c2f404bcc523f98b4673d70b467bd9f1997b268b4673d70b467bd1e711b3270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e9d0c2f404bcc523f1d2c2b340cd7a3bd0ad723b257cea1b20cd7a3bdf4d35b320cd7a3bd56cea132000080bf0000803f0000803f0000803f0000803f0000803e9d0c2f404bcc523f3eb467bd6ab467bda5fd8c316eb467bd6ab467bd1a711b326ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e9d0c2f404bcc523ff3d6a3bd22d8bf328ec483320bd7a3bd22d8bf3271b380a722d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f9d0c2f404bcc523f36b467bd73b4673d9f19973266b467bd73b4673d20711bb273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f9d0c2f404bcc523fb5e450340cd7a33d0bd7233266f68b320cd7a33df4d35bb20cd7a33d65f68bb2000080bf0000803f0000803f0000803f0000803f0000403f9d0c2f404bcc523fa3b4673d65b4673db3fd8cb173b4673d65b4673d17711bb265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f9d0c2f404bcc523f23d7a33db7ebfbb28ec483b20bd7a33db7ebfbb20301a927b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f9d0c2f40ffff7f3f19d7a33d8dc483b28dc483b20bd7a33d8dc483b28f6de8a78dc483b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000001004040ffff7f3f84b4673d70b467bd9f1997b268b4673d70b467bdc25accb270b467bd68b467bd000080bf0000803f0000803f0000803f0000803f0000003e01004040ffff7f3f15e1b6330cd7a3bd0ad723b257cea1b20cd7a3bd1d8010b30cd7a3bd59cea132000080bf0000803f0000803f0000803f0000803f0000803e01004040ffff7f3f52b467bd6ab467bda5fd8c316eb467bd6ab467bdbd5accb26ab467bd6eb4673d000080bf0000803f0000803f0000803f0000803f0000c03e01004040ffff7f3ffdd6a3bd22d8bf328ec483320bd7a3bd22d8bf32f732292822d8bf320bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f01004040ffff7f3f4ab467bd73b4673d9f19973266b467bd73b4673dc55acc3273b4673d66b4673d000080bf0000803f0000803f0000803f0000803f0000203f01004040ffff7f3f222901340cd7a33d0bd7233266f68b320cd7a33d1d8010330cd7a33d68f68bb2000080bf0000803f0000803f0000803f0000803f0000403f01004040ffff7f3f8fb4673d65b4673db3fd8cb173b4673d65b4673db95acc3265b4673d73b467bd000080bf0000803f0000803f0000803f0000803f0000603f01004040ffff7f3f19d7a33db7ebfbb28ec483b20bd7a33db7ebfbb2262f5ea8b7ebfbb20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f01004040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0.000000029802322, y: 0.00000011175871, z: 0} - m_Extent: {x: 0.9999999, y: 0.08000009, z: 0.08000001} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: + m_Name: Settings.lighting + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &2021410671 GameObject: m_ObjectHideFlags: 0 @@ -3415,8 +2224,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 2025663242} - - component: {fileID: 2025663241} - - component: {fileID: 2025663240} - component: {fileID: 2025663233} - component: {fileID: 2025663239} - component: {fileID: 2025663238} @@ -3444,9 +2251,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000d8010000d9010000da010000db010000dc010000dd010000de010000df010000e0010000e1010000e2010000e3010000e4010000e5010000e6010000e7010000e8010000e9010000ea010000eb010000ec010000ed010000ee010000ef010000f0010000f1010000f2010000f3010000f4010000f5010000f6010000f7010000f8010000f9010000fa010000fb010000fc010000fd010000fe010000ff010000000200000102000002020000030200000402000005020000060200000702000008020000090200000a0200000b0200000c0200000d0200000e0200000f020000100200001102000012020000130200001402000015020000160200001702000018020000190200001a0200001b0200001c0200001d0200001e0200001f020000200200002102000022020000230200002402000025020000260200002702000028020000290200002a0200002b0200002c0200002d0200002e0200002f020000 + solverIndices: + serializedContents: c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000d8010000d9010000da010000db010000dc010000dd010000de010000df010000e0010000e1010000e2010000e3010000e4010000e5010000e6010000e7010000e8010000e9010000ea010000eb010000ec010000ed010000ee010000ef010000f0010000f1010000f2010000f3010000f4010000f5010000f6010000f7010000f8010000f9010000fa010000fb010000fc010000fd010000fe010000ff010000000200000102000002020000030200000402000005020000060200000702000008020000090200000a0200000b0200000c0200000d0200000e0200000f020000100200001102000012020000130200001402000015020000160200001702000018020000190200001a0200001b0200001c0200001d0200001e0200001f020000200200002102000022020000230200002402000025020000260200002702000028020000290200002a0200002b0200002c0200002d0200002e0200002f020000 + m_AlignBytes: 16 + groupID: 5 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -3505,9 +2316,12 @@ MonoBehaviour: restLength: 0.17657018 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 61d053dd5abd943919947f833abd0569, type: 2} tearingEnabled: 1 - tearResistanceMultiplier: 450 + tearResistanceMultiplier: 400 tearRate: 1 _distanceConstraintsEnabled: 1 _stretchingScale: 1 @@ -3515,7 +2329,7 @@ MonoBehaviour: _maxCompression: 0 _bendConstraintsEnabled: 1 _bendCompliance: 0 - _maxBending: 0 + _maxBending: 0.02 _plasticYield: 0 _plasticCreep: 0 --- !u!114 &2025663234 @@ -3535,8 +2349,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2025663235 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3554,8 +2369,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2025663236 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3573,8 +2389,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2025663237 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3592,8 +2409,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2025663238 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3606,6 +2424,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 1 @@ -3626,59 +2453,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 ---- !u!23 &2025663240 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2025663232} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &2025663241 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2025663232} - m_Mesh: {fileID: 1936003734} + indexInSystem: 4 --- !u!4 &2025663242 Transform: m_ObjectHideFlags: 0 @@ -3720,8 +2495,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 2060423119} - - component: {fileID: 2060423118} - - component: {fileID: 2060423117} - component: {fileID: 2060423110} - component: {fileID: 2060423116} - component: {fileID: 2060423115} @@ -3749,9 +2522,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 300200003102000032020000330200003402000035020000360200003702000038020000390200003a0200003b0200003c0200003d0200003e0200003f020000400200004102000042020000430200004402000045020000460200004702000048020000490200004a0200004b0200004c0200004d0200004e0200004f020000500200005102000052020000530200005402000055020000560200005702000058020000590200005a0200005b0200005c0200005d0200005e0200005f020000600200006102000062020000630200006402000065020000660200006702000068020000690200006a0200006b0200006c0200006d0200006e0200006f020000700200007102000072020000730200007402000075020000760200007702000078020000790200007a0200007b0200007c0200007d0200007e0200007f020000800200008102000082020000830200008402000085020000860200008702000088020000890200008a0200008b0200008c0200008d0200008e0200008f020000900200009102000092020000930200009402000095020000960200009702000098020000990200009a0200009b0200009c0200009d0200009e0200009f020000 + solverIndices: + serializedContents: 300200003102000032020000330200003402000035020000360200003702000038020000390200003a0200003b0200003c0200003d0200003e0200003f020000400200004102000042020000430200004402000045020000460200004702000048020000490200004a0200004b0200004c0200004d0200004e0200004f020000500200005102000052020000530200005402000055020000560200005702000058020000590200005a0200005b0200005c0200005d0200005e0200005f020000600200006102000062020000630200006402000065020000660200006702000068020000690200006a0200006b0200006c0200006d0200006e0200006f020000700200007102000072020000730200007402000075020000760200007702000078020000790200007a0200007b0200007c0200007d0200007e0200007f020000800200008102000082020000830200008402000085020000860200008702000088020000890200008a0200008b0200008c0200008d0200008e0200008f020000900200009102000092020000930200009402000095020000960200009702000098020000990200009a0200009b0200009c0200009d0200009e0200009f020000 + m_AlignBytes: 16 + groupID: 6 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -3810,9 +2587,12 @@ MonoBehaviour: restLength: 0.17657018 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 61d053dd5abd943919947f833abd0569, type: 2} tearingEnabled: 1 - tearResistanceMultiplier: 450 + tearResistanceMultiplier: 580 tearRate: 1 _distanceConstraintsEnabled: 1 _stretchingScale: 1 @@ -3820,7 +2600,7 @@ MonoBehaviour: _maxCompression: 0 _bendConstraintsEnabled: 1 _bendCompliance: 0 - _maxBending: 0 + _maxBending: 0.01 _plasticYield: 0 _plasticCreep: 0 --- !u!114 &2060423111 @@ -3840,8 +2620,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2060423112 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3859,8 +2640,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2060423113 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3878,8 +2660,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2060423114 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3897,8 +2680,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2060423115 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3911,6 +2695,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 1 @@ -3931,59 +2724,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 ---- !u!23 &2060423117 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2060423109} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &2060423118 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2060423109} - m_Mesh: {fileID: 1059497601} + indexInSystem: 5 --- !u!4 &2060423119 Transform: m_ObjectHideFlags: 0 @@ -4118,6 +2859,52 @@ RectTransform: m_AnchoredPosition: {x: 5.076124, y: 0.007500887} m_SizeDelta: {x: 200, y: 150} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2082090384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2082090386} + - component: {fileID: 2082090385} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2082090385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2082090384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &2082090386 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2082090384} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2102841794 GameObject: m_ObjectHideFlags: 0 @@ -4128,7 +2915,6 @@ GameObject: m_Component: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -4136,21 +2922,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 2 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4165,23 +2936,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 2 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.3 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.02 maxDepenetration: 5 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 8 @@ -4237,6 +3042,11 @@ MonoBehaviour: iterations: 10 SORFactor: 1 enabled: 0 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 5 @@ -4295,5 +3105,4 @@ SceneRoots: - {fileID: 153317914} - {fileID: 2021410674} - {fileID: 526830948} - - {fileID: 1395255071} - - {fileID: 1583418125} + - {fileID: 2082090386} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/LightingData.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/LightingData.asset deleted file mode 100644 index ec561d60d..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/LightingData.asset and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/ReflectionProbe-0.exr b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/ReflectionProbe-0.exr deleted file mode 100644 index e70946aca..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWiresSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWiresSettings.lighting deleted file mode 100644 index 2285a9af9..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWiresSettings.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: ElectricalWiresSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 0 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 1 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWiresSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWiresSettings.lighting.meta deleted file mode 100644 index 4a87b3cc1..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWiresSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d42fe942816a7824e9f82cd422af5cff -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose.meta deleted file mode 100644 index d282b6e5f..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 454b2d95716b47b46b961a7080a34689 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose.unity index 5352a4508..76312c327 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose.unity @@ -43,7 +43,7 @@ RenderSettings: LightmapSettings: m_ObjectHideFlags: 0 serializedVersion: 13 - m_BakeOnSceneLoad: 1 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -93,8 +93,8 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: 1fc66f9df7e3f0145aac293dc3b207ce, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: 3b0447bd6f8c45d49a106d8214863a08, type: 2} + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: cfd0a31533ca84d319eb2d45c71f457d, type: 2} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 @@ -119,171 +119,52 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!43 &414585214 -Mesh: +--- !u!1 &415326630 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 1872 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 360 - localAABB: - m_Center: {x: -1.731014, y: 0, z: 0} - m_Extent: {x: 2.731014, y: 0.080000006, z: 0.08000001} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 0 - m_KeepIndices: 0 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b0063006c00640064006c006d0064006d00650065006d006e0065006e00660066006e006f0066006f00670067006f007000670070006800680070007100680071006900690071007200690072006a006a00720073006a0073006b006b00730074006c0075006d006d00750076006d0076006e006e00760077006e0077006f006f00770078006f0078007000700078007900700079007100710079007a0071007a00720072007a007b0072007b00730073007b007c0073007c00740074007c007d0075007e00760076007e007f0076007f00770077007f008000770080007800780080008100780081007900790081008200790082007a007a00820083007a0083007b007b00830084007b0084007c007c00840085007c0085007d007d00850086007e0087007f007f00870088007f0088008000800088008900800089008100810089008a0081008a00820082008a008b0082008b00830083008b008c0083008c00840084008c008d0084008d00850085008d008e0085008e00860086008e008f00870090008800880090009100880091008900890091009200890092008a008a00920093008a0093008b008b00930094008b0094008c008c00940095008c0095008d008d00950096008d0096008e008e00960097008e0097008f008f0097009800900099009100910099009a0091009a00920092009a009b0092009b00930093009b009c0093009c00940094009c009d0094009d00950095009d009e0095009e00960096009e009f0096009f00970097009f00a0009700a00098009800a000a1009900a2009a009a00a200a3009a00a3009b009b00a300a4009b00a4009c009c00a400a5009c00a5009d009d00a500a6009d00a6009e009e00a600a7009e00a7009f009f00a700a8009f00a800a000a000a800a900a000a900a100a100a900aa00a200ab00a300a300ab00ac00a300ac00a400a400ac00ad00a400ad00a500a500ad00ae00a500ae00a600a600ae00af00a600af00a700a700af00b000a700b000a800a800b000b100a800b100a900a900b100b200a900b200aa00aa00b200b300ab00b400ac00ac00b400b500ac00b500ad00ad00b500b600ad00b600ae00ae00b600b700ae00b700af00af00b700b800af00b800b000b000b800b900b000b900b100b100b900ba00b100ba00b200b200ba00bb00b200bb00b300b300bb00bc00b400bd00b500b500bd00be00b500be00b600b600be00bf00b600bf00b700b700bf00c000b700c000b800b800c000c100b800c100b900b900c100c200b900c200ba00ba00c200c300ba00c300bb00bb00c300c400bb00c400bc00bc00c400c500bd00c600be00be00c600c700be00c700bf00bf00c700c800bf00c800c000c000c800c900c000c900c100c100c900ca00c100ca00c200c200ca00cb00c200cb00c300c300cb00cc00c300cc00c400c400cc00cd00c400cd00c500c500cd00ce00c600cf00c700c700cf00d000c700d000c800c800d000d100c800d100c900c900d100d200c900d200ca00ca00d200d300ca00d300cb00cb00d300d400cb00d400cc00cc00d400d500cc00d500cd00cd00d500d600cd00d600ce00ce00d600d700cf00d800d000d000d800d900d000d900d100d100d900da00d100da00d200d200da00db00d200db00d300d300db00dc00d300dc00d400d400dc00dd00d400dd00d500d500dd00de00d500de00d600d600de00df00d600df00d700d700df00e000d800e100d900d900e100e200d900e200da00da00e200e300da00e300db00db00e300e400db00e400dc00dc00e400e500dc00e500dd00dd00e500e600dd00e600de00de00e600e700de00e700df00df00e700e800df00e800e000e000e800e900e100ea00e200e200ea00eb00e200eb00e300e300eb00ec00e300ec00e400e400ec00ed00e400ed00e500e500ed00ee00e500ee00e600e600ee00ef00e600ef00e700e700ef00f000e700f000e800e800f000f100e800f100e900e900f100f200ea00f300eb00eb00f300f400eb00f400ec00ec00f400f500ec00f500ed00ed00f500f600ed00f600ee00ee00f600f700ee00f700ef00ef00f700f800ef00f800f000f000f800f900f000f900f100f100f900fa00f100fa00f200f200fa00fb00f300fc00f400f400fc00fd00f400fd00f500f500fd00fe00f500fe00f600f600fe00ff00f600ff00f700f700ff000001f7000001f800f80000010101f8000101f900f90001010201f9000201fa00fa0002010301fa000301fb00fb0003010401fc000501fd00fd0005010601fd000601fe00fe0006010701fe000701ff00ff0007010801ff0008010001000108010901000109010101010109010a0101010a01020102010a010b0102010b01030103010b010c0103010c01040104010c010d0105010e01060106010e010f0106010f01070107010f011001070110010801080110011101080111010901090111011201090112010a010a01120113010a0113010b010b01130114010b0114010c010c01140115010c0115010d010d01150116010e0117010f010f01170118010f0118011001100118011901100119011101110119011a0111011a01120112011a011b0112011b01130113011b011c0113011c01140114011c011d0114011d01150115011d011e0115011e01160116011e011f01170120011801180120012101180121011901190121012201190122011a011a01220123011a0123011b011b01230124011b0124011c011c01240125011c0125011d011d01250126011d0126011e011e01260127011e0127011f011f0127012801200129012101210129012a0121012a01220122012a012b0122012b01230123012b012c0123012c01240124012c012d0124012d01250125012d012e0125012e01260126012e012f0126012f01270127012f013001270130012801280130013101290132012a012a01320133012a0133012b012b01330134012b0134012c012c01340135012c0135012d012d01350136012d0136012e012e01360137012e0137012f012f01370138012f0138013001300138013901300139013101310139013a0132013b01330133013b013c0133013c01340134013c013d0134013d01350135013d013e0135013e01360136013e013f0136013f01370137013f014001370140013801380140014101380141013901390141014201390142013a013a01420143013b0144013c013c01440145013c0145013d013d01450146013d0146013e013e01460147013e0147013f013f01470148013f0148014001400148014901400149014101410149014a0141014a01420142014a014b0142014b01430143014b014c0144014d01450145014d014e0145014e01460146014e014f0146014f01470147014f015001470150014801480150015101480151014901490151015201490152014a014a01520153014a0153014b014b01530154014b0154014c014c01540155014d0156014e014e01560157014e0157014f014f01570158014f0158015001500158015901500159015101510159015a0151015a01520152015a015b0152015b01530153015b015c0153015c01540154015c015d0154015d01550155015d015e0156015f01570157015f016001570160015801580160016101580161015901590161016201590162015a015a01620163015a0163015b015b01630164015b0164015c015c01640165015c0165015d015d01650166015d0166015e015e0166016701 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 360 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 23040 - _typelessdata: efc88ec00bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000000000000efc88ec06bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e00000000efc88ec0504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e00000000efc88ec06bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e00000000efc88ec00bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f00000000efc88ec069b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f00000000efc88ec08f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f00000000efc88ec070b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f00000000efc88ec00bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f00000000af278bc00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000000f212a3eaf278bc06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e0f212a3eaf278bc04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e0f212a3eaf278bc06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e0f212a3eaf278bc00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f0f212a3eaf278bc067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f0f212a3eaf278bc08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f0f212a3eaf278bc06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f0f212a3eaf278bc00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f0f212a3e27ac86c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000601cbe3e27ac86c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e601cbe3e27ac86c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e601cbe3e27ac86c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e601cbe3e27ac86c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f601cbe3e27ac86c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f601cbe3e27ac86c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f601cbe3e27ac86c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f601cbe3e27ac86c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f601cbe3e4c4782c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000006a8a123f4c4782c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e6a8a123f4c4782c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e6a8a123f4c4782c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e6a8a123f4c4782c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f6a8a123f4c4782c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f6a8a123f4c4782c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f6a8a123f4c4782c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f6a8a123f4c4782c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f6a8a123f9c8f7bc00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000c03e473f9c8f7bc06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ec03e473f9c8f7bc04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ec03e473f9c8f7bc06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03ec03e473f9c8f7bc00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003fc03e473f9c8f7bc067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203fc03e473f9c8f7bc08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403fc03e473f9c8f7bc06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603fc03e473f9c8f7bc00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803fc03e473f064872c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000006e9c7d3f064872c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e6e9c7d3f064872c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e6e9c7d3f064872c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e6e9c7d3f064872c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f6e9c7d3f064872c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f6e9c7d3f064872c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f6e9c7d3f064872c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f6e9c7d3f064872c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f6e9c7d3f968369c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000e17c983f968369c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ee17c983f968369c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ee17c983f968369c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03ee17c983f968369c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003fe17c983f968369c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203fe17c983f968369c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403fe17c983f968369c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603fe17c983f968369c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803fe17c983f935160c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000856cb33f935160c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e856cb33f935160c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e856cb33f935160c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e856cb33f935160c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f856cb33f935160c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f856cb33f935160c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f856cb33f935160c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f856cb33f935160c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f856cb33f697457c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000009e63cd3f697457c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e9e63cd3f697457c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e9e63cd3f697457c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e9e63cd3f697457c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f9e63cd3f697457c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f9e63cd3f697457c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f9e63cd3f697457c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f9e63cd3f697457c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f9e63cd3fb4454ec00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000009449e83fb4454ec06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e9449e83fb4454ec04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e9449e83fb4454ec06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e9449e83fb4454ec00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f9449e83fb4454ec067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f9449e83fb4454ec08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f9449e83fb4454ec06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f9449e83fb4454ec00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f9449e83f8c6645c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000412301408c6645c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e412301408c6645c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e412301408c6645c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e412301408c6645c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f412301408c6645c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f412301408c6645c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f412301408c6645c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f412301408c6645c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f4123014038433cc00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000000092850e4038433cc06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e92850e4038433cc04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e92850e4038433cc06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e92850e4038433cc00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f92850e4038433cc067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f92850e4038433cc08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f92850e4038433cc06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f92850e4038433cc00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f92850e400f5633c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000008c981b400f5633c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e8c981b400f5633c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e8c981b400f5633c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e8c981b400f5633c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f8c981b400f5633c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f8c981b400f5633c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f8c981b400f5633c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f8c981b400f5633c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f8c981b40da492ac00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000ffd82840da492ac06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003effd82840da492ac04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803effd82840da492ac06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03effd82840da492ac00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003fffd82840da492ac067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203fffd82840da492ac08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403fffd82840da492ac06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603fffd82840da492ac00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803fffd82840d84221c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000d5113640d84221c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ed5113640d84221c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ed5113640d84221c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03ed5113640d84221c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003fd5113640d84221c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203fd5113640d84221c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403fd5113640d84221c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603fd5113640d84221c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803fd5113640114518c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000263d4340114518c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e263d4340114518c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e263d4340114518c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e263d4340114518c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f263d4340114518c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f263d4340114518c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f263d4340114518c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f263d4340114518c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f263d434097310fc00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000003f88504097310fc06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e3f88504097310fc04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e3f88504097310fc06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e3f88504097310fc00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f3f88504097310fc067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f3f88504097310fc08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f3f88504097310fc06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f3f88504097310fc00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f3f885040023806c00ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000006bad5d40023806c06ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e6bad5d40023806c04f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e6bad5d40023806c06ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e6bad5d40023806c00ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f6bad5d40023806c067b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f6bad5d40023806c08e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f6bad5d40023806c06fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f6bad5d40023806c00ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f6bad5d405561fabf0ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000bee66a405561fabf6ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ebee66a405561fabf4f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ebee66a405561fabf6ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03ebee66a405561fabf0ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003fbee66a405561fabf67b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203fbee66a405561fabf8e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403fbee66a405561fabf6fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603fbee66a405561fabf0ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803fbee66a40f253e8bf0ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000001e1f7840f253e8bf6ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e1e1f7840f253e8bf4f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e1e1f7840f253e8bf6ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e1e1f7840f253e8bf0ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f1e1f7840f253e8bf67b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f1e1f7840f253e8bf8e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f1e1f7840f253e8bf6fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f1e1f7840f253e8bf0ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f1e1f7840484dd6bf0ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000000049a98240484dd6bf6ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e49a98240484dd6bf4f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e49a98240484dd6bf6ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e49a98240484dd6bf0ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f49a98240484dd6bf67b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f49a98240484dd6bf8e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f49a98240484dd6bf6fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f49a98240484dd6bf0ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f49a982409a48c4bf0ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000494289409a48c4bf6ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e494289409a48c4bf4f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e494289409a48c4bf6ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e494289409a48c4bf0ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f494289409a48c4bf67b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f494289409a48c4bf8e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f494289409a48c4bf6fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f494289409a48c4bf0ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f494289403531b2bf0ad7a33d00000000000000000ad7a33d0000000000000000000000000ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000000023e28f403531b2bf6ab4673d6cb467bd6ab4e7b16ab4673d6cb467bd000000006cb467bd6ab467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e23e28f403531b2bf4f4e70b10bd7a3bd0ad723b24f4e70b10bd7a3bd000000000bd7a3bd4f4e7031000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e23e28f403531b2bf6ab467bd6cb467bd6ab4e7b16ab467bd6cb467bd000000006cb467bd6ab4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e23e28f403531b2bf0ad7a3bd514ef0314f4e70260ad7a3bd514ef03100000080514ef0310ad7a33d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f23e28f403531b2bf67b467bd6eb4673d6cb4e73167b467bd6eb4673d000000806eb4673d67b4673d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f23e28f403531b2bf8e1d83300bd7a33d0ad723328e1d83300bd7a33d000000000bd7a33d8e1d83b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f23e28f403531b2bf6fb4673d67b4673d65b4e7316fb4673d67b4673d0000000067b4673d6fb467bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f23e28f403531b2bf0ad7a33d514e70b24f4ef0a60ad7a33d514e70b200000000514e70b20ad7a3bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f23e28f405035a0bf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000eb7796405035a0bf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003eeb7796405035a0bf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803eeb7796405035a0bf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03eeb7796405035a0bf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003feb7796405035a0bf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203feb7796405035a0bf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403feb7796405035a0bf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603feb7796405035a0bf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803feb7796405b1f8ebf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000003e179d405b1f8ebf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e3e179d405b1f8ebf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e3e179d405b1f8ebf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e3e179d405b1f8ebf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f3e179d405b1f8ebf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f3e179d405b1f8ebf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f3e179d405b1f8ebf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f3e179d405b1f8ebf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f3e179d40e42378bf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000070b3a340e42378bf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e70b3a340e42378bf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e70b3a340e42378bf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e70b3a340e42378bf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f70b3a340e42378bf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f70b3a340e42378bf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f70b3a340e42378bf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f70b3a340e42378bf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f70b3a340244b54bf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000008943aa40244b54bf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e8943aa40244b54bf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e8943aa40244b54bf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e8943aa40244b54bf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f8943aa40244b54bf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f8943aa40244b54bf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f8943aa40244b54bf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f8943aa40244b54bf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f8943aa40c4e12fbf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000001deeb040c4e12fbf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e1deeb040c4e12fbf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e1deeb040c4e12fbf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e1deeb040c4e12fbf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f1deeb040c4e12fbf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f1deeb040c4e12fbf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f1deeb040c4e12fbf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f1deeb040c4e12fbf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f1deeb040fc370cbf0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000009d75b740fc370cbf6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e9d75b740fc370cbf504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e9d75b740fc370cbf6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e9d75b740fc370cbf0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f9d75b740fc370cbf69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f9d75b740fc370cbf8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f9d75b740fc370cbf70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f9d75b740fc370cbf0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f9d75b7408064cfbe0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000006225be408064cfbe6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e6225be408064cfbe504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e6225be408064cfbe6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e6225be408064cfbe0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f6225be408064cfbe69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f6225be408064cfbe8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f6225be408064cfbe70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f6225be408064cfbe0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f6225be4058d087be0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000ccb2c44058d087be6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003eccb2c44058d087be504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803eccb2c44058d087be6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03eccb2c44058d087be0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fccb2c44058d087be69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203fccb2c44058d087be8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403fccb2c44058d087be70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603fccb2c44058d087be0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fccb2c440a063fcbd0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000e05acb40a163fcbd6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003ee05acb40a163fcbd504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803ee05acb40a163fcbd6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03ee05acb40a063fcbd0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fe05acb409f63fcbd69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203fe05acb409f63fcbd8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403fe05acb409f63fcbd70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603fe05acb40a063fcbd0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fe05acb4080298a3c0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000e4ebd1407c298a3c6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003ee4ebd1407b298a3c504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803ee4ebd1407c298a3c6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03ee4ebd14080298a3c0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fe4ebd14084298a3c69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203fe4ebd14085298a3c8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403fe4ebd14084298a3c70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603fe4ebd14080298a3c0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fe4ebd14080bb223e0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000004f94d84080bb223e6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e4f94d8407fbb223e504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e4f94d84080bb223e6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e4f94d84080bb223e0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f4f94d84080bb223e69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f4f94d84081bb223e8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f4f94d84080bb223e70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f4f94d84080bb223e0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f4f94d840f895983e0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000004e19df40f895983e6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e4e19df40f895983e504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e4e19df40f895983e6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e4e19df40f895983e0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f4e19df40f895983e69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f4e19df40f895983e8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f4e19df40f895983e70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f4e19df40f895983e0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f4e19df40f815e23e0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000bed3e540f815e23e6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003ebed3e540f815e23e504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803ebed3e540f815e23e6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03ebed3e540f815e23e0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fbed3e540f815e23e69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203fbed3e540f815e23e8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403fbed3e540f815e23e70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603fbed3e540f815e23e0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fbed3e540e088143f0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f000000003553ec40e088143f6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e3553ec40e088143f504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e3553ec40e088143f6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e3553ec40e088143f0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f3553ec40e088143f69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f3553ec40e088143f8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f3553ec40e088143f70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f3553ec40e088143f0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f3553ec408068383f0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f0000000091e4f2408068383f6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e91e4f2408068383f504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e91e4f2408068383f6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e91e4f2408068383f0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f91e4f2408068383f69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f91e4f2408068383f8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f91e4f2408068383f70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f91e4f2408068383f0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f91e4f240a0995c3f0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000d984f940a0995c3f6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003ed984f940a0995c3f504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803ed984f940a0995c3f6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03ed984f940a0995c3f0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003fd984f940a0995c3f69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203fd984f940a0995c3f8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403fd984f940a0995c3f70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603fd984f940a0995c3f0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803fd984f9400000803f0bd7a33d00000000000000000bd7a33d0000000000000000000000000bd7a3bd000080bf0000803f0000803f0000803f0000803f00000000010000410000803f6bb4673d6db467bd6bb4e7b16bb4673d6db467bd000000006db467bd6bb467bd000080bf0000803f0000803f0000803f0000803f0000003e010000410000803f504e70b10cd7a3bd0bd723b2504e70b10cd7a3bd000000000cd7a3bd504e7031000080bf0000803f0000803f0000803f0000803f0000803e010000410000803f6bb467bd6db467bd6bb4e7b16bb467bd6db467bd000000006db467bd6bb4673d000080bf0000803f0000803f0000803f0000803f0000c03e010000410000803f0bd7a3bd524ef031504e70260bd7a3bd524ef03100000080524ef0310bd7a33d000080bf0000803f0000803f0000803f0000803f0000003f010000410000803f69b467bd70b4673d6eb4e73169b467bd70b4673d0000008070b4673d69b4673d000080bf0000803f0000803f0000803f0000803f0000203f010000410000803f8f1d83300cd7a33d0bd723328f1d83300cd7a33d000000000cd7a33d8f1d83b0000080bf0000803f0000803f0000803f0000803f0000403f010000410000803f70b4673d68b4673d66b4e73170b4673d68b4673d0000000068b4673d70b467bd000080bf0000803f0000803f0000803f0000803f0000603f010000410000803f0bd7a33d524e70b2504ef0a60bd7a33d524e70b200000000524e70b20bd7a3bd000080bf0000803f0000803f0000803f0000803f0000803f01000041 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: -1.731014, y: 0, z: 0} - m_Extent: {x: 2.731014, y: 0.080000006, z: 0.08000001} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: + serializedVersion: 6 + m_Component: + - component: {fileID: 415326632} + - component: {fileID: 415326631} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &415326631 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 415326630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &415326632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 415326630} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &421764872 PrefabInstance: m_ObjectHideFlags: 0 @@ -379,6 +260,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: 56297c6e785b44eb28e469b62cedc016, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -485,52 +367,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} ---- !u!1 &931329520 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 931329522} - - component: {fileID: 931329521} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &931329521 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 931329520} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: - cellSpans: - m_AlignBytes: 16 ---- !u!4 &931329522 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 931329520} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1002464891 GameObject: m_ObjectHideFlags: 0 @@ -543,7 +379,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -633,26 +468,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1145597567 GameObject: m_ObjectHideFlags: 0 @@ -795,6 +610,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -816,6 +633,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -856,6 +674,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1165207594} @@ -870,7 +689,6 @@ GameObject: m_Component: - component: {fileID: 1175446146} - component: {fileID: 1175446145} - - component: {fileID: 1175446147} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -958,29 +776,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!114 &1175446147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 3 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 --- !u!1 &1346965641 GameObject: m_ObjectHideFlags: 0 @@ -990,14 +785,13 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1346965650} - - component: {fileID: 1346965645} - - component: {fileID: 1346965644} - component: {fileID: 1346965642} - component: {fileID: 1346965646} - component: {fileID: 1346965643} - component: {fileID: 1346965647} - component: {fileID: 1346965649} - component: {fileID: 1346965648} + - component: {fileID: 1346965651} m_Layer: 10 m_Name: Obi Rope m_TagString: Untagged @@ -1017,9 +811,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 1 restLength_: 5.4620275 elements: @@ -1218,6 +1016,9 @@ MonoBehaviour: restLength: 0.13828081 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} tearingEnabled: 1 tearResistanceMultiplier: 450 @@ -1243,64 +1044,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: f342c944c10cc4c9188a4f352c6a6eee, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 8} normalizeV: 1 section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} thicknessScale: 0.8 ---- !u!23 &1346965644 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: f342c944c10cc4c9188a4f352c6a6eee, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1346965645 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Mesh: {fileID: 414585214} --- !u!114 &1346965646 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1316,6 +1073,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 0 --- !u!114 &1346965647 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1338,7 +1096,7 @@ MonoBehaviour: flowSpeedMax: 7 minEmitRate: 50 maxEmitRate: 1000 - smoother: {fileID: 0} + smoother: {fileID: 1346965646} --- !u!114 &1346965648 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1356,8 +1114,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 5505919189061892379, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965649 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1375,8 +1134,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2867197770825267649, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!4 &1346965650 Transform: m_ObjectHideFlags: 0 @@ -1392,6 +1152,29 @@ Transform: m_Children: [] m_Father: {fileID: 2102841797} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1346965651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 1679a1802f2014f3ebb22f30f3a94662, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + k__BackingField: {r: 1, g: 1, b: 1, a: 1} + k__BackingField: 1 --- !u!1 &1396980384 GameObject: m_ObjectHideFlags: 0 @@ -1431,6 +1214,8 @@ ParticleSystemRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1452,6 +1237,7 @@ ParticleSystemRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -6237,50 +6023,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2021410671 GameObject: m_ObjectHideFlags: 0 @@ -6359,7 +6101,6 @@ GameObject: m_Component: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - - component: {fileID: 2102841795} - component: {fileID: 2102841800} - component: {fileID: 2102841799} - component: {fileID: 2102841798} @@ -6370,21 +6111,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 8 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -6399,23 +6125,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.3 maxAnisotropy: 3 sleepThreshold: 0.0001 + maxVelocity: 50 + maxAngularVelocity: 20 collisionMargin: 0.02 maxDepenetration: 5 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 2 @@ -6471,6 +6231,11 @@ MonoBehaviour: iterations: 10 SORFactor: 1 enabled: 0 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 5 @@ -6574,6 +6339,8 @@ LineRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -6595,6 +6362,7 @@ LineRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -6672,5 +6440,4 @@ SceneRoots: - {fileID: 526830948} - {fileID: 1165207597} - {fileID: 1396980388} - - {fileID: 931329522} - - {fileID: 1583418125} + - {fileID: 415326632} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/LightingData.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/LightingData.asset deleted file mode 100644 index 64d7dddd8..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/LightingData.asset and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/LightingData.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/LightingData.asset.meta deleted file mode 100644 index dc42cae2c..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/LightingData.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1fc66f9df7e3f0145aac293dc3b207ce -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 112000000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/ReflectionProbe-0.exr b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/ReflectionProbe-0.exr deleted file mode 100644 index e70946aca..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/ReflectionProbe-0.exr.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/ReflectionProbe-0.exr.meta deleted file mode 100644 index 349341856..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Firehose/ReflectionProbe-0.exr.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: 53d94337ade72c04ebcd116bc3bd9693 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 0 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 2 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 100 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FirehoseSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FirehoseSettings.lighting index 5fb083292..8fa4b3911 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FirehoseSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FirehoseSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: FirehoseSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_RealtimeEnvironmentLighting: 1 @@ -16,11 +15,13 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 0 - m_BakeBackend: 0 + m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -31,23 +32,21 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 + m_PVREnvironmentImportanceSampling: 0 m_PVRFilteringMode: 2 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta index d0989544b..30d387eac 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3b0447bd6f8c45d49a106d8214863a08 +guid: cfd0a31533ca84d319eb2d45c71f457d NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift.meta deleted file mode 100644 index d2ba9c4cf..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9b058bff2cfd0504ab3ae034f13c2e3d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift.unity index e9ba80855..09cd29fe5 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift.unity @@ -93,8 +93,8 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: 87e15c672d0777e4bacfa03a51721919, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: 3a41f428dbea16c409e5b47129a697d1, type: 2} + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 1093393307} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 @@ -163,10 +163,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 99547752} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -203,6 +203,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -224,6 +226,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -283,6 +286,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 99547756} @@ -329,6 +333,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -350,6 +356,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -405,10 +412,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 254982891} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 4 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -451,6 +458,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 254982893} @@ -550,6 +558,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -598,10 +607,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 522272186} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -638,6 +647,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -659,6 +670,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -718,6 +730,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 522272190} @@ -731,8 +744,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 597266341} - - component: {fileID: 597266352} - - component: {fileID: 597266351} - component: {fileID: 597266344} - component: {fileID: 597266343} - component: {fileID: 597266342} @@ -747,25 +758,21 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &597266341 -RectTransform: +--- !u!4 &597266341 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 597266340} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalPosition: {x: -1, y: -1.1199999, z: -1} m_LocalScale: {x: 1.0000005, y: 1.0000005, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1007350293} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -1, y: -1.1199999} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &597266342 MonoBehaviour: m_ObjectHideFlags: 0 @@ -778,6 +785,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 0 @@ -798,6 +814,7 @@ MonoBehaviour: decimation: 0.02 smoothing: 0 twist: 0 + indexInSystem: 0 --- !u!114 &597266344 MonoBehaviour: m_ObjectHideFlags: 0 @@ -810,11 +827,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 1 - restLength_: 2 + restLength_: 2.000002 elements: - particle1: 0 particle2: 1 @@ -823,84 +844,87 @@ MonoBehaviour: tearResistance: 1 - particle1: 1 particle2: 2 - restLength: 0.11669767 + restLength: 0.11680669 constraintForce: 0 tearResistance: 1 - particle1: 2 particle2: 3 - restLength: 0.11849612 + restLength: 0.11829093 constraintForce: 0 tearResistance: 1 - particle1: 3 particle2: 4 - restLength: 0.11731398 + restLength: 0.117395446 constraintForce: 0 tearResistance: 1 - particle1: 4 particle2: 5 - restLength: 0.117768645 + restLength: 0.11783301 constraintForce: 0 tearResistance: 1 - particle1: 5 particle2: 6 - restLength: 0.11787382 + restLength: 0.11791115 constraintForce: 0 tearResistance: 1 - particle1: 6 particle2: 7 - restLength: 0.1178714 + restLength: 0.1178735 constraintForce: 0 tearResistance: 1 - particle1: 7 particle2: 8 - restLength: 0.11784513 + restLength: 0.117807046 constraintForce: 0 tearResistance: 1 - particle1: 8 particle2: 9 - restLength: 0.11781409 + restLength: 0.11774122 constraintForce: 0 tearResistance: 1 - particle1: 9 particle2: 10 - restLength: 0.117773324 + restLength: 0.11778654 constraintForce: 0 tearResistance: 1 - particle1: 10 particle2: 11 - restLength: 0.11769721 + restLength: 0.117860526 constraintForce: 0 tearResistance: 1 - particle1: 11 particle2: 12 - restLength: 0.117714405 + restLength: 0.11791558 constraintForce: 0 tearResistance: 1 - particle1: 12 particle2: 13 - restLength: 0.11811137 + restLength: 0.11788291 constraintForce: 0 tearResistance: 1 - particle1: 13 particle2: 14 - restLength: 0.11810517 + restLength: 0.11756081 constraintForce: 0 tearResistance: 1 - particle1: 14 particle2: 15 - restLength: 0.11729765 + restLength: 0.11787611 constraintForce: 0 tearResistance: 1 - particle1: 15 particle2: 16 - restLength: 0.11854333 + restLength: 0.11770154 constraintForce: 0 tearResistance: 1 - particle1: 16 particle2: 17 - restLength: 0.11637664 + restLength: 0.11705878 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -927,12 +951,13 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Actor: {fileID: 597266344} - m_Target: {fileID: 0} + m_Target: {fileID: 597266341} m_ParticleGroup: {fileID: 1119723573710947368, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &597266346 MonoBehaviour: m_ObjectHideFlags: 0 @@ -950,8 +975,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1023878380947534591, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &597266347 MonoBehaviour: m_ObjectHideFlags: 0 @@ -981,554 +1007,6 @@ MonoBehaviour: m_CursorMu: 0.95 m_SourceMu: 0.95 direction: 0 ---- !u!23 &597266351 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597266340} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &597266352 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 597266340} - m_Mesh: {fileID: 721798600} ---- !u!43 &650475911 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 48 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 18 - localAABB: - m_Center: {x: -0.00000011920929, y: -0.000000044703484, z: 0} - m_Extent: {x: 1.0000002, y: 0.040000003, z: 0.040000007} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 18 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 1152 - _typelessdata: 030080bfffd6233d07d7a33107d7a3310bd7233d07d7a33101d7232607d7a3310bd723bd000080bf0000803f0000803f0000803f0000803f0000000000000000030080bf55b4e73c6bb4e7bc50c7ada66db4e73c6bb4e7bc63b467b16bb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e00000000030080bfba9635b30cd723bd0bd7a3b1e6864f310cd723bd06d7a3b10cd723bde3864fb1000080bf0000803f0000803f0000803f0000803f0000803e00000000030080bf82b4e7bc6fb4e7bc69b4e7b16ab4e7bc6fb4e7bc67b467b16fb4e7bc6ab4e73c000080bf0000803f0000803f0000803f0000803f0000c03e00000000030080bf17d723bd78bfaeb006d7a3b10bd723bd78bfaeb072bf2ea578bfaeb00bd7233d000080bf0000803f0000803f0000803f0000803f0000003f00000000030080bf83b4e7bc6eb4e73c2dcf28276bb4e7bc6eb4e73c66b467316eb4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f00000000030080bf93fd54b30cd7233d0bd7a331557393b10cd7233d06d7a3310cd7233d54739331000080bf0000803f0000803f0000803f0000803f0000403f00000000030080bf57b4e73c6ab4e73c69b4e7316fb4e73c6ab4e73c62b467316ab4e73c6fb4e7bc000080bf0000803f0000803f0000803f0000803f0000603f00000000030080bfffd6233d96ee18b105d7a3310bd7233d96ee18b191ee98a596ee18b10bd723bd000080bf0000803f0000803f0000803f0000803f0000803f000000000100803fffd6233d07d7a33107d7a3310bd7233d07d7a3310ad7232607d7a3310bd723bd000080bf0000803f0000803f0000803f0000803f000000000000c0400100803f55b4e73c6bb4e7bc50c7ada66db4e73c6bb4e7bc6fb467b16bb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e0000c0400100803fd69635b30cd723bd0bd7a3b1e6864f310cd723bd0fd7a3b10cd723bde3864fb1000080bf0000803f0000803f0000803f0000803f0000803e0000c0400100803f82b4e7bc6fb4e7bc69b4e7b16ab4e7bc6fb4e7bc73b467b16fb4e7bc6ab4e73c000080bf0000803f0000803f0000803f0000803f0000c03e0000c0400100803f17d723bd78bfaeb006d7a3b10bd723bd78bfaeb07bbf2ea578bfaeb00bd7233d000080bf0000803f0000803f0000803f0000803f0000003f0000c0400100803f83b4e7bc6eb4e73c2dcf28276bb4e7bc6eb4e73c72b467316eb4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f0000c0400100803faffd54b30cd7233d0bd7a331557393b10cd7233d0fd7a3310cd7233d54739331000080bf0000803f0000803f0000803f0000803f0000403f0000c0400100803f57b4e73c6ab4e73c69b4e7316fb4e73c6ab4e73c6eb467316ab4e73c6fb4e7bc000080bf0000803f0000803f0000803f0000803f0000603f0000c0400100803fffd6233d96ee18b105d7a3310bd7233d96ee18b198ee98a596ee18b10bd723bd000080bf0000803f0000803f0000803f0000803f0000803f0000c040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: -0.00000011920929, y: -0.000000044703484, z: 0} - m_Extent: {x: 1.0000002, y: 0.040000003, z: 0.040000007} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: ---- !u!43 &721798600 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 48 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 18 - localAABB: - m_Center: {x: -0.00000011920929, y: 0.000000014901161, z: 0} - m_Extent: {x: 1.0000002, y: 0.040000003, z: 0.040000007} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 18 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 1152 - _typelessdata: 030080bf0fd7233d08d7a33108d7a3310bd7233d08d7a33104d7232608d7a3310bd723bd000080bf0000803f0000803f0000803f0000803f0000000000000000030080bf75b4e73c6bb4e7bcc3d090a66db4e73c6bb4e7bc65b467b16bb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e00000000030080bf8dd294320cd723bd0bd7a3b1e7864f310cd723bd08d7a3b10cd723bde4864fb1000080bf0000803f0000803f0000803f0000803f0000803e00000000030080bf62b4e7bc6fb4e7bc69b4e7b16ab4e7bc6fb4e7bc69b467b16fb4e7bc6ab4e73c000080bf0000803f0000803f0000803f0000803f0000c03e00000000030080bf07d723bd7abfaeb007d7a3b10bd723bd7abfaeb075bf2ea57abfaeb00bd7233d000080bf0000803f0000803f0000803f0000803f0000003f00000000030080bf63b4e7bc6eb4e73ce6531a276bb4e7bc6eb4e73c68b467316eb4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f00000000030080bfb6092c320cd7233d0bd7a331567393b10cd7233d08d7a3310cd7233d55739331000080bf0000803f0000803f0000803f0000803f0000403f00000000030080bf77b4e73c6ab4e73c69b4e7316fb4e73c6ab4e73c64b467316ab4e73c6fb4e7bc000080bf0000803f0000803f0000803f0000803f0000603f00000000030080bf0fd7233d95ee18b106d7a3310bd7233d95ee18b191ee98a595ee18b10bd723bd000080bf0000803f0000803f0000803f0000803f0000803f000000000100803f0fd7233d08d7a33108d7a3310bd7233d08d7a33109d7232608d7a3310bd723bd000080bf0000803f0000803f0000803f0000803f000000000000c0400100803f75b4e73c6bb4e7bcc3d090a66db4e73c6bb4e7bc6db467b16bb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e0000c0400100803f55d294320cd723bd0bd7a3b1e7864f310cd723bd0dd7a3b10cd723bde4864fb1000080bf0000803f0000803f0000803f0000803f0000803e0000c0400100803f62b4e7bc6fb4e7bc69b4e7b16ab4e7bc6fb4e7bc71b467b16fb4e7bc6ab4e73c000080bf0000803f0000803f0000803f0000803f0000c03e0000c0400100803f07d723bd7abfaeb007d7a3b10bd723bd7abfaeb07bbf2ea57abfaeb00bd7233d000080bf0000803f0000803f0000803f0000803f0000003f0000c0400100803f63b4e7bc6eb4e73ce6531a276bb4e7bc6eb4e73c70b467316eb4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f0000c0400100803f46092c320cd7233d0bd7a331567393b10cd7233d0dd7a3310cd7233d55739331000080bf0000803f0000803f0000803f0000803f0000403f0000c0400100803f77b4e73c6ab4e73c69b4e7316fb4e73c6ab4e73c6cb467316ab4e73c6fb4e7bc000080bf0000803f0000803f0000803f0000803f0000603f0000c0400100803f0fd7233d95ee18b106d7a3310bd7233d95ee18b196ee98a595ee18b10bd723bd000080bf0000803f0000803f0000803f0000803f0000803f0000c040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: -0.00000011920929, y: 0.000000014901161, z: 0} - m_Extent: {x: 1.0000002, y: 0.040000003, z: 0.040000007} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: ---- !u!43 &725410293 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 48 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 18 - localAABB: - m_Center: {x: -0.00000011920929, y: -0.000000044703484, z: 0} - m_Extent: {x: 1.0000002, y: 0.040000003, z: 0.040000007} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 18 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 1152 - _typelessdata: 030080bfffd6233d07d7a33107d7a3310bd7233d07d7a33101d7232607d7a3310bd723bd000080bf0000803f0000803f0000803f0000803f0000000000000000030080bf55b4e73c6bb4e7bc50c7ada66db4e73c6bb4e7bc63b467b16bb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e00000000030080bfba9635b30cd723bd0bd7a3b1e6864f310cd723bd06d7a3b10cd723bde3864fb1000080bf0000803f0000803f0000803f0000803f0000803e00000000030080bf82b4e7bc6fb4e7bc69b4e7b16ab4e7bc6fb4e7bc67b467b16fb4e7bc6ab4e73c000080bf0000803f0000803f0000803f0000803f0000c03e00000000030080bf17d723bd78bfaeb006d7a3b10bd723bd78bfaeb072bf2ea578bfaeb00bd7233d000080bf0000803f0000803f0000803f0000803f0000003f00000000030080bf83b4e7bc6eb4e73c2dcf28276bb4e7bc6eb4e73c66b467316eb4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f00000000030080bf93fd54b30cd7233d0bd7a331557393b10cd7233d06d7a3310cd7233d54739331000080bf0000803f0000803f0000803f0000803f0000403f00000000030080bf57b4e73c6ab4e73c69b4e7316fb4e73c6ab4e73c62b467316ab4e73c6fb4e7bc000080bf0000803f0000803f0000803f0000803f0000603f00000000030080bfffd6233d96ee18b105d7a3310bd7233d96ee18b191ee98a596ee18b10bd723bd000080bf0000803f0000803f0000803f0000803f0000803f000000000100803fffd6233d07d7a33107d7a3310bd7233d07d7a3310ad7232607d7a3310bd723bd000080bf0000803f0000803f0000803f0000803f000000000000c0400100803f55b4e73c6bb4e7bc50c7ada66db4e73c6bb4e7bc6fb467b16bb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e0000c0400100803fd69635b30cd723bd0bd7a3b1e6864f310cd723bd0fd7a3b10cd723bde3864fb1000080bf0000803f0000803f0000803f0000803f0000803e0000c0400100803f82b4e7bc6fb4e7bc69b4e7b16ab4e7bc6fb4e7bc73b467b16fb4e7bc6ab4e73c000080bf0000803f0000803f0000803f0000803f0000c03e0000c0400100803f17d723bd78bfaeb006d7a3b10bd723bd78bfaeb07bbf2ea578bfaeb00bd7233d000080bf0000803f0000803f0000803f0000803f0000003f0000c0400100803f83b4e7bc6eb4e73c2dcf28276bb4e7bc6eb4e73c72b467316eb4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f0000c0400100803faffd54b30cd7233d0bd7a331557393b10cd7233d0fd7a3310cd7233d54739331000080bf0000803f0000803f0000803f0000803f0000403f0000c0400100803f57b4e73c6ab4e73c69b4e7316fb4e73c6ab4e73c6eb467316ab4e73c6fb4e7bc000080bf0000803f0000803f0000803f0000803f0000603f0000c0400100803fffd6233d96ee18b105d7a3310bd7233d96ee18b198ee98a596ee18b10bd723bd000080bf0000803f0000803f0000803f0000803f0000803f0000c040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: -0.00000011920929, y: -0.000000044703484, z: 0} - m_Extent: {x: 1.0000002, y: 0.040000003, z: 0.040000007} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &849349590 GameObject: m_ObjectHideFlags: 0 @@ -1665,6 +1143,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1686,6 +1166,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1726,10 +1207,10 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 865561429} - serializedVersion: 4 + serializedVersion: 5 m_Mass: 0.5 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} m_InertiaTensor: {x: 1, y: 1, z: 1} m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} @@ -1772,6 +1253,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 865561432} @@ -1887,8 +1369,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 977238587} - - component: {fileID: 977238598} - - component: {fileID: 977238597} - component: {fileID: 977238590} - component: {fileID: 977238589} - component: {fileID: 977238588} @@ -1904,25 +1384,21 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &977238587 -RectTransform: +--- !u!4 &977238587 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 977238586} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalPosition: {x: -1, y: -1.1199999, z: 1} m_LocalScale: {x: 1.0000005, y: 1.0000005, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1007350293} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -1, y: -1.1199999} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &977238588 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1935,6 +1411,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 0 @@ -1955,6 +1440,7 @@ MonoBehaviour: decimation: 0.02 smoothing: 0 twist: 0 + indexInSystem: 1 --- !u!114 &977238590 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1967,11 +1453,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000 + solverIndices: + serializedContents: 760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000 + m_AlignBytes: 16 + groupID: 2 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 1 - restLength_: 2 + restLength_: 2.000002 elements: - particle1: 118 particle2: 119 @@ -1980,84 +1470,87 @@ MonoBehaviour: tearResistance: 1 - particle1: 119 particle2: 120 - restLength: 0.11669767 + restLength: 0.11680669 constraintForce: 0 tearResistance: 1 - particle1: 120 particle2: 121 - restLength: 0.11849612 + restLength: 0.11829093 constraintForce: 0 tearResistance: 1 - particle1: 121 particle2: 122 - restLength: 0.11731398 + restLength: 0.117395446 constraintForce: 0 tearResistance: 1 - particle1: 122 particle2: 123 - restLength: 0.117768645 + restLength: 0.11783301 constraintForce: 0 tearResistance: 1 - particle1: 123 particle2: 124 - restLength: 0.11787382 + restLength: 0.11791115 constraintForce: 0 tearResistance: 1 - particle1: 124 particle2: 125 - restLength: 0.1178714 + restLength: 0.1178735 constraintForce: 0 tearResistance: 1 - particle1: 125 particle2: 126 - restLength: 0.11784513 + restLength: 0.117807046 constraintForce: 0 tearResistance: 1 - particle1: 126 particle2: 127 - restLength: 0.11781409 + restLength: 0.11774122 constraintForce: 0 tearResistance: 1 - particle1: 127 particle2: 128 - restLength: 0.117773324 + restLength: 0.11778654 constraintForce: 0 tearResistance: 1 - particle1: 128 particle2: 129 - restLength: 0.11769721 + restLength: 0.117860526 constraintForce: 0 tearResistance: 1 - particle1: 129 particle2: 130 - restLength: 0.117714405 + restLength: 0.11791558 constraintForce: 0 tearResistance: 1 - particle1: 130 particle2: 131 - restLength: 0.11811137 + restLength: 0.11788291 constraintForce: 0 tearResistance: 1 - particle1: 131 particle2: 132 - restLength: 0.11810517 + restLength: 0.11756081 constraintForce: 0 tearResistance: 1 - particle1: 132 particle2: 133 - restLength: 0.11729765 + restLength: 0.11787611 constraintForce: 0 tearResistance: 1 - particle1: 133 particle2: 134 - restLength: 0.11854333 + restLength: 0.11770154 constraintForce: 0 tearResistance: 1 - particle1: 134 particle2: 135 - restLength: 0.11637664 + restLength: 0.11705878 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -2084,12 +1577,13 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Actor: {fileID: 977238590} - m_Target: {fileID: 0} + m_Target: {fileID: 977238587} m_ParticleGroup: {fileID: 1119723573710947368, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &977238592 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2107,8 +1601,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1023878380947534591, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &977238593 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2150,63 +1645,17 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} m_Name: m_EditorClassIdentifier: - render: 1 - shader: {fileID: 4800000, guid: 801733041f66b49e1b3c2101471db877, type: 3} - particleColor: {r: 1, g: 1, b: 1, a: 1} - radiusScale: 1 ---- !u!23 &977238597 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 977238586} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &977238598 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 977238586} - m_Mesh: {fileID: 1707850825} + material: {fileID: 0} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + k__BackingField: {r: 1, g: 1, b: 1, a: 1} + k__BackingField: 1 --- !u!1 &1002464891 GameObject: m_ObjectHideFlags: 0 @@ -2219,7 +1668,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -2309,26 +1757,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1007350292 GameObject: m_ObjectHideFlags: 0 @@ -2364,6 +1792,67 @@ Transform: - {fileID: 977238587} m_Father: {fileID: 2102841797} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!850595691 &1093393307 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &1175446144 GameObject: m_ObjectHideFlags: 0 @@ -2374,7 +1863,6 @@ GameObject: m_Component: - component: {fileID: 1175446146} - component: {fileID: 1175446145} - - component: {fileID: 1175446147} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -2462,29 +1950,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!114 &1175446147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 3 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 --- !u!1 &1398407819 GameObject: m_ObjectHideFlags: 0 @@ -2494,8 +1959,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1398407820} - - component: {fileID: 1398407831} - - component: {fileID: 1398407830} - component: {fileID: 1398407823} - component: {fileID: 1398407822} - component: {fileID: 1398407821} @@ -2511,25 +1974,21 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1398407820 -RectTransform: +--- !u!4 &1398407820 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1398407819} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalPosition: {x: 1, y: -1.1199999, z: 1} m_LocalScale: {x: 1.0000005, y: 1.0000005, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1007350293} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 1, y: -1.1199999} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1398407821 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2542,6 +2001,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 0 @@ -2562,6 +2030,7 @@ MonoBehaviour: decimation: 0.02 smoothing: 0 twist: 0 + indexInSystem: 2 --- !u!114 &1398407823 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2574,11 +2043,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f0100006001000061010000 + solverIndices: + serializedContents: ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f0100006001000061010000 + m_AlignBytes: 16 + groupID: 3 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 1 - restLength_: 2 + restLength_: 2.000002 elements: - particle1: 236 particle2: 237 @@ -2587,84 +2060,87 @@ MonoBehaviour: tearResistance: 1 - particle1: 237 particle2: 238 - restLength: 0.11669767 + restLength: 0.11680669 constraintForce: 0 tearResistance: 1 - particle1: 238 particle2: 239 - restLength: 0.11849612 + restLength: 0.11829093 constraintForce: 0 tearResistance: 1 - particle1: 239 particle2: 240 - restLength: 0.11731398 + restLength: 0.117395446 constraintForce: 0 tearResistance: 1 - particle1: 240 particle2: 241 - restLength: 0.117768645 + restLength: 0.11783301 constraintForce: 0 tearResistance: 1 - particle1: 241 particle2: 242 - restLength: 0.11787382 + restLength: 0.11791115 constraintForce: 0 tearResistance: 1 - particle1: 242 particle2: 243 - restLength: 0.1178714 + restLength: 0.1178735 constraintForce: 0 tearResistance: 1 - particle1: 243 particle2: 244 - restLength: 0.11784513 + restLength: 0.117807046 constraintForce: 0 tearResistance: 1 - particle1: 244 particle2: 245 - restLength: 0.11781409 + restLength: 0.11774122 constraintForce: 0 tearResistance: 1 - particle1: 245 particle2: 246 - restLength: 0.117773324 + restLength: 0.11778654 constraintForce: 0 tearResistance: 1 - particle1: 246 particle2: 247 - restLength: 0.11769721 + restLength: 0.117860526 constraintForce: 0 tearResistance: 1 - particle1: 247 particle2: 248 - restLength: 0.117714405 + restLength: 0.11791558 constraintForce: 0 tearResistance: 1 - particle1: 248 particle2: 249 - restLength: 0.11811137 + restLength: 0.11788291 constraintForce: 0 tearResistance: 1 - particle1: 249 particle2: 250 - restLength: 0.11810517 + restLength: 0.11756081 constraintForce: 0 tearResistance: 1 - particle1: 250 particle2: 251 - restLength: 0.11729765 + restLength: 0.11787611 constraintForce: 0 tearResistance: 1 - particle1: 251 particle2: 252 - restLength: 0.11854333 + restLength: 0.11770154 constraintForce: 0 tearResistance: 1 - particle1: 252 particle2: 253 - restLength: 0.11637664 + restLength: 0.11705878 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -2691,12 +2167,13 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Actor: {fileID: 1398407823} - m_Target: {fileID: 0} + m_Target: {fileID: 1398407820} m_ParticleGroup: {fileID: 1119723573710947368, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1398407825 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2714,8 +2191,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1023878380947534591, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1398407826 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2757,64 +2235,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} m_Name: m_EditorClassIdentifier: - render: 1 - shader: {fileID: 4800000, guid: 801733041f66b49e1b3c2101471db877, type: 3} - particleColor: {r: 1, g: 1, b: 1, a: 1} - radiusScale: 1 ---- !u!23 &1398407830 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1398407819} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1398407831 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1398407819} - m_Mesh: {fileID: 725410293} ---- !u!1 &1583418123 + material: {fileID: 0} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + k__BackingField: {r: 1, g: 1, b: 1, a: 1} + k__BackingField: 1 +--- !u!1 &1834593282 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2822,52 +2254,8 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1621829079 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1621829081} - - component: {fileID: 1621829080} + - component: {fileID: 1834593284} + - component: {fileID: 1834593283} m_Layer: 0 m_Name: BurstCollisionWorld m_TagString: Untagged @@ -2875,13 +2263,13 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1621829080 +--- !u!114 &1834593283 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1621829079} + m_GameObject: {fileID: 1834593282} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} @@ -2889,13 +2277,13 @@ MonoBehaviour: m_EditorClassIdentifier: cellSpans: m_AlignBytes: 16 ---- !u!4 &1621829081 +--- !u!4 &1834593284 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1621829079} + m_GameObject: {fileID: 1834593282} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2904,171 +2292,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!43 &1707850825 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 48 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 18 - localAABB: - m_Center: {x: -0.00000011920929, y: 0.000000014901161, z: 0} - m_Extent: {x: 1.0000002, y: 0.040000003, z: 0.040000007} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 18 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 1152 - _typelessdata: 030080bf0fd7233d08d7a33108d7a3310bd7233d08d7a33104d7232608d7a3310bd723bd000080bf0000803f0000803f0000803f0000803f0000000000000000030080bf75b4e73c6bb4e7bcc3d090a66db4e73c6bb4e7bc65b467b16bb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e00000000030080bf8dd294320cd723bd0bd7a3b1e7864f310cd723bd08d7a3b10cd723bde4864fb1000080bf0000803f0000803f0000803f0000803f0000803e00000000030080bf62b4e7bc6fb4e7bc69b4e7b16ab4e7bc6fb4e7bc69b467b16fb4e7bc6ab4e73c000080bf0000803f0000803f0000803f0000803f0000c03e00000000030080bf07d723bd7abfaeb007d7a3b10bd723bd7abfaeb075bf2ea57abfaeb00bd7233d000080bf0000803f0000803f0000803f0000803f0000003f00000000030080bf63b4e7bc6eb4e73ce6531a276bb4e7bc6eb4e73c68b467316eb4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f00000000030080bfb6092c320cd7233d0bd7a331567393b10cd7233d08d7a3310cd7233d55739331000080bf0000803f0000803f0000803f0000803f0000403f00000000030080bf77b4e73c6ab4e73c69b4e7316fb4e73c6ab4e73c64b467316ab4e73c6fb4e7bc000080bf0000803f0000803f0000803f0000803f0000603f00000000030080bf0fd7233d95ee18b106d7a3310bd7233d95ee18b191ee98a595ee18b10bd723bd000080bf0000803f0000803f0000803f0000803f0000803f000000000100803f0fd7233d08d7a33108d7a3310bd7233d08d7a33109d7232608d7a3310bd723bd000080bf0000803f0000803f0000803f0000803f000000000000c0400100803f75b4e73c6bb4e7bcc3d090a66db4e73c6bb4e7bc6db467b16bb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e0000c0400100803f55d294320cd723bd0bd7a3b1e7864f310cd723bd0dd7a3b10cd723bde4864fb1000080bf0000803f0000803f0000803f0000803f0000803e0000c0400100803f62b4e7bc6fb4e7bc69b4e7b16ab4e7bc6fb4e7bc71b467b16fb4e7bc6ab4e73c000080bf0000803f0000803f0000803f0000803f0000c03e0000c0400100803f07d723bd7abfaeb007d7a3b10bd723bd7abfaeb07bbf2ea57abfaeb00bd7233d000080bf0000803f0000803f0000803f0000803f0000003f0000c0400100803f63b4e7bc6eb4e73ce6531a276bb4e7bc6eb4e73c70b467316eb4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f0000c0400100803f46092c320cd7233d0bd7a331567393b10cd7233d0dd7a3310cd7233d55739331000080bf0000803f0000803f0000803f0000803f0000403f0000c0400100803f77b4e73c6ab4e73c69b4e7316fb4e73c6ab4e73c6cb467316ab4e73c6fb4e7bc000080bf0000803f0000803f0000803f0000803f0000603f0000c0400100803f0fd7233d95ee18b106d7a3310bd7233d95ee18b196ee98a595ee18b10bd723bd000080bf0000803f0000803f0000803f0000803f0000803f0000c040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: -0.00000011920929, y: 0.000000014901161, z: 0} - m_Extent: {x: 1.0000002, y: 0.040000003, z: 0.040000007} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &2091522316 GameObject: m_ObjectHideFlags: 0 @@ -3078,8 +2301,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 2091522317} - - component: {fileID: 2091522324} - - component: {fileID: 2091522323} - component: {fileID: 2091522320} - component: {fileID: 2091522319} - component: {fileID: 2091522318} @@ -3095,25 +2316,21 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &2091522317 -RectTransform: +--- !u!4 &2091522317 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2091522316} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalPosition: {x: 1, y: -1.12, z: -1} m_LocalScale: {x: 1.0000005, y: 1.0000005, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1007350293} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 1, y: -1.12} - m_SizeDelta: {x: 100, y: 100} - m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &2091522318 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3126,6 +2343,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 0 @@ -3146,6 +2372,7 @@ MonoBehaviour: decimation: 0.02 smoothing: 0 twist: 0 + indexInSystem: 3 --- !u!114 &2091522320 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3158,11 +2385,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 62010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000 + solverIndices: + serializedContents: 62010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000 + m_AlignBytes: 16 + groupID: 4 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 1 - restLength_: 2 + restLength_: 2.000002 elements: - particle1: 354 particle2: 355 @@ -3171,84 +2402,87 @@ MonoBehaviour: tearResistance: 1 - particle1: 355 particle2: 356 - restLength: 0.11669767 + restLength: 0.11680669 constraintForce: 0 tearResistance: 1 - particle1: 356 particle2: 357 - restLength: 0.11849612 + restLength: 0.11829093 constraintForce: 0 tearResistance: 1 - particle1: 357 particle2: 358 - restLength: 0.11731398 + restLength: 0.117395446 constraintForce: 0 tearResistance: 1 - particle1: 358 particle2: 359 - restLength: 0.117768645 + restLength: 0.11783301 constraintForce: 0 tearResistance: 1 - particle1: 359 particle2: 360 - restLength: 0.11787382 + restLength: 0.11791115 constraintForce: 0 tearResistance: 1 - particle1: 360 particle2: 361 - restLength: 0.1178714 + restLength: 0.1178735 constraintForce: 0 tearResistance: 1 - particle1: 361 particle2: 362 - restLength: 0.11784513 + restLength: 0.117807046 constraintForce: 0 tearResistance: 1 - particle1: 362 particle2: 363 - restLength: 0.11781409 + restLength: 0.11774122 constraintForce: 0 tearResistance: 1 - particle1: 363 particle2: 364 - restLength: 0.117773324 + restLength: 0.11778654 constraintForce: 0 tearResistance: 1 - particle1: 364 particle2: 365 - restLength: 0.11769721 + restLength: 0.117860526 constraintForce: 0 tearResistance: 1 - particle1: 365 particle2: 366 - restLength: 0.117714405 + restLength: 0.11791558 constraintForce: 0 tearResistance: 1 - particle1: 366 particle2: 367 - restLength: 0.11811137 + restLength: 0.11788291 constraintForce: 0 tearResistance: 1 - particle1: 367 particle2: 368 - restLength: 0.11810517 + restLength: 0.11756081 constraintForce: 0 tearResistance: 1 - particle1: 368 particle2: 369 - restLength: 0.11729765 + restLength: 0.11787611 constraintForce: 0 tearResistance: 1 - particle1: 369 particle2: 370 - restLength: 0.11854333 + restLength: 0.11770154 constraintForce: 0 tearResistance: 1 - particle1: 370 particle2: 371 - restLength: 0.11637664 + restLength: 0.11705878 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -3275,12 +2509,13 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Actor: {fileID: 2091522320} - m_Target: {fileID: 0} + m_Target: {fileID: 2091522317} m_ParticleGroup: {fileID: 1119723573710947368, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &2091522322 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3298,61 +2533,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1023878380947534591, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity ---- !u!23 &2091522323 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2091522316} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &2091522324 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2091522316} - m_Mesh: {fileID: 650475911} + breakThreshold: Infinity --- !u!114 &2091522325 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3394,10 +2577,17 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} m_Name: m_EditorClassIdentifier: - render: 1 - shader: {fileID: 4800000, guid: 801733041f66b49e1b3c2101471db877, type: 3} - particleColor: {r: 1, g: 1, b: 1, a: 1} - radiusScale: 1 + material: {fileID: 0} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + k__BackingField: {r: 1, g: 1, b: 1, a: 1} + k__BackingField: 1 --- !u!1 &2102841794 GameObject: m_ObjectHideFlags: 0 @@ -3408,7 +2598,6 @@ GameObject: m_Component: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -3416,21 +2605,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 2 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3445,23 +2619,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.02 maxDepenetration: 5 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 10 @@ -3517,6 +2725,11 @@ MonoBehaviour: iterations: 5 SORFactor: 1 enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 5 @@ -3571,5 +2784,4 @@ SceneRoots: - {fileID: 865561430} - {fileID: 522272187} - {fileID: 99547753} - - {fileID: 1621829081} - - {fileID: 1583418125} + - {fileID: 1834593284} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/LightingData.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/LightingData.asset deleted file mode 100644 index 0d9ec5d3f..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/LightingData.asset and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/LightingData.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/LightingData.asset.meta deleted file mode 100644 index 9588ef8a3..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/LightingData.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 87e15c672d0777e4bacfa03a51721919 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 112000000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/ReflectionProbe-0.exr b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/ReflectionProbe-0.exr deleted file mode 100644 index e70946aca..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/ReflectionProbe-0.exr.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/ReflectionProbe-0.exr.meta deleted file mode 100644 index 760813b14..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLift/ReflectionProbe-0.exr.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: c12e3f337287c6a4b8cbafa2fe73982b -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 0 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 2 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 100 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLiftSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLiftSettings.lighting deleted file mode 100644 index bf7c60f72..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLiftSettings.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: FreightLiftSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 0 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 1 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLiftSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLiftSettings.lighting.meta deleted file mode 100644 index cb7c0f4e6..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/FreightLiftSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3a41f428dbea16c409e5b47129a697d1 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme.meta deleted file mode 100644 index 7763e1dd7..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 733a486f6547fb042b902a4b39cd05de -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme.unity index c2fb8d69e..b52ba0974 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme.unity @@ -43,7 +43,7 @@ RenderSettings: LightmapSettings: m_ObjectHideFlags: 0 serializedVersion: 13 - m_BakeOnSceneLoad: 1 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -93,8 +93,8 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: 1e7d0161a1b783249b79acc5562dfdee, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: d96e8cbd67963c646914fe40f4aa26c6, type: 2} + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 60cb1fcd40f2443829b552612b4b0ac8, type: 2} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 @@ -119,52 +119,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &117150008 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 117150010} - - component: {fileID: 117150009} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &117150009 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 117150008} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: - cellSpans: - m_AlignBytes: 16 ---- !u!4 &117150010 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 117150008} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &326895829 GameObject: m_ObjectHideFlags: 0 @@ -304,6 +258,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -383,6 +338,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -404,6 +361,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -428,7 +386,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -518,26 +475,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1072598549 GameObject: m_ObjectHideFlags: 0 @@ -547,8 +484,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1072598560} - - component: {fileID: 1072598559} - - component: {fileID: 1072598558} - component: {fileID: 1072598551} - component: {fileID: 1072598550} - component: {fileID: 1072598553} @@ -574,9 +509,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f2bc32c4faf04f039a86a6e3cea12a1, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 1 restLength_: 1.9999998 elements: @@ -780,6 +719,9 @@ MonoBehaviour: restLength: 0.049322546 constraintForce: 0 tearResistance: 0 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RodBlueprint: {fileID: 11400000, guid: 74806658f50d141e88786022b12fc58b, type: 2} _stretchShearConstraintsEnabled: 1 _stretchCompliance: 0 @@ -805,10 +747,17 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} m_Name: m_EditorClassIdentifier: - render: 1 - shader: {fileID: 4800000, guid: 801733041f66b49e1b3c2101471db877, type: 3} - particleColor: {r: 1, g: 1, b: 1, a: 1} - radiusScale: 1 + material: {fileID: 2100000, guid: fb88690dea2394644849cde5abd037f9, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + k__BackingField: {r: 1, g: 1, b: 1, a: 1} + k__BackingField: 1 --- !u!114 &1072598552 MonoBehaviour: m_ObjectHideFlags: 0 @@ -821,6 +770,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 9bc0d93bc33e445c7a765578064cdd1e, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 6} normalizeV: 1 @@ -841,6 +799,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 0 --- !u!114 &1072598554 MonoBehaviour: m_ObjectHideFlags: 0 @@ -858,8 +817,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 5048701005528565804, guid: 74806658f50d141e88786022b12fc58b, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 1 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1072598555 MonoBehaviour: m_ObjectHideFlags: 0 @@ -877,61 +837,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -3402949915523605302, guid: 74806658f50d141e88786022b12fc58b, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 1 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity ---- !u!23 &1072598558 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1072598549} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9bc0d93bc33e445c7a765578064cdd1e, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1072598559 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1072598549} - m_Mesh: {fileID: 1327496827} + breakThreshold: Infinity --- !u!4 &1072598560 Transform: m_ObjectHideFlags: 0 @@ -1012,7 +920,6 @@ GameObject: m_Component: - component: {fileID: 1175446146} - component: {fileID: 1175446145} - - component: {fileID: 1175446147} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -1100,195 +1007,7 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!114 &1175446147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 3 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 ---- !u!43 &1327496827 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 1920 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 369 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 1, y: 0.040000007, z: 0.04000001} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 0 - m_KeepIndices: 0 - m_IndexFormat: 0 - m_IndexBuffer: 000009000100010009000a0001000a00020002000a000b0002000b00030003000b000c0003000c00040004000c000d0004000d00050005000d000e0005000e00060006000e000f0006000f00070007000f001000070010000800080010001100090012000a000a00120013000a0013000b000b00130014000b0014000c000c00140015000c0015000d000d00150016000d0016000e000e00160017000e0017000f000f00170018000f0018001000100018001900100019001100110019001a0012001b00130013001b001c0013001c00140014001c001d0014001d00150015001d001e0015001e00160016001e001f0016001f00170017001f002000170020001800180020002100180021001900190021002200190022001a001a00220023001b0024001c001c00240025001c0025001d001d00250026001d0026001e001e00260027001e0027001f001f00270028001f0028002000200028002900200029002100210029002a0021002a00220022002a002b0022002b00230023002b002c0024002d00250025002d002e0025002e00260026002e002f0026002f00270027002f003000270030002800280030003100280031002900290031003200290032002a002a00320033002a0033002b002b00330034002b0034002c002c00340035002d0036002e002e00360037002e0037002f002f00370038002f0038003000300038003900300039003100310039003a0031003a00320032003a003b0032003b00330033003b003c0033003c00340034003c003d0034003d00350035003d003e0036003f00370037003f004000370040003800380040004100380041003900390041004200390042003a003a00420043003a0043003b003b00430044003b0044003c003c00440045003c0045003d003d00450046003d0046003e003e00460047003f0048004000400048004900400049004100410049004a0041004a00420042004a004b0042004b00430043004b004c0043004c00440044004c004d0044004d00450045004d004e0045004e00460046004e004f0046004f00470047004f005000480051004900490051005200490052004a004a00520053004a0053004b004b00530054004b0054004c004c00540055004c0055004d004d00550056004d0056004e004e00560057004e0057004f004f00570058004f005800500050005800590051005a00520052005a005b0052005b00530053005b005c0053005c00540054005c005d0054005d00550055005d005e0055005e00560056005e005f0056005f00570057005f0060005700600058005800600061005800610059005900610062005a0063005b005b00630064005b0064005c005c00640065005c0065005d005d00650066005d0066005e005e00660067005e0067005f005f00670068005f0068006000600068006900600069006100610069006a0061006a00620062006a006b0063006c00640064006c006d0064006d00650065006d006e0065006e00660066006e006f0066006f00670067006f007000670070006800680070007100680071006900690071007200690072006a006a00720073006a0073006b006b00730074006c0075006d006d00750076006d0076006e006e00760077006e0077006f006f00770078006f0078007000700078007900700079007100710079007a0071007a00720072007a007b0072007b00730073007b007c0073007c00740074007c007d0075007e00760076007e007f0076007f00770077007f008000770080007800780080008100780081007900790081008200790082007a007a00820083007a0083007b007b00830084007b0084007c007c00840085007c0085007d007d00850086007e0087007f007f00870088007f0088008000800088008900800089008100810089008a0081008a00820082008a008b0082008b00830083008b008c0083008c00840084008c008d0084008d00850085008d008e0085008e00860086008e008f00870090008800880090009100880091008900890091009200890092008a008a00920093008a0093008b008b00930094008b0094008c008c00940095008c0095008d008d00950096008d0096008e008e00960097008e0097008f008f0097009800900099009100910099009a0091009a00920092009a009b0092009b00930093009b009c0093009c00940094009c009d0094009d00950095009d009e0095009e00960096009e009f0096009f00970097009f00a0009700a00098009800a000a1009900a2009a009a00a200a3009a00a3009b009b00a300a4009b00a4009c009c00a400a5009c00a5009d009d00a500a6009d00a6009e009e00a600a7009e00a7009f009f00a700a8009f00a800a000a000a800a900a000a900a100a100a900aa00a200ab00a300a300ab00ac00a300ac00a400a400ac00ad00a400ad00a500a500ad00ae00a500ae00a600a600ae00af00a600af00a700a700af00b000a700b000a800a800b000b100a800b100a900a900b100b200a900b200aa00aa00b200b300ab00b400ac00ac00b400b500ac00b500ad00ad00b500b600ad00b600ae00ae00b600b700ae00b700af00af00b700b800af00b800b000b000b800b900b000b900b100b100b900ba00b100ba00b200b200ba00bb00b200bb00b300b300bb00bc00b400bd00b500b500bd00be00b500be00b600b600be00bf00b600bf00b700b700bf00c000b700c000b800b800c000c100b800c100b900b900c100c200b900c200ba00ba00c200c300ba00c300bb00bb00c300c400bb00c400bc00bc00c400c500bd00c600be00be00c600c700be00c700bf00bf00c700c800bf00c800c000c000c800c900c000c900c100c100c900ca00c100ca00c200c200ca00cb00c200cb00c300c300cb00cc00c300cc00c400c400cc00cd00c400cd00c500c500cd00ce00c600cf00c700c700cf00d000c700d000c800c800d000d100c800d100c900c900d100d200c900d200ca00ca00d200d300ca00d300cb00cb00d300d400cb00d400cc00cc00d400d500cc00d500cd00cd00d500d600cd00d600ce00ce00d600d700cf00d800d000d000d800d900d000d900d100d100d900da00d100da00d200d200da00db00d200db00d300d300db00dc00d300dc00d400d400dc00dd00d400dd00d500d500dd00de00d500de00d600d600de00df00d600df00d700d700df00e000d800e100d900d900e100e200d900e200da00da00e200e300da00e300db00db00e300e400db00e400dc00dc00e400e500dc00e500dd00dd00e500e600dd00e600de00de00e600e700de00e700df00df00e700e800df00e800e000e000e800e900e100ea00e200e200ea00eb00e200eb00e300e300eb00ec00e300ec00e400e400ec00ed00e400ed00e500e500ed00ee00e500ee00e600e600ee00ef00e600ef00e700e700ef00f000e700f000e800e800f000f100e800f100e900e900f100f200ea00f300eb00eb00f300f400eb00f400ec00ec00f400f500ec00f500ed00ed00f500f600ed00f600ee00ee00f600f700ee00f700ef00ef00f700f800ef00f800f000f000f800f900f000f900f100f100f900fa00f100fa00f200f200fa00fb00f300fc00f400f400fc00fd00f400fd00f500f500fd00fe00f500fe00f600f600fe00ff00f600ff00f700f700ff000001f7000001f800f80000010101f8000101f900f90001010201f9000201fa00fa0002010301fa000301fb00fb0003010401fc000501fd00fd0005010601fd000601fe00fe0006010701fe000701ff00ff0007010801ff0008010001000108010901000109010101010109010a0101010a01020102010a010b0102010b01030103010b010c0103010c01040104010c010d0105010e01060106010e010f0106010f01070107010f011001070110010801080110011101080111010901090111011201090112010a010a01120113010a0113010b010b01130114010b0114010c010c01140115010c0115010d010d01150116010e0117010f010f01170118010f0118011001100118011901100119011101110119011a0111011a01120112011a011b0112011b01130113011b011c0113011c01140114011c011d0114011d01150115011d011e0115011e01160116011e011f01170120011801180120012101180121011901190121012201190122011a011a01220123011a0123011b011b01230124011b0124011c011c01240125011c0125011d011d01250126011d0126011e011e01260127011e0127011f011f0127012801200129012101210129012a0121012a01220122012a012b0122012b01230123012b012c0123012c01240124012c012d0124012d01250125012d012e0125012e01260126012e012f0126012f01270127012f013001270130012801280130013101290132012a012a01320133012a0133012b012b01330134012b0134012c012c01340135012c0135012d012d01350136012d0136012e012e01360137012e0137012f012f01370138012f0138013001300138013901300139013101310139013a0132013b01330133013b013c0133013c01340134013c013d0134013d01350135013d013e0135013e01360136013e013f0136013f01370137013f014001370140013801380140014101380141013901390141014201390142013a013a01420143013b0144013c013c01440145013c0145013d013d01450146013d0146013e013e01460147013e0147013f013f01470148013f0148014001400148014901400149014101410149014a0141014a01420142014a014b0142014b01430143014b014c0144014d01450145014d014e0145014e01460146014e014f0146014f01470147014f015001470150014801480150015101480151014901490151015201490152014a014a01520153014a0153014b014b01530154014b0154014c014c01540155014d0156014e014e01560157014e0157014f014f01570158014f0158015001500158015901500159015101510159015a0151015a01520152015a015b0152015b01530153015b015c0153015c01540154015c015d0154015d01550155015d015e0156015f01570157015f016001570160015801580160016101580161015901590161016201590162015a015a01620163015a0163015b015b01630164015b0164015c015c01640165015c0165015d015d01650166015d0166015e015e01660167015f0168016001600168016901600169016101610169016a0161016a01620162016a016b0162016b01630163016b016c0163016c01640164016c016d0164016d01650165016d016e0165016e01660166016e016f0166016f01670167016f017001 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 369 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 23616 - _typelessdata: 000080bf0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f0000000000000000000080bf6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e00000000000080bf504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e00000000000080bf6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e00000000000080bf0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f00000000000080bf69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f00000000000080bf8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f00000000000080bf70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f00000000000080bf0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f00000000995f73bf0ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000d584173e995f73bf6ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ed584173e995f73bf4f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ed584173e995f73bf6ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03ed584173e995f73bf0ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003fd584173e995f73bf67b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203fd584173e995f73bf8e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403fd584173e995f73bf6fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603fd584173e995f73bf0ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803fd584173ef37e66bf0ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000004f06993ef37e66bf6ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e4f06993ef37e66bf4f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e4f06993ef37e66bf6ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e4f06993ef37e66bf0ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f4f06993ef37e66bf67b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f4f06993ef37e66bf8e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f4f06993ef37e66bf6fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f4f06993ef37e66bf0ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f4f06993ef9fa59bf0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000002c1ee43ef9fa59bf6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e2c1ee43ef9fa59bf504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e2c1ee43ef9fa59bf6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e2c1ee43ef9fa59bf0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f2c1ee43ef9fa59bf69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f2c1ee43ef9fa59bf8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f2c1ee43ef9fa59bf70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f2c1ee43ef9fa59bf0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f2c1ee43eff174dbf0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f0000000004b8183fff174dbf6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e04b8183fff174dbf504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e04b8183fff174dbf6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e04b8183fff174dbf0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f04b8183fff174dbf69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f04b8183fff174dbf8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f04b8183fff174dbf70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f04b8183fff174dbf0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f04b8183f072b40bf0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000ec7e3f3f072b40bf6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003eec7e3f3f072b40bf504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803eec7e3f3f072b40bf6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03eec7e3f3f072b40bf0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fec7e3f3f072b40bf69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fec7e3f3f072b40bf8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fec7e3f3f072b40bf70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fec7e3f3f072b40bf0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fec7e3f3f178033bf0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000bc7f653f178033bf6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003ebc7f653f178033bf504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803ebc7f653f178033bf6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03ebc7f653f178033bf0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fbc7f653f178033bf69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fbc7f653f178033bf8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fbc7f653f178033bf70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fbc7f653f178033bf0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fbc7f653f9c7c26bf0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000001745863f9c7c26bf6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e1745863f9c7c26bf504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e1745863f9c7c26bf6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e1745863f9c7c26bf0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f1745863f9c7c26bf69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f1745863f9c7c26bf8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f1745863f9c7c26bf70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f1745863f9c7c26bf0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f1745863f09da19bf0ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000f438993f09da19bf6ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ef438993f09da19bf4f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ef438993f09da19bf6ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03ef438993f09da19bf0ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ff438993f09da19bf67b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203ff438993f09da19bf8e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403ff438993f09da19bf6fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603ff438993f09da19bf0ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ff438993f3ae70cbf0ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000002ba5ac3f3ae70cbf6ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e2ba5ac3f3ae70cbf4f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e2ba5ac3f3ae70cbf6ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e2ba5ac3f3ae70cbf0ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f2ba5ac3f3ae70cbf67b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f2ba5ac3f3ae70cbf8e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f2ba5ac3f3ae70cbf6fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f2ba5ac3f3ae70cbf0ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f2ba5ac3f2d3000bf0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000bfb7bf3f2d3000bf6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003ebfb7bf3f2d3000bf504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803ebfb7bf3f2d3000bf6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03ebfb7bf3f2d3000bf0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fbfb7bf3f2d3000bf69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fbfb7bf3f2d3000bf8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fbfb7bf3f2d3000bf70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fbfb7bf3f2d3000bf0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fbfb7bf3f5eace6be0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000bcfed23f5eace6be6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003ebcfed23f5eace6be504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803ebcfed23f5eace6be6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03ebcfed23f5eace6be0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fbcfed23f5eace6be69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fbcfed23f5eace6be8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fbcfed23f5eace6be70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fbcfed23f5eace6be0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fbcfed23f3805cdbe0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000193ce63f3805cdbe6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e193ce63f3805cdbe504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e193ce63f3805cdbe6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e193ce63f3805cdbe0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f193ce63f3805cdbe69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f193ce63f3805cdbe8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f193ce63f3805cdbe70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f193ce63f3805cdbe0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f193ce63fe97ab3be0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000d463f93fe97ab3be6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003ed463f93fe97ab3be504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803ed463f93fe97ab3be6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03ed463f93fe97ab3be0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fd463f93fe97ab3be69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fd463f93fe97ab3be8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fd463f93fe97ab3be70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fd463f93fe97ab3be0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fd463f93f09a899be0ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f00000000fe60064009a899be6ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003efe60064009a899be4f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803efe60064009a899be6ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03efe60064009a899be0ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003ffe60064009a899be67b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203ffe60064009a899be8e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403ffe60064009a899be6fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603ffe60064009a899be0ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803ffe6006402b3580be0ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000000011ec0f402b3580be6ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e11ec0f402b3580be4f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e11ec0f402b3580be6ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e11ec0f402b3580be0ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f11ec0f402b3580be67b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f11ec0f402b3580be8e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f11ec0f402b3580be6fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f11ec0f402b3580be0ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f11ec0f40baf34cbe0ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000004e921940baf34cbe6ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e4e921940baf34cbe4f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e4e921940baf34cbe6ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e4e921940baf34cbe0ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f4e921940baf34cbe67b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f4e921940baf34cbe8e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f4e921940baf34cbe6fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f4e921940baf34cbe0ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f4e921940c1c819be0ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f000000005d2a2340c1c819be6ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e5d2a2340c1c819be4f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e5d2a2340c1c819be6ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e5d2a2340c1c819be0ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f5d2a2340c1c819be67b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f5d2a2340c1c819be8e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f5d2a2340c1c819be6fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f5d2a2340c1c819be0ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f5d2a23408220cdbd0cd7233d00000000000000000cd7233d000000000cd7a3b1000000000dd723bd000080bf0100803f0100803f0100803f0100803f00000000f5c42c408220cdbd6db4e73c6fb4e7bc6db467b16db4e73c6fb4e7bc6db467b171b4e7bc6fb4e7bc000080bf0100803f0100803f0100803f0100803f0000003ef5c42c408320cdbd524ef0b00dd723bd0cd7a3b1524ef0b00dd723bd524e70250ed723bd544ef030000080bf0100803f0100803f0100803f0100803f0000803ef5c42c408220cdbd6db4e7bc6fb4e7bc6db467b16db4e7bc6fb4e7bc6db4673171b4e7bc6fb4e73c000080bf0100803f0100803f0100803f0100803f0000c03ef5c42c408220cdbd0cd723bd544e7031524ef0250cd723bd544e70310cd7a331564e70310dd7233d000080bf0100803f0100803f0100803f0100803f0000003ff5c42c408220cdbd6ab4e7bc71b4e73c6fb467316ab4e7bc71b4e73c6ab4673173b4e73c6cb4e73c000080bf0100803f0100803f0100803f0100803f0000203ff5c42c408120cdbd8f1d03300dd7233d0cd7a3318f1d03300dd7233d8f1d83a40ed7233d901d03b0000080bf0100803f0100803f0100803f0100803f0000403ff5c42c408220cdbd72b4e73c69b4e73c68b4673172b4e73c69b4e73c72b467b16bb4e73c74b4e7bc000080bf0100803f0100803f0100803f0100803f0000603ff5c42c408220cdbd0cd7233d544ef0b1524e70a60cd7233d544ef0b10cd7a3b1564ef0b10dd723bd000080bf0100803f0100803f0100803f0100803f0000803ff5c42c4029d74cbd0cd7233d00000000000000000cd7233d000000000cd7a3b1000000000dd723bd000080bf0100803f0100803f0100803f0100803f00000000eb6536402ad74cbd6db4e73c6fb4e7bc6db467b16db4e73c6fb4e7bc6db467b171b4e7bc6fb4e7bc000080bf0100803f0100803f0100803f0100803f0000003eeb6536402ad74cbd524ef0b00dd723bd0cd7a3b1524ef0b00dd723bd524e70250ed723bd544ef030000080bf0100803f0100803f0100803f0100803f0000803eeb6536402ad74cbd6db4e7bc6fb4e7bc6db467b16db4e7bc6fb4e7bc6db4673171b4e7bc6fb4e73c000080bf0100803f0100803f0100803f0100803f0000c03eeb65364029d74cbd0cd723bd544e7031524ef0250cd723bd544e70310cd7a331564e70310dd7233d000080bf0100803f0100803f0100803f0100803f0000003feb65364028d74cbd6ab4e7bc71b4e73c6fb467316ab4e7bc71b4e73c6ab4673173b4e73c6cb4e73c000080bf0100803f0100803f0100803f0100803f0000203feb65364028d74cbd8f1d03300dd7233d0cd7a3318f1d03300dd7233d8f1d83a40ed7233d901d03b0000080bf0100803f0100803f0100803f0100803f0000403feb65364028d74cbd72b4e73c69b4e73c68b4673172b4e73c69b4e73c72b467b16bb4e73c74b4e7bc000080bf0100803f0100803f0100803f0100803f0000603feb65364029d74cbd0cd7233d544ef0b1524e70a60cd7233d544ef0b10cd7a3b1564ef0b10dd723bd000080bf0100803f0100803f0100803f0100803f0000803feb653640000020b30ad7233d00000000000000000ad7233d000000000ad7a3b1000000000bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000000001004040477b2eb36ab4e73c6cb4e7bc6ab467b16ab4e73c6cb4e7bc6ab467b16eb4e7bc6cb4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003e01004040e17a34b34f4ef0b00bd723bd0ad7a3b14f4ef0b00bd723bd4f4e70250cd723bd514ef030000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803e01004040477b2eb36ab4e7bc6cb4e7bc6ab467b16ab4e7bc6cb4e7bc6ab467316eb4e7bc6cb4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000c03e01004040000020b30ad723bd514e70314f4ef0250ad723bd514e70310ad7a331534e70310bd7233d000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000003f01004040b98411b367b4e7bc6eb4e73c6cb4673167b4e7bc6eb4e73c67b4673170b4e73c69b4e73c000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000203f010040401f850bb38e1d03300bd7233d0ad7a3318e1d03300bd7233d8e1d83a40cd7233d8f1d03b0000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000403f01004040ba8411b36fb4e73c67b4e73c65b467316fb4e73c67b4e73c6fb467b169b4e73c71b4e7bc000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000603f01004040000020b30ad7233d514ef0b14f4e70a60ad7233d514ef0b10ad7a3b1534ef0b10bd723bd000080bfffff7f3fffff7f3fffff7f3fffff7f3f0000803f01004040dfd64c3d0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000149a4940ded64c3d6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e149a4940ded64c3d504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e149a4940ded64c3d6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e149a4940dfd64c3d0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f149a4940e0d64c3d69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f149a4940e0d64c3d8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f149a4940e0d64c3d70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f149a4940dfd64c3d0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f149a49405c20cd3d0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000000a3b53405c20cd3d6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e0a3b53405b20cd3d504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e0a3b53405c20cd3d6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e0a3b53405c20cd3d0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f0a3b53405c20cd3d69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f0a3b53405d20cd3d8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f0a3b53405c20cd3d70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f0a3b53405c20cd3d0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f0a3b5340bfc8193e0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000a5d55c40bfc8193e6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003ea5d55c40bfc8193e504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803ea5d55c40bfc8193e6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03ea5d55c40bfc8193e0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fa5d55c40bfc8193e69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fa5d55c40bfc8193e8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fa5d55c40bfc8193e70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fa5d55c40bfc8193e0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fa5d55c40b8f34c3e0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000b46d6640b8f34c3e6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003eb46d6640b8f34c3e504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803eb46d6640b8f34c3e6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03eb46d6640b8f34c3e0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fb46d6640b8f34c3e69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fb46d6640b8f34c3e8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fb46d6640b8f34c3e70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fb46d6640b8f34c3e0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fb46d66402535803e0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000ef1370402535803e6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003eef1370402535803e504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803eef1370402535803e6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03eef1370402535803e0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fef1370402535803e69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fef1370402535803e8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fef1370402535803e70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fef1370402535803e0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fef13704004a8993e0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000039f794004a8993e6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e039f794004a8993e504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e039f794004a8993e6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e039f794004a8993e0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f039f794004a8993e69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f039f794004a8993e8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f039f794004a8993e70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f039f794004a8993e0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f039f7940e47ab33e0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000000ca78140e47ab33e6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e0ca78140e47ab33e504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e0ca78140e47ab33e6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e0ca78140e47ab33e0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f0ca78140e47ab33e69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f0ca78140e47ab33e8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f0ca78140e47ab33e70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f0ca78140e47ab33e0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f0ca781403305cd3e0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000fb7086403305cd3e6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003efb7086403305cd3e504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803efb7086403305cd3e6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03efb7086403305cd3e0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003ffb7086403305cd3e69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203ffb7086403305cd3e8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403ffb7086403305cd3e70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603ffb7086403305cd3e0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803ffb70864059ace63e0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f0000000052408b4059ace63e6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e52408b4059ace63e504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e52408b4059ace63e6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e52408b4059ace63e0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f52408b4059ace63e69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f52408b4059ace63e8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f52408b4059ace63e70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f52408b4059ace63e0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f52408b402b30003f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000111290402b30003f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e111290402b30003f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e111290402b30003f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e111290402b30003f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f111290402b30003f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f111290402b30003f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f111290402b30003f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f111290402b30003f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f111290403ae70c3f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000b7d694403ae70c3f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003eb7d694403ae70c3f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803eb7d694403ae70c3f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03eb7d694403ae70c3f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fb7d694403ae70c3f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fb7d694403ae70c3f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fb7d694403ae70c3f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fb7d694403ae70c3f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fb7d6944007da193f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000c4b1994007da193f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003ec4b1994007da193f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803ec4b1994007da193f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03ec4b1994007da193f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fc4b1994007da193f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fc4b1994007da193f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fc4b1994007da193f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fc4b1994007da193f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fc4b19940987c263f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000ba6e9e40987c263f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003eba6e9e40987c263f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803eba6e9e40987c263f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03eba6e9e40987c263f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fba6e9e40987c263f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fba6e9e40987c263f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fba6e9e40987c263f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fba6e9e40987c263f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fba6e9e401580333f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000000950a3401580333f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e0950a3401580333f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e0950a3401580333f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e0950a3401580333f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f0950a3401580333f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f0950a3401580333f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f0950a3401580333f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f0950a3401580333f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f0950a340052b403f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000002310a840052b403f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e2310a840052b403f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e2310a840052b403f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e2310a840052b403f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f2310a840052b403f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f2310a840052b403f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f2310a840052b403f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f2310a840052b403f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f2310a840ff174d3f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f0000000001e9ac40ff174d3f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e01e9ac40ff174d3f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e01e9ac40ff174d3f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e01e9ac40ff174d3f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f01e9ac40ff174d3f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f01e9ac40ff174d3f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f01e9ac40ff174d3f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f01e9ac40ff174d3f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f01e9ac40f9fa593f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000001fbeb140f9fa593f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e1fbeb140f9fa593f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e1fbeb140f9fa593f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e1fbeb140f9fa593f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f1fbeb140f9fa593f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f1fbeb140f9fa593f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f1fbeb140f9fa593f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f1fbeb140f9fa593f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f1fbeb140f47e663f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000009d6fb640f47e663f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e9d6fb640f47e663f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e9d6fb640f47e663f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e9d6fb640f47e663f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f9d6fb640f47e663f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f9d6fb640f47e663f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f9d6fb640f47e663f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f9d6fb640f47e663f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f9d6fb640995f733f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f00000000db43bb40995f733f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003edb43bb40995f733f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803edb43bb40995f733f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03edb43bb40995f733f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003fdb43bb40995f733f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203fdb43bb40995f733f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403fdb43bb40995f733f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603fdb43bb40995f733f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803fdb43bb400000803f0bd7233d00000000000000000bd7233d000000000bd7a3b1000000000cd723bd000080bf0000803f0000803f0000803f0000803f000000000200c0400000803f6bb4e73c6db4e7bc6bb467b16bb4e73c6db4e7bc6bb467b16fb4e7bc6db4e7bc000080bf0000803f0000803f0000803f0000803f0000003e0200c0400000803f504ef0b00cd723bd0bd7a3b1504ef0b00cd723bd504e70250dd723bd524ef030000080bf0000803f0000803f0000803f0000803f0000803e0200c0400000803f6bb4e7bc6db4e7bc6bb467b16bb4e7bc6db4e7bc6bb467316fb4e7bc6db4e73c000080bf0000803f0000803f0000803f0000803f0000c03e0200c0400000803f0bd723bd524e7031504ef0250bd723bd524e70310bd7a331544e70310cd7233d000080bf0000803f0000803f0000803f0000803f0000003f0200c0400000803f69b4e7bc70b4e73c6eb4673169b4e7bc70b4e73c69b4673172b4e73c6bb4e73c000080bf0000803f0000803f0000803f0000803f0000203f0200c0400000803f8f1d03300cd7233d0bd7a3318f1d03300cd7233d8f1d83a40dd7233d901d03b0000080bf0000803f0000803f0000803f0000803f0000403f0200c0400000803f70b4e73c68b4e73c66b4673170b4e73c68b4e73c70b467b16ab4e73c72b4e7bc000080bf0000803f0000803f0000803f0000803f0000603f0200c0400000803f0bd7233d524ef0b1504e70a60bd7233d524ef0b10bd7a3b1544ef0b10cd723bd000080bf0000803f0000803f0000803f0000803f0000803f0200c040 - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 1, y: 0.040000007, z: 0.04000001} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: ---- !u!1 &1583418123 +--- !u!1 &1624468059 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1296,34 +1015,36 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} + - component: {fileID: 1624468061} + - component: {fileID: 1624468060} m_Layer: 0 - m_Name: OniCollisionWorld + m_Name: BurstCollisionWorld m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1583418124 +--- !u!114 &1624468060 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} + m_GameObject: {fileID: 1624468059} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!4 &1583418125 + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1624468061 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} + m_GameObject: {fileID: 1624468059} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1342,7 +1063,6 @@ GameObject: m_Component: - component: {fileID: 1718836712} - component: {fileID: 1718836711} - - component: {fileID: 1718836710} m_Layer: 0 m_Name: Solver m_TagString: Untagged @@ -1350,21 +1070,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1718836710 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1718836709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 434ec3c1822e84ae79a7f64f950b1bf9, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 1718836711} - substeps: 2 --- !u!114 &1718836711 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1379,23 +1084,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 1 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.02 maxDepenetration: 5 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 3 @@ -1451,6 +1190,11 @@ MonoBehaviour: iterations: 10 SORFactor: 1 enabled: 0 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 2 @@ -1567,6 +1311,8 @@ MeshRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1588,6 +1334,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1610,5 +1357,4 @@ SceneRoots: - {fileID: 326895831} - {fileID: 1174747260} - {fileID: 1718836712} - - {fileID: 117150010} - - {fileID: 1583418125} + - {fileID: 1624468061} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/LightingData.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/LightingData.asset deleted file mode 100644 index 426330a26..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/LightingData.asset and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/LightingData.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/LightingData.asset.meta deleted file mode 100644 index d52303b1d..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/LightingData.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1e7d0161a1b783249b79acc5562dfdee -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 112000000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/ReflectionProbe-0.exr b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/ReflectionProbe-0.exr deleted file mode 100644 index e70946aca..000000000 Binary files a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/ReflectionProbe-0.exr.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/ReflectionProbe-0.exr.meta deleted file mode 100644 index 186d8cc76..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Plectoneme/ReflectionProbe-0.exr.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: ce08b85ba149d0c46ae02bb0217063e7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 0 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 2 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 100 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting index dda12fa6a..e9aef6293 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: PlectonemeSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_RealtimeEnvironmentLighting: 1 @@ -16,11 +15,13 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 0 - m_BakeBackend: 0 + m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -31,23 +32,21 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 + m_PVREnvironmentImportanceSampling: 0 m_PVRFilteringMode: 2 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta index cc0fd10e2..84696b377 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d96e8cbd67963c646914fe40f4aa26c6 +guid: 60cb1fcd40f2443829b552612b4b0ac8 NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Ratchet.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Ratchet.unity new file mode 100644 index 000000000..7297625d5 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Ratchet.unity @@ -0,0 +1,2395 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &29733818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 29733821} + - component: {fileID: 29733820} + - component: {fileID: 29733819} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &29733819 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 29733818} + m_Enabled: 1 +--- !u!20 &29733820 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 29733818} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 70 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &29733821 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 29733818} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 2.31, z: -5.02} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &166485227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 166485230} + - component: {fileID: 166485229} + - component: {fileID: 166485228} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &166485228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166485227} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &166485229 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166485227} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &166485230 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166485227} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &369923343 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 369923346} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 369923345} + m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &369923344 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + m_PrefabInstance: {fileID: 369923343} + m_PrefabAsset: {fileID: 0} +--- !u!114 &369923345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 369923344} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 369923346} + m_DistanceField: {fileID: 11400000, guid: 5eb5ff1af3a3f4a14977448198c232ae, type: 2} +--- !u!64 &369923346 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 369923344} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &423933290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 423933291} + - component: {fileID: 423933294} + - component: {fileID: 423933293} + - component: {fileID: 423933292} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &423933291 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 423933290} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.036} + m_LocalScale: {x: 0.0199, y: 0.0199, z: 0.0199} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1545171020} + m_Father: {fileID: 1884244937} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0.36, y: 1.02} + m_SizeDelta: {x: 200, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &423933292 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 423933290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &423933293 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 423933290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 1 +--- !u!223 &423933294 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 423933290} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &624448749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 624448750} + m_Layer: 0 + m_Name: WallAnchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &624448750 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 624448749} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.925, y: 1.538, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &772880994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 772880995} + - component: {fileID: 772880998} + - component: {fileID: 772880997} + - component: {fileID: 772880996} + m_Layer: 0 + m_Name: Box (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &772880995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 772880994} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.225, y: -0.05, z: 0} + m_LocalScale: {x: 0.05, y: 0.05, z: 0.15} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1411294826} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &772880996 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 772880994} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &772880997 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 772880994} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &772880998 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 772880994} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &916892760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 916892761} + - component: {fileID: 916892765} + - component: {fileID: 916892764} + - component: {fileID: 916892770} + - component: {fileID: 916892771} + - component: {fileID: 916892777} + - component: {fileID: 916892778} + - component: {fileID: 916892779} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &916892761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916892760} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -2.42, y: 1.54, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1732458100} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} +--- !u!114 &916892764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916892760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 1 + twist: 0 + indexInSystem: 0 +--- !u!114 &916892765 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916892760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 4.999999 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.1660099 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.16711497 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.16527379 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.16605663 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.16722488 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.16830611 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.16523468 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.16700381 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.16745025 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.1660304 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.167286 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.16652985 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.1668426 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.16688348 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.1667524 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.16675252 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.16688359 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.16684228 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.16653013 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.16728568 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.16603076 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.16745031 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.16700375 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.1652348 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.16830587 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + restLength: 0.16722488 + constraintForce: 0 + tearResistance: 1 + - particle1: 26 + particle2: 27 + restLength: 0.16605711 + constraintForce: 0 + tearResistance: 1 + - particle1: 27 + particle2: 28 + restLength: 0.1652739 + constraintForce: 0 + tearResistance: 1 + - particle1: 28 + particle2: 29 + restLength: 0.16711473 + constraintForce: 0 + tearResistance: 1 + - particle1: 29 + particle2: 30 + restLength: 0.16600966 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: 558d68cba3927468abede77a3852186b, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1200 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.0005 + _maxBending: 0.03 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &916892770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916892760} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: fb88690dea2394644849cde5abd037f9, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + k__BackingField: {r: 1, g: 1, b: 1, a: 1} + k__BackingField: 1 +--- !u!114 &916892771 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916892760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2aadf7c5471054b0db8c70bd317bc272, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Rope: {fileID: 916892765} + m_Target: {fileID: 1983413666} + m_Position: 0.908 + m_LimitRange: 1 + m_Range: {x: 0, y: 1} + m_Friction: 0 + m_MotorSpeed: 0 + m_MotorForce: Infinity + m_Compliance: 0 + m_ClampAtEnds: 1 + currentEdge: + edgeIndex: 27 + coordinate: 0.23999977 + firstEdge: + edgeIndex: 0 + coordinate: 0 + lastEdge: + edgeIndex: 29 + coordinate: 0.99969864 + breakThreshold: Infinity +--- !u!114 &916892777 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916892760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 18} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 1 +--- !u!114 &916892778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916892760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 916892765} + m_Target: {fileID: 1884244937} + m_ParticleGroup: {fileID: 6183219346962753922, guid: 558d68cba3927468abede77a3852186b, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &916892779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916892760} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 916892765} + m_Target: {fileID: 1539654790} + m_ParticleGroup: {fileID: -3232934742127723785, guid: 558d68cba3927468abede77a3852186b, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!1 &998811098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 998811099} + m_Layer: 0 + m_Name: Anchor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &998811099 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998811098} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1539654790} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1034742885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1034742889} + - component: {fileID: 1034742888} + - component: {fileID: 1034742887} + - component: {fileID: 1034742886} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1034742886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1034742885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1034742887 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1034742885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1034742888 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1034742885} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1034742889 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1034742885} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2041761281} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1218650852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1218650854} + - component: {fileID: 1218650853} + m_Layer: 0 + m_Name: ComputeCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1218650853 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218650852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ce0ddc77554954cd78643d83b0505396, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1218650854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218650852} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1290715903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1290715907} + - component: {fileID: 1290715906} + - component: {fileID: 1290715905} + - component: {fileID: 1290715904} + m_Layer: 0 + m_Name: Box + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1290715904 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1290715903} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1290715905 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1290715903} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1290715906 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1290715903} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1290715907 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1290715903} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.125, y: 0, z: 0} + m_LocalScale: {x: 0.25, y: 0.05, z: 0.15} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1411294826} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1411294825 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1411294826} + m_Layer: 0 + m_Name: RatchetVisualizer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1411294826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1411294825} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.178, y: 1.696, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1290715907} + - {fileID: 772880995} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1539654782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1539654790} + - component: {fileID: 1539654789} + - component: {fileID: 1539654788} + - component: {fileID: 1539654787} + - component: {fileID: 1539654785} + - component: {fileID: 1539654784} + - component: {fileID: 1539654783} + - component: {fileID: 1539654791} + - component: {fileID: 1539654792} + - component: {fileID: 1539654793} + m_Layer: 0 + m_Name: Load + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1539654783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: 1 + m_SourceCollider: {fileID: 1539654787} + m_DistanceField: {fileID: 0} +--- !u!114 &1539654784 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!54 &1539654785 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + serializedVersion: 5 + m_Mass: 10 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!65 &1539654787 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1539654788 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1539654789 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1539654790 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -4.675, y: 1.538, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 998811099} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!145 &1539654791 +SpringJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + serializedVersion: 4 + m_ConnectedBody: {fileID: 0} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: -0.5, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 0, y: 0, z: 0} + m_Spring: 800 + m_Damper: 0.01 + m_MinDistance: 0 + m_MaxDistance: 0 + m_Tolerance: 0.025 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!120 &1539654792 +LineRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 0.1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0, g: 1, b: 0.12997723, a: 1} + key1: {r: 0, g: 1, b: 0.12997723, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 56861 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 1 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MaskInteraction: 0 + m_UseWorldSpace: 1 + m_Loop: 0 + m_ApplyActiveColorSpace: 0 +--- !u!114 &1539654793 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539654782} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 411d9eba4bb0042bf9302873985bc6e0, type: 3} + m_Name: + m_EditorClassIdentifier: + transformA: {fileID: 624448750} + transformB: {fileID: 998811099} +--- !u!1 &1545171019 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1545171020} + - component: {fileID: 1545171022} + - component: {fileID: 1545171021} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1545171020 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1545171019} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 423933291} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1545171021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1545171019} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 265 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Drag Me! --> +--- !u!222 &1545171022 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1545171019} + m_CullTransparentMesh: 0 +--- !u!1 &1732458098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1732458100} + - component: {fileID: 1732458099} + m_Layer: 0 + m_Name: Obi Solver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1732458099 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1732458098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + m_EditorClassIdentifier: + simulateWhenInvisible: 1 + m_Backend: 0 + substeps: 7 + maxStepsPerFrame: 1 + synchronization: 2 + parameters: + mode: 0 + interpolation: 0 + gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 + damping: 0.158 + maxAnisotropy: 3 + sleepThreshold: 0 + maxVelocity: 50 + maxAngularVelocity: 20 + collisionMargin: 0.02 + maxDepenetration: 10000 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} + gravity: {x: 0, y: -8, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 2 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + skinConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + volumeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + shapeMatchingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 1 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + stretchShearConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 0 +--- !u!4 &1732458100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1732458098} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 916892761} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1884244931 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1884244937} + - component: {fileID: 1884244936} + - component: {fileID: 1884244935} + - component: {fileID: 1884244934} + - component: {fileID: 1884244933} + - component: {fileID: 1884244932} + m_Layer: 0 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1884244932 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884244931} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cbe5860a158ab4ff9852d93167f38e5a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1884244933 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884244931} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da1d294c86704f3394415f542741ebe, type: 3} + m_Name: + m_EditorClassIdentifier: + minX: 0.5 + maxX: 4 + minY: 1 + maxY: 3 + minZ: 0 + maxZ: 0 +--- !u!65 &1884244934 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884244931} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1884244935 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884244931} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1884244936 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884244931} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1884244937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884244931} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.83, y: 1.55, z: -0.018} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 423933291} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1983413661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1983413666} + - component: {fileID: 1983413665} + - component: {fileID: 1983413664} + - component: {fileID: 1983413663} + - component: {fileID: 1983413662} + - component: {fileID: 1983413667} + - component: {fileID: 1983413668} + m_Layer: 0 + m_Name: Ratchet + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1983413662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983413661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de82c5da5889a437bbca59463285c6a3, type: 3} + m_Name: + m_EditorClassIdentifier: + pinhole: {fileID: 916892771} + direction: 1 + teethSeparation: 0.1 +--- !u!65 &1983413663 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983413661} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1983413664 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983413661} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1983413665 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983413661} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1983413666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983413661} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.13, y: 0.81, z: 0} + m_LocalScale: {x: 0.1, y: 1.7098151, z: 0.2} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1983413667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983413661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: 1 + m_SourceCollider: {fileID: 1983413663} + m_DistanceField: {fileID: 0} +--- !u!114 &1983413668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983413661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 89f7ec50c6e36440593469d980ba7830, type: 3} + m_Name: + m_EditorClassIdentifier: + ratchet: {fileID: 1983413662} + ratchetVisualizer: {fileID: 1411294826} + minAngle: 0 + maxAngle: -25 +--- !u!1 &2041761280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2041761281} + - component: {fileID: 2041761283} + - component: {fileID: 2041761282} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2041761281 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041761280} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1034742889} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 100.29999, y: 24.400024} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2041761282 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041761280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 200 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Click and drag the cube to pull the rope. Hit Space to unlock the ratchet + mechanism, hit Space again to lock it back. +--- !u!222 &2041761283 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041761280} + m_CullTransparentMesh: 0 +--- !u!1 &2078422900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2078422902} + - component: {fileID: 2078422901} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &2078422901 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078422900} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &2078422902 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078422900} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 29733821} + - {fileID: 2078422902} + - {fileID: 1732458100} + - {fileID: 369923343} + - {fileID: 1034742889} + - {fileID: 166485230} + - {fileID: 1983413666} + - {fileID: 1411294826} + - {fileID: 624448750} + - {fileID: 1539654790} + - {fileID: 1884244937} + - {fileID: 1218650854} diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS/Oni.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Ratchet.unity.meta similarity index 74% rename from Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS/Oni.meta rename to Assets/ThirdParty/Obi/Samples/RopeAndRod/Ratchet.unity.meta index c08e8be50..1ff1a6dd7 100644 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/MacOS/Oni.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Ratchet.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f46c87e21fafa4d7b849fbade197d0a1 +guid: 0dfa9dcb619204188a53a53500c16db3 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RenderModes.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RenderModes.unity new file mode 100644 index 000000000..e843a1801 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RenderModes.unity @@ -0,0 +1,1651 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: d03718b1550344932a85912567fb2a98, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} + m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &506459881 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + m_PrefabInstance: {fileID: 421764872} + m_PrefabAsset: {fileID: 0} +--- !u!64 &506459882 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506459881} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!114 &506459883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506459881} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 506459882} + m_DistanceField: {fileID: 0} +--- !u!1 &592657015 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 592657017} + - component: {fileID: 592657016} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &592657016 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 592657015} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &592657017 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 592657015} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &605701979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 605701980} + - component: {fileID: 605701984} + - component: {fileID: 605701983} + - component: {fileID: 605701981} + - component: {fileID: 605701985} + m_Layer: 10 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &605701980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605701979} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.31999993, y: 3, z: -0.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &605701981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605701979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 605701984} + m_Target: {fileID: 605701980} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &605701983 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605701979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 2 +--- !u!114 &605701984 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605701979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.01 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &605701985 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605701979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 18f853588397d4a80a561203ed92fc8a, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 4cc7d840058664f0f9a679178b33b5e4, type: 2} + renderParams: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 4} + normalizeV: 1 + thicknessScale: 0.8 +--- !u!1 &766988467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 766988468} + - component: {fileID: 766988472} + - component: {fileID: 766988471} + - component: {fileID: 766988469} + - component: {fileID: 766988473} + m_Layer: 10 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &766988468 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766988467} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.32, y: 3, z: 1.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &766988469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766988467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 766988472} + m_Target: {fileID: 766988468} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &766988471 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766988467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !u!114 &766988472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766988467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 112 + particle2: 113 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 113 + particle2: 114 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 114 + particle2: 115 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 115 + particle2: 116 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 116 + particle2: 117 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 117 + particle2: 118 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 118 + particle2: 119 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 119 + particle2: 120 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 120 + particle2: 121 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 121 + particle2: 122 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 122 + particle2: 123 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.01 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &766988473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766988467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 09ac962c0743c400aa230ebf871b6156, type: 3} + m_Name: + m_EditorClassIdentifier: + linkMesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} + linkMaterial: {fileID: 2100000, guid: edc856900ac3941a98996e21e91e215e, type: 2} + linkScale: {x: 30, y: 30, z: 30} + twistAnchor: 0 + linkTwist: 45 + linkModifiers: [] + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 +--- !u!1 &948693937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 948693938} + - component: {fileID: 948693942} + - component: {fileID: 948693941} + - component: {fileID: 948693940} + - component: {fileID: 948693939} + m_Layer: 5 + m_Name: FPSDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &948693938 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 948693937} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1067532270} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 99, y: -31} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &948693939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 948693937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} + m_EffectDistance: {x: 1, y: -1} + m_UseGraphicAlpha: 1 +--- !u!114 &948693940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 948693937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f14f49b61044e49ebb2f29511f2b3f41, type: 3} + m_Name: + m_EditorClassIdentifier: + updateInterval: 0.5 + showMedian: 0 + medianLearnrate: 0.05 +--- !u!114 &948693941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 948693937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &948693942 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 948693937} + m_CullTransparentMesh: 0 +--- !u!1 &1002464891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1002464896} + - component: {fileID: 1002464895} + - component: {fileID: 1002464893} + - component: {fileID: 1002464892} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1002464892 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 +--- !u!124 &1002464893 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 +--- !u!20 &1002464895 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 75 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1002464896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + serializedVersion: 2 + m_LocalRotation: {x: 0.15073282, y: -0.2883767, z: 0.0460241, w: 0.94445765} + m_LocalPosition: {x: 1.9, y: 3.95, z: -3.31} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 18.136, y: -33.959, z: 0} +--- !u!1 &1067532266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1067532270} + - component: {fileID: 1067532269} + - component: {fileID: 1067532268} + - component: {fileID: 1067532267} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1067532267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067532266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1067532268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067532266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1067532269 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067532266} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1067532270 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067532266} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 948693938} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1095269776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1095269777} + - component: {fileID: 1095269781} + - component: {fileID: 1095269780} + - component: {fileID: 1095269778} + - component: {fileID: 1095269782} + m_Layer: 10 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1095269777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095269776} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.42, y: 3, z: 0.6} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1095269778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095269776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1095269781} + m_Target: {fileID: 1095269777} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1095269780 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095269776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 1 +--- !u!114 &1095269781 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095269776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000 + m_AlignBytes: 16 + groupID: 3 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 224 + particle2: 225 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 225 + particle2: 226 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 226 + particle2: 227 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 227 + particle2: 228 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 228 + particle2: 229 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 229 + particle2: 230 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 230 + particle2: 231 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 231 + particle2: 232 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 232 + particle2: 233 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 233 + particle2: 234 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 234 + particle2: 235 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.01 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1095269782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095269776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4ec7e70e3318044b69e11352b1f2136b, type: 3} + m_Name: + m_EditorClassIdentifier: + k__BackingField: {fileID: 1250516326192719629, guid: 92fe50136a7db4cc7bf5dceedcfc586e, type: 3} + k__BackingField: + - {fileID: 2100000, guid: ad417cd62ee7d4209afa3e3d86bee647, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + axis: 2 + volumeScaling: 0 + stretchWithRope: 1 + spanEntireLength: 1 + instances: 1 + instanceSpacing: 0.3 + offset: 0 + scale: {x: 1, y: 1, z: 1} +--- !u!1 &1175446144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1175446146} + - component: {fileID: 1175446145} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1175446145 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.076 + m_NormalBias: 0.01 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + serializedVersion: 2 + m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} +--- !u!1 &1201406215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1201406216} + - component: {fileID: 1201406217} + - component: {fileID: 1201406222} + - component: {fileID: 1201406219} + - component: {fileID: 1201406218} + m_Layer: 10 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1201406216 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201406215} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.68000007, y: 3, z: -1.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1201406217 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201406215} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000 + m_AlignBytes: 16 + groupID: 4 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 336 + particle2: 337 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 337 + particle2: 338 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 338 + particle2: 339 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 339 + particle2: 340 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 340 + particle2: 341 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 341 + particle2: 342 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 342 + particle2: 343 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 343 + particle2: 344 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 344 + particle2: 345 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 345 + particle2: 346 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 346 + particle2: 347 + restLength: 0.18078607 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.01 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1201406218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201406215} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1201406217} + m_Target: {fileID: 1201406216} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1201406219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201406215} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 3} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1201406222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201406215} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 3 +--- !u!1 &2102841794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2102841797} + - component: {fileID: 2102841796} + - component: {fileID: 2102841798} + m_Layer: 0 + m_Name: Obi Solver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2102841796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + m_EditorClassIdentifier: + simulateWhenInvisible: 1 + m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 + parameters: + mode: 0 + interpolation: 0 + gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 + damping: 0 + maxAnisotropy: 3 + sleepThreshold: 0.0002 + maxVelocity: 50 + maxAngularVelocity: 10 + collisionMargin: 0.02 + maxDepenetration: 10 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 2 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 0 + iterations: 4 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 1 + skinConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + volumeConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + shapeMatchingConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 5 + SORFactor: 1 + enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + stitchConstraintParameters: + evaluationOrder: 0 + iterations: 5 + SORFactor: 1 + enabled: 1 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + stretchShearConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 +--- !u!4 &2102841797 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1201406216} + - {fileID: 605701980} + - {fileID: 1095269777} + - {fileID: 766988468} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2102841798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef31b6ca9a4124cb893de1adabbfab18, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 1067532270} + - {fileID: 592657017} diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Info.plist.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RenderModes.unity.meta similarity index 74% rename from Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Info.plist.meta rename to Assets/ThirdParty/Obi/Samples/RopeAndRod/RenderModes.unity.meta index 55b70ed39..7b96d264e 100644 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Info.plist.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RenderModes.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5e5cb3eda53de41308fa6419b6912f1e +guid: b5657544ccae14cb6bab0a77ecdf31f1 DefaultImporter: externalObjects: {} userData: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Rocker.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Rocker.unity index 77034708f..5544e89e1 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Rocker.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Rocker.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 m_ReflectionCompression: 2 m_MixedBakeMode: 1 m_BakeBackend: 0 @@ -98,13 +94,13 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 69cfb63280540394bb470a961ccab956, type: 2} + m_LightingSettings: {fileID: 4890085278179872738, guid: 22a51826813394dfda17b2e81584d97a, type: 2} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -199,7 +195,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -213,10 +211,10 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 582899617} m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -252,7 +250,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} m_Name: m_EditorClassIdentifier: - cellSpans: {} + cellSpans: + m_AlignBytes: 16 --- !u!4 &359190391 Transform: m_ObjectHideFlags: 0 @@ -260,12 +259,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 359190389} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &371642822 GameObject: @@ -294,12 +294,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 371642822} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.5153397, y: 0, z: 0} m_LocalScale: {x: 0.05706403, y: 3.7535858, z: 1.5454657} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2124930376} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &371642824 MeshRenderer: @@ -318,6 +319,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -339,6 +345,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -351,9 +358,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 371642822} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &371642826 @@ -377,6 +392,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 371642825} @@ -386,6 +402,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -421,10 +438,19 @@ PrefabInstance: value: -0 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} --- !u!1 &506459881 stripped GameObject: @@ -439,9 +465,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 506459881} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -458,6 +492,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -492,9 +527,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 283647877} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -585,7 +620,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -623,9 +657,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -659,33 +701,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1002464891} + serializedVersion: 2 m_LocalRotation: {x: 0.15760262, y: 0, z: 0, w: 0.98750263} m_LocalPosition: {x: 0, y: 3.95, z: -4.42} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1175446144 GameObject: m_ObjectHideFlags: 0 @@ -711,9 +734,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -763,8 +785,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1175446146 Transform: m_ObjectHideFlags: 0 @@ -772,12 +798,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} + serializedVersion: 2 m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} --- !u!1 &1196756658 GameObject: @@ -816,6 +843,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -837,6 +869,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -849,9 +882,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1196756658} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1196756661 @@ -869,16 +910,17 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1196756658} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2.971, y: 2.887, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &1196756663 Animator: - serializedVersion: 3 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -891,10 +933,13 @@ Animator: m_UpdateMode: 1 m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 1 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!1 &1346965641 GameObject: m_ObjectHideFlags: 0 @@ -904,8 +949,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1346965650} - - component: {fileID: 1346965645} - - component: {fileID: 1346965644} - component: {fileID: 1346965642} - component: {fileID: 1346965646} - component: {fileID: 1346965643} @@ -930,9 +973,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2.017229 elements: @@ -991,6 +1038,9 @@ MonoBehaviour: restLength: 0.18289638 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: ca9e262f11fb246cbb6d2177bacb27ea, type: 2} tearingEnabled: 1 tearResistanceMultiplier: 1000 @@ -1016,61 +1066,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 1 section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} thicknessScale: 0.8 ---- !u!23 &1346965644 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1346965645 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Mesh: {fileID: 2092596634} --- !u!114 &1346965646 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1086,6 +1095,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 0 --- !u!114 &1346965647 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1103,8 +1113,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -3735696104525882986, guid: ca9e262f11fb246cbb6d2177bacb27ea, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965648 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1122,8 +1133,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 8673311686603544650, guid: ca9e262f11fb246cbb6d2177bacb27ea, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!4 &1346965650 Transform: m_ObjectHideFlags: 0 @@ -1131,12 +1143,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1346965641} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} m_LocalPosition: {x: -1.68, y: 2.53, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1376993203} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!1 &1356049001 GameObject: @@ -1165,12 +1178,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1356049001} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0.5153397, y: 0, z: 0} m_LocalScale: {x: 0.057063304, y: 3.7535796, z: 1.5454605} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2124930376} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1356049003 MeshRenderer: @@ -1189,6 +1203,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1210,6 +1229,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1222,9 +1242,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1356049001} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1356049005 @@ -1248,6 +1276,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1356049004} @@ -1275,16 +1304,17 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1376993202} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1346965650} - {fileID: 2124930376} - {fileID: 1817376321} - {fileID: 1499352028} m_Father: {fileID: 2102841797} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1499352027 GameObject: @@ -1315,12 +1345,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1499352027} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1.69, y: 2.53, z: 1.252} m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1376993203} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &1499352029 Rigidbody: @@ -1329,10 +1360,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1499352027} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 2 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 0 @@ -1355,6 +1397,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1376,6 +1423,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1388,9 +1436,17 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1499352027} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1499352032 @@ -1427,53 +1483,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -131071 m_SourceCollider: {fileID: 1499352031} m_DistanceField: {fileID: 0} ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1817376320 GameObject: m_ObjectHideFlags: 0 @@ -1503,12 +1517,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1817376320} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1.69, y: 2.53, z: -1.242} m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1376993203} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &1817376322 Rigidbody: @@ -1517,10 +1532,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1817376320} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 2 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 0 @@ -1543,6 +1569,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1564,6 +1595,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1576,9 +1608,17 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1817376320} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1817376325 @@ -1615,174 +1655,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -131071 m_SourceCollider: {fileID: 1817376324} m_DistanceField: {fileID: 0} ---- !u!43 &2092596634 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &2102841794 GameObject: m_ObjectHideFlags: 0 @@ -1793,7 +1670,6 @@ GameObject: m_Component: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -1801,21 +1677,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 1 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1830,23 +1691,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 20 collisionMargin: 0.02 maxDepenetration: 5 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 20 @@ -1902,6 +1797,11 @@ MonoBehaviour: iterations: 10 SORFactor: 1 enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 5 @@ -1934,13 +1834,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102841794} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1376993203} m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2124930372 GameObject: @@ -1981,6 +1882,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2002,6 +1908,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2014,9 +1921,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2124930372} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &2124930375 @@ -2034,14 +1949,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2124930372} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 1.5, z: 0} m_LocalScale: {x: 5.3362865, y: 0.2001739, z: 0.59812397} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1356049002} - {fileID: 371642823} m_Father: {fileID: 1376993203} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &2124930377 Rigidbody: @@ -2050,10 +1966,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2124930372} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 20 - m_Drag: 0 - m_AngularDrag: 0.2 + m_LinearDamping: 0 + m_AngularDamping: 0.2 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 0 @@ -2072,6 +1999,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0.02 + inverted: 0 material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} filter: -65535 m_SourceCollider: {fileID: 2124930374} @@ -2089,3 +2017,14 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: kinematicForParticles: 0 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 1196756662} + - {fileID: 283647877} + - {fileID: 359190391} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RockerSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RockerSettings.lighting index 3c5921063..06aeccb0a 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RockerSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RockerSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RockerSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_RealtimeEnvironmentLighting: 1 @@ -16,11 +15,13 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 0 - m_BakeBackend: 0 + m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -31,23 +32,21 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 + m_PVREnvironmentImportanceSampling: 0 m_PVRFilteringMode: 2 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta index 3e8447604..6bbb3f5bd 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 69cfb63280540394bb470a961ccab956 +guid: 22a51826813394dfda17b2e81584d97a NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJoints.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJoints.unity index fbc7b10dc..d655d9715 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJoints.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJoints.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 m_ReflectionCompression: 2 m_MixedBakeMode: 1 m_BakeBackend: 0 @@ -98,13 +94,13 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 1570a321016a30947b33edfa00660539, type: 2} + m_LightingSettings: {fileID: 4890085278179872738, guid: 27534f20d18eb45b0acb536b299b8a0c, type: 2} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -153,9 +149,9 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1556965141} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -239,6 +235,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -274,10 +271,19 @@ PrefabInstance: value: -0 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} --- !u!1 &491995553 GameObject: @@ -307,6 +313,7 @@ HingeJoint: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491995553} + serializedVersion: 3 m_ConnectedBody: {fileID: 0} m_ConnectedArticulationBody: {fileID: 0} m_Anchor: {x: 0, y: 0.5000001, z: 0} @@ -324,6 +331,8 @@ HingeJoint: force: 0 freeSpin: 0 m_UseLimits: 0 + m_ExtendedLimits: 0 + m_UseAcceleration: 0 m_Limits: min: 0 max: 0 @@ -344,9 +353,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491995553} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!54 &491995556 @@ -356,10 +373,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491995553} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -382,6 +410,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -403,6 +436,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -422,12 +456,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491995553} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0.054329306, w: 0.99852306} m_LocalPosition: {x: -0.918763, y: 0.37653518, z: -0.67946297} m_LocalScale: {x: 0.19999997, y: 1.2, z: 0.2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1238800305} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -6.229} --- !u!1 &506459881 stripped GameObject: @@ -442,9 +477,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 506459881} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -461,6 +504,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -505,6 +549,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -526,6 +575,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -538,8 +588,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 916249660} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 1 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.5 m_Height: 2 m_Direction: 1 @@ -559,12 +618,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 916249660} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 1.303, y: 3.12, z: 0.163} m_LocalScale: {x: 1.6741419, y: 0.055837065, z: 1.6741422} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!59 &916249665 HingeJoint: @@ -573,6 +633,7 @@ HingeJoint: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 916249660} + serializedVersion: 3 m_ConnectedBody: {fileID: 0} m_ConnectedArticulationBody: {fileID: 0} m_Anchor: {x: 0, y: 1, z: 0} @@ -590,6 +651,8 @@ HingeJoint: force: 300 freeSpin: 0 m_UseLimits: 0 + m_ExtendedLimits: 0 + m_UseAcceleration: 0 m_Limits: min: 0 max: 0 @@ -609,10 +672,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 916249660} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -644,6 +718,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 916249662} @@ -660,7 +735,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -698,9 +772,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -734,33 +816,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1002464891} + serializedVersion: 2 m_LocalRotation: {x: 0.011613097, y: 0.17214976, z: -0.0020296327, w: 0.9850003} m_LocalPosition: {x: -0.574, y: 2.82, z: -2.15} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 1.3510001, y: 19.827002, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1013469396 GameObject: m_ObjectHideFlags: 0 @@ -789,9 +852,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2032392336} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -861,9 +924,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -913,8 +975,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1175446146 Transform: m_ObjectHideFlags: 0 @@ -922,177 +988,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} + serializedVersion: 2 m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!43 &1201308522 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &1201406215 GameObject: m_ObjectHideFlags: 0 @@ -1102,8 +1005,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1201406216} - - component: {fileID: 1201406221} - - component: {fileID: 1201406220} - component: {fileID: 1201406219} - component: {fileID: 1201406218} - component: {fileID: 1201406217} @@ -1125,12 +1026,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1201406215} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: -0.28, y: 1.678, z: 0.192} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2102841797} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90.00001} --- !u!114 &1201406217 MonoBehaviour: @@ -1144,6 +1046,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 5} normalizeV: 1 @@ -1164,6 +1075,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 0 --- !u!114 &1201406219 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1176,9 +1088,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2.1155076 elements: @@ -1297,6 +1213,9 @@ MonoBehaviour: restLength: 0.079887465 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: aa522e16fa3d944afa90688caef811d1, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -1310,56 +1229,6 @@ MonoBehaviour: _maxBending: 0 _plasticYield: 0 _plasticCreep: 0 ---- !u!23 &1201406220 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1201406215} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1201406221 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1201406215} - m_Mesh: {fileID: 1201308522} --- !u!114 &1201406222 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1377,8 +1246,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 4437340670510581073, guid: aa522e16fa3d944afa90688caef811d1, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1201406223 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1396,8 +1266,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 7605297887885229143, guid: aa522e16fa3d944afa90688caef811d1, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1201406224 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1415,8 +1286,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -4396955149452082975, guid: aa522e16fa3d944afa90688caef811d1, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1201406225 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1434,8 +1306,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 1364724456080004343, guid: aa522e16fa3d944afa90688caef811d1, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!1 &1238800304 GameObject: m_ObjectHideFlags: 0 @@ -1459,14 +1332,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1238800304} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.43123704, y: 3.1134648, z: 0.86946297} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 2019980195} - {fileID: 491995559} m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1295941522 GameObject: @@ -1477,8 +1351,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1295941532} - - component: {fileID: 1295941527} - - component: {fileID: 1295941526} - component: {fileID: 1295941525} - component: {fileID: 1295941524} - component: {fileID: 1295941523} @@ -1505,6 +1377,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 4} normalizeV: 1 @@ -1525,6 +1406,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 1 --- !u!114 &1295941525 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1537,9 +1419,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 7c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000 + solverIndices: + serializedContents: 7c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000 + m_AlignBytes: 16 + groupID: 2 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 1.2510417 elements: @@ -1618,6 +1504,9 @@ MonoBehaviour: restLength: 0.07021886 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -1631,56 +1520,6 @@ MonoBehaviour: _maxBending: 0 _plasticYield: 0 _plasticCreep: 0 ---- !u!23 &1295941526 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1295941522} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1295941527 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1295941522} - m_Mesh: {fileID: 2092596634} --- !u!114 &1295941528 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1698,8 +1537,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 6085013363271969740, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1295941529 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1717,8 +1557,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 2668437529162069470, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1295941530 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1736,8 +1577,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 8493842404228815792, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1295941531 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1755,8 +1597,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -981642940510787340, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!4 &1295941532 Transform: m_ObjectHideFlags: 0 @@ -1764,12 +1607,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1295941522} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: 1.762, y: 2.082, z: 0.163} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2102841797} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90.00001} --- !u!1 &1323421013 GameObject: @@ -1798,11 +1642,11 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 2032392336} - {fileID: 1964394701} m_Father: {fileID: 1556965141} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1857,7 +1701,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: - m_Target: {fileID: 2102841798} - m_TargetAssemblyTypeName: + m_TargetAssemblyTypeName: SlowmoToggler, Assembly-CSharp m_MethodName: Slowmo m_Mode: 0 m_Arguments: @@ -1945,7 +1789,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -1959,60 +1805,17 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1323421014} - {fileID: 296577042} m_Father: {fileID: 0} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1690581335 GameObject: m_ObjectHideFlags: 0 @@ -2043,6 +1846,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 m_HorizontalAxis: Horizontal m_VerticalAxis: Vertical m_SubmitButton: Submit @@ -2072,12 +1876,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1690581335} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1712865439 GameObject: @@ -2108,7 +1913,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} m_Name: m_EditorClassIdentifier: - cellSpans: {} + cellSpans: + m_AlignBytes: 16 --- !u!4 &1712865441 Transform: m_ObjectHideFlags: 0 @@ -2116,12 +1922,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1712865439} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1964394700 GameObject: @@ -2151,9 +1958,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1323421014} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2241,6 +2048,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2262,6 +2074,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2274,9 +2087,17 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1966636100} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1966636103 @@ -2294,12 +2115,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1966636100} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 1.757, y: 1.674, z: 0.163} m_LocalScale: {x: 0.29338, y: 0.29338, z: 0.29338} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!54 &1966636105 Rigidbody: @@ -2308,10 +2130,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1966636100} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 0.2 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -2343,6 +2176,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65534 m_SourceCollider: {fileID: 1966636102} @@ -2387,6 +2221,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2408,6 +2247,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2420,9 +2260,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2019980191} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &2019980194 @@ -2440,12 +2288,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2019980191} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} m_LocalPosition: {x: -0.32876295, y: -0.34346485, z: -0.67946297} m_LocalScale: {x: 0.20000012, y: 1.2000005, z: 0.2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1238800305} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} --- !u!153 &2019980196 ConfigurableJoint: @@ -2454,13 +2303,13 @@ ConfigurableJoint: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2019980191} + serializedVersion: 4 m_ConnectedBody: {fileID: 491995556} m_ConnectedArticulationBody: {fileID: 0} m_Anchor: {x: 0, y: 0.5000001, z: 0} m_Axis: {x: 1, y: 0, z: 0} m_AutoConfigureConnectedAnchor: 1 m_ConnectedAnchor: {x: 0.34088674, y: -0.59736216, z: 0} - serializedVersion: 2 m_SecondaryAxis: {x: 0, y: 1, z: 0} m_XMotion: 0 m_YMotion: 0 @@ -2500,38 +2349,44 @@ ConfigurableJoint: m_TargetPosition: {x: 0, y: 0, z: 0} m_TargetVelocity: {x: 0, y: 0, z: 0} m_XDrive: - serializedVersion: 3 + serializedVersion: 4 positionSpring: 0 positionDamper: 0 maximumForce: 3.4028233e+38 + useAcceleration: 0 m_YDrive: - serializedVersion: 3 + serializedVersion: 4 positionSpring: 0 positionDamper: 0 maximumForce: 3.4028233e+38 + useAcceleration: 0 m_ZDrive: - serializedVersion: 3 + serializedVersion: 4 positionSpring: 0 positionDamper: 0 maximumForce: 3.4028233e+38 + useAcceleration: 0 m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} m_TargetAngularVelocity: {x: 0, y: 0, z: 0} m_RotationDriveMode: 0 m_AngularXDrive: - serializedVersion: 3 + serializedVersion: 4 positionSpring: 0 positionDamper: 0 maximumForce: 3.4028233e+38 + useAcceleration: 0 m_AngularYZDrive: - serializedVersion: 3 + serializedVersion: 4 positionSpring: 0 positionDamper: 0 maximumForce: 3.4028233e+38 + useAcceleration: 0 m_SlerpDrive: - serializedVersion: 3 + serializedVersion: 4 positionSpring: 0 positionDamper: 0 maximumForce: 3.4028233e+38 + useAcceleration: 0 m_ProjectionMode: 0 m_ProjectionDistance: 0.1 m_ProjectionAngle: 180 @@ -2550,10 +2405,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2019980191} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 1 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 1 @@ -2585,6 +2451,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 2019980193} @@ -2617,10 +2484,10 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1013469397} m_Father: {fileID: 1323421014} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -2665,170 +2532,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2032392335} m_CullTransparentMesh: 0 ---- !u!43 &2092596634 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &2102841794 GameObject: m_ObjectHideFlags: 0 @@ -2840,7 +2543,6 @@ GameObject: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - component: {fileID: 2102841798} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -2848,21 +2550,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 4 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2877,23 +2564,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 1 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.3 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 20 collisionMargin: 0.02 maxDepenetration: 10 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 1 @@ -2949,6 +2670,11 @@ MonoBehaviour: iterations: 1 SORFactor: 1 enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 5 @@ -2981,14 +2707,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102841794} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1201406216} - {fileID: 1295941532} m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2102841798 MonoBehaviour: @@ -3002,3 +2729,17 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5ec309595a8ca48b3a4deae53d6b023d, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 1238800305} + - {fileID: 916249664} + - {fileID: 1966636104} + - {fileID: 1556965141} + - {fileID: 1690581338} + - {fileID: 1712865441} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting index ef7f817c5..e7292d8d2 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RopeAndJointsSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_RealtimeEnvironmentLighting: 1 @@ -16,11 +15,13 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 0 - m_BakeBackend: 0 + m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -31,23 +32,21 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 + m_PVREnvironmentImportanceSampling: 0 m_PVRFilteringMode: 2 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta index f9050da54..e28265ff0 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1570a321016a30947b33edfa00660539 +guid: 27534f20d18eb45b0acb536b299b8a0c NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCutting.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCutting.unity index 3bbab0947..d4dbfdf59 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCutting.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCutting.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 m_ReflectionCompression: 2 m_MixedBakeMode: 1 m_BakeBackend: 0 @@ -98,13 +94,13 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 8c7faed9772fc9a4bb2c3f36bc57b45d, type: 2} + m_LightingSettings: {fileID: 1570830420} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -132,8 +128,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 21365383} - - component: {fileID: 21365391} - - component: {fileID: 21365390} - component: {fileID: 21365389} - component: {fileID: 21365388} - component: {fileID: 21365387} @@ -155,12 +149,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 21365382} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.86010015, z: -0, w: 0.5101253} m_LocalPosition: {x: 0.152, y: 3.996, z: -0.234} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2102841797} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: -118.656006, z: 0} --- !u!114 &21365384 MonoBehaviour: @@ -192,8 +187,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -8864857226987616246, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &21365386 MonoBehaviour: m_ObjectHideFlags: 0 @@ -211,8 +207,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &21365387 MonoBehaviour: m_ObjectHideFlags: 0 @@ -225,6 +222,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 16} normalizeV: 1 @@ -245,6 +251,7 @@ MonoBehaviour: decimation: 0.05 smoothing: 1 twist: 0 + indexInSystem: 0 --- !u!114 &21365389 MonoBehaviour: m_ObjectHideFlags: 0 @@ -257,242 +264,249 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 1 + m_MassScale: 1 m_SelfCollisions: 1 - restLength_: 5.3759427 + restLength_: 5.39185 elements: - particle1: 0 particle2: 1 - restLength: 0.11737857 + restLength: 0.11771238 constraintForce: 0 tearResistance: 1 - particle1: 1 particle2: 2 - restLength: 0.11757569 + restLength: 0.11794325 constraintForce: 0 tearResistance: 1 - particle1: 2 particle2: 3 - restLength: 0.117257625 + restLength: 0.117595166 constraintForce: 0 tearResistance: 1 - particle1: 3 particle2: 4 - restLength: 0.117347114 + restLength: 0.11768351 constraintForce: 0 tearResistance: 1 - particle1: 4 particle2: 5 - restLength: 0.11749813 + restLength: 0.11783673 constraintForce: 0 tearResistance: 1 - particle1: 5 particle2: 6 - restLength: 0.117627345 + restLength: 0.117969744 constraintForce: 0 tearResistance: 1 - particle1: 6 particle2: 7 - restLength: 0.1176776 + restLength: 0.11802316 constraintForce: 0 tearResistance: 1 - particle1: 7 particle2: 8 - restLength: 0.11761664 + restLength: 0.11796464 constraintForce: 0 tearResistance: 1 - particle1: 8 particle2: 9 - restLength: 0.117508255 + restLength: 0.1178521 constraintForce: 0 tearResistance: 1 - particle1: 9 particle2: 10 - restLength: 0.11763225 + restLength: 0.117975526 constraintForce: 0 tearResistance: 1 - particle1: 10 particle2: 11 - restLength: 0.11766701 + restLength: 0.11801252 constraintForce: 0 tearResistance: 1 - particle1: 11 particle2: 12 - restLength: 0.117603354 + restLength: 0.11794836 constraintForce: 0 tearResistance: 1 - particle1: 12 particle2: 13 - restLength: 0.11748713 + restLength: 0.11783 constraintForce: 0 tearResistance: 1 - particle1: 13 particle2: 14 - restLength: 0.11737358 + restLength: 0.117713265 constraintForce: 0 tearResistance: 1 - particle1: 14 particle2: 15 - restLength: 0.11731443 + restLength: 0.117651865 constraintForce: 0 tearResistance: 1 - particle1: 15 particle2: 16 - restLength: 0.117334664 + restLength: 0.117673375 constraintForce: 0 tearResistance: 1 - particle1: 16 particle2: 17 - restLength: 0.117409684 + restLength: 0.117791526 constraintForce: 0 tearResistance: 1 - particle1: 17 particle2: 18 - restLength: 0.117427535 + restLength: 0.11774277 constraintForce: 0 tearResistance: 1 - particle1: 18 particle2: 19 - restLength: 0.1173339 + restLength: 0.11769215 constraintForce: 0 tearResistance: 1 - particle1: 19 particle2: 20 - restLength: 0.11715327 + restLength: 0.11750718 constraintForce: 0 tearResistance: 1 - particle1: 20 particle2: 21 - restLength: 0.11707407 + restLength: 0.11741844 constraintForce: 0 tearResistance: 1 - particle1: 21 particle2: 22 - restLength: 0.11728205 + restLength: 0.1176177 constraintForce: 0 tearResistance: 1 - particle1: 22 particle2: 23 - restLength: 0.11794879 + restLength: 0.11827736 constraintForce: 0 tearResistance: 1 - particle1: 23 particle2: 24 - restLength: 0.11673033 + restLength: 0.11706203 constraintForce: 0 tearResistance: 1 - particle1: 24 particle2: 25 - restLength: 0.116027325 + restLength: 0.11636803 constraintForce: 0 tearResistance: 1 - particle1: 25 particle2: 26 - restLength: 0.115863316 + restLength: 0.11621493 constraintForce: 0 tearResistance: 1 - particle1: 26 particle2: 27 - restLength: 0.11598866 + restLength: 0.11634967 constraintForce: 0 tearResistance: 1 - particle1: 27 particle2: 28 - restLength: 0.11614065 + restLength: 0.11650062 constraintForce: 0 tearResistance: 1 - particle1: 28 particle2: 29 - restLength: 0.11616688 + restLength: 0.11651943 constraintForce: 0 tearResistance: 1 - particle1: 29 particle2: 30 - restLength: 0.11612464 + restLength: 0.11646894 constraintForce: 0 tearResistance: 1 - particle1: 30 particle2: 31 - restLength: 0.116126075 + restLength: 0.11646836 constraintForce: 0 tearResistance: 1 - particle1: 31 particle2: 32 - restLength: 0.1162187 + restLength: 0.11656151 constraintForce: 0 tearResistance: 1 - particle1: 32 particle2: 33 - restLength: 0.116368376 + restLength: 0.11671458 constraintForce: 0 tearResistance: 1 - particle1: 33 particle2: 34 - restLength: 0.11650247 + restLength: 0.11685168 constraintForce: 0 tearResistance: 1 - particle1: 34 particle2: 35 - restLength: 0.11654539 + restLength: 0.11689511 constraintForce: 0 tearResistance: 1 - particle1: 35 particle2: 36 - restLength: 0.11637627 + restLength: 0.1167252 constraintForce: 0 tearResistance: 1 - particle1: 36 particle2: 37 - restLength: 0.116367616 + restLength: 0.11671828 constraintForce: 0 tearResistance: 1 - particle1: 37 particle2: 38 - restLength: 0.116505764 + restLength: 0.11685561 constraintForce: 0 tearResistance: 1 - particle1: 38 particle2: 39 - restLength: 0.11647182 + restLength: 0.11681989 constraintForce: 0 tearResistance: 1 - particle1: 39 particle2: 40 - restLength: 0.11628203 + restLength: 0.11662538 constraintForce: 0 tearResistance: 1 - particle1: 40 particle2: 41 - restLength: 0.11606255 + restLength: 0.11642074 constraintForce: 0 tearResistance: 1 - particle1: 41 particle2: 42 - restLength: 0.11669507 + restLength: 0.117048115 constraintForce: 0 tearResistance: 1 - particle1: 42 particle2: 43 - restLength: 0.116644375 + restLength: 0.11699504 constraintForce: 0 tearResistance: 1 - particle1: 43 particle2: 44 - restLength: 0.11652727 + restLength: 0.11687661 constraintForce: 0 tearResistance: 1 - particle1: 44 particle2: 45 - restLength: 0.116267465 + restLength: 0.11661551 constraintForce: 0 tearResistance: 1 - particle1: 45 particle2: 46 - restLength: 0.115411185 + restLength: 0.11574278 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -506,56 +520,6 @@ MonoBehaviour: _maxBending: 0.025 _plasticYield: 0 _plasticCreep: 0 ---- !u!23 &21365390 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21365382} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &21365391 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21365382} - m_Mesh: {fileID: 2092596634} --- !u!114 &21365392 MonoBehaviour: m_ObjectHideFlags: 0 @@ -574,6 +538,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -609,10 +574,19 @@ PrefabInstance: value: -0 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} --- !u!1 &506459881 stripped GameObject: @@ -627,9 +601,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 506459881} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -646,174 +628,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} m_DistanceField: {fileID: 11400000, guid: 5eb5ff1af3a3f4a14977448198c232ae, type: 2} ---- !u!43 &511885495 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &648289270 GameObject: m_ObjectHideFlags: 0 @@ -823,8 +642,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 648289271} - - component: {fileID: 648289279} - - component: {fileID: 648289278} - component: {fileID: 648289277} - component: {fileID: 648289276} - component: {fileID: 648289275} @@ -846,12 +663,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 648289270} + serializedVersion: 2 m_LocalRotation: {x: -0, y: 0.9226075, z: -0, w: 0.38574016} m_LocalPosition: {x: -0.516, y: 3.215, z: -0.009} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2102841797} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 134.621, z: 0} --- !u!114 &648289272 MonoBehaviour: @@ -883,8 +701,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -8864857226987616246, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &648289274 MonoBehaviour: m_ObjectHideFlags: 0 @@ -902,8 +721,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &648289275 MonoBehaviour: m_ObjectHideFlags: 0 @@ -916,6 +736,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 16} normalizeV: 1 @@ -936,6 +765,7 @@ MonoBehaviour: decimation: 0.05 smoothing: 1 twist: 0 + indexInSystem: 2 --- !u!114 &648289277 MonoBehaviour: m_ObjectHideFlags: 0 @@ -948,242 +778,249 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000 + solverIndices: + serializedContents: 930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000 + m_AlignBytes: 16 + groupID: 2 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 1 + m_MassScale: 1 m_SelfCollisions: 1 - restLength_: 5.3759427 + restLength_: 5.39185 elements: - particle1: 147 particle2: 148 - restLength: 0.11737857 + restLength: 0.11771238 constraintForce: 0 tearResistance: 1 - particle1: 148 particle2: 149 - restLength: 0.11757569 + restLength: 0.11794325 constraintForce: 0 tearResistance: 1 - particle1: 149 particle2: 150 - restLength: 0.117257625 + restLength: 0.117595166 constraintForce: 0 tearResistance: 1 - particle1: 150 particle2: 151 - restLength: 0.117347114 + restLength: 0.11768351 constraintForce: 0 tearResistance: 1 - particle1: 151 particle2: 152 - restLength: 0.11749813 + restLength: 0.11783673 constraintForce: 0 tearResistance: 1 - particle1: 152 particle2: 153 - restLength: 0.117627345 + restLength: 0.117969744 constraintForce: 0 tearResistance: 1 - particle1: 153 particle2: 154 - restLength: 0.1176776 + restLength: 0.11802316 constraintForce: 0 tearResistance: 1 - particle1: 154 particle2: 155 - restLength: 0.11761664 + restLength: 0.11796464 constraintForce: 0 tearResistance: 1 - particle1: 155 particle2: 156 - restLength: 0.117508255 + restLength: 0.1178521 constraintForce: 0 tearResistance: 1 - particle1: 156 particle2: 157 - restLength: 0.11763225 + restLength: 0.117975526 constraintForce: 0 tearResistance: 1 - particle1: 157 particle2: 158 - restLength: 0.11766701 + restLength: 0.11801252 constraintForce: 0 tearResistance: 1 - particle1: 158 particle2: 159 - restLength: 0.117603354 + restLength: 0.11794836 constraintForce: 0 tearResistance: 1 - particle1: 159 particle2: 160 - restLength: 0.11748713 + restLength: 0.11783 constraintForce: 0 tearResistance: 1 - particle1: 160 particle2: 161 - restLength: 0.11737358 + restLength: 0.117713265 constraintForce: 0 tearResistance: 1 - particle1: 161 particle2: 162 - restLength: 0.11731443 + restLength: 0.117651865 constraintForce: 0 tearResistance: 1 - particle1: 162 particle2: 163 - restLength: 0.117334664 + restLength: 0.117673375 constraintForce: 0 tearResistance: 1 - particle1: 163 particle2: 164 - restLength: 0.117409684 + restLength: 0.117791526 constraintForce: 0 tearResistance: 1 - particle1: 164 particle2: 165 - restLength: 0.117427535 + restLength: 0.11774277 constraintForce: 0 tearResistance: 1 - particle1: 165 particle2: 166 - restLength: 0.1173339 + restLength: 0.11769215 constraintForce: 0 tearResistance: 1 - particle1: 166 particle2: 167 - restLength: 0.11715327 + restLength: 0.11750718 constraintForce: 0 tearResistance: 1 - particle1: 167 particle2: 168 - restLength: 0.11707407 + restLength: 0.11741844 constraintForce: 0 tearResistance: 1 - particle1: 168 particle2: 169 - restLength: 0.11728205 + restLength: 0.1176177 constraintForce: 0 tearResistance: 1 - particle1: 169 particle2: 170 - restLength: 0.11794879 + restLength: 0.11827736 constraintForce: 0 tearResistance: 1 - particle1: 170 particle2: 171 - restLength: 0.11673033 + restLength: 0.11706203 constraintForce: 0 tearResistance: 1 - particle1: 171 particle2: 172 - restLength: 0.116027325 + restLength: 0.11636803 constraintForce: 0 tearResistance: 1 - particle1: 172 particle2: 173 - restLength: 0.115863316 + restLength: 0.11621493 constraintForce: 0 tearResistance: 1 - particle1: 173 particle2: 174 - restLength: 0.11598866 + restLength: 0.11634967 constraintForce: 0 tearResistance: 1 - particle1: 174 particle2: 175 - restLength: 0.11614065 + restLength: 0.11650062 constraintForce: 0 tearResistance: 1 - particle1: 175 particle2: 176 - restLength: 0.11616688 + restLength: 0.11651943 constraintForce: 0 tearResistance: 1 - particle1: 176 particle2: 177 - restLength: 0.11612464 + restLength: 0.11646894 constraintForce: 0 tearResistance: 1 - particle1: 177 particle2: 178 - restLength: 0.116126075 + restLength: 0.11646836 constraintForce: 0 tearResistance: 1 - particle1: 178 particle2: 179 - restLength: 0.1162187 + restLength: 0.11656151 constraintForce: 0 tearResistance: 1 - particle1: 179 particle2: 180 - restLength: 0.116368376 + restLength: 0.11671458 constraintForce: 0 tearResistance: 1 - particle1: 180 particle2: 181 - restLength: 0.11650247 + restLength: 0.11685168 constraintForce: 0 tearResistance: 1 - particle1: 181 particle2: 182 - restLength: 0.11654539 + restLength: 0.11689511 constraintForce: 0 tearResistance: 1 - particle1: 182 particle2: 183 - restLength: 0.11637627 + restLength: 0.1167252 constraintForce: 0 tearResistance: 1 - particle1: 183 particle2: 184 - restLength: 0.116367616 + restLength: 0.11671828 constraintForce: 0 tearResistance: 1 - particle1: 184 particle2: 185 - restLength: 0.116505764 + restLength: 0.11685561 constraintForce: 0 tearResistance: 1 - particle1: 185 particle2: 186 - restLength: 0.11647182 + restLength: 0.11681989 constraintForce: 0 tearResistance: 1 - particle1: 186 particle2: 187 - restLength: 0.11628203 + restLength: 0.11662538 constraintForce: 0 tearResistance: 1 - particle1: 187 particle2: 188 - restLength: 0.11606255 + restLength: 0.11642074 constraintForce: 0 tearResistance: 1 - particle1: 188 particle2: 189 - restLength: 0.11669507 + restLength: 0.117048115 constraintForce: 0 tearResistance: 1 - particle1: 189 particle2: 190 - restLength: 0.116644375 + restLength: 0.11699504 constraintForce: 0 tearResistance: 1 - particle1: 190 particle2: 191 - restLength: 0.11652727 + restLength: 0.11687661 constraintForce: 0 tearResistance: 1 - particle1: 191 particle2: 192 - restLength: 0.116267465 + restLength: 0.11661551 constraintForce: 0 tearResistance: 1 - particle1: 192 particle2: 193 - restLength: 0.115411185 + restLength: 0.11574278 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -1197,56 +1034,6 @@ MonoBehaviour: _maxBending: 0.025 _plasticYield: 0 _plasticCreep: 0 ---- !u!23 &648289278 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648289270} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &648289279 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648289270} - m_Mesh: {fileID: 1201308522} --- !u!114 &648289280 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1260,7 +1047,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: category: 0 ---- !u!1 &926308008 +--- !u!1 &949374097 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1268,8 +1055,8 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 926308010} - - component: {fileID: 926308009} + - component: {fileID: 949374099} + - component: {fileID: 949374098} m_Layer: 0 m_Name: BurstCollisionWorld m_TagString: Untagged @@ -1277,32 +1064,34 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &926308009 +--- !u!114 &949374098 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 926308008} + m_GameObject: {fileID: 949374097} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} m_Name: m_EditorClassIdentifier: - cellSpans: {} ---- !u!4 &926308010 + cellSpans: + m_AlignBytes: 16 +--- !u!4 &949374099 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 926308008} + m_GameObject: {fileID: 949374097} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1002464891 GameObject: @@ -1316,7 +1105,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -1354,9 +1142,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1390,33 +1186,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1002464891} + serializedVersion: 2 m_LocalRotation: {x: 0.15760262, y: 0, z: 0, w: 0.98750263} m_LocalPosition: {x: 0, y: 3.95, z: -4.42} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1175446144 GameObject: m_ObjectHideFlags: 0 @@ -1442,9 +1219,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -1494,8 +1270,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1175446146 Transform: m_ObjectHideFlags: 0 @@ -1503,177 +1283,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} + serializedVersion: 2 m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!43 &1201308522 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &1346965641 GameObject: m_ObjectHideFlags: 0 @@ -1683,8 +1300,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1346965650} - - component: {fileID: 1346965645} - - component: {fileID: 1346965644} - component: {fileID: 1346965642} - component: {fileID: 1346965647} - component: {fileID: 1346965646} @@ -1711,242 +1326,249 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000 + solverIndices: + serializedContents: 260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000 + m_AlignBytes: 16 + groupID: 3 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 1 + m_MassScale: 1 m_SelfCollisions: 1 - restLength_: 5.3759427 + restLength_: 5.39185 elements: - particle1: 294 particle2: 295 - restLength: 0.11737857 + restLength: 0.11771238 constraintForce: 0 tearResistance: 1 - particle1: 295 particle2: 296 - restLength: 0.11757569 + restLength: 0.11794325 constraintForce: 0 tearResistance: 1 - particle1: 296 particle2: 297 - restLength: 0.117257625 + restLength: 0.117595166 constraintForce: 0 tearResistance: 1 - particle1: 297 particle2: 298 - restLength: 0.117347114 + restLength: 0.11768351 constraintForce: 0 tearResistance: 1 - particle1: 298 particle2: 299 - restLength: 0.11749813 + restLength: 0.11783673 constraintForce: 0 tearResistance: 1 - particle1: 299 particle2: 300 - restLength: 0.117627345 + restLength: 0.117969744 constraintForce: 0 tearResistance: 1 - particle1: 300 particle2: 301 - restLength: 0.1176776 + restLength: 0.11802316 constraintForce: 0 tearResistance: 1 - particle1: 301 particle2: 302 - restLength: 0.11761664 + restLength: 0.11796464 constraintForce: 0 tearResistance: 1 - particle1: 302 particle2: 303 - restLength: 0.117508255 + restLength: 0.1178521 constraintForce: 0 tearResistance: 1 - particle1: 303 particle2: 304 - restLength: 0.11763225 + restLength: 0.117975526 constraintForce: 0 tearResistance: 1 - particle1: 304 particle2: 305 - restLength: 0.11766701 + restLength: 0.11801252 constraintForce: 0 tearResistance: 1 - particle1: 305 particle2: 306 - restLength: 0.117603354 + restLength: 0.11794836 constraintForce: 0 tearResistance: 1 - particle1: 306 particle2: 307 - restLength: 0.11748713 + restLength: 0.11783 constraintForce: 0 tearResistance: 1 - particle1: 307 particle2: 308 - restLength: 0.11737358 + restLength: 0.117713265 constraintForce: 0 tearResistance: 1 - particle1: 308 particle2: 309 - restLength: 0.11731443 + restLength: 0.117651865 constraintForce: 0 tearResistance: 1 - particle1: 309 particle2: 310 - restLength: 0.117334664 + restLength: 0.117673375 constraintForce: 0 tearResistance: 1 - particle1: 310 particle2: 311 - restLength: 0.117409684 + restLength: 0.117791526 constraintForce: 0 tearResistance: 1 - particle1: 311 particle2: 312 - restLength: 0.117427535 + restLength: 0.11774277 constraintForce: 0 tearResistance: 1 - particle1: 312 particle2: 313 - restLength: 0.1173339 + restLength: 0.11769215 constraintForce: 0 tearResistance: 1 - particle1: 313 particle2: 314 - restLength: 0.11715327 + restLength: 0.11750718 constraintForce: 0 tearResistance: 1 - particle1: 314 particle2: 315 - restLength: 0.11707407 + restLength: 0.11741844 constraintForce: 0 tearResistance: 1 - particle1: 315 particle2: 316 - restLength: 0.11728205 + restLength: 0.1176177 constraintForce: 0 tearResistance: 1 - particle1: 316 particle2: 317 - restLength: 0.11794879 + restLength: 0.11827736 constraintForce: 0 tearResistance: 1 - particle1: 317 particle2: 318 - restLength: 0.11673033 + restLength: 0.11706203 constraintForce: 0 tearResistance: 1 - particle1: 318 particle2: 319 - restLength: 0.116027325 + restLength: 0.11636803 constraintForce: 0 tearResistance: 1 - particle1: 319 particle2: 320 - restLength: 0.115863316 + restLength: 0.11621493 constraintForce: 0 tearResistance: 1 - particle1: 320 particle2: 321 - restLength: 0.11598866 + restLength: 0.11634967 constraintForce: 0 tearResistance: 1 - particle1: 321 particle2: 322 - restLength: 0.11614065 + restLength: 0.11650062 constraintForce: 0 tearResistance: 1 - particle1: 322 particle2: 323 - restLength: 0.11616688 + restLength: 0.11651943 constraintForce: 0 tearResistance: 1 - particle1: 323 particle2: 324 - restLength: 0.11612464 + restLength: 0.11646894 constraintForce: 0 tearResistance: 1 - particle1: 324 particle2: 325 - restLength: 0.116126075 + restLength: 0.11646836 constraintForce: 0 tearResistance: 1 - particle1: 325 particle2: 326 - restLength: 0.1162187 + restLength: 0.11656151 constraintForce: 0 tearResistance: 1 - particle1: 326 particle2: 327 - restLength: 0.116368376 + restLength: 0.11671458 constraintForce: 0 tearResistance: 1 - particle1: 327 particle2: 328 - restLength: 0.11650247 + restLength: 0.11685168 constraintForce: 0 tearResistance: 1 - particle1: 328 particle2: 329 - restLength: 0.11654539 + restLength: 0.11689511 constraintForce: 0 tearResistance: 1 - particle1: 329 particle2: 330 - restLength: 0.11637627 + restLength: 0.1167252 constraintForce: 0 tearResistance: 1 - particle1: 330 particle2: 331 - restLength: 0.116367616 + restLength: 0.11671828 constraintForce: 0 tearResistance: 1 - particle1: 331 particle2: 332 - restLength: 0.116505764 + restLength: 0.11685561 constraintForce: 0 tearResistance: 1 - particle1: 332 particle2: 333 - restLength: 0.11647182 + restLength: 0.11681989 constraintForce: 0 tearResistance: 1 - particle1: 333 particle2: 334 - restLength: 0.11628203 + restLength: 0.11662538 constraintForce: 0 tearResistance: 1 - particle1: 334 particle2: 335 - restLength: 0.11606255 + restLength: 0.11642074 constraintForce: 0 tearResistance: 1 - particle1: 335 particle2: 336 - restLength: 0.11669507 + restLength: 0.117048115 constraintForce: 0 tearResistance: 1 - particle1: 336 particle2: 337 - restLength: 0.116644375 + restLength: 0.11699504 constraintForce: 0 tearResistance: 1 - particle1: 337 particle2: 338 - restLength: 0.11652727 + restLength: 0.11687661 constraintForce: 0 tearResistance: 1 - particle1: 338 particle2: 339 - restLength: 0.116267465 + restLength: 0.11661551 constraintForce: 0 tearResistance: 1 - particle1: 339 particle2: 340 - restLength: 0.115411185 + restLength: 0.11574278 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -1977,58 +1599,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity ---- !u!23 &1346965644 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1346965645 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Mesh: {fileID: 511885495} + breakThreshold: Infinity --- !u!114 &1346965646 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2041,6 +1614,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 16} normalizeV: 1 @@ -2061,6 +1643,7 @@ MonoBehaviour: decimation: 0.05 smoothing: 1 twist: 0 + indexInSystem: 1 --- !u!114 &1346965648 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2078,8 +1661,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -8864857226987616246, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1346965649 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2100,12 +1684,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1346965641} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 3.63, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2102841797} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1346965651 MonoBehaviour: @@ -2120,49 +1705,67 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: category: 0 ---- !u!1 &1583418123 -GameObject: +--- !u!850595691 &1570830420 +LightingSettings: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Name: Settings.lighting + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &1896057539 GameObject: m_ObjectHideFlags: 0 @@ -2239,7 +1842,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -2253,10 +1858,10 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 2009578511} m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2291,9 +1896,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1896057543} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2342,170 +1947,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2009578510} m_CullTransparentMesh: 0 ---- !u!43 &2092596634 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &2102841794 GameObject: m_ObjectHideFlags: 0 @@ -2516,7 +1957,6 @@ GameObject: m_Component: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -2524,21 +1964,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 3 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2553,23 +1978,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.2 maxAnisotropy: 3 sleepThreshold: 0.0001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.025 maxDepenetration: 10 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.01 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 2 @@ -2625,6 +2084,11 @@ MonoBehaviour: iterations: 5 SORFactor: 1 enabled: 0 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 0 iterations: 5 @@ -2657,13 +2121,24 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102841794} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1346965650} - {fileID: 648289271} - {fileID: 21365383} m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 1896057543} + - {fileID: 949374099} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCuttingSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCuttingSettings.lighting deleted file mode 100644 index 0c1f4415c..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCuttingSettings.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: RopeCuttingSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 0 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 1 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCuttingSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCuttingSettings.lighting.meta deleted file mode 100644 index b8d3aff9e..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeCuttingSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8c7faed9772fc9a4bb2c3f36bc57b45d -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity index 8bc2b8a40..d48f8ed97 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 0 @@ -97,14 +93,14 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 80876ee398138cc4ba6c6dad2bf99328, type: 2} + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 6530f45834fcb41a0b4b10b622d95c4c, type: 2} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -156,6 +152,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0.05 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 694935032} @@ -177,6 +174,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -198,6 +200,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -210,9 +213,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 694935029} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &694935033 @@ -230,12 +241,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 694935029} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.92, y: 11.57, z: 0} m_LocalScale: {x: 1.2072676, y: 1.1407216, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &942810411 GameObject: @@ -286,9 +298,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -322,12 +342,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 942810411} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 4.8, z: -13.26} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1006563103 GameObject: @@ -366,6 +387,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -387,6 +413,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -399,9 +426,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1006563103} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1006563106 @@ -419,12 +454,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1006563103} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -0.07, z: 0} m_LocalScale: {x: 19.468725, y: 1.1407216, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1006563108 MonoBehaviour: @@ -439,6 +475,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1006563105} @@ -467,12 +504,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1201433689} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1247776992} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1201433691 MonoBehaviour: @@ -524,10 +562,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1247776987} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 2 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 m_Interpolate: 0 @@ -550,6 +599,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -571,6 +625,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -583,8 +638,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1247776987} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.5 m_Height: 2 m_Direction: 1 @@ -604,13 +668,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1247776987} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -6.82, y: 6.18, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1201433690} m_Father: {fileID: 2108375383} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1247776993 MonoBehaviour: @@ -624,9 +689,17 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 82b0f164ac14247fd8a566109fbbe771, type: 3} m_Name: m_EditorClassIdentifier: + floorRaycastDistance: 1.2 acceleration: 20 maxSpeed: 10 - jumpPower: 4 + damping: 0.008 + jumpPower: 8 + airAcceleration: 16 + airMaxSpeed: 12 + extraGravity: -12 + centerOfMass: {x: 0, y: -0.25, z: 0} + P: 2 + D: 0.1 --- !u!114 &1247776994 MonoBehaviour: m_ObjectHideFlags: 0 @@ -653,6 +726,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -131071 m_SourceCollider: {fileID: 1247776990} @@ -685,9 +759,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1997975594} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -779,6 +853,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -800,6 +879,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -812,9 +892,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1641461104} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1641461107 @@ -832,12 +920,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1641461104} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 3.5, y: 7.46, z: 0} m_LocalScale: {x: 1.2072676, y: 1.1407216, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1641461109 MonoBehaviour: @@ -852,6 +941,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0.05 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1641461106} @@ -886,9 +976,9 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1997975594} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1004,6 +1094,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1025,6 +1120,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1037,9 +1133,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1735419977} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1735419980 @@ -1057,12 +1161,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1735419977} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -3.5, y: 7.46, z: 0} m_LocalScale: {x: 3.9395108, y: 1.1407216, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1735419982 MonoBehaviour: @@ -1077,6 +1182,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0.05 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1735419979} @@ -1106,9 +1212,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1954069164} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -1158,8 +1263,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1954069166 Transform: m_ObjectHideFlags: 0 @@ -1167,12 +1276,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1954069164} + serializedVersion: 2 m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1 &1997975590 GameObject: @@ -1250,7 +1360,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -1264,11 +1376,11 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1465091930} - {fileID: 1694332650} m_Father: {fileID: 0} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1285,7 +1397,6 @@ GameObject: m_Component: - component: {fileID: 2108375383} - component: {fileID: 2108375382} - - component: {fileID: 2108375381} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -1293,21 +1404,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2108375381 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2108375380} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2108375382} - substeps: 8 --- !u!114 &2108375382 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1322,23 +1418,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 8 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0 maxAnisotropy: 3 sleepThreshold: 0.0001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.02 maxDepenetration: 10 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 2 @@ -1394,6 +1524,11 @@ MonoBehaviour: iterations: 1 SORFactor: 1 enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 2 @@ -1426,11 +1561,24 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2108375380} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1247776992} m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 942810416} + - {fileID: 1954069166} + - {fileID: 1735419981} + - {fileID: 1006563107} + - {fileID: 1641461108} + - {fileID: 2108375383} + - {fileID: 694935034} + - {fileID: 1997975594} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting index 6f7aeceb8..5ff65fed1 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RopeGrapplingHookSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_RealtimeEnvironmentLighting: 1 @@ -16,11 +15,13 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 1 - m_BakeBackend: 0 + m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 1 @@ -31,23 +32,21 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 + m_PVREnvironmentImportanceSampling: 0 m_PVRFilteringMode: 2 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta index efc042435..d414d9ab5 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 80876ee398138cc4ba6c6dad2bf99328 +guid: 6530f45834fcb41a0b4b10b622d95c4c NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNet.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNet.unity index 40ce63141..78f41e4e0 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNet.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNet.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -97,14 +93,14 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: 1aca7c827091dca48a4e1fe6b6d2881b, type: 2} + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 752305721} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -128,6 +124,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -175,10 +172,19 @@ PrefabInstance: value: -0 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 65402946} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 65402945} m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} --- !u!1 &65402944 stripped GameObject: @@ -198,6 +204,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 65402946} @@ -210,9 +217,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 65402944} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -256,9 +271,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -292,13 +315,75 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 335576535} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 4, y: 2, z: -15} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!850595691 &752305721 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &1750272832 GameObject: m_ObjectHideFlags: 0 @@ -324,9 +409,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1750272832} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -376,8 +460,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1750272834 Transform: m_ObjectHideFlags: 0 @@ -385,12 +473,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1750272832} + serializedVersion: 2 m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1 &2144190319 GameObject: @@ -432,10 +521,19 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2144190319} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 335576538} + - {fileID: 1750272834} + - {fileID: 2144190321} + - {fileID: 65402943} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNetSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNetSettings.lighting deleted file mode 100644 index 838c4ab67..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNetSettings.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: RopeNetSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 1 - m_BakeBackend: 1 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 2 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 512 - m_PVREnvironmentSampleCount: 256 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 1 - m_PVRFilteringMode: 1 - m_PVRDenoiserTypeDirect: 1 - m_PVRDenoiserTypeIndirect: 1 - m_PVRDenoiserTypeAO: 1 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNetSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNetSettings.lighting.meta deleted file mode 100644 index ff63b17f0..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeNetSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1aca7c827091dca48a4e1fe6b6d2881b -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcase.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcase.unity index 48a2e7e07..71581ed3d 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcase.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcase.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 m_ReflectionCompression: 2 m_MixedBakeMode: 1 m_BakeBackend: 0 @@ -98,13 +94,13 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: e03ec62a6e88de24c8ddd582e0a9082e, type: 2} + m_LightingSettings: {fileID: 4890085278179872738, guid: d03718b1550344932a85912567fb2a98, type: 2} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -149,12 +145,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 11813904} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.21133643, y: 0.21133643, z: 2.4164045} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1415489122} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &11813906 MeshRenderer: @@ -173,6 +170,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -194,6 +196,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -206,9 +209,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 11813904} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &11813908 @@ -257,6 +268,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -278,6 +294,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -290,9 +307,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 206877714} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &206877717 @@ -310,12 +335,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 206877714} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: 0.38268343, w: 0.92387956} m_LocalPosition: {x: 1.97, y: 0.8, z: -0.142} m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1376993203} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 45} --- !u!114 &206877719 MonoBehaviour: @@ -343,6 +369,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0.05 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 206877716} @@ -385,6 +412,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -406,6 +438,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -418,9 +451,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 256028320} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &256028323 @@ -438,12 +479,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 256028320} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.98, y: 0.79, z: -0.142} m_LocalScale: {x: 0.7, y: 0.7, z: 0.7} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1376993203} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &256028325 MonoBehaviour: @@ -471,6 +513,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0.05 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 256028322} @@ -484,8 +527,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 283112603} - - component: {fileID: 283112608} - - component: {fileID: 283112607} - component: {fileID: 283112605} - component: {fileID: 283112604} - component: {fileID: 283112606} @@ -505,12 +546,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 283112602} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 2.06, y: 0, z: -0.82} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1415489122} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &283112604 MonoBehaviour: @@ -529,8 +571,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -8864857226987616246, guid: 9d8ad1e0aac8f48deb9f3cda92974152, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &283112605 MonoBehaviour: m_ObjectHideFlags: 0 @@ -548,8 +591,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2639811391673711616, guid: 9d8ad1e0aac8f48deb9f3cda92974152, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &283112606 MonoBehaviour: m_ObjectHideFlags: 0 @@ -562,9 +606,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000740000007500000076000000770000007800000079000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000740000007500000076000000770000007800000079000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 4.014817 elements: @@ -673,6 +721,9 @@ MonoBehaviour: restLength: 0.1872108 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 9d8ad1e0aac8f48deb9f3cda92974152, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -686,56 +737,6 @@ MonoBehaviour: _maxBending: 0.04 _plasticYield: 0 _plasticCreep: 0 ---- !u!23 &283112607 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 283112602} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &283112608 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 283112602} - m_Mesh: {fileID: 2092596634} --- !u!114 &283112609 MonoBehaviour: m_ObjectHideFlags: 0 @@ -748,6 +749,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 6} normalizeV: 1 @@ -768,11 +778,13 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 0 --- !u!1001 &421764872 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -808,10 +820,19 @@ PrefabInstance: value: -0 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} --- !u!1 &458966907 GameObject: @@ -850,6 +871,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -871,6 +897,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -883,9 +910,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 458966907} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &458966910 @@ -903,17 +938,18 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 458966907} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1.676, y: 2.471, z: -0.13173246} m_LocalScale: {x: 0.26776046, y: 0.26776043, z: 0.75408345} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1201406216} m_Father: {fileID: 1376993203} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &458966912 Animator: - serializedVersion: 3 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -926,10 +962,13 @@ Animator: m_UpdateMode: 1 m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 1 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!1 &506459881 stripped GameObject: m_CorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -943,9 +982,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 506459881} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -962,174 +1009,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 506459882} m_DistanceField: {fileID: 0} ---- !u!43 &511885495 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &515194302 GameObject: m_ObjectHideFlags: 0 @@ -1154,19 +1038,20 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 515194302} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -4.998, y: 2.323, z: 2.77} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1346965650} - {fileID: 1742644164} - {fileID: 913365225} m_Father: {fileID: 2102841797} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &515194304 Animator: - serializedVersion: 3 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -1179,10 +1064,13 @@ Animator: m_UpdateMode: 1 m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 1 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!1 &592657015 GameObject: m_ObjectHideFlags: 0 @@ -1212,7 +1100,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} m_Name: m_EditorClassIdentifier: - cellSpans: {} + cellSpans: + m_AlignBytes: 16 --- !u!4 &592657017 Transform: m_ObjectHideFlags: 0 @@ -1220,12 +1109,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 592657015} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &656652120 GameObject: @@ -1265,6 +1155,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1286,6 +1181,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1298,9 +1194,17 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 656652120} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} --- !u!33 &656652123 @@ -1318,12 +1222,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 656652120} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0.45, y: 0.77, z: -0.142} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1376993203} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &656652125 MonoBehaviour: @@ -1351,174 +1256,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 656652122} m_DistanceField: {fileID: 0} ---- !u!43 &855843803 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &913365224 GameObject: m_ObjectHideFlags: 0 @@ -1528,8 +1270,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 913365225} - - component: {fileID: 913365230} - - component: {fileID: 913365229} - component: {fileID: 913365226} - component: {fileID: 913365231} - component: {fileID: 913365228} @@ -1549,12 +1289,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 913365224} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1.02, y: 0, z: -2} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 515194303} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &913365226 MonoBehaviour: @@ -1568,9 +1309,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 7a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000 + solverIndices: + serializedContents: 7a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000 + m_AlignBytes: 16 + groupID: 2 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -1629,6 +1374,9 @@ MonoBehaviour: restLength: 0.18078607 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -1659,8 +1407,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &913365228 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1673,61 +1422,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 6} normalizeV: 1 section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} thicknessScale: 0.8 ---- !u!23 &913365229 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 913365224} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &913365230 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 913365224} - m_Mesh: {fileID: 1201308522} --- !u!114 &913365231 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1743,6 +1451,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 1 --- !u!114 &913365232 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1760,8 +1469,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 8225853497016287227, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!1 &948693937 GameObject: m_ObjectHideFlags: 0 @@ -1792,9 +1502,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1067532270} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1885,7 +1595,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -1923,9 +1632,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1959,33 +1676,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1002464891} + serializedVersion: 2 m_LocalRotation: {x: 0.15760262, y: 0, z: 0, w: 0.98750263} m_LocalPosition: {x: 0, y: 3.95, z: -4.42} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1067532266 GameObject: m_ObjectHideFlags: 0 @@ -2062,7 +1760,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -2076,10 +1776,10 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 948693938} m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2111,9 +1811,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -2163,8 +1862,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1175446146 Transform: m_ObjectHideFlags: 0 @@ -2172,177 +1875,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} + serializedVersion: 2 m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!43 &1201308522 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &1201406215 GameObject: m_ObjectHideFlags: 0 @@ -2352,8 +1892,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1201406216} - - component: {fileID: 1201406220} - - component: {fileID: 1201406221} - component: {fileID: 1201406217} - component: {fileID: 1201406222} - component: {fileID: 1201406219} @@ -2372,12 +1910,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1201406215} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: 0, y: -4.23, z: 0} m_LocalScale: {x: 3.7346814, y: 3.7346818, z: 1.3261132} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 458966911} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90.00001} --- !u!114 &1201406217 MonoBehaviour: @@ -2391,9 +1930,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f01000050010000510100005201000053010000540100005501000056010000570100005801000059010000 + solverIndices: + serializedContents: ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f01000050010000510100005201000053010000540100005501000056010000570100005801000059010000 + m_AlignBytes: 16 + groupID: 3 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -2452,6 +1995,9 @@ MonoBehaviour: restLength: 0.18078607 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -2482,8 +2028,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1201406219 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2496,61 +2043,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 6} normalizeV: 1 section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} thicknessScale: 1 ---- !u!23 &1201406220 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1201406215} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1201406221 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1201406215} - m_Mesh: {fileID: 1399984881} --- !u!114 &1201406222 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2566,6 +2072,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 2 --- !u!1 &1346965641 GameObject: m_ObjectHideFlags: 0 @@ -2575,8 +2082,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1346965650} - - component: {fileID: 1346965645} - - component: {fileID: 1346965644} - component: {fileID: 1346965642} - component: {fileID: 1346965647} - component: {fileID: 1346965646} @@ -2601,9 +2106,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 5a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000 + solverIndices: + serializedContents: 5a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000 + m_AlignBytes: 16 + groupID: 4 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -2662,6 +2171,9 @@ MonoBehaviour: restLength: 0.18078607 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -2692,58 +2204,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity ---- !u!23 &1346965644 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1346965645 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Mesh: {fileID: 855843803} + breakThreshold: Infinity --- !u!114 &1346965646 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2756,6 +2219,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 6} normalizeV: 1 @@ -2776,6 +2248,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 3 --- !u!114 &1346965648 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2793,8 +2266,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 8225853497016287227, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!4 &1346965650 Transform: m_ObjectHideFlags: 0 @@ -2802,12 +2276,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1346965641} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1.02, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 515194303} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1376993202 GameObject: @@ -2832,181 +2307,18 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1376993202} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 256028324} - {fileID: 656652124} - {fileID: 206877718} - {fileID: 458966911} m_Father: {fileID: 2102841797} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!43 &1399984881 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &1415489121 GameObject: m_ObjectHideFlags: 0 @@ -3030,58 +2342,16 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1415489121} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.19, y: 3.291, z: 3.79} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 11813905} - {fileID: 1872762459} - {fileID: 283112603} m_Father: {fileID: 2102841797} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1742644163 GameObject: @@ -3092,8 +2362,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1742644164} - - component: {fileID: 1742644169} - - component: {fileID: 1742644168} - component: {fileID: 1742644165} - component: {fileID: 1742644170} - component: {fileID: 1742644167} @@ -3113,12 +2381,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1742644163} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1.02, y: 0, z: -1} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 515194303} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1742644165 MonoBehaviour: @@ -3132,9 +2401,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000d8010000d9010000da010000db010000dc010000dd010000de010000df010000e0010000e1010000e2010000e3010000e4010000e5010000e6010000e7010000e8010000e9010000ea010000eb010000ec010000ed010000ee010000ef010000f0010000f1010000f2010000f3010000f4010000f5010000f6010000f7010000f8010000f9010000fa010000fb010000fc010000fd010000fe010000ff010000000200000102000002020000030200000402000005020000060200000702000008020000090200000a0200000b0200000c0200000d0200000e0200000f020000100200001102000012020000130200001402000015020000160200001702000018020000190200001a0200001b0200001c0200001d0200001e0200001f020000200200002102000022020000230200002402000025020000260200002702000028020000290200002a0200002b0200002c0200002d0200002e0200002f02000030020000310200003202000033020000340200003502000036020000370200003802000039020000 + solverIndices: + serializedContents: ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000d8010000d9010000da010000db010000dc010000dd010000de010000df010000e0010000e1010000e2010000e3010000e4010000e5010000e6010000e7010000e8010000e9010000ea010000eb010000ec010000ed010000ee010000ef010000f0010000f1010000f2010000f3010000f4010000f5010000f6010000f7010000f8010000f9010000fa010000fb010000fc010000fd010000fe010000ff010000000200000102000002020000030200000402000005020000060200000702000008020000090200000a0200000b0200000c0200000d0200000e0200000f020000100200001102000012020000130200001402000015020000160200001702000018020000190200001a0200001b0200001c0200001d0200001e0200001f020000200200002102000022020000230200002402000025020000260200002702000028020000290200002a0200002b0200002c0200002d0200002e0200002f02000030020000310200003202000033020000340200003502000036020000370200003802000039020000 + m_AlignBytes: 16 + groupID: 5 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 2 elements: @@ -3193,6 +2466,9 @@ MonoBehaviour: restLength: 0.18078607 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -3223,8 +2499,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1742644167 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3237,61 +2514,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 6} normalizeV: 1 section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} thicknessScale: 0.8 ---- !u!23 &1742644168 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1742644163} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1742644169 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1742644163} - m_Mesh: {fileID: 511885495} --- !u!114 &1742644170 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3307,6 +2543,7 @@ MonoBehaviour: decimation: 0 smoothing: 0 twist: 0 + indexInSystem: 4 --- !u!114 &1742644171 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3324,8 +2561,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 8225853497016287227, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!1 &1872762458 GameObject: m_ObjectHideFlags: 0 @@ -3353,12 +2591,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1872762458} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 4.22, y: 0, z: 0} m_LocalScale: {x: 0.21134, y: 0.21134, z: 2.4164} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1415489122} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1872762460 MeshRenderer: @@ -3377,6 +2616,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -3398,6 +2642,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -3410,9 +2655,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1872762458} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!33 &1872762462 @@ -3425,7 +2678,7 @@ MeshFilter: m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!95 &1872762463 Animator: - serializedVersion: 3 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -3438,174 +2691,13 @@ Animator: m_UpdateMode: 1 m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 1 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 ---- !u!43 &2092596634 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!1 &2102841794 GameObject: m_ObjectHideFlags: 0 @@ -3617,7 +2709,6 @@ GameObject: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - component: {fileID: 2102841798} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -3625,21 +2716,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 3 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3654,23 +2730,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.02 maxDepenetration: 10 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 2 @@ -3726,6 +2836,11 @@ MonoBehaviour: iterations: 5 SORFactor: 1 enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 0 iterations: 5 @@ -3758,15 +2873,16 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102841794} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1376993203} - {fileID: 515194303} - {fileID: 1415489122} m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2102841798 MonoBehaviour: @@ -3780,3 +2896,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ef31b6ca9a4124cb893de1adabbfab18, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 1067532270} + - {fileID: 592657017} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting index bca072bbd..08c56b1af 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RopeShowcaseSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_RealtimeEnvironmentLighting: 1 @@ -16,11 +15,13 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 0 - m_BakeBackend: 0 + m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -31,23 +32,21 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 + m_PVREnvironmentImportanceSampling: 0 m_PVRFilteringMode: 2 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta index a45d333c4..ce3742d80 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e03ec62a6e88de24c8ddd582e0a9082e +guid: d03718b1550344932a85912567fb2a98 NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopesColliding.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopesColliding.unity new file mode 100644 index 000000000..bdf94f79b --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopesColliding.unity @@ -0,0 +1,2402 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: cfd0a31533ca84d319eb2d45c71f457d, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} + m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &506459881 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + m_PrefabInstance: {fileID: 421764872} + m_PrefabAsset: {fileID: 0} +--- !u!64 &506459882 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506459881} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!114 &506459883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506459881} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 11400000, guid: 56297c6e785b44eb28e469b62cedc016, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 506459882} + m_DistanceField: {fileID: 0} +--- !u!1 &526830944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 526830948} + - component: {fileID: 526830947} + - component: {fileID: 526830946} + - component: {fileID: 526830945} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &526830945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526830944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &526830946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526830944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &526830947 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526830944} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &526830948 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526830944} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1145597568} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &895366425 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895366426} + - component: {fileID: 895366433} + - component: {fileID: 895366432} + - component: {fileID: 895366431} + - component: {fileID: 895366434} + m_Layer: 10 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &895366426 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895366425} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.6813427, z: -0, w: 0.7319646} + m_LocalPosition: {x: 0.17620039, y: 0.88, z: -2.2439194} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0, y: 85.897, z: 0} +--- !u!114 &895366431 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895366425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: f342c944c10cc4c9188a4f352c6a6eee, type: 2} + renderParameters: + layer: 10 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 8} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &895366432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895366425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !u!114 &895366433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895366425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 5.4620275 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.11343384 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.1400795 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.13731146 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.14056301 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.14499426 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.1369896 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.14367747 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.13849878 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.14347577 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.13862038 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.14278126 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.1394751 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.14137006 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.14105272 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.14048934 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.14181376 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.14023328 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.14107311 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.14103353 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.14082837 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.14076781 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.14133894 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.14049971 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.14129508 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.14103425 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + restLength: 0.14002609 + constraintForce: 0 + tearResistance: 1 + - particle1: 26 + particle2: 27 + restLength: 0.14223284 + constraintForce: 0 + tearResistance: 1 + - particle1: 27 + particle2: 28 + restLength: 0.13930953 + constraintForce: 0 + tearResistance: 1 + - particle1: 28 + particle2: 29 + restLength: 0.14266565 + constraintForce: 0 + tearResistance: 1 + - particle1: 29 + particle2: 30 + restLength: 0.13980219 + constraintForce: 0 + tearResistance: 1 + - particle1: 30 + particle2: 31 + restLength: 0.14202453 + constraintForce: 0 + tearResistance: 1 + - particle1: 31 + particle2: 32 + restLength: 0.14010233 + constraintForce: 0 + tearResistance: 1 + - particle1: 32 + particle2: 33 + restLength: 0.14205298 + constraintForce: 0 + tearResistance: 1 + - particle1: 33 + particle2: 34 + restLength: 0.13910069 + constraintForce: 0 + tearResistance: 1 + - particle1: 34 + particle2: 35 + restLength: 0.14355478 + constraintForce: 0 + tearResistance: 1 + - particle1: 35 + particle2: 36 + restLength: 0.13863954 + constraintForce: 0 + tearResistance: 1 + - particle1: 36 + particle2: 37 + restLength: 0.14013106 + constraintForce: 0 + tearResistance: 1 + - particle1: 37 + particle2: 38 + restLength: 0.14137465 + constraintForce: 0 + tearResistance: 1 + - particle1: 38 + particle2: 39 + restLength: 0.13828081 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} + tearingEnabled: 1 + tearResistanceMultiplier: 450 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.02 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &895366434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895366425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fbbc507232dcc4cb1ae27d9474ddbe70, type: 3} + m_Name: + m_EditorClassIdentifier: + neutralColor: {r: 1, g: 1, b: 1, a: 1} + highlightColor: {r: 1, g: 0, b: 0, a: 1} +--- !u!1 &1002464891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1002464896} + - component: {fileID: 1002464895} + - component: {fileID: 1002464893} + - component: {fileID: 1002464892} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1002464892 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 +--- !u!124 &1002464893 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 +--- !u!20 &1002464895 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 75 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1002464896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1002464891} + serializedVersion: 2 + m_LocalRotation: {x: 0.32325152, y: -0, z: -0, w: 0.9463131} + m_LocalPosition: {x: 0, y: 3.95, z: -4.42} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 37.719, y: 0, z: 0} +--- !u!1 &1143169366 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1143169367} + - component: {fileID: 1143169370} + - component: {fileID: 1143169369} + - component: {fileID: 1143169368} + - component: {fileID: 1143169371} + m_Layer: 10 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1143169367 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143169366} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.19, y: 0.27, z: 0.93} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1143169368 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143169366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: f342c944c10cc4c9188a4f352c6a6eee, type: 2} + renderParameters: + layer: 10 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 8} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1143169369 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143169366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 1 +--- !u!114 &1143169370 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143169366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 28000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 5.4620275 + elements: + - particle1: 40 + particle2: 41 + restLength: 0.11343384 + constraintForce: 0 + tearResistance: 1 + - particle1: 41 + particle2: 42 + restLength: 0.1400795 + constraintForce: 0 + tearResistance: 1 + - particle1: 42 + particle2: 43 + restLength: 0.13731146 + constraintForce: 0 + tearResistance: 1 + - particle1: 43 + particle2: 44 + restLength: 0.14056301 + constraintForce: 0 + tearResistance: 1 + - particle1: 44 + particle2: 45 + restLength: 0.14499426 + constraintForce: 0 + tearResistance: 1 + - particle1: 45 + particle2: 46 + restLength: 0.1369896 + constraintForce: 0 + tearResistance: 1 + - particle1: 46 + particle2: 47 + restLength: 0.14367747 + constraintForce: 0 + tearResistance: 1 + - particle1: 47 + particle2: 48 + restLength: 0.13849878 + constraintForce: 0 + tearResistance: 1 + - particle1: 48 + particle2: 49 + restLength: 0.14347577 + constraintForce: 0 + tearResistance: 1 + - particle1: 49 + particle2: 50 + restLength: 0.13862038 + constraintForce: 0 + tearResistance: 1 + - particle1: 50 + particle2: 51 + restLength: 0.14278126 + constraintForce: 0 + tearResistance: 1 + - particle1: 51 + particle2: 52 + restLength: 0.1394751 + constraintForce: 0 + tearResistance: 1 + - particle1: 52 + particle2: 53 + restLength: 0.14137006 + constraintForce: 0 + tearResistance: 1 + - particle1: 53 + particle2: 54 + restLength: 0.14105272 + constraintForce: 0 + tearResistance: 1 + - particle1: 54 + particle2: 55 + restLength: 0.14048934 + constraintForce: 0 + tearResistance: 1 + - particle1: 55 + particle2: 56 + restLength: 0.14181376 + constraintForce: 0 + tearResistance: 1 + - particle1: 56 + particle2: 57 + restLength: 0.14023328 + constraintForce: 0 + tearResistance: 1 + - particle1: 57 + particle2: 58 + restLength: 0.14107311 + constraintForce: 0 + tearResistance: 1 + - particle1: 58 + particle2: 59 + restLength: 0.14103353 + constraintForce: 0 + tearResistance: 1 + - particle1: 59 + particle2: 60 + restLength: 0.14082837 + constraintForce: 0 + tearResistance: 1 + - particle1: 60 + particle2: 61 + restLength: 0.14076781 + constraintForce: 0 + tearResistance: 1 + - particle1: 61 + particle2: 62 + restLength: 0.14133894 + constraintForce: 0 + tearResistance: 1 + - particle1: 62 + particle2: 63 + restLength: 0.14049971 + constraintForce: 0 + tearResistance: 1 + - particle1: 63 + particle2: 64 + restLength: 0.14129508 + constraintForce: 0 + tearResistance: 1 + - particle1: 64 + particle2: 65 + restLength: 0.14103425 + constraintForce: 0 + tearResistance: 1 + - particle1: 65 + particle2: 66 + restLength: 0.14002609 + constraintForce: 0 + tearResistance: 1 + - particle1: 66 + particle2: 67 + restLength: 0.14223284 + constraintForce: 0 + tearResistance: 1 + - particle1: 67 + particle2: 68 + restLength: 0.13930953 + constraintForce: 0 + tearResistance: 1 + - particle1: 68 + particle2: 69 + restLength: 0.14266565 + constraintForce: 0 + tearResistance: 1 + - particle1: 69 + particle2: 70 + restLength: 0.13980219 + constraintForce: 0 + tearResistance: 1 + - particle1: 70 + particle2: 71 + restLength: 0.14202453 + constraintForce: 0 + tearResistance: 1 + - particle1: 71 + particle2: 72 + restLength: 0.14010233 + constraintForce: 0 + tearResistance: 1 + - particle1: 72 + particle2: 73 + restLength: 0.14205298 + constraintForce: 0 + tearResistance: 1 + - particle1: 73 + particle2: 74 + restLength: 0.13910069 + constraintForce: 0 + tearResistance: 1 + - particle1: 74 + particle2: 75 + restLength: 0.14355478 + constraintForce: 0 + tearResistance: 1 + - particle1: 75 + particle2: 76 + restLength: 0.13863954 + constraintForce: 0 + tearResistance: 1 + - particle1: 76 + particle2: 77 + restLength: 0.14013106 + constraintForce: 0 + tearResistance: 1 + - particle1: 77 + particle2: 78 + restLength: 0.14137465 + constraintForce: 0 + tearResistance: 1 + - particle1: 78 + particle2: 79 + restLength: 0.13828081 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} + tearingEnabled: 1 + tearResistanceMultiplier: 450 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.02 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1143169371 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143169366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fbbc507232dcc4cb1ae27d9474ddbe70, type: 3} + m_Name: + m_EditorClassIdentifier: + neutralColor: {r: 1, g: 1, b: 1, a: 1} + highlightColor: {r: 1, g: 0, b: 0, a: 1} +--- !u!1 &1145597567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1145597568} + - component: {fileID: 1145597570} + - component: {fileID: 1145597569} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1145597568 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1145597567} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 526830948} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 103, y: 26} + m_SizeDelta: {x: 160, y: 23.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1145597569 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1145597567} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 20 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Click and drag the ropes to manipulate them. +--- !u!222 &1145597570 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1145597567} + m_CullTransparentMesh: 0 +--- !u!1 &1175446144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1175446146} + - component: {fileID: 1175446145} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1175446145 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.03 + m_NormalBias: 0.01 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + serializedVersion: 2 + m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} +--- !u!1 &1188186442 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1188186444} + - component: {fileID: 1188186443} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1188186443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1188186442} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1188186444 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1188186442} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1346965641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1346965650} + - component: {fileID: 1346965642} + - component: {fileID: 1346965646} + - component: {fileID: 1346965643} + - component: {fileID: 1346965651} + m_Layer: 10 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1346965642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f0000007000000071000000720000007300000074000000750000007600000077000000 + m_AlignBytes: 16 + groupID: 3 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 5.4620275 + elements: + - particle1: 80 + particle2: 81 + restLength: 0.11343384 + constraintForce: 0 + tearResistance: 1 + - particle1: 81 + particle2: 82 + restLength: 0.1400795 + constraintForce: 0 + tearResistance: 1 + - particle1: 82 + particle2: 83 + restLength: 0.13731146 + constraintForce: 0 + tearResistance: 1 + - particle1: 83 + particle2: 84 + restLength: 0.14056301 + constraintForce: 0 + tearResistance: 1 + - particle1: 84 + particle2: 85 + restLength: 0.14499426 + constraintForce: 0 + tearResistance: 1 + - particle1: 85 + particle2: 86 + restLength: 0.1369896 + constraintForce: 0 + tearResistance: 1 + - particle1: 86 + particle2: 87 + restLength: 0.14367747 + constraintForce: 0 + tearResistance: 1 + - particle1: 87 + particle2: 88 + restLength: 0.13849878 + constraintForce: 0 + tearResistance: 1 + - particle1: 88 + particle2: 89 + restLength: 0.14347577 + constraintForce: 0 + tearResistance: 1 + - particle1: 89 + particle2: 90 + restLength: 0.13862038 + constraintForce: 0 + tearResistance: 1 + - particle1: 90 + particle2: 91 + restLength: 0.14278126 + constraintForce: 0 + tearResistance: 1 + - particle1: 91 + particle2: 92 + restLength: 0.1394751 + constraintForce: 0 + tearResistance: 1 + - particle1: 92 + particle2: 93 + restLength: 0.14137006 + constraintForce: 0 + tearResistance: 1 + - particle1: 93 + particle2: 94 + restLength: 0.14105272 + constraintForce: 0 + tearResistance: 1 + - particle1: 94 + particle2: 95 + restLength: 0.14048934 + constraintForce: 0 + tearResistance: 1 + - particle1: 95 + particle2: 96 + restLength: 0.14181376 + constraintForce: 0 + tearResistance: 1 + - particle1: 96 + particle2: 97 + restLength: 0.14023328 + constraintForce: 0 + tearResistance: 1 + - particle1: 97 + particle2: 98 + restLength: 0.14107311 + constraintForce: 0 + tearResistance: 1 + - particle1: 98 + particle2: 99 + restLength: 0.14103353 + constraintForce: 0 + tearResistance: 1 + - particle1: 99 + particle2: 100 + restLength: 0.14082837 + constraintForce: 0 + tearResistance: 1 + - particle1: 100 + particle2: 101 + restLength: 0.14076781 + constraintForce: 0 + tearResistance: 1 + - particle1: 101 + particle2: 102 + restLength: 0.14133894 + constraintForce: 0 + tearResistance: 1 + - particle1: 102 + particle2: 103 + restLength: 0.14049971 + constraintForce: 0 + tearResistance: 1 + - particle1: 103 + particle2: 104 + restLength: 0.14129508 + constraintForce: 0 + tearResistance: 1 + - particle1: 104 + particle2: 105 + restLength: 0.14103425 + constraintForce: 0 + tearResistance: 1 + - particle1: 105 + particle2: 106 + restLength: 0.14002609 + constraintForce: 0 + tearResistance: 1 + - particle1: 106 + particle2: 107 + restLength: 0.14223284 + constraintForce: 0 + tearResistance: 1 + - particle1: 107 + particle2: 108 + restLength: 0.13930953 + constraintForce: 0 + tearResistance: 1 + - particle1: 108 + particle2: 109 + restLength: 0.14266565 + constraintForce: 0 + tearResistance: 1 + - particle1: 109 + particle2: 110 + restLength: 0.13980219 + constraintForce: 0 + tearResistance: 1 + - particle1: 110 + particle2: 111 + restLength: 0.14202453 + constraintForce: 0 + tearResistance: 1 + - particle1: 111 + particle2: 112 + restLength: 0.14010233 + constraintForce: 0 + tearResistance: 1 + - particle1: 112 + particle2: 113 + restLength: 0.14205298 + constraintForce: 0 + tearResistance: 1 + - particle1: 113 + particle2: 114 + restLength: 0.13910069 + constraintForce: 0 + tearResistance: 1 + - particle1: 114 + particle2: 115 + restLength: 0.14355478 + constraintForce: 0 + tearResistance: 1 + - particle1: 115 + particle2: 116 + restLength: 0.13863954 + constraintForce: 0 + tearResistance: 1 + - particle1: 116 + particle2: 117 + restLength: 0.14013106 + constraintForce: 0 + tearResistance: 1 + - particle1: 117 + particle2: 118 + restLength: 0.14137465 + constraintForce: 0 + tearResistance: 1 + - particle1: 118 + particle2: 119 + restLength: 0.13828081 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} + tearingEnabled: 1 + tearResistanceMultiplier: 450 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.02 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1346965643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: f342c944c10cc4c9188a4f352c6a6eee, type: 2} + renderParameters: + layer: 10 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 8} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1346965646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 2 +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.6813427, z: -0, w: 0.7319646} + m_LocalPosition: {x: 1.21, y: 0.88, z: -2.26} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0, y: 85.897, z: 0} +--- !u!114 &1346965651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fbbc507232dcc4cb1ae27d9474ddbe70, type: 3} + m_Name: + m_EditorClassIdentifier: + neutralColor: {r: 1, g: 1, b: 1, a: 1} + highlightColor: {r: 1, g: 0, b: 0, a: 1} +--- !u!1 &1695657319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1695657320} + - component: {fileID: 1695657323} + - component: {fileID: 1695657322} + - component: {fileID: 1695657321} + - component: {fileID: 1695657324} + m_Layer: 10 + m_Name: Obi Rope (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1695657320 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695657319} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.144, y: 0.27, z: -1.646} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1695657321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695657319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: f342c944c10cc4c9188a4f352c6a6eee, type: 2} + renderParameters: + layer: 10 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 8} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1695657322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695657319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 3 +--- !u!114 &1695657323 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695657319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 78000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000 + m_AlignBytes: 16 + groupID: 4 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 5.4620275 + elements: + - particle1: 120 + particle2: 121 + restLength: 0.11343384 + constraintForce: 0 + tearResistance: 1 + - particle1: 121 + particle2: 122 + restLength: 0.1400795 + constraintForce: 0 + tearResistance: 1 + - particle1: 122 + particle2: 123 + restLength: 0.13731146 + constraintForce: 0 + tearResistance: 1 + - particle1: 123 + particle2: 124 + restLength: 0.14056301 + constraintForce: 0 + tearResistance: 1 + - particle1: 124 + particle2: 125 + restLength: 0.14499426 + constraintForce: 0 + tearResistance: 1 + - particle1: 125 + particle2: 126 + restLength: 0.1369896 + constraintForce: 0 + tearResistance: 1 + - particle1: 126 + particle2: 127 + restLength: 0.14367747 + constraintForce: 0 + tearResistance: 1 + - particle1: 127 + particle2: 128 + restLength: 0.13849878 + constraintForce: 0 + tearResistance: 1 + - particle1: 128 + particle2: 129 + restLength: 0.14347577 + constraintForce: 0 + tearResistance: 1 + - particle1: 129 + particle2: 130 + restLength: 0.13862038 + constraintForce: 0 + tearResistance: 1 + - particle1: 130 + particle2: 131 + restLength: 0.14278126 + constraintForce: 0 + tearResistance: 1 + - particle1: 131 + particle2: 132 + restLength: 0.1394751 + constraintForce: 0 + tearResistance: 1 + - particle1: 132 + particle2: 133 + restLength: 0.14137006 + constraintForce: 0 + tearResistance: 1 + - particle1: 133 + particle2: 134 + restLength: 0.14105272 + constraintForce: 0 + tearResistance: 1 + - particle1: 134 + particle2: 135 + restLength: 0.14048934 + constraintForce: 0 + tearResistance: 1 + - particle1: 135 + particle2: 136 + restLength: 0.14181376 + constraintForce: 0 + tearResistance: 1 + - particle1: 136 + particle2: 137 + restLength: 0.14023328 + constraintForce: 0 + tearResistance: 1 + - particle1: 137 + particle2: 138 + restLength: 0.14107311 + constraintForce: 0 + tearResistance: 1 + - particle1: 138 + particle2: 139 + restLength: 0.14103353 + constraintForce: 0 + tearResistance: 1 + - particle1: 139 + particle2: 140 + restLength: 0.14082837 + constraintForce: 0 + tearResistance: 1 + - particle1: 140 + particle2: 141 + restLength: 0.14076781 + constraintForce: 0 + tearResistance: 1 + - particle1: 141 + particle2: 142 + restLength: 0.14133894 + constraintForce: 0 + tearResistance: 1 + - particle1: 142 + particle2: 143 + restLength: 0.14049971 + constraintForce: 0 + tearResistance: 1 + - particle1: 143 + particle2: 144 + restLength: 0.14129508 + constraintForce: 0 + tearResistance: 1 + - particle1: 144 + particle2: 145 + restLength: 0.14103425 + constraintForce: 0 + tearResistance: 1 + - particle1: 145 + particle2: 146 + restLength: 0.14002609 + constraintForce: 0 + tearResistance: 1 + - particle1: 146 + particle2: 147 + restLength: 0.14223284 + constraintForce: 0 + tearResistance: 1 + - particle1: 147 + particle2: 148 + restLength: 0.13930953 + constraintForce: 0 + tearResistance: 1 + - particle1: 148 + particle2: 149 + restLength: 0.14266565 + constraintForce: 0 + tearResistance: 1 + - particle1: 149 + particle2: 150 + restLength: 0.13980219 + constraintForce: 0 + tearResistance: 1 + - particle1: 150 + particle2: 151 + restLength: 0.14202453 + constraintForce: 0 + tearResistance: 1 + - particle1: 151 + particle2: 152 + restLength: 0.14010233 + constraintForce: 0 + tearResistance: 1 + - particle1: 152 + particle2: 153 + restLength: 0.14205298 + constraintForce: 0 + tearResistance: 1 + - particle1: 153 + particle2: 154 + restLength: 0.13910069 + constraintForce: 0 + tearResistance: 1 + - particle1: 154 + particle2: 155 + restLength: 0.14355478 + constraintForce: 0 + tearResistance: 1 + - particle1: 155 + particle2: 156 + restLength: 0.13863954 + constraintForce: 0 + tearResistance: 1 + - particle1: 156 + particle2: 157 + restLength: 0.14013106 + constraintForce: 0 + tearResistance: 1 + - particle1: 157 + particle2: 158 + restLength: 0.14137465 + constraintForce: 0 + tearResistance: 1 + - particle1: 158 + particle2: 159 + restLength: 0.13828081 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} + tearingEnabled: 1 + tearResistanceMultiplier: 450 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.02 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1695657324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695657319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fbbc507232dcc4cb1ae27d9474ddbe70, type: 3} + m_Name: + m_EditorClassIdentifier: + neutralColor: {r: 1, g: 1, b: 1, a: 1} + highlightColor: {r: 1, g: 0, b: 0, a: 1} +--- !u!1 &2021410671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2021410674} + - component: {fileID: 2021410673} + - component: {fileID: 2021410672} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2021410672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2021410671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &2021410673 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2021410671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &2021410674 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2021410671} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2102841794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2102841797} + - component: {fileID: 2102841796} + - component: {fileID: 2102841800} + - component: {fileID: 2102841799} + - component: {fileID: 2102841798} + - component: {fileID: 2102841801} + - component: {fileID: 2102841802} + m_Layer: 0 + m_Name: Obi Solver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2102841796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + m_EditorClassIdentifier: + simulateWhenInvisible: 1 + m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 + parameters: + mode: 0 + interpolation: 0 + gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 + damping: 0.3 + maxAnisotropy: 3 + sleepThreshold: 0.0001 + maxVelocity: 50 + maxAngularVelocity: 20 + collisionMargin: 0.02 + maxDepenetration: 5 + colliderCCD: 1 + particleCCD: 1 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 2 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + skinConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + volumeConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + shapeMatchingConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 10 + SORFactor: 1 + enabled: 0 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 5 + SORFactor: 1 + enabled: 0 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + stretchShearConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 +--- !u!4 &2102841797 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1346965650} + - {fileID: 895366426} + - {fileID: 1143169367} + - {fileID: 1695657320} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2102841798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30e140e2334fb4e2f9430c6ed936e4ca, type: 3} + m_Name: + m_EditorClassIdentifier: + springStiffness: 1000 + springDamping: 50 + drawSpring: 1 +--- !u!114 &2102841799 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: db4318b9b044a420ba02ad5138d542e0, type: 3} + m_Name: + m_EditorClassIdentifier: + solver: {fileID: 2102841796} + radiusScale: 2 + OnParticlePicked: + m_PersistentCalls: + m_Calls: [] + OnParticleHeld: + m_PersistentCalls: + m_Calls: [] + OnParticleDragged: + m_PersistentCalls: + m_Calls: [] + OnParticleReleased: + m_PersistentCalls: + m_Calls: [] +--- !u!120 &2102841800 +LineRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 0.05 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 0, b: 0, a: 1} + key1: {r: 1, g: 0.09286968, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MaskInteraction: 0 + m_UseWorldSpace: 1 + m_Loop: 0 + m_ApplyActiveColorSpace: 0 +--- !u!114 &2102841801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a5a3cc3afb7a14486848b022c300ea32, type: 3} + m_Name: + m_EditorClassIdentifier: + callback: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2102841802} + m_TargetAssemblyTypeName: Obi.Samples.HighlightCollidingRopes, Assembly-CSharp + m_MethodName: Highlight + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &2102841802 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 50979842bbc734acdb11f0f01062fe92, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 2021410674} + - {fileID: 526830948} + - {fileID: 1188186444} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopesColliding.unity.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopesColliding.unity.meta new file mode 100644 index 000000000..b1191a520 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/RopesColliding.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bdc1c69fe6cef4fc393005981e6d3623 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim index a940ff71a..c2dc5e1fb 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim @@ -7,7 +7,7 @@ AnimationClip: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: BenderAnimation - serializedVersion: 6 + serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 1 @@ -66,6 +66,8 @@ AnimationClip: typeID: 4 customType: 0 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 pptrCurveMapping: [] m_AnimationClipSettings: serializedVersion: 2 @@ -88,7 +90,8 @@ AnimationClip: m_HeightFromFeet: 0 m_Mirror: 0 m_EditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -125,7 +128,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -162,7 +167,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -199,6 +206,7 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_EulerEditorCurves: [] m_HasGenericRootTransform: 1 m_HasMotionFloatCurves: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim index 6708ed7a0..8ef894cc7 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim @@ -7,7 +7,7 @@ AnimationClip: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: PlectonemeTwister - serializedVersion: 6 + serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 1 @@ -208,6 +208,8 @@ AnimationClip: typeID: 4 customType: 0 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 - serializedVersion: 2 path: 0 attribute: 4 @@ -215,6 +217,8 @@ AnimationClip: typeID: 4 customType: 4 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 pptrCurveMapping: [] m_AnimationClipSettings: serializedVersion: 2 @@ -237,7 +241,8 @@ AnimationClip: m_HeightFromFeet: 0 m_Mirror: 0 m_EditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -283,7 +288,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -329,7 +336,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -375,7 +384,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -511,7 +522,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -647,7 +660,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -783,8 +798,10 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_EulerEditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: [] m_PreInfinity: 2 @@ -794,7 +811,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: [] m_PreInfinity: 2 @@ -804,7 +823,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: [] m_PreInfinity: 2 @@ -814,6 +835,7 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_HasGenericRootTransform: 1 m_HasMotionFloatCurves: 0 m_Events: [] diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim index 2412369de..99f6231bc 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim @@ -7,7 +7,7 @@ AnimationClip: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RockerAnimation - serializedVersion: 6 + serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 1 @@ -84,6 +84,8 @@ AnimationClip: typeID: 4 customType: 0 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 pptrCurveMapping: [] m_AnimationClipSettings: serializedVersion: 2 @@ -106,7 +108,8 @@ AnimationClip: m_HeightFromFeet: 0 m_Mirror: 0 m_EditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -161,7 +164,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -216,7 +221,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -271,6 +278,7 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_EulerEditorCurves: [] m_HasGenericRootTransform: 1 m_HasMotionFloatCurves: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim index a95131742..fe1b1ff36 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim @@ -7,7 +7,7 @@ AnimationClip: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RopeCircuitAnimation - serializedVersion: 6 + serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 1 @@ -66,6 +66,8 @@ AnimationClip: typeID: 4 customType: 0 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 pptrCurveMapping: [] m_AnimationClipSettings: serializedVersion: 2 @@ -88,7 +90,8 @@ AnimationClip: m_HeightFromFeet: 0 m_Mirror: 0 m_EditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -125,7 +128,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -162,7 +167,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -199,6 +206,7 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_EulerEditorCurves: [] m_HasGenericRootTransform: 1 m_HasMotionFloatCurves: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim index f88af52a6..606937859 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim @@ -7,7 +7,7 @@ AnimationClip: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RopeHangerAnimation - serializedVersion: 6 + serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 1 @@ -66,6 +66,8 @@ AnimationClip: typeID: 4 customType: 0 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 pptrCurveMapping: [] m_AnimationClipSettings: serializedVersion: 2 @@ -88,7 +90,8 @@ AnimationClip: m_HeightFromFeet: 0 m_Mirror: 0 m_EditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -125,7 +128,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -162,7 +167,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -199,6 +206,7 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_EulerEditorCurves: [] m_HasGenericRootTransform: 1 m_HasMotionFloatCurves: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim index 27cbf03ac..e6fb4e46f 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim @@ -7,7 +7,7 @@ AnimationClip: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RopeStretcher - serializedVersion: 6 + serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 1 @@ -66,6 +66,8 @@ AnimationClip: typeID: 4 customType: 0 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 pptrCurveMapping: [] m_AnimationClipSettings: serializedVersion: 2 @@ -88,7 +90,8 @@ AnimationClip: m_HeightFromFeet: 0 m_Mirror: 0 m_EditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -125,7 +128,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -162,7 +167,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -199,6 +206,7 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_EulerEditorCurves: [] m_HasGenericRootTransform: 1 m_HasMotionFloatCurves: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim index 76a354e4e..efb4819fc 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim @@ -7,7 +7,7 @@ AnimationClip: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: SpringBase - serializedVersion: 6 + serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 1 @@ -118,6 +118,8 @@ AnimationClip: typeID: 4 customType: 0 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 - serializedVersion: 2 path: 0 attribute: 4 @@ -125,6 +127,8 @@ AnimationClip: typeID: 4 customType: 4 isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 pptrCurveMapping: [] m_AnimationClipSettings: serializedVersion: 2 @@ -147,7 +151,8 @@ AnimationClip: m_HeightFromFeet: 0 m_Mirror: 0 m_EditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -202,7 +207,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -257,7 +264,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -312,7 +321,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -349,7 +360,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -386,7 +399,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: - serializedVersion: 3 @@ -423,8 +438,10 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_EulerEditorCurves: - - curve: + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: [] m_PreInfinity: 2 @@ -434,7 +451,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: [] m_PreInfinity: 2 @@ -444,7 +463,9 @@ AnimationClip: path: classID: 4 script: {fileID: 0} - - curve: + flags: 16 + - serializedVersion: 2 + curve: serializedVersion: 2 m_Curve: [] m_PreInfinity: 2 @@ -454,6 +475,7 @@ AnimationClip: path: classID: 4 script: {fileID: 0} + flags: 16 m_HasGenericRootTransform: 1 m_HasMotionFloatCurves: 0 m_Events: [] diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset new file mode 100644 index 000000000..eba4519bd --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset @@ -0,0 +1,2790 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-7671420094400086755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: cp32 + m_EditorClassIdentifier: + particleIndices: 28000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-6013852427284171944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: cp4 + m_EditorClassIdentifier: + particleIndices: 19000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-793357204084665196 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: cp2 + m_EditorClassIdentifier: + particleIndices: 4b000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} + m_Name: CableCarRope + m_EditorClassIdentifier: + m_Checksum: 2078965017 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 97 + m_InitialActiveParticleCount: 97 + _bounds: + m_Center: {x: 0.27428722, y: 0, z: -0.8180511} + m_Extent: {x: 3.3653975, y: 0, z: 2.6264405} + positions: + - {x: -1.6547692, y: 0, z: 1.6917566} + - {x: -1.7953173, y: 0, z: 1.5704652} + - {x: -1.9314678, y: 0, z: 1.443791} + - {x: -2.0625005, y: 0, z: 1.3122748} + - {x: -2.1888175, y: 0, z: 1.1757231} + - {x: -2.3101618, y: 0, z: 1.0350726} + - {x: -2.4272132, y: 0, z: 0.8907374} + - {x: -2.5406966, y: 0, z: 0.74351734} + - {x: -2.6515298, y: 0, z: 0.59435135} + - {x: -2.7609143, y: 0, z: 0.44400948} + - {x: -2.8698747, y: 0, z: 0.2935176} + - {x: -2.9795702, y: 0, z: 0.14354794} + - {x: -3.0911102, y: 0, z: -0.0054477826} + - {x: -2.9199383, y: 0, z: -0.10833817} + - {x: -2.7479436, y: 0, z: -0.20928983} + - {x: -2.5753129, y: 0, z: -0.30825955} + - {x: -2.4014676, y: 0, z: -0.40568763} + - {x: -2.226681, y: 0, z: -0.5015902} + - {x: -2.0514107, y: 0, z: -0.5959872} + - {x: -1.87536, y: 0, z: -0.6894276} + - {x: -1.6989415, y: 0, z: -0.78223515} + - {x: -1.5227215, y: 0, z: -0.87485546} + - {x: -1.3468884, y: 0, z: -0.96817625} + - {x: -1.1717303, y: 0, z: -1.0633278} + - {x: -0.9982708, y: 0, z: -1.161367} + - {x: -0.8273939, y: 0, z: -1.2637306} + - {x: -0.64856976, y: 0, z: -1.3520432} + - {x: -0.46967044, y: 0, z: -1.4397827} + - {x: -0.29057223, y: 0, z: -1.5270861} + - {x: -0.111218005, y: 0, z: -1.6140645} + - {x: 0.068180576, y: 0, z: -1.7007072} + - {x: 0.24776202, y: 0, z: -1.7871795} + - {x: 0.42736718, y: 0, z: -1.8735079} + - {x: 0.60699224, y: 0, z: -1.9597967} + - {x: 0.7865938, y: 0, z: -2.046132} + - {x: 0.96616894, y: 0, z: -2.1326177} + - {x: 1.1455568, y: 0, z: -2.219278} + - {x: 1.3249133, y: 0, z: -2.3062847} + - {x: 1.5039856, y: 0, z: -2.3936045} + - {x: 1.6828775, y: 0, z: -2.481369} + - {x: 1.8617015, y: 0, z: -2.5697057} + - {x: 1.9745048, y: 0, z: -2.7052023} + - {x: 2.0917573, y: 0, z: -2.8373861} + - {x: 2.2140326, y: 0, z: -2.9639072} + - {x: 2.3422933, y: 0, z: -3.0842524} + - {x: 2.4740083, y: 0, z: -3.2010238} + - {x: 2.6038496, y: 0, z: -3.3200932} + - {x: 2.7288418, y: 0, z: -3.4444916} + - {x: 2.87687, y: 0, z: -3.3446496} + - {x: 3.015068, y: 0, z: -3.2318838} + - {x: 3.144004, y: 0, z: -3.1086097} + - {x: 3.266579, y: 0, z: -2.9789212} + - {x: 3.3872747, y: 0, z: -2.847511} + - {x: 3.510594, y: 0, z: -2.7185428} + - {x: 3.639685, y: 0, z: -2.5951595} + - {x: 3.599913, y: 0, z: -2.404679} + - {x: 3.558123, y: 0, z: -2.2145045} + - {x: 3.5145442, y: 0, z: -2.0246644} + - {x: 3.4693482, y: 0, z: -1.8351698} + - {x: 3.422666, y: 0, z: -1.6460234} + - {x: 3.3745964, y: 0, z: -1.457223} + - {x: 3.325218, y: 0, z: -1.2687837} + - {x: 3.2745957, y: 0, z: -1.0807422} + - {x: 3.222741, y: 0, z: -0.8930025} + - {x: 3.169674, y: 0, z: -0.7055662} + - {x: 3.115404, y: 0, z: -0.51844877} + - {x: 3.0599282, y: 0, z: -0.33167204} + - {x: 3.0032268, y: 0, z: -0.14525539} + - {x: 2.945264, y: 0, z: 0.040779658} + - {x: 2.8859904, y: 0, z: 0.22639482} + - {x: 2.82533, y: 0, z: 0.41155836} + - {x: 2.7631838, y: 0, z: 0.59621966} + - {x: 2.6994216, y: 0, z: 0.7803085} + - {x: 2.633878, y: 0, z: 0.96370584} + - {x: 2.5663407, y: 0, z: 1.1462233} + - {x: 2.4965467, y: 0, z: 1.3275301} + - {x: 2.3077447, y: 0, z: 1.3536078} + - {x: 2.1160479, y: 0, z: 1.3802018} + - {x: 1.9265863, y: 0, z: 1.4064023} + - {x: 1.7363355, y: 0, z: 1.432529} + - {x: 1.5458374, y: 0, z: 1.4584436} + - {x: 1.3552749, y: 0, z: 1.4840757} + - {x: 1.1646835, y: 0, z: 1.5093833} + - {x: 0.97404706, y: 0, z: 1.5343355} + - {x: 0.7833461, y: 0, z: 1.5589027} + - {x: 0.59256124, y: 0, z: 1.5830553} + - {x: 0.4017059, y: 0, z: 1.6067576} + - {x: 0.21079339, y: 0, z: 1.6299722} + - {x: 0.019866562, y: 0, z: 1.6526549} + - {x: -0.1709497, y: 0, z: 1.6747481} + - {x: -0.36193743, y: 0, z: 1.6962361} + - {x: -0.55306107, y: 0, z: 1.7170587} + - {x: -0.74427223, y: 0, z: 1.7371461} + - {x: -0.9355326, y: 0, z: 1.7564204} + - {x: -1.1268104, y: 0, z: 1.7747916} + - {x: -1.3180895, y: 0, z: 1.7921556} + - {x: -1.5093733, y: 0, z: 1.8083892} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + restPositions: + - {x: -1.6547692, y: 0, z: 1.6917566, w: 1} + - {x: -1.7953173, y: 0, z: 1.5704652, w: 1} + - {x: -1.9314678, y: 0, z: 1.443791, w: 1} + - {x: -2.0625005, y: 0, z: 1.3122748, w: 1} + - {x: -2.1888175, y: 0, z: 1.1757231, w: 1} + - {x: -2.3101618, y: 0, z: 1.0350726, w: 1} + - {x: -2.4272132, y: 0, z: 0.8907374, w: 1} + - {x: -2.5406966, y: 0, z: 0.74351734, w: 1} + - {x: -2.6515298, y: 0, z: 0.59435135, w: 1} + - {x: -2.7609143, y: 0, z: 0.44400948, w: 1} + - {x: -2.8698747, y: 0, z: 0.2935176, w: 1} + - {x: -2.9795702, y: 0, z: 0.14354794, w: 1} + - {x: -3.0911102, y: 0, z: -0.0054477826, w: 1} + - {x: -2.9199383, y: 0, z: -0.10833817, w: 1} + - {x: -2.7479436, y: 0, z: -0.20928983, w: 1} + - {x: -2.5753129, y: 0, z: -0.30825955, w: 1} + - {x: -2.4014676, y: 0, z: -0.40568763, w: 1} + - {x: -2.226681, y: 0, z: -0.5015902, w: 1} + - {x: -2.0514107, y: 0, z: -0.5959872, w: 1} + - {x: -1.87536, y: 0, z: -0.6894276, w: 1} + - {x: -1.6989415, y: 0, z: -0.78223515, w: 1} + - {x: -1.5227215, y: 0, z: -0.87485546, w: 1} + - {x: -1.3468884, y: 0, z: -0.96817625, w: 1} + - {x: -1.1717303, y: 0, z: -1.0633278, w: 1} + - {x: -0.9982708, y: 0, z: -1.161367, w: 1} + - {x: -0.8273939, y: 0, z: -1.2637306, w: 1} + - {x: -0.64856976, y: 0, z: -1.3520432, w: 1} + - {x: -0.46967044, y: 0, z: -1.4397827, w: 1} + - {x: -0.29057223, y: 0, z: -1.5270861, w: 1} + - {x: -0.111218005, y: 0, z: -1.6140645, w: 1} + - {x: 0.068180576, y: 0, z: -1.7007072, w: 1} + - {x: 0.24776202, y: 0, z: -1.7871795, w: 1} + - {x: 0.42736718, y: 0, z: -1.8735079, w: 1} + - {x: 0.60699224, y: 0, z: -1.9597967, w: 1} + - {x: 0.7865938, y: 0, z: -2.046132, w: 1} + - {x: 0.96616894, y: 0, z: -2.1326177, w: 1} + - {x: 1.1455568, y: 0, z: -2.219278, w: 1} + - {x: 1.3249133, y: 0, z: -2.3062847, w: 1} + - {x: 1.5039856, y: 0, z: -2.3936045, w: 1} + - {x: 1.6828775, y: 0, z: -2.481369, w: 1} + - {x: 1.8617015, y: 0, z: -2.5697057, w: 1} + - {x: 1.9745048, y: 0, z: -2.7052023, w: 1} + - {x: 2.0917573, y: 0, z: -2.8373861, w: 1} + - {x: 2.2140326, y: 0, z: -2.9639072, w: 1} + - {x: 2.3422933, y: 0, z: -3.0842524, w: 1} + - {x: 2.4740083, y: 0, z: -3.2010238, w: 1} + - {x: 2.6038496, y: 0, z: -3.3200932, w: 1} + - {x: 2.7288418, y: 0, z: -3.4444916, w: 1} + - {x: 2.87687, y: 0, z: -3.3446496, w: 1} + - {x: 3.015068, y: 0, z: -3.2318838, w: 1} + - {x: 3.144004, y: 0, z: -3.1086097, w: 1} + - {x: 3.266579, y: 0, z: -2.9789212, w: 1} + - {x: 3.3872747, y: 0, z: -2.847511, w: 1} + - {x: 3.510594, y: 0, z: -2.7185428, w: 1} + - {x: 3.639685, y: 0, z: -2.5951595, w: 1} + - {x: 3.599913, y: 0, z: -2.404679, w: 1} + - {x: 3.558123, y: 0, z: -2.2145045, w: 1} + - {x: 3.5145442, y: 0, z: -2.0246644, w: 1} + - {x: 3.4693482, y: 0, z: -1.8351698, w: 1} + - {x: 3.422666, y: 0, z: -1.6460234, w: 1} + - {x: 3.3745964, y: 0, z: -1.457223, w: 1} + - {x: 3.325218, y: 0, z: -1.2687837, w: 1} + - {x: 3.2745957, y: 0, z: -1.0807422, w: 1} + - {x: 3.222741, y: 0, z: -0.8930025, w: 1} + - {x: 3.169674, y: 0, z: -0.7055662, w: 1} + - {x: 3.115404, y: 0, z: -0.51844877, w: 1} + - {x: 3.0599282, y: 0, z: -0.33167204, w: 1} + - {x: 3.0032268, y: 0, z: -0.14525539, w: 1} + - {x: 2.945264, y: 0, z: 0.040779658, w: 1} + - {x: 2.8859904, y: 0, z: 0.22639482, w: 1} + - {x: 2.82533, y: 0, z: 0.41155836, w: 1} + - {x: 2.7631838, y: 0, z: 0.59621966, w: 1} + - {x: 2.6994216, y: 0, z: 0.7803085, w: 1} + - {x: 2.633878, y: 0, z: 0.96370584, w: 1} + - {x: 2.5663407, y: 0, z: 1.1462233, w: 1} + - {x: 2.4965467, y: 0, z: 1.3275301, w: 1} + - {x: 2.3077447, y: 0, z: 1.3536078, w: 1} + - {x: 2.1160479, y: 0, z: 1.3802018, w: 1} + - {x: 1.9265863, y: 0, z: 1.4064023, w: 1} + - {x: 1.7363355, y: 0, z: 1.432529, w: 1} + - {x: 1.5458374, y: 0, z: 1.4584436, w: 1} + - {x: 1.3552749, y: 0, z: 1.4840757, w: 1} + - {x: 1.1646835, y: 0, z: 1.5093833, w: 1} + - {x: 0.97404706, y: 0, z: 1.5343355, w: 1} + - {x: 0.7833461, y: 0, z: 1.5589027, w: 1} + - {x: 0.59256124, y: 0, z: 1.5830553, w: 1} + - {x: 0.4017059, y: 0, z: 1.6067576, w: 1} + - {x: 0.21079339, y: 0, z: 1.6299722, w: 1} + - {x: 0.019866562, y: 0, z: 1.6526549, w: 1} + - {x: -0.1709497, y: 0, z: 1.6747481, w: 1} + - {x: -0.36193743, y: 0, z: 1.6962361, w: 1} + - {x: -0.55306107, y: 0, z: 1.7170587, w: 1} + - {x: -0.74427223, y: 0, z: 1.7371461, w: 1} + - {x: -0.9355326, y: 0, z: 1.7564204, w: 1} + - {x: -1.1268104, y: 0, z: 1.7747916, w: 1} + - {x: -1.3180895, y: 0, z: 1.7921556, w: 1} + - {x: -1.5093733, y: 0, z: 1.8083892, w: 1} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] + orientations: [] + restOrientations: [] + velocities: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + angularVelocities: [] + invMasses: + - 9.999999 + - 10 + - 10.000001 + - 9.999999 + - 9.999999 + - 10.000001 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + invRotationalMasses: [] + filters: 0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.039999995, y: 0.039999995, z: 0.039999995} + - {x: 0.040000003, y: 0.040000003, z: 0.040000003} + - {x: 0.040000003, y: 0.040000003, z: 0.040000003} + - {x: 0.039999995, y: 0.039999995, z: 0.039999995} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0.04, y: 0.04, z: 0.04} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + colors: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a0000003a0000003b0000003b0000003c0000003c0000003d0000003d0000003e0000003e0000003f0000003f00000040000000400000004100000041000000420000004200000043000000430000004400000044000000450000004500000046000000460000004700000047000000480000004800000049000000490000004a0000004a0000004b0000004b0000004c0000004c0000004d0000004d0000004e0000004e0000004f0000004f00000050000000500000005100000051000000520000005200000053000000530000005400000054000000550000005500000056000000560000005700000057000000580000005800000059000000590000005a0000005a0000005b0000005b0000005c0000005c0000005d0000005d0000005e0000005e0000005f0000005f000000600000006000000000000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000 + m_ConstraintCount: 73 + m_ActiveConstraintCount: 48 + m_InitialActiveConstraintCount: 48 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18564853 + - 0.18565044 + - 0.18576063 + - 0.18588233 + - 0.18592378 + - 0.1858063 + - 0.19971544 + - 0.19898842 + - 0.19936812 + - 0.19931118 + - 0.19907784 + - 0.19933437 + - 0.19919144 + - 0.19925661 + - 0.19933179 + - 0.1993162 + - 0.199276 + - 0.19931632 + - 0.19934614 + - 0.19926094 + - 0.17630634 + - 0.17595129 + - 0.17602395 + - 0.17634629 + - 0.17836717 + - 0.178448 + - 0.17843884 + - 0.19458835 + - 0.19477776 + - 0.19482192 + - 0.1948015 + - 0.19476943 + - 0.19482858 + - 0.19484922 + - 0.19484958 + - 0.19483826 + - 0.1947577 + - 0.19427651 + - 0.19353278 + - 0.19203633 + - 0.19227861 + - 0.19226244 + - 0.19230759 + - 0.19231874 + - 0.192091 + - 0.19225457 + - 0.19222912 + - 0.19206558 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000 + m_ConstraintCount: 73 + m_ActiveConstraintCount: 48 + m_InitialActiveConstraintCount: 48 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18596585 + - 0.18601711 + - 0.18583234 + - 0.18583456 + - 0.18579607 + - 0.1861207 + - 0.19943272 + - 0.19928476 + - 0.19907406 + - 0.19934076 + - 0.19906293 + - 0.1992483 + - 0.19944213 + - 0.19924371 + - 0.19922554 + - 0.1992752 + - 0.19927499 + - 0.19922356 + - 0.19922769 + - 0.1994527 + - 0.1766938 + - 0.17587988 + - 0.17617115 + - 0.17855187 + - 0.17838444 + - 0.17842674 + - 0.17857191 + - 0.19471198 + - 0.19480988 + - 0.19482367 + - 0.19473623 + - 0.19480366 + - 0.19484122 + - 0.1948556 + - 0.19484664 + - 0.19481866 + - 0.19461222 + - 0.19059443 + - 0.19126464 + - 0.1922527 + - 0.19226435 + - 0.19227688 + - 0.19232152 + - 0.1922695 + - 0.19219275 + - 0.19226341 + - 0.19215801 + - 0.19197142 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 00000000 + m_IDToIndex: 00000000 + m_ConstraintCount: 1 + m_ActiveConstraintCount: 1 + m_InitialActiveConstraintCount: 1 + particleIndices: + serializedContents: 6000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18639506 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000 + m_ConstraintCount: 49 + m_ActiveConstraintCount: 32 + m_InitialActiveConstraintCount: 32 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000780000007a000000790000007b0000007d0000007c0000007e000000800000007f0000008100000083000000820000008400000086000000850000008700000089000000880000008a0000008c0000008b0000008d0000008f0000008e000000900000009200000091000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000 + m_ConstraintCount: 48 + m_ActiveConstraintCount: 32 + m_InitialActiveConstraintCount: 32 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000790000007b0000007a0000007c0000007e0000007d0000007f0000008100000080000000820000008400000083000000850000008700000086000000880000008a000000890000008b0000008d0000008c0000008e000000900000008f000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000 + m_ConstraintCount: 48 + m_ActiveConstraintCount: 31 + m_InitialActiveConstraintCount: 31 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f0000007100000073000000720000007400000076000000750000007700000079000000780000007a0000007c0000007b0000007d0000007f0000007e000000800000008200000081000000830000008500000084000000860000008800000087000000890000008b0000008a0000008c0000008e0000008d0000008f0000009100000090000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 00000000 + m_IDToIndex: 00000000 + m_ConstraintCount: 1 + m_ActiveConstraintCount: 1 + m_InitialActiveConstraintCount: 1 + particleIndices: + serializedContents: 5f0000000000000060000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 00000000 + m_IDToIndex: 00000000 + m_ConstraintCount: 1 + m_ActiveConstraintCount: 1 + m_InitialActiveConstraintCount: 1 + particleIndices: + serializedContents: 600000000100000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + m_ConstraintCount: 147 + m_ActiveConstraintCount: 97 + m_InitialActiveConstraintCount: 97 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.07999999 + - 1 + - 1 + - 0.080000006 + - 1 + - 1 + - 0.080000006 + - 1 + - 1 + - 0.07999999 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0.08 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 + chainConstraintsData: + batches: [] + volumeConstraintsData: + batches: [] + groups: + - {fileID: 135749586216130241} + - {fileID: 8813747759735635217} + - {fileID: -6013852427284171944} + - {fileID: -7671420094400086755} + - {fileID: 218208082314265139} + - {fileID: 1548941265819301156} + - {fileID: -793357204084665196} + path: + m_Names: + - cp1 + - cp0 + - cp4 + - cp32 + - cp31 + - cp3 + - cp2 + m_Points: + data: + - tangentMode: 2 + inTangent: {x: 1.4677799, y: 0, z: -0.1198585} + position: {x: -1.5093733, y: 0, z: 1.8083892} + outTangent: {x: -0.7622293, y: 0, z: -0.59003043} + - tangentMode: 2 + inTangent: {x: 0.49660897, y: 0, z: 0.6533305} + position: {x: -3.0911102, y: 0, z: -0.0054477826} + outTangent: {x: 0.9949527, y: 0, z: -0.6052146} + - tangentMode: 2 + inTangent: {x: -0.56121105, y: 0, z: 0.3483219} + position: {x: -0.8273939, y: 0, z: -1.2637306} + outTangent: {x: 0.92255735, y: 0, z: -0.457299} + - tangentMode: 2 + inTangent: {x: -0.9289887, y: 0, z: 0.4605987} + position: {x: 1.8617015, y: 0, z: -2.5697057} + outTangent: {x: 0.41431952, y: 0, z: -0.51047516} + - tangentMode: 2 + inTangent: {x: -0.32629395, y: 0, z: 0.33847427} + position: {x: 2.7288418, y: 0, z: -3.4444916} + outTangent: {x: 0.39941335, y: 0, z: 0.24359727} + - tangentMode: 2 + inTangent: {x: -0.3435409, y: 0, z: -0.31051826} + position: {x: 3.639685, y: 0, z: -2.5951595} + outTangent: {x: -0.24850488, y: 0, z: 1.225011} + - tangentMode: 2 + inTangent: {x: 0.41437054, y: 0, z: -1.0532876} + position: {x: 2.4965467, y: 0, z: 1.3275301} + outTangent: {x: -0.73371625, y: 0, z: 0.100637674} + m_Normals: + data: + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + m_Colors: + data: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + m_Thickness: + data: + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + m_Masses: + data: + - 0.1 + - 0.1 + - 0.1 + - 0.1 + - 0.1 + - 0.1 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + m_Filters: + data: 0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff + m_Closed: 1 + m_ArcLengthTable: + - 0 + - 0.13533048 + - 0.2662092 + - 0.3930676 + - 0.51632917 + - 0.6364078 + - 0.75370646 + - 0.8686161 + - 0.98151493 + - 1.0927676 + - 1.2027254 + - 1.3117267 + - 1.420097 + - 1.528151 + - 1.6361938 + - 1.7445226 + - 1.853429 + - 1.9632009 + - 2.0741255 + - 2.1864903 + - 2.300586 + - 2.416708 + - 2.5803764 + - 2.7387848 + - 2.8921363 + - 3.0406313 + - 3.1844676 + - 3.3238404 + - 3.458943 + - 3.5899658 + - 3.7170982 + - 3.8405273 + - 3.9604387 + - 4.077018 + - 4.1904488 + - 4.3009167 + - 4.408607 + - 4.5137076 + - 4.6164083 + - 4.7169027 + - 4.8153887 + - 4.91207 + - 5.007156 + - 5.153549 + - 5.298632 + - 5.442548 + - 5.58544 + - 5.7274523 + - 5.8687277 + - 6.009409 + - 6.1496396 + - 6.289562 + - 6.42932 + - 6.569055 + - 6.708911 + - 6.84903 + - 6.9895554 + - 7.13063 + - 7.2723966 + - 7.4149985 + - 7.558579 + - 7.7032814 + - 7.849249 + - 7.9966254 + - 8.086856 + - 8.170113 + - 8.247009 + - 8.318159 + - 8.384174 + - 8.445666 + - 8.503243 + - 8.55751 + - 8.609067 + - 8.65851 + - 8.70643 + - 8.753413 + - 8.800039 + - 8.8468895 + - 8.894542 + - 8.943577 + - 8.994577 + - 9.048133 + - 9.104835 + - 9.165279 + - 9.230069 + - 9.295789 + - 9.3594675 + - 9.42138 + - 9.481789 + - 9.540944 + - 9.599084 + - 9.656433 + - 9.713202 + - 9.76959 + - 9.825785 + - 9.881963 + - 9.938295 + - 9.9949465 + - 10.052079 + - 10.109854 + - 10.168433 + - 10.227983 + - 10.288677 + - 10.350694 + - 10.41422 + - 10.479452 + - 10.661017 + - 10.848141 + - 11.040159 + - 11.236406 + - 11.4362135 + - 11.638911 + - 11.843829 + - 12.050296 + - 12.257639 + - 12.465185 + - 12.672262 + - 12.878198 + - 13.082318 + - 13.283952 + - 13.482427 + - 13.677072 + - 13.867218 + - 14.0521965 + - 14.231342 + - 14.403991 + - 14.569483 + - 14.682489 + - 14.809294 + - 14.948967 + - 15.100578 + - 15.263198 + - 15.435897 + - 15.617744 + - 15.807813 + - 16.00517 + - 16.208893 + - 16.418049 + - 16.63171 + - 16.848951 + - 17.068844 + - 17.290462 + - 17.512882 + - 17.735178 + - 17.956429 + - 18.17571 + - 18.392105 + - 18.604694 + m_TotalSplineLenght: 18.604694 + OnPathChanged: + m_PersistentCalls: + m_Calls: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.04 + resolution: 0.2 + m_InterParticleDistance: 0.19180097 + totalParticles: 147 + m_RestLength: 28.002403 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a0000003a0000003b0000003b0000003c0000003c0000003d0000003d0000003e0000003e0000003f0000003f00000040000000400000004100000041000000420000004200000043000000430000004400000044000000450000004500000046000000460000004700000047000000480000004800000049000000490000004a0000004a0000004b0000004b0000004c0000004c0000004d0000004d0000004e0000004e0000004f0000004f00000050000000500000005100000051000000520000005200000053000000530000005400000054000000550000005500000056000000560000005700000057000000580000005800000059000000590000005a0000005a0000005b0000005b0000005c0000005c0000005d0000005d0000005e0000005e0000005f0000005f000000600000006000000000000000 + restLengths: + - 0.18564853 + - 0.18596585 + - 0.18565044 + - 0.18601711 + - 0.18576063 + - 0.18583234 + - 0.18588233 + - 0.18583456 + - 0.18592378 + - 0.18579607 + - 0.1858063 + - 0.1861207 + - 0.19971544 + - 0.19943272 + - 0.19898842 + - 0.19928476 + - 0.19936812 + - 0.19907406 + - 0.19931118 + - 0.19934076 + - 0.19907784 + - 0.19906293 + - 0.19933437 + - 0.1992483 + - 0.19919144 + - 0.19944213 + - 0.19925661 + - 0.19924371 + - 0.19933179 + - 0.19922554 + - 0.1993162 + - 0.1992752 + - 0.199276 + - 0.19927499 + - 0.19931632 + - 0.19922356 + - 0.19934614 + - 0.19922769 + - 0.19926094 + - 0.1994527 + - 0.17630634 + - 0.1766938 + - 0.17595129 + - 0.17587988 + - 0.17602395 + - 0.17617115 + - 0.17634629 + - 0.17855187 + - 0.17836717 + - 0.17838444 + - 0.178448 + - 0.17842674 + - 0.17843884 + - 0.17857191 + - 0.19458835 + - 0.19471198 + - 0.19477776 + - 0.19480988 + - 0.19482192 + - 0.19482367 + - 0.1948015 + - 0.19473623 + - 0.19476943 + - 0.19480366 + - 0.19482858 + - 0.19484122 + - 0.19484922 + - 0.1948556 + - 0.19484958 + - 0.19484664 + - 0.19483826 + - 0.19481866 + - 0.1947577 + - 0.19461222 + - 0.19427651 + - 0.19059443 + - 0.19353278 + - 0.19126464 + - 0.19203633 + - 0.1922527 + - 0.19227861 + - 0.19226435 + - 0.19226244 + - 0.19227688 + - 0.19230759 + - 0.19232152 + - 0.19231874 + - 0.1922695 + - 0.192091 + - 0.19219275 + - 0.19225457 + - 0.19226341 + - 0.19222912 + - 0.19215801 + - 0.19206558 + - 0.18639506 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0.19180097 + - 0 + pooledParticles: 50 +--- !u!114 &135749586216130241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: cp1 + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &218208082314265139 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: cp31 + m_EditorClassIdentifier: + particleIndices: 2f000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &1548941265819301156 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: cp3 + m_EditorClassIdentifier: + particleIndices: 36000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8813747759735635217 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: cp0 + m_EditorClassIdentifier: + particleIndices: 0c000000 + m_Blueprint: {fileID: 11400000} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset.meta new file mode 100644 index 000000000..a2d87e356 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e016b4df5bfaf488f91ab99ebca81d83 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset index 39bd8fb65..f41a50046 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset @@ -54,7 +54,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Chain m_EditorClassIdentifier: + m_Checksum: 2706284093 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 24 m_InitialActiveParticleCount: 24 _bounds: @@ -310,6 +312,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -1539,7 +1542,393 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_ConstraintCount: 124 + m_ActiveConstraintCount: 24 + m_InitialActiveConstraintCount: 24 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000005 + - 1 + - 1 + - 0.20000005 + - 1 + - 1 + - 0.20000005 + - 1 + - 1 + - 0.20000005 + - 1 + - 1 + - 0.20000005 + - 1 + - 1 + - 0.20000005 + - 1 + - 1 + - 0.20000005 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1689,6 +2078,7 @@ MonoBehaviour: m_InterParticleDistance: 0.22296134 totalParticles: 124 m_RestLength: 27.388588 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000110000001200000012000000130000001300000014000000140000001500000015000000160000001600000017000000 restLengths: - 0.20054139 - 0.20063484 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset index e88abc2c3..dc5be0c6e 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset @@ -26,12 +26,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Crane m_EditorClassIdentifier: + m_Checksum: 4194486687 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 51 m_InitialActiveParticleCount: 51 _bounds: - m_Center: {x: 0.9783744, y: -1.6007091, z: 0} - m_Extent: {x: 1.2935042, y: 1.8179287, z: 0} + m_Center: {x: 0.9783744, y: -1.6003398, z: 0} + m_Extent: {x: 1.2935042, y: 1.818298, z: 0} positions: - {x: -0.31512982, y: -3.4186378, z: 0} - {x: -0.3056823, y: -3.268208, z: 0} @@ -46,30 +48,30 @@ MonoBehaviour: - {x: -0.3023701, y: -1.9318516, z: 0} - {x: -0.2994541, y: -1.7853336, z: 0} - {x: -0.2993567, y: -1.6387947, z: 0} - - {x: -0.30232438, y: -1.4934478, z: 0} - - {x: -0.30660304, y: -1.3481348, z: 0} - - {x: -0.31069574, y: -1.2028192, z: 0} - - {x: -0.31298584, y: -1.0574687, z: 0} - - {x: -0.31170303, y: -0.91211385, z: 0} - - {x: -0.30489832, y: -0.7669254, z: 0} - - {x: -0.29045326, y: -0.62231326, z: 0} - - {x: -0.27953932, y: -0.46936983, z: 0} - - {x: -0.2792294, y: -0.31600073, z: 0} - - {x: -0.27395794, y: -0.16279453, z: 0} + - {x: -0.30226997, y: -1.4934465, z: 0} + - {x: -0.30640543, y: -1.3481294, z: 0} + - {x: -0.3102972, y: -1.2028079, z: 0} + - {x: -0.31236184, y: -1.0574545, z: 0} + - {x: -0.31086555, y: -0.9121015, z: 0} + - {x: -0.3039001, y: -0.76692027, z: 0} + - {x: -0.28939134, y: -0.62231326, z: 0} + - {x: -0.27967986, y: -0.46904594, z: 0} + - {x: -0.28175166, y: -0.31541988, z: 0} + - {x: -0.27775657, y: -0.1619403, z: 0} - {x: -0.24022967, y: -0.013745427, z: 0} - - {x: -0.10891642, y: 0.07976549, z: 0} - - {x: 0.04868553, y: 0.12708266, z: 0} - - {x: 0.21119903, y: 0.15914668, z: 0} - - {x: 0.37497035, y: 0.18214363, z: 0} - - {x: 0.54003805, y: 0.19865747, z: 0} - - {x: 0.7054689, y: 0.20974034, z: 0} - - {x: 0.8707676, y: 0.21588846, z: 0} - - {x: 1.03637, y: 0.21721959, z: 0} - - {x: 1.2020143, y: 0.2134598, z: 0} - - {x: 1.3673098, y: 0.2039462, z: 0} - - {x: 1.5314698, y: 0.18745771, z: 0} - - {x: 1.695718, y: 0.16125031, z: 0} - - {x: 1.8551009, y: 0.12051222, z: 0} + - {x: -0.10811734, y: 0.07874784, z: 0} + - {x: 0.049495958, y: 0.12659122, z: 0} + - {x: 0.21218093, y: 0.15910268, z: 0} + - {x: 0.3757028, y: 0.18237159, z: 0} + - {x: 0.54063326, y: 0.19910085, z: 0} + - {x: 0.7059974, y: 0.21033922, z: 0} + - {x: 0.87131095, y: 0.21658574, z: 0} + - {x: 1.0368451, y: 0.21795821, z: 0} + - {x: 1.2024431, y: 0.21418877, z: 0} + - {x: 1.3677056, y: 0.20461291, z: 0} + - {x: 1.5318352, y: 0.1880064, z: 0} + - {x: 1.6959254, y: 0.16164106, z: 0} + - {x: 1.8552414, y: 0.12067384, z: 0} - {x: 2.0035534, y: 0.04992962, z: 0} - {x: 2.1177197, y: -0.068810605, z: 0} - {x: 2.1932914, y: -0.21575461, z: 0} @@ -80,10 +82,10 @@ MonoBehaviour: - {x: 2.2623122, y: -1.0353558, z: 0} - {x: 2.248836, y: -1.2006693, z: 0} - {x: 2.2330368, y: -1.3651848, z: 0} - - {x: 2.2265346, y: -1.5091771, z: 0} - - {x: 2.2229314, y: -1.653681, z: 0} - - {x: 2.2201805, y: -1.7982486, z: 0} - - {x: 2.2181082, y: -1.9423363, z: 0} + - {x: 2.2265196, y: -1.5111344, z: 0} + - {x: 2.2229218, y: -1.6575849, z: 0} + - {x: 2.2201767, y: -1.8041061, z: 0} + - {x: 2.2181082, y: -1.9501454, z: 0} - {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 0} @@ -198,30 +200,30 @@ MonoBehaviour: - {x: -0.3023701, y: -1.9318516, z: 0, w: 1} - {x: -0.2994541, y: -1.7853336, z: 0, w: 1} - {x: -0.2993567, y: -1.6387947, z: 0, w: 1} - - {x: -0.30232438, y: -1.4934478, z: 0, w: 1} - - {x: -0.30660304, y: -1.3481348, z: 0, w: 1} - - {x: -0.31069574, y: -1.2028192, z: 0, w: 1} - - {x: -0.31298584, y: -1.0574687, z: 0, w: 1} - - {x: -0.31170303, y: -0.91211385, z: 0, w: 1} - - {x: -0.30489832, y: -0.7669254, z: 0, w: 1} - - {x: -0.29045326, y: -0.62231326, z: 0, w: 1} - - {x: -0.27953932, y: -0.46936983, z: 0, w: 1} - - {x: -0.2792294, y: -0.31600073, z: 0, w: 1} - - {x: -0.27395794, y: -0.16279453, z: 0, w: 1} + - {x: -0.30226997, y: -1.4934465, z: 0, w: 1} + - {x: -0.30640543, y: -1.3481294, z: 0, w: 1} + - {x: -0.3102972, y: -1.2028079, z: 0, w: 1} + - {x: -0.31236184, y: -1.0574545, z: 0, w: 1} + - {x: -0.31086555, y: -0.9121015, z: 0, w: 1} + - {x: -0.3039001, y: -0.76692027, z: 0, w: 1} + - {x: -0.28939134, y: -0.62231326, z: 0, w: 1} + - {x: -0.27967986, y: -0.46904594, z: 0, w: 1} + - {x: -0.28175166, y: -0.31541988, z: 0, w: 1} + - {x: -0.27775657, y: -0.1619403, z: 0, w: 1} - {x: -0.24022967, y: -0.013745427, z: 0, w: 1} - - {x: -0.10891642, y: 0.07976549, z: 0, w: 1} - - {x: 0.04868553, y: 0.12708266, z: 0, w: 1} - - {x: 0.21119903, y: 0.15914668, z: 0, w: 1} - - {x: 0.37497035, y: 0.18214363, z: 0, w: 1} - - {x: 0.54003805, y: 0.19865747, z: 0, w: 1} - - {x: 0.7054689, y: 0.20974034, z: 0, w: 1} - - {x: 0.8707676, y: 0.21588846, z: 0, w: 1} - - {x: 1.03637, y: 0.21721959, z: 0, w: 1} - - {x: 1.2020143, y: 0.2134598, z: 0, w: 1} - - {x: 1.3673098, y: 0.2039462, z: 0, w: 1} - - {x: 1.5314698, y: 0.18745771, z: 0, w: 1} - - {x: 1.695718, y: 0.16125031, z: 0, w: 1} - - {x: 1.8551009, y: 0.12051222, z: 0, w: 1} + - {x: -0.10811734, y: 0.07874784, z: 0, w: 1} + - {x: 0.049495958, y: 0.12659122, z: 0, w: 1} + - {x: 0.21218093, y: 0.15910268, z: 0, w: 1} + - {x: 0.3757028, y: 0.18237159, z: 0, w: 1} + - {x: 0.54063326, y: 0.19910085, z: 0, w: 1} + - {x: 0.7059974, y: 0.21033922, z: 0, w: 1} + - {x: 0.87131095, y: 0.21658574, z: 0, w: 1} + - {x: 1.0368451, y: 0.21795821, z: 0, w: 1} + - {x: 1.2024431, y: 0.21418877, z: 0, w: 1} + - {x: 1.3677056, y: 0.20461291, z: 0, w: 1} + - {x: 1.5318352, y: 0.1880064, z: 0, w: 1} + - {x: 1.6959254, y: 0.16164106, z: 0, w: 1} + - {x: 1.8552414, y: 0.12067384, z: 0, w: 1} - {x: 2.0035534, y: 0.04992962, z: 0, w: 1} - {x: 2.1177197, y: -0.068810605, z: 0, w: 1} - {x: 2.1932914, y: -0.21575461, z: 0, w: 1} @@ -232,10 +234,10 @@ MonoBehaviour: - {x: 2.2623122, y: -1.0353558, z: 0, w: 1} - {x: 2.248836, y: -1.2006693, z: 0, w: 1} - {x: 2.2330368, y: -1.3651848, z: 0, w: 1} - - {x: 2.2265346, y: -1.5091771, z: 0, w: 1} - - {x: 2.2229314, y: -1.653681, z: 0, w: 1} - - {x: 2.2201805, y: -1.7982486, z: 0, w: 1} - - {x: 2.2181082, y: -1.9423363, z: 0, w: 1} + - {x: 2.2265196, y: -1.5111344, z: 0, w: 1} + - {x: 2.2229218, y: -1.6575849, z: 0, w: 1} + - {x: 2.2201767, y: -1.8041061, z: 0, w: 1} + - {x: 2.2181082, y: -1.9501454, z: 0, w: 1} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} @@ -336,6 +338,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -973,25 +976,25 @@ MonoBehaviour: - 0.1465397 - 0.14655772 - 0.146547 - - 0.14537717 - - 0.14537315 - - 0.14536047 - - 0.14533179 - - 0.15336941 - - 0.15281764 - - 0.16455178 - - 0.16537806 - - 0.16580167 - - 0.1656078 - - 0.16556904 - - 0.16632591 - - 0.16437778 + - 0.14537738 + - 0.1453736 + - 0.14536066 + - 0.14533304 + - 0.15364002 + - 0.15287247 + - 0.16471474 + - 0.16516913 + - 0.16574559 + - 0.16553983 + - 0.16553965 + - 0.1661948 + - 0.16432038 - 0.16523813 - 0.16566478 - 0.16564785 - 0.16586185 - - 0.14413904 - - 0.14459378 + - 0.14609504 + - 0.14654693 - 0 - 0 - 0 @@ -1140,25 +1143,25 @@ MonoBehaviour: - 0.14655413 - 0.14655447 - 0.146539 - - 0.145376 - - 0.14536862 - - 0.14534782 - - 0.15333234 - - 0.15329686 - - 0.16120628 - - 0.16564642 - - 0.16589169 - - 0.16541299 - - 0.16568695 - - 0.164986 - - 0.16450676 + - 0.1453759 + - 0.1453681 + - 0.14534824 + - 0.15357469 + - 0.15353157 + - 0.16127203 + - 0.16590177 + - 0.16577673 + - 0.16543151 + - 0.16564094 + - 0.1649676 + - 0.164499 - 0.1647215 - 0.16536571 - 0.1656973 - 0.1657586 - 0.1652724 - - 0.14454886 - - 0.14410257 + - 0.1464947 + - 0.1460539 - 0 - 0 - 0 @@ -1303,23 +1306,23 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.00042131654 - - 0.0019198892 - - 0.001181275 - - 0.00042943415 - - 0.00043716797 - - 0.001190991 - - 0.0030162414 - - 0.009586283 - - 0.0053414763 - - 0.0018143662 - - 0.0016970462 - - 0.0032397506 - - 0.019705387 - - 0.007221373 - - 0.002470971 - - 0.0075102416 - - 0.00027710374 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1473,23 +1476,23 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.0017002142 - - 0.0015957004 - - 0.00059224834 - - 0.0009395445 - - 0.000061992956 - - 0.0018414557 - - 0.0035375215 - - 0.037427437 - - 0.0030513157 - - 0.001645499 - - 0.001921447 - - 0.0051078834 - - 0.015933849 - - 0.004931509 - - 0.0016639825 - - 0.0009812318 - - 1.0145596 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1643,23 +1646,23 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.0018389499 - - 0.001889506 - - 0.00006921082 - - 0.0010962501 - - 0.000600988 - - 0.0025540222 - - 0.0016547412 - - 0.017716777 - - 0.0022038233 - - 0.0016088501 - - 0.0023555602 - - 0.010594352 - - 0.010907751 - - 0.0034749473 - - 0.0008187811 - - 0.00028498602 - - 0.9827781 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1808,7 +1811,474 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f00000090000000910000009200000093000000940000009500000096000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f00000090000000910000009200000093000000940000009500000096000000 + m_ConstraintCount: 151 + m_ActiveConstraintCount: 51 + m_InitialActiveConstraintCount: 51 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f00000090000000910000009200000093000000940000009500000096000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.1 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1848,12 +2318,12 @@ MonoBehaviour: outTangent: {x: -0.004487418, y: 0.35511988, z: 0} - tangentMode: 0 inTangent: {x: -0.042096525, y: -0.31926423, z: 0} - position: {x: -0.29045326, y: -0.62231326, z: 0} + position: {x: -0.28939134, y: -0.62231326, z: 0} outTangent: {x: 0.03052252, y: 0.23148584, z: 0} - tangentMode: 0 - inTangent: {x: -0.06755149, y: -0.16796803, z: 0} + inTangent: {x: -0.076556884, y: -0.16405949, z: -0} position: {x: -0.24022967, y: -0.013745427, z: 0} - outTangent: {x: 0.09870601, y: 0.2454343, z: -0} + outTangent: {x: 0.11562002, y: 0.2477708, z: 0} - tangentMode: 0 inTangent: {x: -0.37514892, y: 0.274398, z: -0} position: {x: 2.0035534, y: 0.04992962, z: 0} @@ -1864,8 +2334,8 @@ MonoBehaviour: outTangent: {x: -0.00857234, y: -0.08916843, z: 0} - tangentMode: 0 inTangent: {x: -0.00015902519, y: 0.008308649, z: 0} - position: {x: 2.2181082, y: -1.9423363, z: 0} - outTangent: {x: 0.0047840523, y: -0.24995418, z: -0} + position: {x: 2.2181082, y: -1.9501454, z: 0} + outTangent: {x: 0.0047840523, y: -0.24995418, z: 0} m_Normals: data: - {x: 0, y: 1, z: 0} @@ -1963,112 +2433,112 @@ MonoBehaviour: - 1.6819742 - 1.7316145 - 1.7810686 - - 1.8317167 - - 1.8821862 - - 1.9324706 - - 1.9825627 - - 2.0324547 - - 2.0821385 - - 2.1316059 - - 2.1808486 - - 2.229859 - - 2.2786303 - - 2.3271558 - - 2.3754306 - - 2.4234507 - - 2.4712138 - - 2.5187197 - - 2.5659702 - - 2.6129696 - - 2.6597252 - - 2.706247 - - 2.7525487 - - 2.7986474 - - 2.8317878 - - 2.8645167 - - 2.896855 - - 2.9288154 - - 2.960403 - - 2.9916165 - - 3.0224502 - - 3.0528944 - - 3.082937 - - 3.1125655 - - 3.1417682 - - 3.1705356 - - 3.1988626 - - 3.2267504 - - 3.2542086 - - 3.2812576 - - 3.3079312 - - 3.3342783 - - 3.3603663 - - 3.3862824 - - 3.4121354 - - 3.454768 - - 3.510719 - - 3.5818093 - - 3.6676068 - - 3.7668674 - - 3.8780124 - - 3.9993064 - - 4.128933 - - 4.265031 - - 4.405716 - - 4.5490923 - - 4.693261 - - 4.836329 - - 4.976415 - - 5.1116633 - - 5.2402554 - - 5.3604364 - - 5.4705553 - - 5.5691433 - - 5.6550694 - - 5.727879 - - 5.7906556 - - 5.853395 - - 5.916935 - - 5.981878 - - 6.048604 - - 6.117303 - - 6.188004 - - 6.2606106 - - 6.334925 - - 6.410672 - - 6.4875164 - - 6.5650744 - - 6.642926 - - 6.7206225 - - 6.797691 - - 6.873641 - - 6.947968 - - 7.020156 - - 7.0896807 - - 7.156012 - - 7.2186165 - - 7.2339664 - - 7.2540574 - - 7.278337 - - 7.3062496 - - 7.337238 - - 7.3707447 - - 7.406212 - - 7.4430814 - - 7.4807954 - - 7.5187955 - - 7.556524 - - 7.593422 - - 7.6289315 - - 7.662494 - - 7.6935515 - - 7.721545 - - 7.745917 - - 7.7661085 - - 7.7815614 - - 7.791717 - - 7.7960176 - m_TotalSplineLenght: 7.7960176 + - 1.8317165 + - 1.8821856 + - 1.9324692 + - 1.9825602 + - 2.0324507 + - 2.0821328 + - 2.1315982 + - 2.1808393 + - 2.2298481 + - 2.2786179 + - 2.3271425 + - 2.3754168 + - 2.4234369 + - 2.471201 + - 2.5187082 + - 2.565961 + - 2.612963 + - 2.6597211 + - 2.7062454 + - 2.752549 + - 2.7986484 + - 2.831807 + - 2.864591 + - 2.897021 + - 2.929107 + - 2.960848 + - 2.9922366 + - 3.0232577 + - 3.0538924 + - 3.0841188 + - 3.1139145 + - 3.1432579 + - 3.1721313 + - 3.2005231 + - 3.2284303 + - 3.255861 + - 3.2828388 + - 3.3094049 + - 3.335622 + - 3.3615782 + - 3.3873882 + - 3.4131968 + - 3.4573665 + - 3.5149012 + - 3.5873144 + - 3.674112 + - 3.774054 + - 3.8855855 + - 4.007001 + - 4.1365166 + - 4.272305 + - 4.4125156 + - 4.5552864 + - 4.698753 + - 4.841055 + - 4.9803467 + - 5.114805 + - 5.242646 + - 5.362149 + - 5.471695 + - 5.569848 + - 5.6555047 + - 5.7282257 + - 5.7910023 + - 5.8537416 + - 5.9172816 + - 5.9822245 + - 6.0489507 + - 6.1176496 + - 6.1883507 + - 6.2609572 + - 6.335272 + - 6.411019 + - 6.487863 + - 6.565421 + - 6.643273 + - 6.720969 + - 6.7980375 + - 6.8739877 + - 6.9483147 + - 7.0205026 + - 7.0900273 + - 7.1563587 + - 7.218963 + - 7.2343645 + - 7.254603 + - 7.279116 + - 7.3073378 + - 7.3387012 + - 7.3726387 + - 7.408582 + - 7.4459634 + - 7.4842143 + - 7.5227666 + - 7.5610523 + - 7.5985026 + - 7.634549 + - 7.6686234 + - 7.700157 + - 7.7285814 + - 7.7533283 + - 7.773829 + - 7.7895155 + - 7.799819 + - 7.804171 + m_TotalSplineLenght: 7.804171 OnPathChanged: m_PersistentCalls: m_Calls: [] @@ -2083,9 +2553,10 @@ MonoBehaviour: m_Calls: [] thickness: 0.05 resolution: 0.3 - m_InterParticleDistance: 0.15592036 + m_InterParticleDistance: 0.15608342 totalParticles: 151 - m_RestLength: 23.380884 + m_RestLength: 23.405613 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f0000003000000030000000310000003100000032000000 restLengths: - 0.1507261 - 0.15123467 @@ -2099,31 +2570,31 @@ MonoBehaviour: - 0.14655447 - 0.146547 - 0.146539 - - 0.14537717 - - 0.145376 - - 0.14537315 - - 0.14536862 - - 0.14536047 - - 0.14534782 - - 0.14533179 - - 0.15333234 - - 0.15336941 - - 0.15329686 - - 0.15281764 - - 0.16120628 - - 0.16455178 - - 0.16564642 - - 0.16537806 - - 0.16589169 - - 0.16580167 - - 0.16541299 - - 0.1656078 - - 0.16568695 - - 0.16556904 - - 0.164986 - - 0.16632591 - - 0.16450676 - - 0.16437778 + - 0.14537738 + - 0.1453759 + - 0.1453736 + - 0.1453681 + - 0.14536066 + - 0.14534824 + - 0.14533304 + - 0.15357469 + - 0.15364002 + - 0.15353157 + - 0.15287247 + - 0.16127203 + - 0.16471474 + - 0.16590177 + - 0.16516913 + - 0.16577673 + - 0.16574559 + - 0.16543151 + - 0.16553983 + - 0.16564094 + - 0.16553965 + - 0.1649676 + - 0.1661948 + - 0.164499 + - 0.16432038 - 0.1647215 - 0.16523813 - 0.16536571 @@ -2133,110 +2604,110 @@ MonoBehaviour: - 0.1657586 - 0.16586185 - 0.1652724 - - 0.14413904 - - 0.14454886 - - 0.14459378 - - 0.14410257 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 - - 0.15592036 + - 0.14609504 + - 0.1464947 + - 0.14654693 + - 0.1460539 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 + - 0.15608342 - 0 pooledParticles: 100 --- !u!114 &221160992778322150 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset index 144451914..c8755b429 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset @@ -40,59 +40,61 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: CuttableRope m_EditorClassIdentifier: + m_Checksum: 2449783092 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 47 m_InitialActiveParticleCount: 47 _bounds: - m_Center: {x: 0, y: -1.1273527, z: 0} - m_Extent: {x: 1, y: 1.1273527, z: 0} + m_Center: {x: 0, y: -1.1317979, z: 0} + m_Extent: {x: 1, y: 1.1317979, z: 0} positions: - {x: -1, y: 0, z: 0} - - {x: -0.97762287, y: -0.11522584, z: 0} - - {x: -0.95936936, y: -0.23137596, z: 0} - - {x: -0.9437566, y: -0.34758952, z: 0} - - {x: -0.92964494, y: -0.46408504, z: 0} - - {x: -0.9162184, y: -0.5808135, z: 0} - - {x: -0.9028167, y: -0.69767493, z: 0} - - {x: -0.8888646, y: -0.8145225, z: 0} - - {x: -0.87382543, y: -0.9311737, z: 0} - - {x: -0.85715926, y: -1.047494, z: 0} - - {x: -0.83825207, y: -1.1635969, z: 0} - - {x: -0.81646955, y: -1.2792301, z: 0} - - {x: -0.7910905, y: -1.3940624, z: 0} - - {x: -0.76125896, y: -1.5076991, z: 0} - - {x: -0.72593284, y: -1.6196305, z: 0} - - {x: -0.6838275, y: -1.7291285, z: 0} - - {x: -0.63338226, y: -1.8350657, z: 0} - - {x: -0.57281363, y: -1.9356464, z: 0} - - {x: -0.50040925, y: -2.0280955, z: 0} - - {x: -0.4151265, y: -2.1086814, z: 0} - - {x: -0.31745207, y: -2.17337, z: 0} - - {x: -0.20975508, y: -2.2192795, z: 0} - - {x: -0.09552427, y: -2.2458577, z: 0} - - {x: 0.022092208, y: -2.2547054, z: 0} - - {x: 0.13853739, y: -2.2465513, z: 0} - - {x: 0.25116643, y: -2.2186759, z: 0} - - {x: 0.35621136, y: -2.1697896, z: 0} - - {x: 0.44994435, y: -2.1014705, z: 0} - - {x: 0.5304258, y: -2.0177364, z: 0} - - {x: 0.5979065, y: -1.923179, z: 0} - - {x: 0.65397346, y: -1.8214862, z: 0} - - {x: 0.7005688, y: -1.7151183, z: 0} - - {x: 0.7394668, y: -1.6056024, z: 0} - - {x: 0.772125, y: -1.4939107, z: 0} - - {x: 0.79970485, y: -1.3807198, z: 0} - - {x: 0.82313854, y: -1.2665546, z: 0} - - {x: 0.8431833, y: -1.1519176, z: 0} - - {x: 0.8605447, y: -1.0368524, z: 0} - - {x: 0.87582904, y: -0.9213535, z: 0} - - {x: 0.8895526, y: -0.80569303, z: 0} - - {x: 0.9022278, y: -0.6901039, z: 0} - - {x: 0.91440463, y: -0.5746819, z: 0} - - {x: 0.9267968, y: -0.45864666, z: 0} - - {x: 0.9401173, y: -0.34276536, z: 0} - - {x: 0.95544344, y: -0.22725037, z: 0} - - {x: 0.9744411, y: -0.112545475, z: 0} + - {x: -0.9775765, y: -0.11555687, z: 0} + - {x: -0.9593011, y: -0.23207563, z: 0} + - {x: -0.9436838, y: -0.34862915, z: 0} + - {x: -0.9295727, y: -0.46546358, z: 0} + - {x: -0.9161487, y: -0.5825332, z: 0} + - {x: -0.9027507, y: -0.69973963, z: 0} + - {x: -0.8888033, y: -0.8169358, z: 0} + - {x: -0.8737717, y: -0.9339388, z: 0} + - {x: -0.8571179, y: -1.0506083, z: 0} + - {x: -0.8382302, y: -1.167062, z: 0} + - {x: -0.8164768, y: -1.2830523, z: 0} + - {x: -0.7911396, y: -1.3982471, z: 0} + - {x: -0.7613677, y: -1.5122539, z: 0} + - {x: -0.7261233, y: -1.624567, z: 0} + - {x: -0.6841257, y: -1.7344677, z: 0} + - {x: -0.6338141, y: -1.8408433, z: 0} + - {x: -0.57337433, y: -1.9419466, z: 0} + - {x: -0.5011298, y: -2.0349202, z: 0} + - {x: -0.41592625, y: -2.11611, z: 0} + - {x: -0.31821865, y: -2.1813877, z: 0} + - {x: -0.21035275, y: -2.2277777, z: 0} + - {x: -0.095846556, y: -2.2546525, z: 0} + - {x: 0.022092208, y: -2.2635958, z: 0} + - {x: 0.13886301, y: -2.2553437, z: 0} + - {x: 0.25176537, y: -2.2271554, z: 0} + - {x: 0.35696575, y: -2.1777713, z: 0} + - {x: 0.4507142, y: -2.1088622, z: 0} + - {x: 0.531107, y: -2.024545, z: 0} + - {x: 0.5984538, y: -1.9294598, z: 0} + - {x: 0.6543842, y: -1.8272991, z: 0} + - {x: 0.70086133, y: -1.7205061, z: 0} + - {x: 0.7396646, y: -1.610593, z: 0} + - {x: 0.77225053, y: -1.4985195, z: 0} + - {x: 0.79977673, y: -1.3849562, z: 0} + - {x: 0.82317114, y: -1.270426, z: 0} + - {x: 0.843188, y: -1.15543, z: 0} + - {x: 0.86053014, y: -1.0400072, z: 0} + - {x: 0.8758011, y: -0.92415375, z: 0} + - {x: 0.8895153, y: -0.80814165, z: 0} + - {x: 0.90218335, y: -0.6922063, z: 0} + - {x: 0.914356, y: -0.5764237, z: 0} + - {x: 0.9267438, y: -0.46003297, z: 0} + - {x: 0.94006056, y: -0.34379828, z: 0} + - {x: 0.955386, y: -0.2279308, z: 0} + - {x: 0.97439444, y: -0.11287492, z: 0} - {x: 1, y: 0, z: 0} - {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 0} @@ -196,51 +198,51 @@ MonoBehaviour: - {x: 0, y: 0, z: 0} restPositions: - {x: -1, y: 0, z: 0, w: 1} - - {x: -0.97762287, y: -0.11522584, z: 0, w: 1} - - {x: -0.95936936, y: -0.23137596, z: 0, w: 1} - - {x: -0.9437566, y: -0.34758952, z: 0, w: 1} - - {x: -0.92964494, y: -0.46408504, z: 0, w: 1} - - {x: -0.9162184, y: -0.5808135, z: 0, w: 1} - - {x: -0.9028167, y: -0.69767493, z: 0, w: 1} - - {x: -0.8888646, y: -0.8145225, z: 0, w: 1} - - {x: -0.87382543, y: -0.9311737, z: 0, w: 1} - - {x: -0.85715926, y: -1.047494, z: 0, w: 1} - - {x: -0.83825207, y: -1.1635969, z: 0, w: 1} - - {x: -0.81646955, y: -1.2792301, z: 0, w: 1} - - {x: -0.7910905, y: -1.3940624, z: 0, w: 1} - - {x: -0.76125896, y: -1.5076991, z: 0, w: 1} - - {x: -0.72593284, y: -1.6196305, z: 0, w: 1} - - {x: -0.6838275, y: -1.7291285, z: 0, w: 1} - - {x: -0.63338226, y: -1.8350657, z: 0, w: 1} - - {x: -0.57281363, y: -1.9356464, z: 0, w: 1} - - {x: -0.50040925, y: -2.0280955, z: 0, w: 1} - - {x: -0.4151265, y: -2.1086814, z: 0, w: 1} - - {x: -0.31745207, y: -2.17337, z: 0, w: 1} - - {x: -0.20975508, y: -2.2192795, z: 0, w: 1} - - {x: -0.09552427, y: -2.2458577, z: 0, w: 1} - - {x: 0.022092208, y: -2.2547054, z: 0, w: 1} - - {x: 0.13853739, y: -2.2465513, z: 0, w: 1} - - {x: 0.25116643, y: -2.2186759, z: 0, w: 1} - - {x: 0.35621136, y: -2.1697896, z: 0, w: 1} - - {x: 0.44994435, y: -2.1014705, z: 0, w: 1} - - {x: 0.5304258, y: -2.0177364, z: 0, w: 1} - - {x: 0.5979065, y: -1.923179, z: 0, w: 1} - - {x: 0.65397346, y: -1.8214862, z: 0, w: 1} - - {x: 0.7005688, y: -1.7151183, z: 0, w: 1} - - {x: 0.7394668, y: -1.6056024, z: 0, w: 1} - - {x: 0.772125, y: -1.4939107, z: 0, w: 1} - - {x: 0.79970485, y: -1.3807198, z: 0, w: 1} - - {x: 0.82313854, y: -1.2665546, z: 0, w: 1} - - {x: 0.8431833, y: -1.1519176, z: 0, w: 1} - - {x: 0.8605447, y: -1.0368524, z: 0, w: 1} - - {x: 0.87582904, y: -0.9213535, z: 0, w: 1} - - {x: 0.8895526, y: -0.80569303, z: 0, w: 1} - - {x: 0.9022278, y: -0.6901039, z: 0, w: 1} - - {x: 0.91440463, y: -0.5746819, z: 0, w: 1} - - {x: 0.9267968, y: -0.45864666, z: 0, w: 1} - - {x: 0.9401173, y: -0.34276536, z: 0, w: 1} - - {x: 0.95544344, y: -0.22725037, z: 0, w: 1} - - {x: 0.9744411, y: -0.112545475, z: 0, w: 1} + - {x: -0.9775765, y: -0.11555687, z: 0, w: 1} + - {x: -0.9593011, y: -0.23207563, z: 0, w: 1} + - {x: -0.9436838, y: -0.34862915, z: 0, w: 1} + - {x: -0.9295727, y: -0.46546358, z: 0, w: 1} + - {x: -0.9161487, y: -0.5825332, z: 0, w: 1} + - {x: -0.9027507, y: -0.69973963, z: 0, w: 1} + - {x: -0.8888033, y: -0.8169358, z: 0, w: 1} + - {x: -0.8737717, y: -0.9339388, z: 0, w: 1} + - {x: -0.8571179, y: -1.0506083, z: 0, w: 1} + - {x: -0.8382302, y: -1.167062, z: 0, w: 1} + - {x: -0.8164768, y: -1.2830523, z: 0, w: 1} + - {x: -0.7911396, y: -1.3982471, z: 0, w: 1} + - {x: -0.7613677, y: -1.5122539, z: 0, w: 1} + - {x: -0.7261233, y: -1.624567, z: 0, w: 1} + - {x: -0.6841257, y: -1.7344677, z: 0, w: 1} + - {x: -0.6338141, y: -1.8408433, z: 0, w: 1} + - {x: -0.57337433, y: -1.9419466, z: 0, w: 1} + - {x: -0.5011298, y: -2.0349202, z: 0, w: 1} + - {x: -0.41592625, y: -2.11611, z: 0, w: 1} + - {x: -0.31821865, y: -2.1813877, z: 0, w: 1} + - {x: -0.21035275, y: -2.2277777, z: 0, w: 1} + - {x: -0.095846556, y: -2.2546525, z: 0, w: 1} + - {x: 0.022092208, y: -2.2635958, z: 0, w: 1} + - {x: 0.13886301, y: -2.2553437, z: 0, w: 1} + - {x: 0.25176537, y: -2.2271554, z: 0, w: 1} + - {x: 0.35696575, y: -2.1777713, z: 0, w: 1} + - {x: 0.4507142, y: -2.1088622, z: 0, w: 1} + - {x: 0.531107, y: -2.024545, z: 0, w: 1} + - {x: 0.5984538, y: -1.9294598, z: 0, w: 1} + - {x: 0.6543842, y: -1.8272991, z: 0, w: 1} + - {x: 0.70086133, y: -1.7205061, z: 0, w: 1} + - {x: 0.7396646, y: -1.610593, z: 0, w: 1} + - {x: 0.77225053, y: -1.4985195, z: 0, w: 1} + - {x: 0.79977673, y: -1.3849562, z: 0, w: 1} + - {x: 0.82317114, y: -1.270426, z: 0, w: 1} + - {x: 0.843188, y: -1.15543, z: 0, w: 1} + - {x: 0.86053014, y: -1.0400072, z: 0, w: 1} + - {x: 0.8758011, y: -0.92415375, z: 0, w: 1} + - {x: 0.8895153, y: -0.80814165, z: 0, w: 1} + - {x: 0.90218335, y: -0.6922063, z: 0, w: 1} + - {x: 0.914356, y: -0.5764237, z: 0, w: 1} + - {x: 0.9267438, y: -0.46003297, z: 0, w: 1} + - {x: 0.94006056, y: -0.34379828, z: 0, w: 1} + - {x: 0.955386, y: -0.2279308, z: 0, w: 1} + - {x: 0.97439444, y: -0.11287492, z: 0, w: 1} - {x: 1, y: 0, z: 0, w: 1} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} @@ -342,6 +344,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -500,13 +503,13 @@ MonoBehaviour: - 9.999999 - 10.000001 - 10 - - 10.000001 + - 10 + - 10 - 9.999999 - - 10 - - 10 - - 10 - - 10 - - 10 + - 10.000001 + - 10.000001 + - 9.999998 + - 10.000001 - 9.999999 - 9.999999 - 9.999999 @@ -645,52 +648,52 @@ MonoBehaviour: filters: 0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 principalRadii: - {x: 0.029999997, y: 0.029999997, z: 0.029999997} - - {x: 0.029992776, y: 0.029992776, z: 0.029992776} - - {x: 0.029973807, y: 0.029973807, z: 0.029973807} - - {x: 0.029946083, y: 0.029946083, z: 0.029946083} - - {x: 0.029911412, y: 0.029911412, z: 0.029911412} - - {x: 0.029871061, y: 0.029871061, z: 0.029871061} - - {x: 0.029825961, y: 0.029825961, z: 0.029825961} - - {x: 0.029776854, y: 0.029776854, z: 0.029776854} - - {x: 0.029724332, y: 0.029724332, z: 0.029724332} - - {x: 0.029668894, y: 0.029668894, z: 0.029668894} - - {x: 0.029610826, y: 0.029610826, z: 0.029610826} - - {x: 0.029550528, y: 0.029550528, z: 0.029550528} - - {x: 0.029488418, y: 0.029488418, z: 0.029488418} - - {x: 0.029424926, y: 0.029424926, z: 0.029424926} - - {x: 0.029360538, y: 0.029360538, z: 0.029360538} - - {x: 0.029295865, y: 0.029295865, z: 0.029295865} - - {x: 0.029231772, y: 0.029231772, z: 0.029231772} - - {x: 0.029169565, y: 0.029169565, z: 0.029169565} - - {x: 0.02911124, y: 0.02911124, z: 0.02911124} - - {x: 0.029059494, y: 0.029059494, z: 0.029059494} - - {x: 0.029017346, y: 0.029017346, z: 0.029017346} - - {x: 0.028987132, y: 0.028987132, z: 0.028987132} - - {x: 0.028969646, y: 0.028969646, z: 0.028969646} + - {x: 0.029992742, y: 0.029992742, z: 0.029992742} + - {x: 0.029973708, y: 0.029973708, z: 0.029973708} + - {x: 0.029945929, y: 0.029945929, z: 0.029945929} + - {x: 0.02991121, y: 0.02991121, z: 0.02991121} + - {x: 0.029870836, y: 0.029870836, z: 0.029870836} + - {x: 0.029825734, y: 0.029825734, z: 0.029825734} + - {x: 0.029776635, y: 0.029776635, z: 0.029776635} + - {x: 0.029724149, y: 0.029724149, z: 0.029724149} + - {x: 0.02966876, y: 0.02966876, z: 0.02966876} + - {x: 0.029610759, y: 0.029610759, z: 0.029610759} + - {x: 0.029550549, y: 0.029550549, z: 0.029550549} + - {x: 0.029488528, y: 0.029488528, z: 0.029488528} + - {x: 0.02942514, y: 0.02942514, z: 0.02942514} + - {x: 0.029360859, y: 0.029360859, z: 0.029360859} + - {x: 0.029296285, y: 0.029296285, z: 0.029296285} + - {x: 0.029232267, y: 0.029232267, z: 0.029232267} + - {x: 0.029170081, y: 0.029170081, z: 0.029170081} + - {x: 0.029111749, y: 0.029111749, z: 0.029111749} + - {x: 0.029059907, y: 0.029059907, z: 0.029059907} + - {x: 0.029017618, y: 0.029017618, z: 0.029017618} + - {x: 0.028987262, y: 0.028987262, z: 0.028987262} + - {x: 0.028969677, y: 0.028969677, z: 0.028969677} - {x: 0.028964136, y: 0.028964136, z: 0.028964136} - - {x: 0.0289697, y: 0.0289697, z: 0.0289697} - - {x: 0.028987357, y: 0.028987357, z: 0.028987357} - - {x: 0.029017627, y: 0.029017627, z: 0.029017627} - - {x: 0.029059224, y: 0.029059224, z: 0.029059224} - - {x: 0.029109413, y: 0.029109413, z: 0.029109413} - - {x: 0.029165206, y: 0.029165206, z: 0.029165206} - - {x: 0.029224247, y: 0.029224247, z: 0.029224247} - - {x: 0.029284962, y: 0.029284962, z: 0.029284962} - - {x: 0.029346356, y: 0.029346356, z: 0.029346356} - - {x: 0.02940776, y: 0.02940776, z: 0.02940776} - - {x: 0.029468678, y: 0.029468678, z: 0.029468678} - - {x: 0.029528687, y: 0.029528687, z: 0.029528687} - - {x: 0.029587371, y: 0.029587371, z: 0.029587371} - - {x: 0.029644525, y: 0.029644525, z: 0.029644525} - - {x: 0.02969992, y: 0.02969992, z: 0.02969992} - - {x: 0.029753137, y: 0.029753137, z: 0.029753137} - - {x: 0.029803708, y: 0.029803708, z: 0.029803708} - - {x: 0.02985112, y: 0.02985112, z: 0.02985112} - - {x: 0.029894998, y: 0.029894998, z: 0.029894998} - - {x: 0.029934045, y: 0.029934045, z: 0.029934045} - - {x: 0.02996669, y: 0.02996669, z: 0.02996669} - - {x: 0.029990312, y: 0.029990312, z: 0.029990312} - - {x: 0.029999997, y: 0.029999997, z: 0.029999997} + - {x: 0.028969733, y: 0.028969733, z: 0.028969733} + - {x: 0.02898749, y: 0.02898749, z: 0.02898749} + - {x: 0.029017903, y: 0.029017903, z: 0.029017903} + - {x: 0.029059635, y: 0.029059635, z: 0.029059635} + - {x: 0.029109906, y: 0.029109906, z: 0.029109906} + - {x: 0.02916572, y: 0.02916572, z: 0.02916572} + - {x: 0.029224731, y: 0.029224731, z: 0.029224731} + - {x: 0.029285384, y: 0.029285384, z: 0.029285384} + - {x: 0.029346699, y: 0.029346699, z: 0.029346699} + - {x: 0.029408017, y: 0.029408017, z: 0.029408017} + - {x: 0.029468851, y: 0.029468851, z: 0.029468851} + - {x: 0.029528778, y: 0.029528778, z: 0.029528778} + - {x: 0.029587386, y: 0.029587386, z: 0.029587386} + - {x: 0.029644474, y: 0.029644474, z: 0.029644474} + - {x: 0.029699815, y: 0.029699815, z: 0.029699815} + - {x: 0.02975299, y: 0.02975299, z: 0.02975299} + - {x: 0.029803533, y: 0.029803533, z: 0.029803533} + - {x: 0.029850937, y: 0.029850937, z: 0.029850937} + - {x: 0.029894827, y: 0.029894827, z: 0.029894827} + - {x: 0.029933902, y: 0.029933902, z: 0.029933902} + - {x: 0.029966593, y: 0.029966593, z: 0.029966593} + - {x: 0.029990276, y: 0.029990276, z: 0.029990276} + - {x: 0.03, y: 0.03, z: 0.03} - {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 0} @@ -795,16 +798,16 @@ MonoBehaviour: - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} @@ -957,29 +960,29 @@ MonoBehaviour: m_AlignBytes: 16 restLengths: serializedContents: - - 0.11737857 - - 0.117257625 - - 0.11749813 - - 0.1176776 - - 0.117508255 - - 0.11766701 - - 0.11748713 - - 0.11731443 - - 0.117409684 - - 0.1173339 - - 0.11707407 - - 0.11794879 - - 0.116027325 - - 0.11598866 - - 0.11616688 - - 0.116126075 - - 0.116368376 - - 0.11654539 - - 0.116367616 - - 0.11647182 - - 0.11606255 - - 0.116644375 - - 0.116267465 + - 0.11771238 + - 0.117595166 + - 0.11783673 + - 0.11802316 + - 0.1178521 + - 0.11801252 + - 0.11783 + - 0.117651865 + - 0.117791526 + - 0.11769215 + - 0.11741844 + - 0.11827736 + - 0.11636803 + - 0.11634967 + - 0.11651943 + - 0.11646836 + - 0.11671458 + - 0.11689511 + - 0.11671828 + - 0.11681989 + - 0.11642074 + - 0.11699504 + - 0.11661551 - 0 - 0 - 0 @@ -1120,29 +1123,29 @@ MonoBehaviour: m_AlignBytes: 16 restLengths: serializedContents: - - 0.11757569 - - 0.117347114 - - 0.117627345 - - 0.11761664 - - 0.11763225 - - 0.117603354 - - 0.11737358 - - 0.117334664 - - 0.117427535 - - 0.11715327 - - 0.11728205 - - 0.11673033 - - 0.115863316 - - 0.11614065 - - 0.11612464 - - 0.1162187 - - 0.11650247 - - 0.11637627 - - 0.116505764 - - 0.11628203 - - 0.11669507 - - 0.11652727 - - 0.115411185 + - 0.11794325 + - 0.11768351 + - 0.117969744 + - 0.11796464 + - 0.117975526 + - 0.11794836 + - 0.117713265 + - 0.117673375 + - 0.11774277 + - 0.11750718 + - 0.1176177 + - 0.11706203 + - 0.11621493 + - 0.11650062 + - 0.11646894 + - 0.11656151 + - 0.11685168 + - 0.1167252 + - 0.11685561 + - 0.11662538 + - 0.117048115 + - 0.11687661 + - 0.11574278 - 0 - 0 - 0 @@ -1285,22 +1288,22 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.001408647 - - 0.00024118213 - - 0.00036826893 - - 0.00097113923 - - 0.0019177926 - - 0.0038177262 - - 0.006718761 - - 0.0060169417 - - 0.007446072 - - 0.0056387554 - - 0.0027720614 - - 0.0014197745 - - 0.0007073063 - - 0.00017521733 - - 0.0006796378 - - 0.34390527 + - 0.0014194542 + - 0.00024210926 + - 0.00036713024 + - 0.00096763717 + - 0.0019094545 + - 0.003806077 + - 0.0067459983 + - 0.0060856836 + - 0.0075172884 + - 0.0056384974 + - 0.002761265 + - 0.0014144753 + - 0.00070518616 + - 0.00017277346 + - 0.00068064017 + - 0.34393272 - 0 - 0 - 0 @@ -1452,21 +1455,21 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.0008804953 - - 0.000045054567 - - 0.000553439 - - 0.0012282074 - - 0.002400889 - - 0.0047867075 - - 0.007095421 - - 0.0056808805 - - 0.0074951337 - - 0.0044868477 - - 0.0022027292 - - 0.001140577 - - 0.0005230716 - - 0.00021661723 - - 0.0012532381 + - 0.0008860987 + - 0.000046456917 + - 0.0005520998 + - 0.0012237206 + - 0.0023903253 + - 0.004777825 + - 0.00714873 + - 0.0057450277 + - 0.007545219 + - 0.004477086 + - 0.0021940076 + - 0.0011364776 + - 0.00052166363 + - 0.00021504326 + - 0.0012570723 - 0.33333334 - 0 - 0 @@ -1616,21 +1619,21 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.0005091331 - - 0.00018352199 - - 0.0007505444 - - 0.0015367282 - - 0.003022704 - - 0.0058365334 - - 0.0068020825 - - 0.0066956216 - - 0.0067760325 - - 0.0035208783 - - 0.0017649935 - - 0.00090579706 - - 0.00035027033 - - 0.00031363 - - 0.0023024208 + - 0.0005107663 + - 0.0001831381 + - 0.00074805453 + - 0.0015303227 + - 0.0030102404 + - 0.00583854 + - 0.0068715047 + - 0.006769389 + - 0.006796895 + - 0.003509056 + - 0.0017582284 + - 0.0009028378 + - 0.00034968293 + - 0.0003139878 + - 0.002316105 - 0 - 0 - 0 @@ -1778,7 +1781,462 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + m_ConstraintCount: 147 + m_ActiveConstraintCount: 47 + m_InitialActiveConstraintCount: 47 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.059999995 + - 1 + - 1 + - 0.059985485 + - 1 + - 1 + - 0.059947416 + - 1 + - 1 + - 0.059891857 + - 1 + - 1 + - 0.05982242 + - 1 + - 1 + - 0.059741672 + - 1 + - 1 + - 0.059651468 + - 1 + - 1 + - 0.05955327 + - 1 + - 1 + - 0.059448298 + - 1 + - 1 + - 0.05933752 + - 1 + - 1 + - 0.059221517 + - 1 + - 1 + - 0.059101097 + - 1 + - 1 + - 0.058977056 + - 1 + - 1 + - 0.05885028 + - 1 + - 1 + - 0.058721717 + - 1 + - 1 + - 0.05859257 + - 1 + - 1 + - 0.058464535 + - 1 + - 1 + - 0.058340162 + - 1 + - 1 + - 0.058223497 + - 1 + - 1 + - 0.058119815 + - 1 + - 1 + - 0.058035236 + - 1 + - 1 + - 0.057974525 + - 1 + - 1 + - 0.057939354 + - 1 + - 1 + - 0.05792827 + - 1 + - 1 + - 0.057939466 + - 1 + - 1 + - 0.05797498 + - 1 + - 1 + - 0.058035806 + - 1 + - 1 + - 0.05811927 + - 1 + - 1 + - 0.058219813 + - 1 + - 1 + - 0.05833144 + - 1 + - 1 + - 0.058449462 + - 1 + - 1 + - 0.05857077 + - 1 + - 1 + - 0.058693398 + - 1 + - 1 + - 0.058816034 + - 1 + - 1 + - 0.058937702 + - 1 + - 1 + - 0.059057556 + - 1 + - 1 + - 0.059174772 + - 1 + - 1 + - 0.05928895 + - 1 + - 1 + - 0.05939963 + - 1 + - 1 + - 0.05950598 + - 1 + - 1 + - 0.059607066 + - 1 + - 1 + - 0.059701875 + - 1 + - 1 + - 0.059789654 + - 1 + - 1 + - 0.059867803 + - 1 + - 1 + - 0.059933186 + - 1 + - 1 + - 0.059980553 + - 1 + - 1 + - 0.06 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1800,7 +2258,7 @@ MonoBehaviour: outTangent: {x: 0.1642955, y: -0.7486017, z: 0} - tangentMode: 1 inTangent: {x: -0.962546, y: 0.0066326223, z: 0} - position: {x: 0.022092208, y: -2.2547054, z: 0} + position: {x: 0.022092208, y: -2.2635958, z: 0} outTangent: {x: 0.9498895, y: -0.0065454063, z: 0} - tangentMode: 0 inTangent: {x: -0.1654113, y: -0.6018264, z: 0} @@ -1820,7 +2278,7 @@ MonoBehaviour: data: - 0.99999994 - 0.9654712 - - 0.99999994 + - 1 m_Masses: data: - 0.1 @@ -1836,49 +2294,49 @@ MonoBehaviour: m_Closed: 0 m_ArcLengthTable: - 0 - - 0.113920406 - - 0.23598218 - - 0.36499673 - - 0.49968532 - - 0.638722 - - 0.78076386 - - 0.92447466 - - 1.0685471 - - 1.2117265 - - 1.352838 - - 1.490823 - - 1.6247864 - - 1.754063 - - 1.8783082 - - 1.9976172 - - 2.1126747 - - 2.22491 - - 2.336607 - - 2.4508846 - - 2.571493 - - 2.702471 - - 2.8314886 - - 2.950353 - - 3.0638006 - - 3.176043 - - 3.2903454 - - 3.408862 - - 3.5327182 - - 3.6622136 - - 3.7970357 - - 3.9364362 - - 4.07936 - - 4.2245383 - - 4.370552 - - 4.5158772 - - 4.658921 - - 4.798045 - - 4.931594 - - 5.0579166 - - 5.1754003 - - 5.2825193 - - 5.3779206 - m_TotalSplineLenght: 5.3779206 + - 0.113977954 + - 0.2362057 + - 0.36548388 + - 0.50052226 + - 0.6399834 + - 0.78251255 + - 0.92676145 + - 1.0714108 + - 1.2151933 + - 1.3569213 + - 1.4955226 + - 1.630088 + - 1.7599373 + - 1.8847095 + - 2.0044835 + - 2.119928 + - 2.2324593 + - 2.3443565 + - 2.4587455 + - 2.579397 + - 2.7103815 + - 2.8394055 + - 2.9583156 + - 3.0718825 + - 3.184338 + - 3.298952 + - 3.4178705 + - 3.5422046 + - 3.6722372 + - 3.8076396 + - 3.9476476 + - 4.091192 + - 4.2369895 + - 4.383608 + - 4.5295115 + - 4.673094 + - 4.812706 + - 4.9466796 + - 5.0733523 + - 5.1910996 + - 5.298384 + - 5.393842 + m_TotalSplineLenght: 5.393842 OnPathChanged: m_PersistentCalls: m_Calls: [] @@ -1893,156 +2351,157 @@ MonoBehaviour: m_Calls: [] thickness: 0.03 resolution: 0.25 - m_InterParticleDistance: 0.116911314 + m_InterParticleDistance: 0.11725744 totalParticles: 147 - m_RestLength: 17.067047 + m_RestLength: 17.117582 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e000000 restLengths: - - 0.11737857 - - 0.11757569 - - 0.117257625 - - 0.117347114 - - 0.11749813 - - 0.117627345 - - 0.1176776 - - 0.11761664 - - 0.117508255 - - 0.11763225 - - 0.11766701 - - 0.117603354 - - 0.11748713 - - 0.11737358 - - 0.11731443 - - 0.117334664 - - 0.117409684 - - 0.117427535 - - 0.1173339 - - 0.11715327 - - 0.11707407 - - 0.11728205 - - 0.11794879 - - 0.11673033 - - 0.116027325 - - 0.115863316 - - 0.11598866 - - 0.11614065 - - 0.11616688 - - 0.11612464 - - 0.116126075 - - 0.1162187 - - 0.116368376 - - 0.11650247 - - 0.11654539 - - 0.11637627 - - 0.116367616 - - 0.116505764 - - 0.11647182 - - 0.11628203 - - 0.11606255 - - 0.11669507 - - 0.116644375 - - 0.11652727 - - 0.116267465 - - 0.115411185 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 - - 0.116911314 + - 0.11771238 + - 0.11794325 + - 0.117595166 + - 0.11768351 + - 0.11783673 + - 0.117969744 + - 0.11802316 + - 0.11796464 + - 0.1178521 + - 0.117975526 + - 0.11801252 + - 0.11794836 + - 0.11783 + - 0.117713265 + - 0.117651865 + - 0.117673375 + - 0.117791526 + - 0.11774277 + - 0.11769215 + - 0.11750718 + - 0.11741844 + - 0.1176177 + - 0.11827736 + - 0.11706203 + - 0.11636803 + - 0.11621493 + - 0.11634967 + - 0.11650062 + - 0.11651943 + - 0.11646894 + - 0.11646836 + - 0.11656151 + - 0.11671458 + - 0.11685168 + - 0.11689511 + - 0.1167252 + - 0.11671828 + - 0.11685561 + - 0.11681989 + - 0.11662538 + - 0.11642074 + - 0.117048115 + - 0.11699504 + - 0.11687661 + - 0.11661551 + - 0.11574278 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 + - 0.11725744 - 0 pooledParticles: 100 --- !u!114 &5589158130596133390 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset index 1ae6e511a..6c0759535 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset @@ -40,7 +40,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Firehose m_EditorClassIdentifier: + m_Checksum: 0 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 40 m_InitialActiveParticleCount: 40 _bounds: @@ -128,6 +130,7 @@ MonoBehaviour: - {x: 0.72034454, y: 0, z: 0, w: 1} - {x: 0.8617192, y: 0, z: 0, w: 1} - {x: 1, y: 0, z: 0, w: 1} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -719,6 +722,7 @@ MonoBehaviour: m_InterParticleDistance: 0.140052 totalParticles: 40 m_RestLength: 5.4620275 + deformableEdges: restLengths: - 0.11343384 - 0.1400795 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset index 822226765..9abe25e41 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset @@ -12,30 +12,32 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Freightlift cable m_EditorClassIdentifier: + m_Checksum: 3171106762 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 18 m_InitialActiveParticleCount: 18 _bounds: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 1, y: 0, z: 0} + m_Center: {x: 0, y: 0, z: -0.0004623294} + m_Extent: {x: 1, y: 0, z: 0.0004623294} positions: - {x: -1, y: 0, z: 0} - {x: -0.88329995, y: 0, z: 0} - - {x: -0.7666023, y: 0, z: 0} - - {x: -0.64810616, y: 0, z: 0} - - {x: -0.5307922, y: 0, z: 0} - - {x: -0.41302353, y: 0, z: 0} - - {x: -0.2951497, y: 0, z: 0} - - {x: -0.17727831, y: 0, z: 0} - - {x: -0.05943318, y: 0, z: 0} - - {x: 0.058380906, y: 0, z: 0} - - {x: 0.17615423, y: 0, z: 0} - - {x: 0.29385144, y: 0, z: 0} - - {x: 0.41156584, y: 0, z: 0} - - {x: 0.5296772, y: 0, z: 0} - - {x: 0.6477824, y: 0, z: 0} - - {x: 0.76508003, y: 0, z: 0} - - {x: 0.88362336, y: 0, z: 0} + - {x: -0.76649326, y: 0, z: -0.000036758112} + - {x: -0.64820236, y: 0, z: -0.00011725743} + - {x: -0.53080696, y: 0, z: -0.00021712962} + - {x: -0.412974, y: 0, z: -0.00032654963} + - {x: -0.2950629, y: 0, z: -0.00043869345} + - {x: -0.17718945, y: 0, z: -0.0005487039} + - {x: -0.059382457, y: 0, z: -0.0006525628} + - {x: 0.05835873, y: 0, z: -0.0007464512} + - {x: 0.17614524, y: 0, z: -0.00082634087} + - {x: 0.29400575, y: 0, z: -0.0008873419} + - {x: 0.41192132, y: 0, z: -0.00092308887} + - {x: 0.5298042, y: 0, z: -0.0009246588} + - {x: 0.64736503, y: 0, z: -0.00087855017} + - {x: 0.7652411, y: 0, z: -0.00076061714} + - {x: 0.8829424, y: 0, z: -0.0005206029} - {x: 1, y: 0, z: 0} - {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 0} @@ -140,21 +142,21 @@ MonoBehaviour: restPositions: - {x: -1, y: 0, z: 0, w: 1} - {x: -0.88329995, y: 0, z: 0, w: 1} - - {x: -0.7666023, y: 0, z: 0, w: 1} - - {x: -0.64810616, y: 0, z: 0, w: 1} - - {x: -0.5307922, y: 0, z: 0, w: 1} - - {x: -0.41302353, y: 0, z: 0, w: 1} - - {x: -0.2951497, y: 0, z: 0, w: 1} - - {x: -0.17727831, y: 0, z: 0, w: 1} - - {x: -0.05943318, y: 0, z: 0, w: 1} - - {x: 0.058380906, y: 0, z: 0, w: 1} - - {x: 0.17615423, y: 0, z: 0, w: 1} - - {x: 0.29385144, y: 0, z: 0, w: 1} - - {x: 0.41156584, y: 0, z: 0, w: 1} - - {x: 0.5296772, y: 0, z: 0, w: 1} - - {x: 0.6477824, y: 0, z: 0, w: 1} - - {x: 0.76508003, y: 0, z: 0, w: 1} - - {x: 0.88362336, y: 0, z: 0, w: 1} + - {x: -0.76649326, y: 0, z: -0.000036758112, w: 1} + - {x: -0.64820236, y: 0, z: -0.00011725743, w: 1} + - {x: -0.53080696, y: 0, z: -0.00021712962, w: 1} + - {x: -0.412974, y: 0, z: -0.00032654963, w: 1} + - {x: -0.2950629, y: 0, z: -0.00043869345, w: 1} + - {x: -0.17718945, y: 0, z: -0.0005487039, w: 1} + - {x: -0.059382457, y: 0, z: -0.0006525628, w: 1} + - {x: 0.05835873, y: 0, z: -0.0007464512, w: 1} + - {x: 0.17614524, y: 0, z: -0.00082634087, w: 1} + - {x: 0.29400575, y: 0, z: -0.0008873419, w: 1} + - {x: 0.41192132, y: 0, z: -0.00092308887, w: 1} + - {x: 0.5298042, y: 0, z: -0.0009246588, w: 1} + - {x: 0.64736503, y: 0, z: -0.00087855017, w: 1} + - {x: 0.7652411, y: 0, z: -0.00076061714, w: 1} + - {x: 0.8829424, y: 0, z: -0.0005206029, w: 1} - {x: 1, y: 0, z: 0, w: 1} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} @@ -256,6 +258,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -756,14 +759,14 @@ MonoBehaviour: restLengths: serializedContents: - 0.11670005 - - 0.11849612 - - 0.117768645 - - 0.1178714 - - 0.11781409 - - 0.11769721 - - 0.11811137 - - 0.11729765 - - 0.11637664 + - 0.11829093 + - 0.11783301 + - 0.1178735 + - 0.11774122 + - 0.117860526 + - 0.11788291 + - 0.11787611 + - 0.11705878 - 0 - 0 - 0 @@ -890,14 +893,14 @@ MonoBehaviour: m_AlignBytes: 16 restLengths: serializedContents: - - 0.11669767 - - 0.11731398 - - 0.11787382 - - 0.11784513 - - 0.117773324 - - 0.117714405 - - 0.11810517 - - 0.11854333 + - 0.11680669 + - 0.117395446 + - 0.11791115 + - 0.117807046 + - 0.11778654 + - 0.11791558 + - 0.11756081 + - 0.11770154 - 0 - 0 - 0 @@ -1025,12 +1028,12 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.000000834465 - - 0.00015157461 - - 0.000008746982 - - 0.000025361776 - - 0.000002026558 - - 0.0007222295 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1162,12 +1165,12 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.0005994439 - - 0.00003501773 - - 0.000010348856 - - 0.000005722046 - - 0.00026917458 - - 0.37212557 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1299,12 +1302,12 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.0003940463 - - 0.0000008046627 - - 0.000013589859 - - 0.00013235211 - - 0.00041520596 - - 0.33333334 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1431,7 +1434,375 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000 + m_ConstraintCount: 118 + m_ActiveConstraintCount: 18 + m_InitialActiveConstraintCount: 18 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1456,9 +1827,9 @@ MonoBehaviour: position: {x: -0.88329995, y: 0, z: 0} outTangent: {x: 0.4335778, y: 0, z: 0} - tangentMode: 0 - inTangent: {x: -0.22383595, y: 0, z: 0} + inTangent: {x: -0.29470557, y: 0, z: -0.0020900369} position: {x: 1, y: 0, z: 0} - outTangent: {x: 0.25, y: -0, z: -0} + outTangent: {x: 0.24999344, y: -0, z: 0.0017729407} m_Normals: data: - {x: 0, y: 1, z: 0} @@ -1510,28 +1881,28 @@ MonoBehaviour: - 0.10251689 - 0.1095339 - 0.116700046 - - 0.18383583 - - 0.2605888 - - 0.34579644 - - 0.43829617 - - 0.5369255 - - 0.64052194 - - 0.7479229 - - 0.8579659 - - 0.9694884 - - 1.0813278 - - 1.1923218 - - 1.3013076 - - 1.4071229 - - 1.508605 - - 1.6045915 - - 1.6939198 - - 1.7754273 - - 1.8479517 - - 1.9103302 - - 1.9614005 - - 2 - m_TotalSplineLenght: 2 + - 0.18337668 + - 0.25884405 + - 0.34207734 + - 0.4320518 + - 0.5277426 + - 0.6281251 + - 0.7321743 + - 0.8388655 + - 0.947174 + - 1.056075 + - 1.1645436 + - 1.2715552 + - 1.3760848 + - 1.4771078 + - 1.5735993 + - 1.6645347 + - 1.748889 + - 1.8256376 + - 1.8937557 + - 1.9522187 + - 2.000002 + m_TotalSplineLenght: 2.000002 OnPathChanged: m_PersistentCalls: m_Calls: [] @@ -1546,127 +1917,128 @@ MonoBehaviour: m_Calls: [] thickness: 0.05 resolution: 0.4 - m_InterParticleDistance: 0.11764706 + m_InterParticleDistance: 0.11764717 totalParticles: 118 - m_RestLength: 13.764717 + m_RestLength: 13.764719 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000 restLengths: - 0.11670005 - - 0.11669767 - - 0.11849612 - - 0.11731398 - - 0.117768645 - - 0.11787382 - - 0.1178714 - - 0.11784513 - - 0.11781409 - - 0.117773324 - - 0.11769721 - - 0.117714405 - - 0.11811137 - - 0.11810517 - - 0.11729765 - - 0.11854333 - - 0.11637664 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 - - 0.11764706 + - 0.11680669 + - 0.11829093 + - 0.117395446 + - 0.11783301 + - 0.11791115 + - 0.1178735 + - 0.117807046 + - 0.11774122 + - 0.11778654 + - 0.117860526 + - 0.11791558 + - 0.11788291 + - 0.11756081 + - 0.11787611 + - 0.11770154 + - 0.11705878 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 + - 0.11764717 - 0 pooledParticles: 100 --- !u!114 &1023878380947534591 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset index 2e25ae882..e6b720a46 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset @@ -40,7 +40,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Joints rope 1 m_EditorClassIdentifier: + m_Checksum: 3329514432 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 24 m_InitialActiveParticleCount: 24 _bounds: @@ -296,6 +298,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -1525,7 +1528,393 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_ConstraintCount: 124 + m_ActiveConstraintCount: 24 + m_InitialActiveConstraintCount: 24 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1707,6 +2096,7 @@ MonoBehaviour: m_InterParticleDistance: 0.09209887 totalParticles: 124 m_RestLength: 11.325401 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000110000001200000012000000130000001300000014000000140000001500000015000000160000001600000017000000 restLengths: - 0.08187712 - 0.08188899 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset index cb2a140a2..9380ffa99 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset @@ -26,7 +26,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Joints rope 2 m_EditorClassIdentifier: + m_Checksum: 4251140477 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 16 m_InitialActiveParticleCount: 16 _bounds: @@ -266,6 +268,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -1423,7 +1426,369 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000 + m_ConstraintCount: 116 + m_ActiveConstraintCount: 16 + m_InitialActiveConstraintCount: 16 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.1 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1573,6 +1938,7 @@ MonoBehaviour: m_InterParticleDistance: 0.08596755 totalParticles: 116 m_RestLength: 9.847806 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f000000 restLengths: - 0.05090946 - 0.050947905 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset index 2fdbb3b0b..a7bd63b88 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset @@ -26,7 +26,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e028b099aa5d14e399bc3d87df5b7737, type: 3} m_Name: Plectoneme rod m_EditorClassIdentifier: + m_Checksum: 2962538395 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 41 m_InitialActiveParticleCount: 41 _bounds: @@ -116,6 +118,7 @@ MonoBehaviour: - {x: 0.90037465, y: 0, z: 0, w: 1} - {x: 0.95067745, y: 0, z: 0, w: 1} - {x: 1, y: 0, z: 0, w: 1} + restNormals: [] orientations: - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} @@ -368,7 +371,7 @@ MonoBehaviour: - 100 - 100 - 100 - filters: 0100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff000100ff00 + filters: 0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff principalRadii: - {x: 0.05, y: 0.05, z: 0.05} - {x: 0.049999997, y: 0.049999997, z: 0.049999997} @@ -797,7 +800,144 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_ConstraintCount: 41 + m_ActiveConstraintCount: 41 + m_InitialActiveConstraintCount: 41 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.1 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: - m_IDs: 00000000 @@ -904,6 +1044,7 @@ MonoBehaviour: m_InterParticleDistance: 0.049999997 totalParticles: 41 m_RestLength: 1.9999998 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f0000002000000020000000210000002100000022000000220000002300000023000000240000002400000025000000250000002600000026000000270000002700000028000000 restLengths: - 0.049322546 - 0.050302863 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset new file mode 100644 index 000000000..5e3bb5be6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset @@ -0,0 +1,884 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3232934742127723785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: start + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} + m_Name: RatchetCable + m_EditorClassIdentifier: + m_Checksum: 1380726484 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 31 + m_InitialActiveParticleCount: 31 + _bounds: + m_Center: {x: 0, y: 0.5, z: 0} + m_Extent: {x: 0, y: 2.5, z: 0} + positions: + - {x: 0, y: -2, z: 0} + - {x: 0, y: -1.8339901, z: 0} + - {x: 0, y: -1.6668751, z: 0} + - {x: 0, y: -1.5016013, z: 0} + - {x: 0, y: -1.3355447, z: 0} + - {x: 0, y: -1.1683198, z: 0} + - {x: 0, y: -1.0000137, z: 0} + - {x: 0, y: -0.834779, z: 0} + - {x: 0, y: -0.6677752, z: 0} + - {x: 0, y: -0.50032496, z: 0} + - {x: 0, y: -0.33429456, z: 0} + - {x: 0, y: -0.16700856, z: 0} + - {x: 0, y: -0.00047871275, z: 0} + - {x: 0, y: 0.16636388, z: 0} + - {x: 0, y: 0.33324736, z: 0} + - {x: 0, y: 0.49999976, z: 0} + - {x: 0, y: 0.6667523, z: 0} + - {x: 0, y: 0.83363587, z: 0} + - {x: 0, y: 1.0004781, z: 0} + - {x: 0, y: 1.1670083, z: 0} + - {x: 0, y: 1.334294, z: 0} + - {x: 0, y: 1.5003247, z: 0} + - {x: 0, y: 1.667775, z: 0} + - {x: 0, y: 1.8347788, z: 0} + - {x: 0, y: 2.0000136, z: 0} + - {x: 0, y: 2.1683195, z: 0} + - {x: 0, y: 2.3355443, z: 0} + - {x: 0, y: 2.5016015, z: 0} + - {x: 0, y: 2.6668754, z: 0} + - {x: 0, y: 2.83399, z: 0} + - {x: 0, y: 2.9999998, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + restPositions: + - {x: 0, y: -2, z: 0, w: 1} + - {x: 0, y: -1.8339901, z: 0, w: 1} + - {x: 0, y: -1.6668751, z: 0, w: 1} + - {x: 0, y: -1.5016013, z: 0, w: 1} + - {x: 0, y: -1.3355447, z: 0, w: 1} + - {x: 0, y: -1.1683198, z: 0, w: 1} + - {x: 0, y: -1.0000137, z: 0, w: 1} + - {x: 0, y: -0.834779, z: 0, w: 1} + - {x: 0, y: -0.6677752, z: 0, w: 1} + - {x: 0, y: -0.50032496, z: 0, w: 1} + - {x: 0, y: -0.33429456, z: 0, w: 1} + - {x: 0, y: -0.16700856, z: 0, w: 1} + - {x: 0, y: -0.00047871275, z: 0, w: 1} + - {x: 0, y: 0.16636388, z: 0, w: 1} + - {x: 0, y: 0.33324736, z: 0, w: 1} + - {x: 0, y: 0.49999976, z: 0, w: 1} + - {x: 0, y: 0.6667523, z: 0, w: 1} + - {x: 0, y: 0.83363587, z: 0, w: 1} + - {x: 0, y: 1.0004781, z: 0, w: 1} + - {x: 0, y: 1.1670083, z: 0, w: 1} + - {x: 0, y: 1.334294, z: 0, w: 1} + - {x: 0, y: 1.5003247, z: 0, w: 1} + - {x: 0, y: 1.667775, z: 0, w: 1} + - {x: 0, y: 1.8347788, z: 0, w: 1} + - {x: 0, y: 2.0000136, z: 0, w: 1} + - {x: 0, y: 2.1683195, z: 0, w: 1} + - {x: 0, y: 2.3355443, z: 0, w: 1} + - {x: 0, y: 2.5016015, z: 0, w: 1} + - {x: 0, y: 2.6668754, z: 0, w: 1} + - {x: 0, y: 2.83399, z: 0, w: 1} + - {x: 0, y: 2.9999998, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] + orientations: [] + restOrientations: [] + velocities: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + angularVelocities: [] + invMasses: + - 1 + - 1 + - 0.9999999 + - 1.0000001 + - 1 + - 1 + - 1 + - 1.0000001 + - 0.9999999 + - 1.0000001 + - 1 + - 1 + - 1 + - 1 + - 1.0000001 + - 1.0000001 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + invRotationalMasses: [] + filters: 0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {x: 0.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {x: 0.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + colors: + - {r: 0.10980392, g: 0.6901961, b: 0.8784314, a: 1} + - {r: 0.116365515, g: 0.6851087, b: 0.8719565, a: 1} + - {r: 0.13208458, g: 0.6729213, b: 0.85644525, a: 1.0000001} + - {r: 0.15323167, g: 0.6565252, b: 0.8355775, a: 0.99999994} + - {r: 0.17835046, g: 0.63704985, b: 0.8107907, a: 1} + - {r: 0.20651987, g: 0.61520934, b: 0.7829937, a: 1} + - {r: 0.23708364, g: 0.59151226, b: 0.7528338, a: 1} + - {r: 0.26877022, g: 0.5669446, b: 0.72156584, a: 0.99999994} + - {r: 0.302132, g: 0.5410783, b: 0.6886452, a: 1.0000001} + - {r: 0.3366538, g: 0.5143124, b: 0.6545794, a: 0.99999994} + - {r: 0.37172142, g: 0.4871235, b: 0.6199753, a: 1} + - {r: 0.40771413, g: 0.45921725, b: 0.5844583, a: 1} + - {r: 0.4440449, g: 0.4310489, b: 0.5486077, a: 1} + - {r: 0.4808056, g: 0.4025472, b: 0.5123328, a: 1} + - {r: 0.51781046, g: 0.37385616, b: 0.4758169, a: 0.99999994} + - {r: 0.5549019, g: 0.34509802, b: 0.43921566, a: 0.99999994} + - {r: 0.5919934, g: 0.3163399, b: 0.40261444, a: 1} + - {r: 0.62899834, g: 0.2876489, b: 0.36609858, a: 1} + - {r: 0.66575897, g: 0.25914726, b: 0.32982376, a: 1} + - {r: 0.7020898, g: 0.23097885, b: 0.2939731, a: 1} + - {r: 0.7380824, g: 0.20307265, b: 0.2584561, a: 1} + - {r: 0.7731501, g: 0.17588367, b: 0.22385193, a: 1} + - {r: 0.80767196, g: 0.14911777, b: 0.18978626, a: 1} + - {r: 0.84103364, g: 0.12325145, b: 0.15686548, a: 1} + - {r: 0.8727203, g: 0.098683834, b: 0.12559761, a: 1} + - {r: 0.9032841, g: 0.0749868, b: 0.09543775, a: 1} + - {r: 0.93145347, g: 0.05314622, b: 0.06764065, a: 1} + - {r: 0.95657223, g: 0.033670846, b: 0.042853806, a: 1} + - {r: 0.9777194, g: 0.017274806, b: 0.021986116, a: 1} + - {r: 0.9934384, g: 0.005087384, b: 0.0064748526, a: 1} + - {r: 1, g: 0, b: 0, a: 1} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_ConstraintCount: 20 + m_ActiveConstraintCount: 15 + m_InitialActiveConstraintCount: 15 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.1660099 + - 0.16527379 + - 0.16722488 + - 0.16523468 + - 0.16745025 + - 0.167286 + - 0.1668426 + - 0.1667524 + - 0.16688359 + - 0.16653013 + - 0.16603076 + - 0.16700375 + - 0.16830587 + - 0.16605711 + - 0.16711473 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_ConstraintCount: 20 + m_ActiveConstraintCount: 15 + m_InitialActiveConstraintCount: 15 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.16711497 + - 0.16605663 + - 0.16830611 + - 0.16700381 + - 0.1660304 + - 0.16652985 + - 0.16688348 + - 0.16675252 + - 0.16684228 + - 0.16728568 + - 0.16745031 + - 0.1652348 + - 0.16722488 + - 0.1652739 + - 0.16600966 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_ConstraintCount: 13 + m_ActiveConstraintCount: 10 + m_InitialActiveConstraintCount: 10 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f000000210000002300000022000000240000002600000025000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_ConstraintCount: 13 + m_ActiveConstraintCount: 10 + m_InitialActiveConstraintCount: 10 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_ConstraintCount: 13 + m_ActiveConstraintCount: 9 + m_InitialActiveConstraintCount: 9 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_ConstraintCount: 41 + m_ActiveConstraintCount: 31 + m_InitialActiveConstraintCount: 31 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.10000002 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.099999994 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0.1 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 + chainConstraintsData: + batches: [] + volumeConstraintsData: + batches: [] + groups: + - {fileID: -3232934742127723785} + - {fileID: 6183219346962753922} + path: + m_Names: + - start + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: 0, y: -0, z: 0} + position: {x: 0, y: -2, z: 0} + outTangent: {x: -0, y: 1, z: -0} + - tangentMode: 0 + inTangent: {x: 0, y: -1, z: 0} + position: {x: 0, y: 2.9999998, z: 0} + outTangent: {x: -0, y: 0, z: -0} + m_Normals: + data: + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + m_Colors: + data: + - {r: 0.10980392, g: 0.6901961, b: 0.8784314, a: 1} + - {r: 1, g: 0, b: 0, a: 1} + m_Thickness: + data: + - 1 + - 1 + m_Masses: + data: + - 1 + - 1 + m_RotationalMasses: + data: + - 1 + - 1 + m_Filters: + data: 0200ffff0200ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.15603067 + - 0.3366807 + - 0.5393586 + - 0.7614728 + - 1.0004319 + - 1.2536443 + - 1.5185186 + - 1.7924631 + - 2.0728862 + - 2.3571968 + - 2.6428032 + - 2.9271138 + - 3.207537 + - 3.4814813 + - 3.7463555 + - 3.999568 + - 4.238527 + - 4.460641 + - 4.6633186 + - 4.843969 + - 4.9999995 + m_TotalSplineLenght: 4.9999995 + OnPathChanged: + m_PersistentCalls: + m_Calls: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.05 + resolution: 0.3 + m_InterParticleDistance: 0.16666666 + totalParticles: 41 + m_RestLength: 6.666664 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e000000 + restLengths: + - 0.1660099 + - 0.16711497 + - 0.16527379 + - 0.16605663 + - 0.16722488 + - 0.16830611 + - 0.16523468 + - 0.16700381 + - 0.16745025 + - 0.1660304 + - 0.167286 + - 0.16652985 + - 0.1668426 + - 0.16688348 + - 0.1667524 + - 0.16675252 + - 0.16688359 + - 0.16684228 + - 0.16653013 + - 0.16728568 + - 0.16603076 + - 0.16745031 + - 0.16700375 + - 0.1652348 + - 0.16830587 + - 0.16722488 + - 0.16605711 + - 0.1652739 + - 0.16711473 + - 0.16600966 + - 0.16666666 + - 0.16666666 + - 0.16666666 + - 0.16666666 + - 0.16666666 + - 0.16666666 + - 0.16666666 + - 0.16666666 + - 0.16666666 + - 0.16666666 + - 0 + pooledParticles: 10 +--- !u!114 &6183219346962753922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: end + m_EditorClassIdentifier: + particleIndices: 1e000000 + m_Blueprint: {fileID: 11400000} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset.meta new file mode 100644 index 000000000..b507136b6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 558d68cba3927468abede77a3852186b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset index 89e3bf3a4..779af431d 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset @@ -26,7 +26,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Snake m_EditorClassIdentifier: + m_Checksum: 1208839425 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 27 m_InitialActiveParticleCount: 27 _bounds: @@ -288,6 +290,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -427,26 +430,26 @@ MonoBehaviour: - 10 - 10 - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 - - 10 + - 10.01664 + - 10.0662155 + - 10.148677 + - 10.265117 + - 10.417466 + - 10.60722 + - 10.8371525 + - 11.110949 + - 11.4355 + - 11.815787 + - 12.258996 + - 12.774428 + - 13.373356 + - 14.068928 + - 14.875339 + - 15.804824 + - 16.874622 + - 18.06043 + - 19.263605 + - 20 - 0 - 0 - 0 @@ -1544,7 +1547,402 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e000000 + m_ConstraintCount: 127 + m_ActiveConstraintCount: 27 + m_InitialActiveConstraintCount: 27 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.19946842 + - 1 + - 1 + - 0.19789504 + - 1 + - 1 + - 0.19531204 + - 1 + - 1 + - 0.19173537 + - 1 + - 1 + - 0.18717642 + - 1 + - 1 + - 0.18168132 + - 1 + - 1 + - 0.17528054 + - 1 + - 1 + - 0.1680042 + - 1 + - 1 + - 0.15983036 + - 1 + - 1 + - 0.15082408 + - 1 + - 1 + - 0.1410328 + - 1 + - 1 + - 0.13050044 + - 1 + - 1 + - 0.11928175 + - 1 + - 1 + - 0.107451595 + - 1 + - 1 + - 0.09512116 + - 1 + - 1 + - 0.08246982 + - 1 + - 1 + - 0.069633886 + - 1 + - 1 + - 0.057182938 + - 1 + - 1 + - 0.046116363 + - 1 + - 1 + - 0.04 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1591,7 +1989,7 @@ MonoBehaviour: data: - 0.1 - 0.1 - - 0.1 + - 0.05 m_RotationalMasses: data: - 1 @@ -1662,6 +2060,7 @@ MonoBehaviour: m_InterParticleDistance: 0.15824494 totalParticles: 127 m_RestLength: 19.938877 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a000000 restLengths: - 0.1524441 - 0.15290284 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset index ff0b0c429..40734f6cc 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset @@ -208,7 +208,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e028b099aa5d14e399bc3d87df5b7737, type: 3} m_Name: SpringRod m_EditorClassIdentifier: + m_Checksum: 3530553094 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 59 m_InitialActiveParticleCount: 59 _bounds: @@ -334,6 +336,7 @@ MonoBehaviour: - {x: -0.6423058, y: 2.7999995, z: -0.27828628, w: 1} - {x: -0.48284987, y: 2.8499994, z: -0.50604236, w: 1} - {x: -0.24786891, y: 2.8999994, z: -0.6546457, w: 1} + restNormals: [] orientations: - {x: -0.088398315, y: -0.10040869, z: -0.008956829, w: 0.990971} - {x: -0.08490821, y: -0.2934198, z: -0.026174147, w: 0.95184577} @@ -635,65 +638,65 @@ MonoBehaviour: - 1 - 1 invRotationalMasses: - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 + - 0.5 filters: 0100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 principalRadii: - {x: 0.1, y: 0.1, z: 0.1} @@ -816,7 +819,7 @@ MonoBehaviour: - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} points: - edges: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a000000 triangles: distanceConstraintsData: batches: [] @@ -1126,7 +1129,36 @@ MonoBehaviour: - {x: 0, y: 0, z: 0} m_AlignBytes: 16 plasticity: - serializedContents: [] + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} m_AlignBytes: 16 - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 @@ -1204,12 +1236,232 @@ MonoBehaviour: - {x: 0, y: 0, z: 0} m_AlignBytes: 16 plasticity: - serializedContents: [] + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} m_AlignBytes: 16 shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_ConstraintCount: 59 + m_ActiveConstraintCount: 59 + m_InitialActiveConstraintCount: 59 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: - m_IDs: 00000000 @@ -1550,36 +1802,36 @@ MonoBehaviour: - 1 m_RotationalMasses: data: - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 + - 2 m_Filters: data: 010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 m_Closed: 0 @@ -2212,6 +2464,7 @@ MonoBehaviour: m_InterParticleDistance: 0.28434873 totalParticles: 59 m_RestLength: 16.384266 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a000000 restLengths: - 0.28248742 - 0.28248742 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset index c4b8acb3a..16674a607 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset @@ -40,7 +40,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Straight long rope m_EditorClassIdentifier: + m_Checksum: 540814145 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 12 m_InitialActiveParticleCount: 12 _bounds: @@ -272,6 +274,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -1005,10 +1008,10 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.00005567074 - - 0.00009247661 - - 0.000085026026 - - 0.0006418228 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1136,10 +1139,10 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.00031131506 - - 0.00003796816 - - 0.000033080578 - - 0.3935954 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1267,10 +1270,10 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.000032275915 - - 0.0000037252903 - - 0.0002731681 - - 0.33333334 + - 0 + - 0 + - 0 + - 0 - 0 - 0 - 0 @@ -1393,7 +1396,357 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_ConstraintCount: 112 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1511,6 +1864,7 @@ MonoBehaviour: m_InterParticleDistance: 0.18181819 totalParticles: 112 m_RestLength: 20.181805 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 restLengths: - 0.18133646 - 0.18116945 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset index f2b79041b..034a84723 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset @@ -26,7 +26,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Straight short rope m_EditorClassIdentifier: + m_Checksum: 350243151 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 12 m_InitialActiveParticleCount: 12 _bounds: @@ -258,6 +260,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -1379,7 +1382,357 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_ConstraintCount: 112 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1465,6 +1818,7 @@ MonoBehaviour: m_InterParticleDistance: 0.1833847 totalParticles: 112 m_RestLength: 20.355694 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 restLengths: - 0.18298253 - 0.18343952 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset new file mode 100644 index 000000000..fb0fca7d2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset @@ -0,0 +1,1608 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5578146735436999353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: start + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-4709438462163914631 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: end2 + m_EditorClassIdentifier: + particleIndices: 18000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-2046351418314356755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: midpoint + m_EditorClassIdentifier: + particleIndices: 15000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} + m_Name: TangledRopeA + m_EditorClassIdentifier: + m_Checksum: 4166290955 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 27 + m_InitialActiveParticleCount: 27 + _bounds: + m_Center: {x: -3.0646935, y: 0.21265927, z: -0.003018573} + m_Extent: {x: 3.9353065, y: 0.36265928, z: 0.003018573} + positions: + - {x: -7, y: -0.15, z: 0} + - {x: -7.0000005, y: 0.05002283, z: 0} + - {x: -7, y: 0.25, z: 0} + - {x: -6.7429385, y: 0.49070227, z: -0.0025341383} + - {x: -6.372149, y: 0.5592373, z: -0.0050449185} + - {x: -5.994808, y: 0.5753186, z: -0.006037146} + - {x: -5.612949, y: 0.57531786, z: -0.005935318} + - {x: -5.2272964, y: 0.5753169, z: -0.0056863534} + - {x: -4.8442507, y: 0.5753157, z: -0.005347624} + - {x: -4.4598093, y: 0.5753144, z: -0.004946141} + - {x: -4.075023, y: 0.57531303, z: -0.0045018787} + - {x: -3.6909413, y: 0.57531154, z: -0.0040297816} + - {x: -3.3069186, y: 0.57531, z: -0.0035397327} + - {x: -2.9226773, y: 0.57530844, z: -0.0030403098} + - {x: -2.538409, y: 0.57530683, z: -0.0025399735} + - {x: -2.1543005, y: 0.57530516, z: -0.0020471876} + - {x: -1.7706202, y: 0.57530355, z: -0.0015712235} + - {x: -1.385769, y: 0.5753019, z: -0.0011208237} + - {x: -1.0010612, y: 0.5753003, z: -0.0007115061} + - {x: -0.6177507, y: 0.57529867, z: -0.00036399008} + - {x: -0.2325017, y: 0.5752971, z: -0.000106789805} + - {x: 0.14938739, y: 0.5752957, z: -0.00000020822299} + - {x: 0.42413607, y: 0.5346117, z: -0.00000026092542} + - {x: 0.6867492, y: 0.4435634, z: -0.00000032949225} + - {x: 0.8677804, y: 0.25, z: -0.00000038109664} + - {x: 0.8628189, y: 0.04811287, z: -0.00000028328986} + - {x: 0.870613, y: -0.15, z: -0.00000003061261} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + restPositions: + - {x: -7, y: -0.15, z: 0, w: 1} + - {x: -7.0000005, y: 0.05002283, z: 0, w: 1} + - {x: -7, y: 0.25, z: 0, w: 1} + - {x: -6.7429385, y: 0.49070227, z: -0.0025341383, w: 1} + - {x: -6.372149, y: 0.5592373, z: -0.0050449185, w: 1} + - {x: -5.994808, y: 0.5753186, z: -0.006037146, w: 1} + - {x: -5.612949, y: 0.57531786, z: -0.005935318, w: 1} + - {x: -5.2272964, y: 0.5753169, z: -0.0056863534, w: 1} + - {x: -4.8442507, y: 0.5753157, z: -0.005347624, w: 1} + - {x: -4.4598093, y: 0.5753144, z: -0.004946141, w: 1} + - {x: -4.075023, y: 0.57531303, z: -0.0045018787, w: 1} + - {x: -3.6909413, y: 0.57531154, z: -0.0040297816, w: 1} + - {x: -3.3069186, y: 0.57531, z: -0.0035397327, w: 1} + - {x: -2.9226773, y: 0.57530844, z: -0.0030403098, w: 1} + - {x: -2.538409, y: 0.57530683, z: -0.0025399735, w: 1} + - {x: -2.1543005, y: 0.57530516, z: -0.0020471876, w: 1} + - {x: -1.7706202, y: 0.57530355, z: -0.0015712235, w: 1} + - {x: -1.385769, y: 0.5753019, z: -0.0011208237, w: 1} + - {x: -1.0010612, y: 0.5753003, z: -0.0007115061, w: 1} + - {x: -0.6177507, y: 0.57529867, z: -0.00036399008, w: 1} + - {x: -0.2325017, y: 0.5752971, z: -0.000106789805, w: 1} + - {x: 0.14938739, y: 0.5752957, z: -0.00000020822299, w: 1} + - {x: 0.42413607, y: 0.5346117, z: -0.00000026092542, w: 1} + - {x: 0.6867492, y: 0.4435634, z: -0.00000032949225, w: 1} + - {x: 0.8677804, y: 0.25, z: -0.00000038109664, w: 1} + - {x: 0.8628189, y: 0.04811287, z: -0.00000028328986, w: 1} + - {x: 0.870613, y: -0.15, z: -0.00000003061261, w: 1} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] + orientations: [] + restOrientations: [] + velocities: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + angularVelocities: [] + invMasses: + - 5 + - 4.9999995 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + invRotationalMasses: [] + filters: 0100fdff0100fdff0100fdff0100fdff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100fdff0100fdff0100fdff0100fdff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + colors: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_ConstraintCount: 38 + m_ActiveConstraintCount: 13 + m_InitialActiveConstraintCount: 13 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.20002283 + - 0.35217127 + - 0.37768462 + - 0.38565263 + - 0.38444158 + - 0.38408214 + - 0.38424167 + - 0.38410887 + - 0.3848515 + - 0.38331065 + - 0.3818891 + - 0.27794865 + - 0.20194809 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_ConstraintCount: 38 + m_ActiveConstraintCount: 13 + m_InitialActiveConstraintCount: 13 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.19997717 + - 0.37707853 + - 0.3818593 + - 0.38304582 + - 0.3847864 + - 0.384023 + - 0.3842686 + - 0.38368052 + - 0.38470802 + - 0.3852491 + - 0.27774453 + - 0.26502654 + - 0.19826613 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000 + m_ConstraintCount: 25 + m_ActiveConstraintCount: 9 + m_InitialActiveConstraintCount: 9 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a00000049000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000 + m_ConstraintCount: 25 + m_ActiveConstraintCount: 8 + m_InitialActiveConstraintCount: 8 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000 + m_ConstraintCount: 25 + m_ActiveConstraintCount: 8 + m_InitialActiveConstraintCount: 8 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c000000 + m_ConstraintCount: 77 + m_ActiveConstraintCount: 27 + m_InitialActiveConstraintCount: 27 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.4 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 + chainConstraintsData: + batches: [] + volumeConstraintsData: + batches: [] + groups: + - {fileID: -5578146735436999353} + - {fileID: 4876123546338928666} + - {fileID: 8187103611661320772} + - {fileID: -2046351418314356755} + - {fileID: -4709438462163914631} + - {fileID: 870036912147276740} + path: + m_Names: + - start + - start2 + - midpoint + - midpoint + - end2 + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0, y: -0.25000024, z: -0} + position: {x: -7, y: -0.15, z: 0} + outTangent: {x: 0, y: 0.31, z: 0} + - tangentMode: 0 + inTangent: {x: -0, y: -0.24487238, z: -0} + position: {x: -7, y: 0.25, z: 0} + outTangent: {x: 0, y: 0.25371605, z: 0} + - tangentMode: 0 + inTangent: {x: -0.49832296, y: 0.0000006556511, z: 0.00000002188608} + position: {x: -5.994808, y: 0.5753186, z: -0.006037146} + outTangent: {x: 1.5384912, y: -0.0000020242162, z: -0.00000006756972} + - tangentMode: 0 + inTangent: {x: -1.4941434, y: 0.0000053208882, z: 0.000000114554} + position: {x: 0.14938739, y: 0.5752957, z: -0.00000020822299} + outTangent: {x: 0.1841115, y: -0.0000006556511, z: -0.000000014115585} + - tangentMode: 0 + inTangent: {x: -0, y: 0.20370655, z: -0} + position: {x: 0.8677804, y: 0.25, z: -0.00000038109664} + outTangent: {x: 0, y: -0.20338234, z: 0} + - tangentMode: 0 + inTangent: {x: -0.024279416, y: 0, z: 0} + position: {x: 0.870613, y: -0.15, z: -0.00000003061261} + outTangent: {x: 0.25, y: -0, z: -0} + m_Normals: + data: + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1.0000001, z: 0} + - {x: 0, y: 1.0000001, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + m_Colors: + data: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + m_Thickness: + data: + - 1 + - 1.0000001 + - 1.0000001 + - 1 + - 1 + - 1 + m_Masses: + data: + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + m_RotationalMasses: + data: + - 1 + - 1.0000001 + - 1.0000001 + - 1 + - 1 + - 1 + m_Filters: + data: 0100fdff0100fdff0100ffff0100ffff0100fdff0100fdff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.04121668 + - 0.076668724 + - 0.106916316 + - 0.1325196 + - 0.15403877 + - 0.17203398 + - 0.1870654 + - 0.19969317 + - 0.2104775 + - 0.21997853 + - 0.22875643 + - 0.23737137 + - 0.24638352 + - 0.25635302 + - 0.26784006 + - 0.28140482 + - 0.29760745 + - 0.3170081 + - 0.340167 + - 0.36764422 + - 0.4 + - 0.43523905 + - 0.46939337 + - 0.503775 + - 0.5394845 + - 0.5773406 + - 0.61788493 + - 0.661429 + - 0.70811003 + - 0.7579393 + - 0.810838 + - 0.8666635 + - 0.92522717 + - 0.9863068 + - 1.0496556 + - 1.115008 + - 1.1820844 + - 1.2505945 + - 1.3202392 + - 1.3907127 + - 1.4617041 + - 1.532898 + - 1.7630391 + - 2.0125155 + - 2.2792602 + - 2.5612059 + - 2.8562858 + - 3.1624331 + - 3.4775803 + - 3.7996604 + - 4.1266065 + - 4.4563513 + - 4.7868285 + - 5.11597 + - 5.4417095 + - 5.7619796 + - 6.074713 + - 6.3778434 + - 6.669303 + - 6.9470253 + - 7.208943 + - 7.452989 + - 7.6770964 + - 7.7057 + - 7.738573 + - 7.7751975 + - 7.815042 + - 7.8575697 + - 7.9022427 + - 7.948525 + - 7.9958844 + - 8.043796 + - 8.0917425 + - 8.139222 + - 8.18575 + - 8.230867 + - 8.274151 + - 8.315233 + - 8.353826 + - 8.38976 + - 8.423055 + - 8.454007 + - 8.483311 + - 8.512139 + - 8.541128 + - 8.569904 + - 8.598346 + - 8.62633 + - 8.653734 + - 8.680434 + - 8.7063055 + - 8.731224 + - 8.755065 + - 8.777704 + - 8.799017 + - 8.81888 + - 8.837172 + - 8.85377 + - 8.868559 + - 8.881427 + - 8.892273 + - 8.901021 + - 8.907654 + - 8.912338 + - 8.91585 + m_TotalSplineLenght: 8.91585 + OnPathChanged: + m_PersistentCalls: + m_Calls: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.2 + resolution: 0.5 + m_InterParticleDistance: 0.3429173 + totalParticles: 77 + m_RestLength: 26.01791 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a000000 + restLengths: + - 0.20002283 + - 0.19997717 + - 0.35217127 + - 0.37707853 + - 0.37768462 + - 0.3818593 + - 0.38565263 + - 0.38304582 + - 0.38444158 + - 0.3847864 + - 0.38408214 + - 0.384023 + - 0.38424167 + - 0.3842686 + - 0.38410887 + - 0.38368052 + - 0.3848515 + - 0.38470802 + - 0.38331065 + - 0.3852491 + - 0.3818891 + - 0.27774453 + - 0.27794865 + - 0.26502654 + - 0.20194809 + - 0.19826613 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0.3429173 + - 0 + pooledParticles: 50 +--- !u!114 &870036912147276740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: end + m_EditorClassIdentifier: + particleIndices: 1a000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &4876123546338928666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: start2 + m_EditorClassIdentifier: + particleIndices: 02000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8187103611661320772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: midpoint + m_EditorClassIdentifier: + particleIndices: 05000000 + m_Blueprint: {fileID: 11400000} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset.meta new file mode 100644 index 000000000..3dd9abe0b --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d31372b30ca34527b534f09a803ab15 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset new file mode 100644 index 000000000..8a2b6527c --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset @@ -0,0 +1,2167 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5578146735436999353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: start + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-2046351418314356755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: midpoint + m_EditorClassIdentifier: + particleIndices: 2d000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-989080574850500197 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: midpoint + m_EditorClassIdentifier: + particleIndices: 1e000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} + m_Name: TangledRopeB + m_EditorClassIdentifier: + m_Checksum: 4272761147 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 52 + m_InitialActiveParticleCount: 52 + _bounds: + m_Center: {x: -3.1451473, y: 0.42696542, z: 0.326636} + m_Extent: {x: 3.982854, y: 0.60912204, z: 0.33384508} + positions: + - {x: -7.128001, y: -0.18215662, z: -0.0072091073} + - {x: -7.110644, y: 0.046492063, z: -0.004235216} + - {x: -7.112087, y: 0.27946392, z: -0.003168466} + - {x: -6.967004, y: 0.44524708, z: -0.0024608832} + - {x: -6.746515, y: 0.51886034, z: -0.0014611222} + - {x: -6.517232, y: 0.5587801, z: -0.0005535499} + - {x: -6.2856317, y: 0.5753186, z: 0.00000030310753} + - {x: -6.0508056, y: 0.5967075, z: 0.014578037} + - {x: -5.8127785, y: 0.6303738, z: 0.038619842} + - {x: -5.5786123, y: 0.6664038, z: 0.065557696} + - {x: -5.343291, y: 0.703556, z: 0.094631754} + - {x: -5.1080875, y: 0.7407634, z: 0.12516959} + - {x: -4.8731565, y: 0.7774795, z: 0.15687881} + - {x: -4.6383657, y: 0.81334656, z: 0.18962723} + - {x: -4.4035645, y: 0.8480662, z: 0.22335649} + - {x: -4.1686616, y: 0.8813429, z: 0.258047} + - {x: -3.9336097, y: 0.91285694, z: 0.29370862} + - {x: -3.698405, y: 0.9422396, z: 0.33037657} + - {x: -3.463059, y: 0.969048, z: 0.36811695} + - {x: -3.2275805, y: 0.9927272, z: 0.4070361} + - {x: -2.9919763, y: 1.0125476, z: 0.4472947} + - {x: -2.7562726, y: 1.0274978, z: 0.4891299} + - {x: -2.5206366, y: 1.0360874, z: 0.53288245} + - {x: -2.2856746, y: 1.0359741, z: 0.5790347} + - {x: -2.0532713, y: 1.0232084, z: 0.62824124} + - {x: -1.8372118, y: 0.9835624, z: 0.6604811} + - {x: -1.6321735, y: 0.90108556, z: 0.6579455} + - {x: -1.4562513, y: 0.7728136, z: 0.61916214} + - {x: -1.3404022, y: 0.59954304, z: 0.54878366} + - {x: -1.3546207, y: 0.3996303, z: 0.47116175} + - {x: -1.534322, y: 0.28091896, z: 0.4576921} + - {x: -1.7630432, y: 0.21777476, z: 0.43006274} + - {x: -1.9682634, y: 0.18458468, z: 0.31211793} + - {x: -2.0959961, y: 0.2574428, z: 0.13303305} + - {x: -2.0606725, y: 0.46086863, z: 0.023625536} + - {x: -1.955595, y: 0.6764369, z: -0.000000012831828} + - {x: -1.8296608, y: 0.82206404, z: -0.00000003718497} + - {x: -1.6540803, y: 0.90137595, z: -0.00000007430123} + - {x: -1.461545, y: 0.920599, z: -0.00000011435198} + - {x: -1.2272371, y: 0.8977013, z: -0.00000014885372} + - {x: -0.9958299, y: 0.85044724, z: -0.0000001686406} + - {x: -0.7672874, y: 0.7920108, z: -0.00000018060453} + - {x: -0.5398485, y: 0.7285715, z: -0.0000001880549} + - {x: -0.31268987, y: 0.66505486, z: -0.00000019312797} + - {x: -0.0838832, y: 0.60781837, z: -0.00000019809042} + - {x: 0.14938739, y: 0.5752957, z: -0.00000020822299} + - {x: 0.35008463, y: 0.5520913, z: -0.000055381635} + - {x: 0.5452084, y: 0.49813592, z: -0.00015747292} + - {x: 0.7269932, y: 0.40972093, z: -0.0002730452} + - {x: 0.83770674, y: 0.25, z: -0.00035118576} + - {x: 0.8315842, y: 0.048615772, z: -0.00025259334} + - {x: 0.8333746, y: -0.15, z: -0.0000010117751} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + restPositions: + - {x: -7.128001, y: -0.18215662, z: -0.0072091073, w: 1} + - {x: -7.110644, y: 0.046492063, z: -0.004235216, w: 1} + - {x: -7.112087, y: 0.27946392, z: -0.003168466, w: 1} + - {x: -6.967004, y: 0.44524708, z: -0.0024608832, w: 1} + - {x: -6.746515, y: 0.51886034, z: -0.0014611222, w: 1} + - {x: -6.517232, y: 0.5587801, z: -0.0005535499, w: 1} + - {x: -6.2856317, y: 0.5753186, z: 0.00000030310753, w: 1} + - {x: -6.0508056, y: 0.5967075, z: 0.014578037, w: 1} + - {x: -5.8127785, y: 0.6303738, z: 0.038619842, w: 1} + - {x: -5.5786123, y: 0.6664038, z: 0.065557696, w: 1} + - {x: -5.343291, y: 0.703556, z: 0.094631754, w: 1} + - {x: -5.1080875, y: 0.7407634, z: 0.12516959, w: 1} + - {x: -4.8731565, y: 0.7774795, z: 0.15687881, w: 1} + - {x: -4.6383657, y: 0.81334656, z: 0.18962723, w: 1} + - {x: -4.4035645, y: 0.8480662, z: 0.22335649, w: 1} + - {x: -4.1686616, y: 0.8813429, z: 0.258047, w: 1} + - {x: -3.9336097, y: 0.91285694, z: 0.29370862, w: 1} + - {x: -3.698405, y: 0.9422396, z: 0.33037657, w: 1} + - {x: -3.463059, y: 0.969048, z: 0.36811695, w: 1} + - {x: -3.2275805, y: 0.9927272, z: 0.4070361, w: 1} + - {x: -2.9919763, y: 1.0125476, z: 0.4472947, w: 1} + - {x: -2.7562726, y: 1.0274978, z: 0.4891299, w: 1} + - {x: -2.5206366, y: 1.0360874, z: 0.53288245, w: 1} + - {x: -2.2856746, y: 1.0359741, z: 0.5790347, w: 1} + - {x: -2.0532713, y: 1.0232084, z: 0.62824124, w: 1} + - {x: -1.8372118, y: 0.9835624, z: 0.6604811, w: 1} + - {x: -1.6321735, y: 0.90108556, z: 0.6579455, w: 1} + - {x: -1.4562513, y: 0.7728136, z: 0.61916214, w: 1} + - {x: -1.3404022, y: 0.59954304, z: 0.54878366, w: 1} + - {x: -1.3546207, y: 0.3996303, z: 0.47116175, w: 1} + - {x: -1.534322, y: 0.28091896, z: 0.4576921, w: 1} + - {x: -1.7630432, y: 0.21777476, z: 0.43006274, w: 1} + - {x: -1.9682634, y: 0.18458468, z: 0.31211793, w: 1} + - {x: -2.0959961, y: 0.2574428, z: 0.13303305, w: 1} + - {x: -2.0606725, y: 0.46086863, z: 0.023625536, w: 1} + - {x: -1.955595, y: 0.6764369, z: -0.000000012831828, w: 1} + - {x: -1.8296608, y: 0.82206404, z: -0.00000003718497, w: 1} + - {x: -1.6540803, y: 0.90137595, z: -0.00000007430123, w: 1} + - {x: -1.461545, y: 0.920599, z: -0.00000011435198, w: 1} + - {x: -1.2272371, y: 0.8977013, z: -0.00000014885372, w: 1} + - {x: -0.9958299, y: 0.85044724, z: -0.0000001686406, w: 1} + - {x: -0.7672874, y: 0.7920108, z: -0.00000018060453, w: 1} + - {x: -0.5398485, y: 0.7285715, z: -0.0000001880549, w: 1} + - {x: -0.31268987, y: 0.66505486, z: -0.00000019312797, w: 1} + - {x: -0.0838832, y: 0.60781837, z: -0.00000019809042, w: 1} + - {x: 0.14938739, y: 0.5752957, z: -0.00000020822299, w: 1} + - {x: 0.35008463, y: 0.5520913, z: -0.000055381635, w: 1} + - {x: 0.5452084, y: 0.49813592, z: -0.00015747292, w: 1} + - {x: 0.7269932, y: 0.40972093, z: -0.0002730452, w: 1} + - {x: 0.83770674, y: 0.25, z: -0.00035118576, w: 1} + - {x: 0.8315842, y: 0.048615772, z: -0.00025259334, w: 1} + - {x: 0.8333746, y: -0.15, z: -0.0000010117751, w: 1} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] + orientations: [] + restOrientations: [] + velocities: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + angularVelocities: [] + invMasses: + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 5 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + invRotationalMasses: [] + filters: 0100fdff0100fdff0100fdff0100fdff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100fdff0100fdff0100fdff0100fdff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.20000003, y: 0.20000003, z: 0.20000003} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0.2, y: 0.2, z: 0.2} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + colors: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000 + m_ConstraintCount: 51 + m_ActiveConstraintCount: 26 + m_InitialActiveConstraintCount: 26 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.22932585 + - 0.22030348 + - 0.23273383 + - 0.23624836 + - 0.2384483 + - 0.24007817 + - 0.23976159 + - 0.23977098 + - 0.23985231 + - 0.23984471 + - 0.23985398 + - 0.23945183 + - 0.22202003 + - 0.2211481 + - 0.21492423 + - 0.23888057 + - 0.2317226 + - 0.24097537 + - 0.19266264 + - 0.23542406 + - 0.2358951 + - 0.23587158 + - 0.23552683 + - 0.20244622 + - 0.1943406 + - 0.198624 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000 + m_ConstraintCount: 50 + m_ActiveConstraintCount: 25 + m_InitialActiveConstraintCount: 25 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.23297876 + - 0.23245499 + - 0.2321907 + - 0.24159537 + - 0.24000376 + - 0.23988771 + - 0.23973894 + - 0.23982133 + - 0.2398558 + - 0.2398395 + - 0.23981741 + - 0.23789816 + - 0.22101939 + - 0.21999277 + - 0.21579246 + - 0.23901443 + - 0.23366606 + - 0.19252713 + - 0.19349253 + - 0.23618267 + - 0.2361207 + - 0.23585697 + - 0.20203424 + - 0.20214584 + - 0.2014773 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000 + m_ConstraintCount: 34 + m_ActiveConstraintCount: 17 + m_InitialActiveConstraintCount: 17 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000 + m_ConstraintCount: 33 + m_ActiveConstraintCount: 17 + m_InitialActiveConstraintCount: 17 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f000000610000006300000062000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000 + m_ConstraintCount: 33 + m_ActiveConstraintCount: 16 + m_InitialActiveConstraintCount: 16 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000 + m_ConstraintCount: 102 + m_ActiveConstraintCount: 52 + m_InitialActiveConstraintCount: 52 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.4 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.40000007 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0.4 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 + chainConstraintsData: + batches: [] + volumeConstraintsData: + batches: [] + groups: + - {fileID: -5578146735436999353} + - {fileID: 946642936072572879} + - {fileID: 8187103611661320772} + - {fileID: 167881786889062980} + - {fileID: -989080574850500197} + - {fileID: 7678280758968765964} + - {fileID: 8483651149211343572} + - {fileID: -2046351418314356755} + - {fileID: 7266446776975833462} + - {fileID: 870036912147276740} + path: + m_Names: + - start + - start2 + - midpoint + - midpoint + - midpoint + - midpoint + - midpoint + - midpoint + - end2 + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -0, z: -0} + position: {x: -7.128001, y: -0.18215662, z: -0.0072091073} + outTangent: {x: 0.025, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: 0, y: -0.25, z: 0} + position: {x: -7.112087, y: 0.27946392, z: -0.003168466} + outTangent: {x: -0, y: 0.22555779, z: -0} + - tangentMode: 0 + inTangent: {x: -0.20267248, y: 0.00000071525574, z: 0.000000015592377} + position: {x: -6.2856317, y: 0.5753186, z: 0.00000030310753} + outTangent: {x: 0.41597176, y: -0.0000014680147, z: -0.000000032002315} + - tangentMode: 0 + inTangent: {x: -1.1864614, y: 0.10884279, z: -0.2632654} + position: {x: -2.0532713, y: 1.0232084, z: 0.62824124} + outTangent: {x: 0.6693034, y: -0.061400115, z: 0.14851254} + - tangentMode: 0 + inTangent: {x: 0.44121885, y: 0.12349558, z: -0.048229456} + position: {x: -1.534322, y: 0.28091896, z: 0.4576921} + outTangent: {x: -0.41183907, y: -0.11527228, z: 0.045017965} + - tangentMode: 0 + inTangent: {x: -0.35811067, y: -0.64493895, z: 0.00000006169988} + position: {x: -1.955595, y: 0.6764369, z: -0.000000012831828} + outTangent: {x: 0.12015426, y: 0.21639168, z: -0.00000002070171} + - tangentMode: 0 + inTangent: {x: -0.15856731, y: 0.0012403727, z: 0.00000003133149} + position: {x: -1.461545, y: 0.920599, z: -0.00000011435198} + outTangent: {x: 0.4626102, y: -0.0036187097, z: -0.00000009140766} + - tangentMode: 0 + inTangent: {x: -0.3226446, y: 0.0000011413737, z: 0.00000002473672} + position: {x: 0.14938739, y: 0.5752957, z: -0.00000020822299} + outTangent: {x: 0.21903828, y: -0.0000007748604, z: -0.000000016793365} + - tangentMode: 0 + inTangent: {x: -0, y: 0.19749527, z: -0} + position: {x: 0.83770674, y: 0.25, z: -0.00035118576} + outTangent: {x: 0, y: -0.20007968, z: 0} + - tangentMode: 0 + inTangent: {x: -0.0205369, y: 0, z: 0} + position: {x: 0.8333746, y: -0.15, z: -0.0000010117751} + outTangent: {x: 0.25, y: -0, z: -0} + m_Normals: + data: + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1.0000001, z: 0} + - {x: 0, y: 1.0000001, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + m_Colors: + data: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + m_Thickness: + data: + - 1 + - 1.0000001 + - 1.0000001 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + m_Masses: + data: + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + m_RotationalMasses: + data: + - 1 + - 1.0000001 + - 1.0000001 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + m_Filters: + data: 0100fdff0100fdff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100fdff0100fdff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.0037205683 + - 0.008849709 + - 0.016145132 + - 0.025771715 + - 0.037721887 + - 0.051931433 + - 0.06831314 + - 0.086768895 + - 0.107194826 + - 0.12948374 + - 0.15352644 + - 0.17921244 + - 0.20643044 + - 0.23506862 + - 0.26501483 + - 0.29615673 + - 0.3283819 + - 0.36157787 + - 0.39563224 + - 0.43043274 + - 0.4658673 + - 0.49740747 + - 0.5289569 + - 0.5621655 + - 0.5980528 + - 0.63709 + - 0.6793595 + - 0.7246906 + - 0.772752 + - 0.82310903 + - 0.8752594 + - 0.92865527 + - 0.9827171 + - 1.0368432 + - 1.0904157 + - 1.142805 + - 1.1933724 + - 1.2414728 + - 1.2864566 + - 1.3276703 + - 1.3644593 + - 1.3961692 + - 1.4704173 + - 1.5730475 + - 1.7018433 + - 1.854423 + - 2.028349 + - 2.2211592 + - 2.4303818 + - 2.6535406 + - 2.888159 + - 3.1317625 + - 3.3818812 + - 3.636051 + - 3.8918173 + - 4.146738 + - 4.3983874 + - 4.644363 + - 4.8822927 + - 5.1098504 + - 5.3247747 + - 5.524903 + - 5.708228 + - 5.803719 + - 5.8939695 + - 5.979569 + - 6.0610023 + - 6.1386485 + - 6.2127833 + - 6.2835865 + - 6.3511567 + - 6.4155293 + - 6.4767027 + - 6.5346694 + - 6.5894575 + - 6.6411858 + - 6.690132 + - 6.736819 + - 6.782097 + - 6.827202 + - 6.8737264 + - 6.9234953 + - 6.9783883 + - 7.0401926 + - 7.101038 + - 7.1608686 + - 7.2197876 + - 7.277743 + - 7.3345656 + - 7.390011 + - 7.443796 + - 7.4956484 + - 7.5453553 + - 7.5928326 + - 7.638208 + - 7.681925 + - 7.7248454 + - 7.768304 + - 7.814051 + - 7.864078 + - 7.920398 + - 7.9848976 + - 8.059276 + - 8.145056 + - 8.243618 + - 8.27821 + - 8.311398 + - 8.343369 + - 8.3743 + - 8.404354 + - 8.433676 + - 8.462392 + - 8.490608 + - 8.518412 + - 8.545866 + - 8.573015 + - 8.599885 + - 8.626483 + - 8.652799 + - 8.678808 + - 8.704474 + - 8.729748 + - 8.754569 + - 8.77887 + - 8.802573 + - 8.825596 + - 8.894125 + - 8.9673 + - 9.044697 + - 9.125815 + - 9.210107 + - 9.296987 + - 9.385845 + - 9.476054 + - 9.566975 + - 9.657956 + - 9.748343 + - 9.837478 + - 9.9247 + - 10.009351 + - 10.090778 + - 10.168338 + - 10.241399 + - 10.309353 + - 10.371628 + - 10.427712 + - 10.477199 + - 10.510129 + - 10.546078 + - 10.584639 + - 10.625396 + - 10.667927 + - 10.711806 + - 10.756612 + - 10.801922 + - 10.847323 + - 10.892411 + - 10.936792 + - 10.980093 + - 11.021963 + - 11.06209 + - 11.100209 + - 11.136132 + - 11.169779 + - 11.201227 + - 11.230785 + - 11.259065 + - 11.28703 + - 11.315591 + - 11.344023 + - 11.372199 + - 11.399991 + - 11.427269 + - 11.453903 + - 11.479762 + - 11.504715 + - 11.52863 + - 11.551376 + - 11.572822 + - 11.592835 + - 11.611287 + - 11.628047 + - 11.642988 + - 11.655988 + - 11.66693 + - 11.675718 + - 11.682297 + - 11.68676 + - 11.689809 + m_TotalSplineLenght: 11.689809 + OnPathChanged: + m_PersistentCalls: + m_Calls: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.2 + resolution: 0.8 + m_InterParticleDistance: 0.22921194 + totalParticles: 102 + m_RestLength: 23.08213 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000 + restLengths: + - 0.22932585 + - 0.23297876 + - 0.22030348 + - 0.23245499 + - 0.23273383 + - 0.2321907 + - 0.23624836 + - 0.24159537 + - 0.2384483 + - 0.24000376 + - 0.24007817 + - 0.23988771 + - 0.23976159 + - 0.23973894 + - 0.23977098 + - 0.23982133 + - 0.23985231 + - 0.2398558 + - 0.23984471 + - 0.2398395 + - 0.23985398 + - 0.23981741 + - 0.23945183 + - 0.23789816 + - 0.22202003 + - 0.22101939 + - 0.2211481 + - 0.21999277 + - 0.21492423 + - 0.21579246 + - 0.23888057 + - 0.23901443 + - 0.2317226 + - 0.23366606 + - 0.24097537 + - 0.19252713 + - 0.19266264 + - 0.19349253 + - 0.23542406 + - 0.23618267 + - 0.2358951 + - 0.2361207 + - 0.23587158 + - 0.23585697 + - 0.23552683 + - 0.20203424 + - 0.20244622 + - 0.20214584 + - 0.1943406 + - 0.2014773 + - 0.198624 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0.22921194 + - 0 + pooledParticles: 50 +--- !u!114 &167881786889062980 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: midpoint + m_EditorClassIdentifier: + particleIndices: 18000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &870036912147276740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: end + m_EditorClassIdentifier: + particleIndices: 33000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &946642936072572879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: start2 + m_EditorClassIdentifier: + particleIndices: 02000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &7266446776975833462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: end2 + m_EditorClassIdentifier: + particleIndices: 31000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &7678280758968765964 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: midpoint + m_EditorClassIdentifier: + particleIndices: 23000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8187103611661320772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: midpoint + m_EditorClassIdentifier: + particleIndices: 06000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8483651149211343572 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: midpoint + m_EditorClassIdentifier: + particleIndices: 26000000 + m_Blueprint: {fileID: 11400000} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset.meta new file mode 100644 index 000000000..90cb00382 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04076b9483b7f4ab0a01666d8b2c24cc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset index 7ffeafc6f..1b41dc208 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset @@ -26,7 +26,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Tearable cable m_EditorClassIdentifier: + m_Checksum: 772348344 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 12 m_InitialActiveParticleCount: 12 _bounds: @@ -258,6 +260,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -1379,7 +1382,357 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_ConstraintCount: 112 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1529,6 +1882,7 @@ MonoBehaviour: m_InterParticleDistance: 0.18181817 totalParticles: 112 m_RestLength: 20.181805 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 restLengths: - 0.18198538 - 0.18199486 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset index 0fbf4dfda..c4cb04c62 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset @@ -40,7 +40,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: Very long cable m_EditorClassIdentifier: + m_Checksum: 3372886816 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 22 m_InitialActiveParticleCount: 22 _bounds: @@ -292,6 +294,7 @@ MonoBehaviour: - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -1503,7 +1506,387 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000740000007500000076000000770000007800000079000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000740000007500000076000000770000007800000079000000 + m_ConstraintCount: 122 + m_ActiveConstraintCount: 22 + m_InitialActiveConstraintCount: 22 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000740000007500000076000000770000007800000079000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1589,6 +1972,7 @@ MonoBehaviour: m_InterParticleDistance: 0.19118178 totalParticles: 122 m_RestLength: 23.132986 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f0000001000000010000000110000001100000012000000120000001300000013000000140000001400000015000000 restLengths: - 0.19104075 - 0.18882072 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset new file mode 100644 index 000000000..7ca807ba7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset @@ -0,0 +1,2400 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8989604677470270896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: center + m_EditorClassIdentifier: + particleIndices: 13000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-5470652867224400354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: top + m_EditorClassIdentifier: + particleIndices: 26000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} + m_Name: Vine 2 + m_EditorClassIdentifier: + m_Checksum: 2933237936 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 39 + m_InitialActiveParticleCount: 39 + _bounds: + m_Center: {x: -0.13760316, y: -2.5536022, z: 0} + m_Extent: {x: 1.1376032, y: 2.5536022, z: 0} + positions: + - {x: 0.96996313, y: -5.107205, z: 0} + - {x: 0.77585936, y: -5.0917664, z: 0} + - {x: 0.5853751, y: -5.0489855, z: 0} + - {x: 0.40092805, y: -4.9837627, z: 0} + - {x: 0.22411427, y: -4.900305, z: 0} + - {x: 0.0555973, y: -4.8018746, z: 0} + - {x: -0.104893796, y: -4.690529, z: 0} + - {x: -0.2571493, y: -4.568012, z: 0} + - {x: -0.40098032, y: -4.4356422, z: 0} + - {x: -0.5361557, y: -4.294423, z: 0} + - {x: -0.6623605, y: -4.1451325, z: 0} + - {x: -0.77916914, y: -3.9883897, z: 0} + - {x: -0.88602376, y: -3.8247135, z: 0} + - {x: -0.982217, y: -3.6545708, z: 0} + - {x: -1.0668766, y: -3.4784276, z: 0} + - {x: -1.1389573, y: -3.2968006, z: 0} + - {x: -1.1972404, y: -3.110317, z: 0} + - {x: -1.240356, y: -2.9197817, z: 0} + - {x: -1.2668345, y: -2.7262506, z: 0} + - {x: -1.2752063, y: -2.531094, z: 0} + - {x: -1.2646158, y: -2.3368843, z: 0} + - {x: -1.235973, y: -2.144515, z: 0} + - {x: -1.1906734, y: -1.9553604, z: 0} + - {x: -1.1301485, y: -1.7704902, z: 0} + - {x: -1.0557597, y: -1.5907209, z: 0} + - {x: -0.9687379, y: -1.4166888, z: 0} + - {x: -0.8701547, y: -1.2489107, z: 0} + - {x: -0.7609171, y: -1.0878459, z: 0} + - {x: -0.641774, y: -0.9339486, z: 0} + - {x: -0.5133291, y: -0.7877161, z: 0} + - {x: -0.37605792, y: -0.649738, z: 0} + - {x: -0.23032841, y: -0.5207493, z: 0} + - {x: -0.076431505, y: -0.4016968, z: 0} + - {x: 0.085382506, y: -0.2938171, z: 0} + - {x: 0.25483957, y: -0.19874041, z: 0} + - {x: 0.43221974, y: -0.11834692, z: 0} + - {x: 0.6166534, y: -0.055740125, z: 0} + - {x: 0.8066756, y: -0.014769094, z: 0} + - {x: 1, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + restPositions: + - {x: 0.96996313, y: -5.107205, z: 0, w: 1} + - {x: 0.77585936, y: -5.0917664, z: 0, w: 1} + - {x: 0.5853751, y: -5.0489855, z: 0, w: 1} + - {x: 0.40092805, y: -4.9837627, z: 0, w: 1} + - {x: 0.22411427, y: -4.900305, z: 0, w: 1} + - {x: 0.0555973, y: -4.8018746, z: 0, w: 1} + - {x: -0.104893796, y: -4.690529, z: 0, w: 1} + - {x: -0.2571493, y: -4.568012, z: 0, w: 1} + - {x: -0.40098032, y: -4.4356422, z: 0, w: 1} + - {x: -0.5361557, y: -4.294423, z: 0, w: 1} + - {x: -0.6623605, y: -4.1451325, z: 0, w: 1} + - {x: -0.77916914, y: -3.9883897, z: 0, w: 1} + - {x: -0.88602376, y: -3.8247135, z: 0, w: 1} + - {x: -0.982217, y: -3.6545708, z: 0, w: 1} + - {x: -1.0668766, y: -3.4784276, z: 0, w: 1} + - {x: -1.1389573, y: -3.2968006, z: 0, w: 1} + - {x: -1.1972404, y: -3.110317, z: 0, w: 1} + - {x: -1.240356, y: -2.9197817, z: 0, w: 1} + - {x: -1.2668345, y: -2.7262506, z: 0, w: 1} + - {x: -1.2752063, y: -2.531094, z: 0, w: 1} + - {x: -1.2646158, y: -2.3368843, z: 0, w: 1} + - {x: -1.235973, y: -2.144515, z: 0, w: 1} + - {x: -1.1906734, y: -1.9553604, z: 0, w: 1} + - {x: -1.1301485, y: -1.7704902, z: 0, w: 1} + - {x: -1.0557597, y: -1.5907209, z: 0, w: 1} + - {x: -0.9687379, y: -1.4166888, z: 0, w: 1} + - {x: -0.8701547, y: -1.2489107, z: 0, w: 1} + - {x: -0.7609171, y: -1.0878459, z: 0, w: 1} + - {x: -0.641774, y: -0.9339486, z: 0, w: 1} + - {x: -0.5133291, y: -0.7877161, z: 0, w: 1} + - {x: -0.37605792, y: -0.649738, z: 0, w: 1} + - {x: -0.23032841, y: -0.5207493, z: 0, w: 1} + - {x: -0.076431505, y: -0.4016968, z: 0, w: 1} + - {x: 0.085382506, y: -0.2938171, z: 0, w: 1} + - {x: 0.25483957, y: -0.19874041, z: 0, w: 1} + - {x: 0.43221974, y: -0.11834692, z: 0, w: 1} + - {x: 0.6166534, y: -0.055740125, z: 0, w: 1} + - {x: 0.8066756, y: -0.014769094, z: 0, w: 1} + - {x: 1, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] + orientations: [] + restOrientations: [] + velocities: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + angularVelocities: [] + invMasses: + - 10 + - 9.999999 + - 10 + - 10.000001 + - 10.000001 + - 9.999999 + - 9.999999 + - 9.999999 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + invRotationalMasses: [] + filters: 0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.099999994, y: 0.099999994, z: 0.099999994} + - {x: 0.099999994, y: 0.099999994, z: 0.099999994} + - {x: 0.10000002, y: 0.10000002, z: 0.10000002} + - {x: 0.10000002, y: 0.10000002, z: 0.10000002} + - {x: 0.10000002, y: 0.10000002, z: 0.10000002} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + colors: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000004000000041000000420000004300000044000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000004000000041000000420000004300000044000000 + m_ConstraintCount: 69 + m_ActiveConstraintCount: 19 + m_InitialActiveConstraintCount: 19 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.19471678 + - 0.19563924 + - 0.19515753 + - 0.1954279 + - 0.19548716 + - 0.19548036 + - 0.19545245 + - 0.19540726 + - 0.19535266 + - 0.19533606 + - 0.19448991 + - 0.19452573 + - 0.19457635 + - 0.19461422 + - 0.19463308 + - 0.19461548 + - 0.19447827 + - 0.19474815 + - 0.19438897 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000004000000041000000420000004300000044000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f0000004000000041000000420000004300000044000000 + m_ConstraintCount: 69 + m_ActiveConstraintCount: 19 + m_InitialActiveConstraintCount: 19 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.19522926 + - 0.1955207 + - 0.19533375 + - 0.19547167 + - 0.1954874 + - 0.19546823 + - 0.195432 + - 0.19537927 + - 0.195334 + - 0.19449836 + - 0.19450329 + - 0.19455256 + - 0.19459741 + - 0.19462651 + - 0.19463125 + - 0.19457068 + - 0.19430716 + - 0.19477007 + - 0.19388771 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d000000 + m_ConstraintCount: 46 + m_ActiveConstraintCount: 13 + m_InitialActiveConstraintCount: 13 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000780000007a000000790000007b0000007d0000007c0000007e000000800000007f000000810000008300000082000000840000008600000085000000870000008900000088000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d000000 + m_ConstraintCount: 46 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000790000007b0000007a0000007c0000007e0000007d0000007f0000008100000080000000820000008400000083000000850000008700000086000000880000008a00000089000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c000000 + m_ConstraintCount: 45 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f0000007100000073000000720000007400000076000000750000007700000079000000780000007a0000007c0000007b0000007d0000007f0000007e000000800000008200000081000000830000008500000084000000860000008800000087000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a000000 + m_ConstraintCount: 139 + m_ActiveConstraintCount: 39 + m_InitialActiveConstraintCount: 39 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 + chainConstraintsData: + batches: [] + volumeConstraintsData: + batches: [] + groups: + - {fileID: 6295150216905737680} + - {fileID: -8989604677470270896} + - {fileID: -5470652867224400354} + path: + m_Names: + - bottom + - center + - top + m_Points: + data: + - tangentMode: 0 + inTangent: {x: 0.25, y: -0, z: -0} + position: {x: 0.96996313, y: -5.107205, z: 0} + outTangent: {x: -1, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.0075092316, y: -1.2843041, z: 0} + position: {x: -1.2752063, y: -2.531094, z: 0} + outTangent: {x: 0.0075092316, y: 1.284304, z: 0} + - tangentMode: 0 + inTangent: {x: -1, y: -0, z: 0} + position: {x: 1, y: 0, z: 0} + outTangent: {x: 0, y: 0, z: -0} + m_Normals: + data: + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + m_Colors: + data: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + m_Thickness: + data: + - 1 + - 1 + - 1 + m_Masses: + data: + - 0.1 + - 0.1 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + - 1 + m_Filters: + data: 0200ffff0200ffff0200ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.14475408 + - 0.2938707 + - 0.44791108 + - 0.6071054 + - 0.771422 + - 0.9406286 + - 1.1143425 + - 1.2920725 + - 1.4732531 + - 1.6572719 + - 1.8434937 + - 2.0312822 + - 2.22002 + - 2.409129 + - 2.5980902 + - 2.7864668 + - 2.973928 + - 3.1602755 + - 3.345473 + - 3.5296776 + - 3.71327 + - 3.8966646 + - 4.080312 + - 4.2646503 + - 4.4498973 + - 4.6360765 + - 4.823048 + - 5.0105367 + - 5.1981564 + - 5.3854356 + - 5.571839 + - 5.756787 + - 5.9396753 + - 6.119896 + - 6.2968564 + - 6.470002 + - 6.6388435 + - 6.8029866 + - 6.962171 + - 7.116316 + - 7.2655764 + - 7.4104075 + m_TotalSplineLenght: 7.4104075 + OnPathChanged: + m_PersistentCalls: + m_Calls: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.1 + resolution: 0.5 + m_InterParticleDistance: 0.19501072 + totalParticles: 139 + m_RestLength: 26.909239 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000 + restLengths: + - 0.19471678 + - 0.19522926 + - 0.19563924 + - 0.1955207 + - 0.19515753 + - 0.19533375 + - 0.1954279 + - 0.19547167 + - 0.19548716 + - 0.1954874 + - 0.19548036 + - 0.19546823 + - 0.19545245 + - 0.195432 + - 0.19540726 + - 0.19537927 + - 0.19535266 + - 0.195334 + - 0.19533606 + - 0.19449836 + - 0.19448991 + - 0.19450329 + - 0.19452573 + - 0.19455256 + - 0.19457635 + - 0.19459741 + - 0.19461422 + - 0.19462651 + - 0.19463308 + - 0.19463125 + - 0.19461548 + - 0.19457068 + - 0.19447827 + - 0.19430716 + - 0.19474815 + - 0.19477007 + - 0.19438897 + - 0.19388771 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0.19501072 + - 0 + pooledParticles: 100 +--- !u!114 &6295150216905737680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: bottom + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset.meta new file mode 100644 index 000000000..5abe169be --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47284b33117284d61b3df44d2620531e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset new file mode 100644 index 000000000..9154a48d9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset @@ -0,0 +1,2309 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-5470652867224400354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: top + m_EditorClassIdentifier: + particleIndices: 23000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} + m_Name: Vine + m_EditorClassIdentifier: + m_Checksum: 424840046 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 36 + m_InitialActiveParticleCount: 36 + _bounds: + m_Center: {x: -2.431271, y: 0.000000022801423, z: 0} + m_Extent: {x: 3.431271, y: 0.000000022801423, z: 0} + positions: + - {x: -5.8625426, y: 0.000000045602846, z: 0} + - {x: -5.6722326, y: 0.000000044661085, z: 0} + - {x: -5.476199, y: 0.00000004345452, z: 0} + - {x: -5.2812467, y: 0.000000042201993, z: 0} + - {x: -5.0818825, y: 0.000000040893514, z: 0} + - {x: -4.8862047, y: 0.000000039592237, z: 0} + - {x: -4.690538, y: 0.0000000382794, z: 0} + - {x: -4.492412, y: 0.00000003694134, z: 0} + - {x: -4.297604, y: 0.000000035619152, z: 0} + - {x: -4.1000786, y: 0.00000003427336, z: 0} + - {x: -3.9043136, y: 0.000000032935475, z: 0} + - {x: -3.7079797, y: 0.000000031590446, z: 0} + - {x: -3.5108986, y: 0.000000030237675, z: 0} + - {x: -3.3154495, y: 0.00000002889405, z: 0} + - {x: -3.117693, y: 0.000000027532945, z: 0} + - {x: -2.9224498, y: 0.00000002618795, z: 0} + - {x: -2.7257571, y: 0.000000024832138, z: 0} + - {x: -2.5293643, y: 0.000000023477908, z: 0} + - {x: -2.3331788, y: 0.000000022124942, z: 0} + - {x: -2.1367855, y: 0.000000020770708, z: 0} + - {x: -1.9400933, y: 0.0000000194149, z: 0} + - {x: -1.7448498, y: 0.000000018069901, z: 0} + - {x: -1.5470929, y: 0.000000016708796, z: 0} + - {x: -1.3516445, y: 0.000000015365174, z: 0} + - {x: -1.1545635, y: 0.000000014012405, z: 0} + - {x: -0.95822966, y: 0.000000012667375, z: 0} + - {x: -0.7624652, y: 0.0000000113294965, z: 0} + - {x: -0.56493855, y: 0.00000000998369, z: 0} + - {x: -0.37013018, y: 0.000000008661504, z: 0} + - {x: -0.17200387, y: 0.0000000073234414, z: 0} + - {x: 0.023661926, y: 0.0000000060106076, z: 0} + - {x: 0.21933958, y: 0.000000004709335, z: 0} + - {x: 0.41870385, y: 0.0000000034008523, z: 0} + - {x: 0.6136565, y: 0.0000000021483273, z: 0} + - {x: 0.8096897, y: 9.417602e-10, z: 0} + - {x: 1, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + restPositions: + - {x: -5.8625426, y: 0.000000045602846, z: 0, w: 1} + - {x: -5.6722326, y: 0.000000044661085, z: 0, w: 1} + - {x: -5.476199, y: 0.00000004345452, z: 0, w: 1} + - {x: -5.2812467, y: 0.000000042201993, z: 0, w: 1} + - {x: -5.0818825, y: 0.000000040893514, z: 0, w: 1} + - {x: -4.8862047, y: 0.000000039592237, z: 0, w: 1} + - {x: -4.690538, y: 0.0000000382794, z: 0, w: 1} + - {x: -4.492412, y: 0.00000003694134, z: 0, w: 1} + - {x: -4.297604, y: 0.000000035619152, z: 0, w: 1} + - {x: -4.1000786, y: 0.00000003427336, z: 0, w: 1} + - {x: -3.9043136, y: 0.000000032935475, z: 0, w: 1} + - {x: -3.7079797, y: 0.000000031590446, z: 0, w: 1} + - {x: -3.5108986, y: 0.000000030237675, z: 0, w: 1} + - {x: -3.3154495, y: 0.00000002889405, z: 0, w: 1} + - {x: -3.117693, y: 0.000000027532945, z: 0, w: 1} + - {x: -2.9224498, y: 0.00000002618795, z: 0, w: 1} + - {x: -2.7257571, y: 0.000000024832138, z: 0, w: 1} + - {x: -2.5293643, y: 0.000000023477908, z: 0, w: 1} + - {x: -2.3331788, y: 0.000000022124942, z: 0, w: 1} + - {x: -2.1367855, y: 0.000000020770708, z: 0, w: 1} + - {x: -1.9400933, y: 0.0000000194149, z: 0, w: 1} + - {x: -1.7448498, y: 0.000000018069901, z: 0, w: 1} + - {x: -1.5470929, y: 0.000000016708796, z: 0, w: 1} + - {x: -1.3516445, y: 0.000000015365174, z: 0, w: 1} + - {x: -1.1545635, y: 0.000000014012405, z: 0, w: 1} + - {x: -0.95822966, y: 0.000000012667375, z: 0, w: 1} + - {x: -0.7624652, y: 0.0000000113294965, z: 0, w: 1} + - {x: -0.56493855, y: 0.00000000998369, z: 0, w: 1} + - {x: -0.37013018, y: 0.000000008661504, z: 0, w: 1} + - {x: -0.17200387, y: 0.0000000073234414, z: 0, w: 1} + - {x: 0.023661926, y: 0.0000000060106076, z: 0, w: 1} + - {x: 0.21933958, y: 0.000000004709335, z: 0, w: 1} + - {x: 0.41870385, y: 0.0000000034008523, z: 0, w: 1} + - {x: 0.6136565, y: 0.0000000021483273, z: 0, w: 1} + - {x: 0.8096897, y: 9.417602e-10, z: 0, w: 1} + - {x: 1, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + restNormals: [] + orientations: [] + restOrientations: [] + velocities: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + angularVelocities: [] + invMasses: + - 10 + - 10 + - 9.999999 + - 10 + - 9.999999 + - 10 + - 10.000001 + - 10.000001 + - 10.000001 + - 9.999999 + - 10 + - 10 + - 10 + - 10.000001 + - 9.999999 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + invRotationalMasses: [] + filters: 0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.10000002, y: 0.10000002, z: 0.10000002} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.099999994, y: 0.099999994, z: 0.099999994} + - {x: 0.099999994, y: 0.099999994, z: 0.099999994} + - {x: 0.099999994, y: 0.099999994, z: 0.099999994} + - {x: 0.10000002, y: 0.10000002, z: 0.10000002} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.099999994, y: 0.099999994, z: 0.099999994} + - {x: 0.10000002, y: 0.10000002, z: 0.10000002} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + colors: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000040000000410000004200000043000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f00000040000000410000004200000043000000 + m_ConstraintCount: 68 + m_ActiveConstraintCount: 18 + m_InitialActiveConstraintCount: 18 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.19031 + - 0.19495249 + - 0.19567776 + - 0.19812584 + - 0.1975255 + - 0.19633389 + - 0.19544911 + - 0.19524312 + - 0.19639277 + - 0.19639325 + - 0.19524348 + - 0.1954484 + - 0.19633389 + - 0.19752663 + - 0.19812632 + - 0.19567765 + - 0.19495267 + - 0.1903103 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000 + m_ConstraintCount: 67 + m_ActiveConstraintCount: 17 + m_InitialActiveConstraintCount: 17 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.19603348 + - 0.19936419 + - 0.19566679 + - 0.194808 + - 0.19576502 + - 0.19708109 + - 0.19775653 + - 0.1966927 + - 0.19618559 + - 0.19669223 + - 0.19775689 + - 0.19708097 + - 0.19576448 + - 0.19480836 + - 0.19566579 + - 0.19936427 + - 0.19603318 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c000000 + m_ConstraintCount: 45 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000780000007a000000790000007b0000007d0000007c0000007e000000800000007f000000810000008300000082000000840000008600000085000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c000000 + m_ConstraintCount: 45 + m_ActiveConstraintCount: 11 + m_InitialActiveConstraintCount: 11 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000790000007b0000007a0000007c0000007e0000007d0000007f0000008100000080000000820000008400000083000000850000008700000086000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b000000 + m_ConstraintCount: 44 + m_ActiveConstraintCount: 11 + m_InitialActiveConstraintCount: 11 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f0000007100000073000000720000007400000076000000750000007700000079000000780000007a0000007c0000007b0000007d0000007f0000007e000000800000008200000081000000830000008500000084000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_AlignBytes: 16 + bendingStiffnesses: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + plasticity: + serializedContents: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f0000008000000081000000820000008300000084000000850000008600000087000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f0000008000000081000000820000008300000084000000850000008600000087000000 + m_ConstraintCount: 136 + m_ActiveConstraintCount: 36 + m_InitialActiveConstraintCount: 36 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f0000008000000081000000820000008300000084000000850000008600000087000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.19999999 + - 1 + - 1 + - 0.20000003 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0.2 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + - 0 + - 1 + - 1 + m_AlignBytes: 16 + chainConstraintsData: + batches: [] + volumeConstraintsData: + batches: [] + groups: + - {fileID: 6295150216905737680} + - {fileID: -5470652867224400354} + path: + m_Names: + - bottom + - top + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: 0, z: 0} + position: {x: -5.8625426, y: 0.000000045602846, z: 0} + outTangent: {x: 0.25, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.25, y: 0, z: 0} + position: {x: 1, y: 0, z: 0} + outTangent: {x: 0.25, y: 0, z: 0} + m_Normals: + data: + - {x: 0, y: 1, z: 0} + - {x: 0, y: 1, z: 0} + m_Colors: + data: + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + m_Thickness: + data: + - 1 + - 1 + m_Masses: + data: + - 0.1 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + m_Filters: + data: 0200ffff0200ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.07597615 + - 0.22719578 + - 0.44573855 + - 0.7236841 + - 1.0531119 + - 1.4261019 + - 1.8347335 + - 2.2710862 + - 2.7272398 + - 3.195274 + - 3.6672688 + - 4.135303 + - 4.591457 + - 5.0278096 + - 5.436441 + - 5.8094306 + - 6.1388583 + - 6.416804 + - 6.6353464 + - 6.786566 + - 6.862542 + m_TotalSplineLenght: 6.862542 + OnPathChanged: + m_PersistentCalls: + m_Calls: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.1 + resolution: 0.5 + m_InterParticleDistance: 0.19607264 + totalParticles: 136 + m_RestLength: 26.469852 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000 + restLengths: + - 0.19031 + - 0.19603348 + - 0.19495249 + - 0.19936419 + - 0.19567776 + - 0.19566679 + - 0.19812584 + - 0.194808 + - 0.1975255 + - 0.19576502 + - 0.19633389 + - 0.19708109 + - 0.19544911 + - 0.19775653 + - 0.19524312 + - 0.1966927 + - 0.19639277 + - 0.19618559 + - 0.19639325 + - 0.19669223 + - 0.19524348 + - 0.19775689 + - 0.1954484 + - 0.19708097 + - 0.19633389 + - 0.19576448 + - 0.19752663 + - 0.19480836 + - 0.19812632 + - 0.19566579 + - 0.19567765 + - 0.19936427 + - 0.19495267 + - 0.19603318 + - 0.1903103 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0.19607264 + - 0 + pooledParticles: 100 +--- !u!114 &6295150216905737680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 775ad4994fda946d1a5936c7e2dfc785, type: 3} + m_Name: bottom + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset.meta new file mode 100644 index 000000000..0cabd5363 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6dc10b6408e440aaa60cfca8e7dd7d1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset index f8993f593..bccd6e55d 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset @@ -26,242 +26,245 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f7e67b5626124d0db9886e6cd2aacff, type: 3} m_Name: WrappingRope m_EditorClassIdentifier: + m_Checksum: 3688547798 m_Empty: 0 + m_Edited: 0 m_ActiveParticleCount: 114 m_InitialActiveParticleCount: 114 _bounds: - m_Center: {x: -38.609577, y: 0.000013784724, z: 0} - m_Extent: {x: 39.48019, y: 0.000013784724, z: 0} + m_Center: {x: -38.584393, y: 0.0000137847255, z: 0} + m_Extent: {x: 39.455006, y: 0.0000137847255, z: 0} positions: - - {x: -78.089775, y: 0.000027569455, z: 0} - - {x: -77.431816, y: 0.000027351341, z: 0} - - {x: -76.8044, y: 0.000027135986, z: 0} - - {x: -75.99894, y: 0.000026857775, z: 0} - - {x: -75.381744, y: 0.000026643915, z: 0} - - {x: -74.69269, y: 0.000026404723, z: 0} - - {x: -73.934326, y: 0.000026141102, z: 0} - - {x: -73.24291, y: 0.000025900501, z: 0} - - {x: -72.58259, y: 0.000025670539, z: 0} - - {x: -71.88634, y: 0.000025427915, z: 0} - - {x: -71.1553, y: 0.000025173027, z: 0} - - {x: -70.412285, y: 0.000024913841, z: 0} - - {x: -69.75649, y: 0.000024684989, z: 0} - - {x: -69.079094, y: 0.000024448522, z: 0} - - {x: -68.38069, y: 0.00002420465, z: 0} - - {x: -67.661964, y: 0.000023953617, z: 0} - - {x: -66.923515, y: 0.00002369563, z: 0} - - {x: -66.23769, y: 0.000023455976, z: 0} - - {x: -65.56361, y: 0.00002322038, z: 0} - - {x: -64.87589, y: 0.00002297998, z: 0} - - {x: -64.174934, y: 0.00002273491, z: 0} - - {x: -63.461163, y: 0.000022485325, z: 0} - - {x: -62.735016, y: 0.000022231377, z: 0} - - {x: -62.032444, y: 0.000021985643, z: 0} - - {x: -61.35486, y: 0.000021748621, z: 0} - - {x: -60.668114, y: 0.000021508373, z: 0} - - {x: -59.972515, y: 0.000021265001, z: 0} - - {x: -59.26836, y: 0.000021018614, z: 0} - - {x: -58.555984, y: 0.000020769328, z: 0} - - {x: -57.835686, y: 0.00002051725, z: 0} - - {x: -57.139145, y: 0.000020273468, z: 0} - - {x: -56.454964, y: 0.000020033996, z: 0} - - {x: -55.764698, y: 0.000019792378, z: 0} - - {x: -55.068577, y: 0.0000195487, z: 0} - - {x: -54.366875, y: 0.00001930305, z: 0} - - {x: -53.65984, y: 0.000019055522, z: 0} - - {x: -52.947712, y: 0.000018806199, z: 0} - - {x: -52.238735, y: 0.000018557967, z: 0} - - {x: -51.551094, y: 0.000018317194, z: 0} - - {x: -50.859505, y: 0.000018075032, z: 0} - - {x: -50.164185, y: 0.000017831553, z: 0} - - {x: -49.465347, y: 0.000017586835, z: 0} - - {x: -48.76323, y: 0.00001734096, z: 0} - - {x: -48.05801, y: 0.000017093993, z: 0} - - {x: -47.349953, y: 0.000016846025, z: 0} - - {x: -46.64871, y: 0.000016600436, z: 0} - - {x: -45.955105, y: 0.000016357519, z: 0} - - {x: -45.259407, y: 0.000016113861, z: 0} - - {x: -44.56181, y: 0.000015869537, z: 0} - - {x: -43.86252, y: 0.000015624613, z: 0} - - {x: -43.16173, y: 0.000015379164, z: 0} - - {x: -42.45965, y: 0.000015133258, z: 0} - - {x: -41.756474, y: 0.000014886965, z: 0} - - {x: -41.055702, y: 0.000014641514, z: 0} - - {x: -40.357296, y: 0.000014396888, z: 0} - - {x: -39.6584, y: 0.000014152091, z: 0} - - {x: -38.959225, y: 0.000013907194, z: 0} - - {x: -38.259937, y: 0.00001366226, z: 0} - - {x: -37.560753, y: 0.00001341736, z: 0} - - {x: -36.861866, y: 0.000013172566, z: 0} - - {x: -36.163467, y: 0.000012927943, z: 0} - - {x: -35.462696, y: 0.000012682492, z: 0} - - {x: -34.759518, y: 0.0000124361995, z: 0} - - {x: -34.057438, y: 0.000012190293, z: 0} - - {x: -33.356644, y: 0.0000119448405, z: 0} - - {x: -32.657352, y: 0.000011699918, z: 0} - - {x: -31.959757, y: 0.000011455593, z: 0} - - {x: -31.264057, y: 0.000011211937, z: 0} - - {x: -30.570454, y: 0.000010969019, z: 0} - - {x: -29.869211, y: 0.000010723432, z: 0} - - {x: -29.16115, y: 0.000010475462, z: 0} - - {x: -28.455942, y: 0.000010228498, z: 0} - - {x: -27.753813, y: 0.000009982619, z: 0} - - {x: -27.05498, y: 0.000009737902, z: 0} - - {x: -26.35966, y: 0.0000094944235, z: 0} - - {x: -25.668076, y: 0.000009252262, z: 0} - - {x: -24.980436, y: 0.000009011492, z: 0} - - {x: -24.27145, y: 0.000008763256, z: 0} - - {x: -23.559328, y: 0.000008513935, z: 0} - - {x: -22.852287, y: 0.000008266405, z: 0} - - {x: -22.15059, y: 0.000008020758, z: 0} - - {x: -21.454475, y: 0.000007777079, z: 0} - - {x: -20.764206, y: 0.000007535461, z: 0} - - {x: -20.080023, y: 0.000007295988, z: 0} - - {x: -19.383484, y: 0.000007052207, z: 0} - - {x: -18.663177, y: 0.000006800126, z: 0} - - {x: -17.950798, y: 0.0000065508398, z: 0} - - {x: -17.246653, y: 0.000006304456, z: 0} - - {x: -16.551054, y: 0.000006061084, z: 0} - - {x: -15.864304, y: 0.0000058208325, z: 0} - - {x: -15.186728, y: 0.000005583814, z: 0} - - {x: -14.484152, y: 0.000005338079, z: 0} - - {x: -13.757996, y: 0.000005084128, z: 0} - - {x: -13.044234, y: 0.000004834546, z: 0} - - {x: -12.343276, y: 0.0000045894776, z: 0} - - {x: -11.655552, y: 0.000004349074, z: 0} - - {x: -10.981471, y: 0.0000041134795, z: 0} - - {x: -10.295646, y: 0.0000038738253, z: 0} - - {x: -9.557204, y: 0.0000036158406, z: 0} - - {x: -8.8384695, y: 0.0000033648028, z: 0} - - {x: -8.14008, y: 0.0000031209368, z: 0} - - {x: -7.4626703, y: 0.0000028844659, z: 0} - - {x: -6.8068767, y: 0.0000026556152, z: 0} - - {x: -6.063863, y: 0.000002396428, z: 0} - - {x: -5.33283, y: 0.0000021415422, z: 0} - - {x: -4.636578, y: 0.0000018989167, z: 0} - - {x: -3.9762478, y: 0.0000016689538, z: 0} - - {x: -3.284843, y: 0.0000014283543, z: 0} - - {x: -2.5264845, y: 0.0000011647342, z: 0} - - {x: -1.8374211, y: 0.0000009255407, z: 0} - - {x: -1.2202159, y: 0.00000071167756, z: 0} - - {x: -0.41476506, y: 0.00000043346907, z: 0} - - {x: 0.21265507, y: 0.00000021811312, z: 0} + - {x: -78.0394, y: 0.000027569455, z: 0} + - {x: -77.38185, y: 0.000027351347, z: 0} + - {x: -76.75484, y: 0.000027135995, z: 0} + - {x: -75.949905, y: 0.00002685779, z: 0} + - {x: -75.33309, y: 0.000026643927, z: 0} + - {x: -74.64446, y: 0.000026404732, z: 0} + - {x: -73.88661, y: 0.00002614112, z: 0} + - {x: -73.19563, y: 0.000025900516, z: 0} + - {x: -72.53571, y: 0.00002567055, z: 0} + - {x: -71.83992, y: 0.00002542793, z: 0} + - {x: -71.109344, y: 0.000025173043, z: 0} + - {x: -70.36681, y: 0.000024913857, z: 0} + - {x: -69.71143, y: 0.000024685005, z: 0} + - {x: -69.034454, y: 0.000024448535, z: 0} + - {x: -68.33651, y: 0.000024204668, z: 0} + - {x: -67.61824, y: 0.000023953633, z: 0} + - {x: -66.880264, y: 0.000023695646, z: 0} + - {x: -66.19487, y: 0.00002345599, z: 0} + - {x: -65.52122, y: 0.000023220395, z: 0} + - {x: -64.83394, y: 0.000022979992, z: 0} + - {x: -64.13344, y: 0.000022734926, z: 0} + - {x: -63.420124, y: 0.000022485343, z: 0} + - {x: -62.694427, y: 0.00002223139, z: 0} + - {x: -61.992306, y: 0.000021985656, z: 0} + - {x: -61.315163, y: 0.000021748638, z: 0} + - {x: -60.62885, y: 0.000021508386, z: 0} + - {x: -59.933685, y: 0.00002126501, z: 0} + - {x: -59.229992, y: 0.000021018626, z: 0} + - {x: -58.51807, y: 0.000020769341, z: 0} + - {x: -57.798233, y: 0.000020517264, z: 0} + - {x: -57.102135, y: 0.000020273481, z: 0} + - {x: -56.418377, y: 0.000020034004, z: 0} + - {x: -55.728554, y: 0.000019792387, z: 0} + - {x: -55.032883, y: 0.000019548708, z: 0} + - {x: -54.331627, y: 0.000019303057, z: 0} + - {x: -53.62505, y: 0.000019055533, z: 0} + - {x: -52.913364, y: 0.000018806204, z: 0} + - {x: -52.20484, y: 0.000018557972, z: 0} + - {x: -51.517643, y: 0.000018317201, z: 0} + - {x: -50.826496, y: 0.000018075038, z: 0} + - {x: -50.131622, y: 0.00001783156, z: 0} + - {x: -49.433235, y: 0.000017586843, z: 0} + - {x: -48.731556, y: 0.000017340964, z: 0} + - {x: -48.026787, y: 0.000017093997, z: 0} + - {x: -47.319183, y: 0.000016846028, z: 0} + - {x: -46.61839, y: 0.000016600441, z: 0} + - {x: -45.925232, y: 0.000016357524, z: 0} + - {x: -45.22997, y: 0.000016113863, z: 0} + - {x: -44.532818, y: 0.000015869538, z: 0} + - {x: -43.833965, y: 0.000015624613, z: 0} + - {x: -43.13363, y: 0.000015379163, z: 0} + - {x: -42.431995, y: 0.000015133257, z: 0} + - {x: -41.72927, y: 0.000014886965, z: 0} + - {x: -41.02895, y: 0.000014641514, z: 0} + - {x: -40.33099, y: 0.000014396889, z: 0} + - {x: -39.63254, y: 0.000014152091, z: 0} + - {x: -38.933804, y: 0.000013907192, z: 0} + - {x: -38.234974, y: 0.00001366226, z: 0} + - {x: -37.536236, y: 0.00001341736, z: 0} + - {x: -36.837788, y: 0.000013172563, z: 0} + - {x: -36.139828, y: 0.000012927938, z: 0} + - {x: -35.439507, y: 0.000012682487, z: 0} + - {x: -34.736782, y: 0.000012436195, z: 0} + - {x: -34.03514, y: 0.000012190286, z: 0} + - {x: -33.3348, y: 0.000011944836, z: 0} + - {x: -32.63596, y: 0.000011699913, z: 0} + - {x: -31.93881, y: 0.000011455588, z: 0} + - {x: -31.243555, y: 0.000011211931, z: 0} + - {x: -30.55039, y: 0.000010969012, z: 0} + - {x: -29.849604, y: 0.000010723426, z: 0} + - {x: -29.141989, y: 0.0000104754545, z: 0} + - {x: -28.437225, y: 0.0000102284885, z: 0} + - {x: -27.735544, y: 0.000009982609, z: 0} + - {x: -27.037157, y: 0.0000097378925, z: 0} + - {x: -26.342283, y: 0.0000094944135, z: 0} + - {x: -25.651136, y: 0.0000092522505, z: 0} + - {x: -24.963936, y: 0.00000901148, z: 0} + - {x: -24.255404, y: 0.000008763244, z: 0} + - {x: -23.543732, y: 0.000008513922, z: 0} + - {x: -22.83715, y: 0.000008266394, z: 0} + - {x: -22.135895, y: 0.000008020745, z: 0} + - {x: -21.440226, y: 0.000007777066, z: 0} + - {x: -20.750393, y: 0.0000075354455, z: 0} + - {x: -20.066652, y: 0.0000072959747, z: 0} + - {x: -19.370548, y: 0.0000070521896, z: 0} + - {x: -18.650707, y: 0.000006800111, z: 0} + - {x: -17.93878, y: 0.0000065508225, z: 0} + - {x: -17.235085, y: 0.000006304439, z: 0} + - {x: -16.53993, y: 0.000006061068, z: 0} + - {x: -15.853621, y: 0.000005820816, z: 0} + - {x: -15.176478, y: 0.000005583798, z: 0} + - {x: -14.474341, y: 0.000005338059, z: 0} + - {x: -13.74865, y: 0.000005084108, z: 0} + - {x: -13.035345, y: 0.000004834527, z: 0} + - {x: -12.334836, y: 0.0000045894585, z: 0} + - {x: -11.6475525, y: 0.0000043490554, z: 0} + - {x: -10.973908, y: 0.000004113463, z: 0} + - {x: -10.288517, y: 0.0000038738076, z: 0} + - {x: -9.550542, y: 0.0000036158215, z: 0} + - {x: -8.832268, y: 0.000003364784, z: 0} + - {x: -8.134326, y: 0.0000031209188, z: 0} + - {x: -7.457354, y: 0.0000028844502, z: 0} + - {x: -6.801976, y: 0.0000026555983, z: 0} + - {x: -6.0594335, y: 0.0000023964103, z: 0} + - {x: -5.328869, y: 0.0000021415253, z: 0} + - {x: -4.633066, y: 0.0000018989022, z: 0} + - {x: -3.9731514, y: 0.0000016689376, z: 0} + - {x: -3.2821789, y: 0.0000014283355, z: 0} + - {x: -2.5243132, y: 0.0000011647192, z: 0} + - {x: -1.835691, y: 0.00000092552716, z: 0} + - {x: -1.2188883, y: 0.0000007116681, z: 0} + - {x: -0.41393957, y: 0.00000043345753, z: 0} + - {x: 0.21306933, y: 0.00000021810774, z: 0} - {x: 0.87061304, y: -1.838695e-15, z: 0} restPositions: - - {x: -78.089775, y: 0.000027569455, z: 0, w: 1} - - {x: -77.431816, y: 0.000027351341, z: 0, w: 1} - - {x: -76.8044, y: 0.000027135986, z: 0, w: 1} - - {x: -75.99894, y: 0.000026857775, z: 0, w: 1} - - {x: -75.381744, y: 0.000026643915, z: 0, w: 1} - - {x: -74.69269, y: 0.000026404723, z: 0, w: 1} - - {x: -73.934326, y: 0.000026141102, z: 0, w: 1} - - {x: -73.24291, y: 0.000025900501, z: 0, w: 1} - - {x: -72.58259, y: 0.000025670539, z: 0, w: 1} - - {x: -71.88634, y: 0.000025427915, z: 0, w: 1} - - {x: -71.1553, y: 0.000025173027, z: 0, w: 1} - - {x: -70.412285, y: 0.000024913841, z: 0, w: 1} - - {x: -69.75649, y: 0.000024684989, z: 0, w: 1} - - {x: -69.079094, y: 0.000024448522, z: 0, w: 1} - - {x: -68.38069, y: 0.00002420465, z: 0, w: 1} - - {x: -67.661964, y: 0.000023953617, z: 0, w: 1} - - {x: -66.923515, y: 0.00002369563, z: 0, w: 1} - - {x: -66.23769, y: 0.000023455976, z: 0, w: 1} - - {x: -65.56361, y: 0.00002322038, z: 0, w: 1} - - {x: -64.87589, y: 0.00002297998, z: 0, w: 1} - - {x: -64.174934, y: 0.00002273491, z: 0, w: 1} - - {x: -63.461163, y: 0.000022485325, z: 0, w: 1} - - {x: -62.735016, y: 0.000022231377, z: 0, w: 1} - - {x: -62.032444, y: 0.000021985643, z: 0, w: 1} - - {x: -61.35486, y: 0.000021748621, z: 0, w: 1} - - {x: -60.668114, y: 0.000021508373, z: 0, w: 1} - - {x: -59.972515, y: 0.000021265001, z: 0, w: 1} - - {x: -59.26836, y: 0.000021018614, z: 0, w: 1} - - {x: -58.555984, y: 0.000020769328, z: 0, w: 1} - - {x: -57.835686, y: 0.00002051725, z: 0, w: 1} - - {x: -57.139145, y: 0.000020273468, z: 0, w: 1} - - {x: -56.454964, y: 0.000020033996, z: 0, w: 1} - - {x: -55.764698, y: 0.000019792378, z: 0, w: 1} - - {x: -55.068577, y: 0.0000195487, z: 0, w: 1} - - {x: -54.366875, y: 0.00001930305, z: 0, w: 1} - - {x: -53.65984, y: 0.000019055522, z: 0, w: 1} - - {x: -52.947712, y: 0.000018806199, z: 0, w: 1} - - {x: -52.238735, y: 0.000018557967, z: 0, w: 1} - - {x: -51.551094, y: 0.000018317194, z: 0, w: 1} - - {x: -50.859505, y: 0.000018075032, z: 0, w: 1} - - {x: -50.164185, y: 0.000017831553, z: 0, w: 1} - - {x: -49.465347, y: 0.000017586835, z: 0, w: 1} - - {x: -48.76323, y: 0.00001734096, z: 0, w: 1} - - {x: -48.05801, y: 0.000017093993, z: 0, w: 1} - - {x: -47.349953, y: 0.000016846025, z: 0, w: 1} - - {x: -46.64871, y: 0.000016600436, z: 0, w: 1} - - {x: -45.955105, y: 0.000016357519, z: 0, w: 1} - - {x: -45.259407, y: 0.000016113861, z: 0, w: 1} - - {x: -44.56181, y: 0.000015869537, z: 0, w: 1} - - {x: -43.86252, y: 0.000015624613, z: 0, w: 1} - - {x: -43.16173, y: 0.000015379164, z: 0, w: 1} - - {x: -42.45965, y: 0.000015133258, z: 0, w: 1} - - {x: -41.756474, y: 0.000014886965, z: 0, w: 1} - - {x: -41.055702, y: 0.000014641514, z: 0, w: 1} - - {x: -40.357296, y: 0.000014396888, z: 0, w: 1} - - {x: -39.6584, y: 0.000014152091, z: 0, w: 1} - - {x: -38.959225, y: 0.000013907194, z: 0, w: 1} - - {x: -38.259937, y: 0.00001366226, z: 0, w: 1} - - {x: -37.560753, y: 0.00001341736, z: 0, w: 1} - - {x: -36.861866, y: 0.000013172566, z: 0, w: 1} - - {x: -36.163467, y: 0.000012927943, z: 0, w: 1} - - {x: -35.462696, y: 0.000012682492, z: 0, w: 1} - - {x: -34.759518, y: 0.0000124361995, z: 0, w: 1} - - {x: -34.057438, y: 0.000012190293, z: 0, w: 1} - - {x: -33.356644, y: 0.0000119448405, z: 0, w: 1} - - {x: -32.657352, y: 0.000011699918, z: 0, w: 1} - - {x: -31.959757, y: 0.000011455593, z: 0, w: 1} - - {x: -31.264057, y: 0.000011211937, z: 0, w: 1} - - {x: -30.570454, y: 0.000010969019, z: 0, w: 1} - - {x: -29.869211, y: 0.000010723432, z: 0, w: 1} - - {x: -29.16115, y: 0.000010475462, z: 0, w: 1} - - {x: -28.455942, y: 0.000010228498, z: 0, w: 1} - - {x: -27.753813, y: 0.000009982619, z: 0, w: 1} - - {x: -27.05498, y: 0.000009737902, z: 0, w: 1} - - {x: -26.35966, y: 0.0000094944235, z: 0, w: 1} - - {x: -25.668076, y: 0.000009252262, z: 0, w: 1} - - {x: -24.980436, y: 0.000009011492, z: 0, w: 1} - - {x: -24.27145, y: 0.000008763256, z: 0, w: 1} - - {x: -23.559328, y: 0.000008513935, z: 0, w: 1} - - {x: -22.852287, y: 0.000008266405, z: 0, w: 1} - - {x: -22.15059, y: 0.000008020758, z: 0, w: 1} - - {x: -21.454475, y: 0.000007777079, z: 0, w: 1} - - {x: -20.764206, y: 0.000007535461, z: 0, w: 1} - - {x: -20.080023, y: 0.000007295988, z: 0, w: 1} - - {x: -19.383484, y: 0.000007052207, z: 0, w: 1} - - {x: -18.663177, y: 0.000006800126, z: 0, w: 1} - - {x: -17.950798, y: 0.0000065508398, z: 0, w: 1} - - {x: -17.246653, y: 0.000006304456, z: 0, w: 1} - - {x: -16.551054, y: 0.000006061084, z: 0, w: 1} - - {x: -15.864304, y: 0.0000058208325, z: 0, w: 1} - - {x: -15.186728, y: 0.000005583814, z: 0, w: 1} - - {x: -14.484152, y: 0.000005338079, z: 0, w: 1} - - {x: -13.757996, y: 0.000005084128, z: 0, w: 1} - - {x: -13.044234, y: 0.000004834546, z: 0, w: 1} - - {x: -12.343276, y: 0.0000045894776, z: 0, w: 1} - - {x: -11.655552, y: 0.000004349074, z: 0, w: 1} - - {x: -10.981471, y: 0.0000041134795, z: 0, w: 1} - - {x: -10.295646, y: 0.0000038738253, z: 0, w: 1} - - {x: -9.557204, y: 0.0000036158406, z: 0, w: 1} - - {x: -8.8384695, y: 0.0000033648028, z: 0, w: 1} - - {x: -8.14008, y: 0.0000031209368, z: 0, w: 1} - - {x: -7.4626703, y: 0.0000028844659, z: 0, w: 1} - - {x: -6.8068767, y: 0.0000026556152, z: 0, w: 1} - - {x: -6.063863, y: 0.000002396428, z: 0, w: 1} - - {x: -5.33283, y: 0.0000021415422, z: 0, w: 1} - - {x: -4.636578, y: 0.0000018989167, z: 0, w: 1} - - {x: -3.9762478, y: 0.0000016689538, z: 0, w: 1} - - {x: -3.284843, y: 0.0000014283543, z: 0, w: 1} - - {x: -2.5264845, y: 0.0000011647342, z: 0, w: 1} - - {x: -1.8374211, y: 0.0000009255407, z: 0, w: 1} - - {x: -1.2202159, y: 0.00000071167756, z: 0, w: 1} - - {x: -0.41476506, y: 0.00000043346907, z: 0, w: 1} - - {x: 0.21265507, y: 0.00000021811312, z: 0, w: 1} + - {x: -78.0394, y: 0.000027569455, z: 0, w: 1} + - {x: -77.38185, y: 0.000027351347, z: 0, w: 1} + - {x: -76.75484, y: 0.000027135995, z: 0, w: 1} + - {x: -75.949905, y: 0.00002685779, z: 0, w: 1} + - {x: -75.33309, y: 0.000026643927, z: 0, w: 1} + - {x: -74.64446, y: 0.000026404732, z: 0, w: 1} + - {x: -73.88661, y: 0.00002614112, z: 0, w: 1} + - {x: -73.19563, y: 0.000025900516, z: 0, w: 1} + - {x: -72.53571, y: 0.00002567055, z: 0, w: 1} + - {x: -71.83992, y: 0.00002542793, z: 0, w: 1} + - {x: -71.109344, y: 0.000025173043, z: 0, w: 1} + - {x: -70.36681, y: 0.000024913857, z: 0, w: 1} + - {x: -69.71143, y: 0.000024685005, z: 0, w: 1} + - {x: -69.034454, y: 0.000024448535, z: 0, w: 1} + - {x: -68.33651, y: 0.000024204668, z: 0, w: 1} + - {x: -67.61824, y: 0.000023953633, z: 0, w: 1} + - {x: -66.880264, y: 0.000023695646, z: 0, w: 1} + - {x: -66.19487, y: 0.00002345599, z: 0, w: 1} + - {x: -65.52122, y: 0.000023220395, z: 0, w: 1} + - {x: -64.83394, y: 0.000022979992, z: 0, w: 1} + - {x: -64.13344, y: 0.000022734926, z: 0, w: 1} + - {x: -63.420124, y: 0.000022485343, z: 0, w: 1} + - {x: -62.694427, y: 0.00002223139, z: 0, w: 1} + - {x: -61.992306, y: 0.000021985656, z: 0, w: 1} + - {x: -61.315163, y: 0.000021748638, z: 0, w: 1} + - {x: -60.62885, y: 0.000021508386, z: 0, w: 1} + - {x: -59.933685, y: 0.00002126501, z: 0, w: 1} + - {x: -59.229992, y: 0.000021018626, z: 0, w: 1} + - {x: -58.51807, y: 0.000020769341, z: 0, w: 1} + - {x: -57.798233, y: 0.000020517264, z: 0, w: 1} + - {x: -57.102135, y: 0.000020273481, z: 0, w: 1} + - {x: -56.418377, y: 0.000020034004, z: 0, w: 1} + - {x: -55.728554, y: 0.000019792387, z: 0, w: 1} + - {x: -55.032883, y: 0.000019548708, z: 0, w: 1} + - {x: -54.331627, y: 0.000019303057, z: 0, w: 1} + - {x: -53.62505, y: 0.000019055533, z: 0, w: 1} + - {x: -52.913364, y: 0.000018806204, z: 0, w: 1} + - {x: -52.20484, y: 0.000018557972, z: 0, w: 1} + - {x: -51.517643, y: 0.000018317201, z: 0, w: 1} + - {x: -50.826496, y: 0.000018075038, z: 0, w: 1} + - {x: -50.131622, y: 0.00001783156, z: 0, w: 1} + - {x: -49.433235, y: 0.000017586843, z: 0, w: 1} + - {x: -48.731556, y: 0.000017340964, z: 0, w: 1} + - {x: -48.026787, y: 0.000017093997, z: 0, w: 1} + - {x: -47.319183, y: 0.000016846028, z: 0, w: 1} + - {x: -46.61839, y: 0.000016600441, z: 0, w: 1} + - {x: -45.925232, y: 0.000016357524, z: 0, w: 1} + - {x: -45.22997, y: 0.000016113863, z: 0, w: 1} + - {x: -44.532818, y: 0.000015869538, z: 0, w: 1} + - {x: -43.833965, y: 0.000015624613, z: 0, w: 1} + - {x: -43.13363, y: 0.000015379163, z: 0, w: 1} + - {x: -42.431995, y: 0.000015133257, z: 0, w: 1} + - {x: -41.72927, y: 0.000014886965, z: 0, w: 1} + - {x: -41.02895, y: 0.000014641514, z: 0, w: 1} + - {x: -40.33099, y: 0.000014396889, z: 0, w: 1} + - {x: -39.63254, y: 0.000014152091, z: 0, w: 1} + - {x: -38.933804, y: 0.000013907192, z: 0, w: 1} + - {x: -38.234974, y: 0.00001366226, z: 0, w: 1} + - {x: -37.536236, y: 0.00001341736, z: 0, w: 1} + - {x: -36.837788, y: 0.000013172563, z: 0, w: 1} + - {x: -36.139828, y: 0.000012927938, z: 0, w: 1} + - {x: -35.439507, y: 0.000012682487, z: 0, w: 1} + - {x: -34.736782, y: 0.000012436195, z: 0, w: 1} + - {x: -34.03514, y: 0.000012190286, z: 0, w: 1} + - {x: -33.3348, y: 0.000011944836, z: 0, w: 1} + - {x: -32.63596, y: 0.000011699913, z: 0, w: 1} + - {x: -31.93881, y: 0.000011455588, z: 0, w: 1} + - {x: -31.243555, y: 0.000011211931, z: 0, w: 1} + - {x: -30.55039, y: 0.000010969012, z: 0, w: 1} + - {x: -29.849604, y: 0.000010723426, z: 0, w: 1} + - {x: -29.141989, y: 0.0000104754545, z: 0, w: 1} + - {x: -28.437225, y: 0.0000102284885, z: 0, w: 1} + - {x: -27.735544, y: 0.000009982609, z: 0, w: 1} + - {x: -27.037157, y: 0.0000097378925, z: 0, w: 1} + - {x: -26.342283, y: 0.0000094944135, z: 0, w: 1} + - {x: -25.651136, y: 0.0000092522505, z: 0, w: 1} + - {x: -24.963936, y: 0.00000901148, z: 0, w: 1} + - {x: -24.255404, y: 0.000008763244, z: 0, w: 1} + - {x: -23.543732, y: 0.000008513922, z: 0, w: 1} + - {x: -22.83715, y: 0.000008266394, z: 0, w: 1} + - {x: -22.135895, y: 0.000008020745, z: 0, w: 1} + - {x: -21.440226, y: 0.000007777066, z: 0, w: 1} + - {x: -20.750393, y: 0.0000075354455, z: 0, w: 1} + - {x: -20.066652, y: 0.0000072959747, z: 0, w: 1} + - {x: -19.370548, y: 0.0000070521896, z: 0, w: 1} + - {x: -18.650707, y: 0.000006800111, z: 0, w: 1} + - {x: -17.93878, y: 0.0000065508225, z: 0, w: 1} + - {x: -17.235085, y: 0.000006304439, z: 0, w: 1} + - {x: -16.53993, y: 0.000006061068, z: 0, w: 1} + - {x: -15.853621, y: 0.000005820816, z: 0, w: 1} + - {x: -15.176478, y: 0.000005583798, z: 0, w: 1} + - {x: -14.474341, y: 0.000005338059, z: 0, w: 1} + - {x: -13.74865, y: 0.000005084108, z: 0, w: 1} + - {x: -13.035345, y: 0.000004834527, z: 0, w: 1} + - {x: -12.334836, y: 0.0000045894585, z: 0, w: 1} + - {x: -11.6475525, y: 0.0000043490554, z: 0, w: 1} + - {x: -10.973908, y: 0.000004113463, z: 0, w: 1} + - {x: -10.288517, y: 0.0000038738076, z: 0, w: 1} + - {x: -9.550542, y: 0.0000036158215, z: 0, w: 1} + - {x: -8.832268, y: 0.000003364784, z: 0, w: 1} + - {x: -8.134326, y: 0.0000031209188, z: 0, w: 1} + - {x: -7.457354, y: 0.0000028844502, z: 0, w: 1} + - {x: -6.801976, y: 0.0000026555983, z: 0, w: 1} + - {x: -6.0594335, y: 0.0000023964103, z: 0, w: 1} + - {x: -5.328869, y: 0.0000021415253, z: 0, w: 1} + - {x: -4.633066, y: 0.0000018989022, z: 0, w: 1} + - {x: -3.9731514, y: 0.0000016689376, z: 0, w: 1} + - {x: -3.2821789, y: 0.0000014283355, z: 0, w: 1} + - {x: -2.5243132, y: 0.0000011647192, z: 0, w: 1} + - {x: -1.835691, y: 0.00000092552716, z: 0, w: 1} + - {x: -1.2188883, y: 0.0000007116681, z: 0, w: 1} + - {x: -0.41393957, y: 0.00000043345753, z: 0, w: 1} + - {x: 0.21306933, y: 0.00000021810774, z: 0, w: 1} - {x: 0.87061304, y: -1.838695e-15, z: 0, w: 1} + restNormals: [] orientations: [] restOrientations: [] velocities: @@ -383,6 +386,21 @@ MonoBehaviour: invMasses: - 10 - 10 + - 10.000001 + - 9.999999 + - 10 + - 10.000001 + - 9.999999 + - 10 + - 10.000001 + - 9.999999 + - 10 + - 9.999999 + - 9.999999 + - 9.999999 + - 10 + - 9.999999 + - 10 - 10 - 10.000001 - 10 @@ -394,44 +412,30 @@ MonoBehaviour: - 10 - 10.000001 - 10.000001 + - 10 + - 9.999999 - 9.999999 - 10.000001 - - 9.999999 - - 9.999999 - - 10 - - 10.000001 - - 9.999999 - - 10 - - 10.000001 - - 10 - - 9.999999 - - 10 - - 10 - - 10 - - 10.000001 - - 10 - - 10 - - 10 - - 10 - - 9.999999 - - 10 - - 10 - - 10 - - 10 - - 9.999999 - - 10 - 10 - 10 - 10.000001 - 9.999999 - 10.000001 + - 10 + - 10 + - 10 + - 10 + - 10 + - 9.999999 + - 10.000001 + - 9.999999 + - 10 - 9.999999 - 10 - 10 - - 10 - - 10 - - 10 - - 10 + - 10.000001 + - 10.000001 + - 10.000001 - 10 - 10 - 10 @@ -494,12 +498,26 @@ MonoBehaviour: - 10 - 10 - 10 - - 10 invRotationalMasses: [] filters: 0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff principalRadii: - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.34999996, y: 0.34999996, z: 0.34999996} + - {x: 0.35000002, y: 0.35000002, z: 0.35000002} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.34999996, y: 0.34999996, z: 0.34999996} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.34999996, y: 0.34999996, z: 0.34999996} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - {x: 0.35, y: 0.35, z: 0.35} @@ -507,48 +525,34 @@ MonoBehaviour: - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - {x: 0.34999996, y: 0.34999996, z: 0.34999996} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35000002, y: 0.35000002, z: 0.35000002} + - {x: 0.35000002, y: 0.35000002, z: 0.35000002} + - {x: 0.34999996, y: 0.34999996, z: 0.34999996} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.35000002, y: 0.35000002, z: 0.35000002} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} + - {x: 0.34999996, y: 0.34999996, z: 0.34999996} + - {x: 0.34999996, y: 0.34999996, z: 0.34999996} + - {x: 0.34999996, y: 0.34999996, z: 0.34999996} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} @@ -611,10 +615,24 @@ MonoBehaviour: - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} - {x: 0.35, y: 0.35, z: 0.35} - - {x: 0.35, y: 0.35, z: 0.35} colors: - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1, g: 1, b: 1, a: 1} @@ -622,48 +640,34 @@ MonoBehaviour: - {r: 1, g: 1, b: 1, a: 1} - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - - {r: 1, g: 1, b: 1, a: 1} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - {r: 1, g: 1, b: 1, a: 1} - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - {r: 1, g: 1, b: 1, a: 1} + - {r: 1.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} + - {r: 0.99999994, g: 0.99999994, b: 0.99999994, a: 0.99999994} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} @@ -726,7 +730,6 @@ MonoBehaviour: - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - {r: 1, g: 1, b: 1, a: 1} - - {r: 1, g: 1, b: 1, a: 1} points: edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a0000003a0000003b0000003b0000003c0000003c0000003d0000003d0000003e0000003e0000003f0000003f00000040000000400000004100000041000000420000004200000043000000430000004400000044000000450000004500000046000000460000004700000047000000480000004800000049000000490000004a0000004a0000004b0000004b0000004c0000004c0000004d0000004d0000004e0000004e0000004f0000004f00000050000000500000005100000051000000520000005200000053000000530000005400000054000000550000005500000056000000560000005700000057000000580000005800000059000000590000005a0000005a0000005b0000005b0000005c0000005c0000005d0000005d0000005e0000005e0000005f0000005f00000060000000600000006100000061000000620000006200000063000000630000006400000064000000650000006500000066000000660000006700000067000000680000006800000069000000690000006a0000006a0000006b0000006b0000006c0000006c0000006d0000006d0000006e0000006e0000006f0000006f000000700000007000000071000000 triangles: @@ -745,63 +748,63 @@ MonoBehaviour: m_AlignBytes: 16 restLengths: serializedContents: - - 0.657959 - - 0.80545807 - - 0.6890564 - - 0.6914139 - - 0.6962509 - - 0.7430115 - - 0.6773987 - - 0.7187271 - - 0.68582153 - - 0.6877136 - - 0.7137718 - - 0.70257187 - - 0.6867447 - - 0.70415497 - - 0.72029877 - - 0.6841812 - - 0.6961212 - - 0.70703506 - - 0.70897675 - - 0.69158936 - - 0.6988373 - - 0.70521927 - - 0.70124435 - - 0.6956978 - - 0.6992912 - - 0.7020836 - - 0.70077133 - - 0.6988945 - - 0.6992874 - - 0.6988869 - - 0.70077133 - - 0.7020798 - - 0.6992912 - - 0.6956997 - - 0.70124245 - - 0.7052078 - - 0.69883347 - - 0.69158363 - - 0.7089863 - - 0.7070408 - - 0.6961155 - - 0.6841831 - - 0.7203064 - - 0.70414543 - - 0.6867504 - - 0.7025757 - - 0.7137613 - - 0.6877241 - - 0.68582535 - - 0.71873474 - - 0.6774101 - - 0.74301386 - - 0.69625187 - - 0.6914048 - - 0.68906343 - - 0.80545086 - - 0.657958 + - 0.657547 + - 0.80493164 + - 0.68862915 + - 0.690979 + - 0.69579315 + - 0.7425308 + - 0.67697906 + - 0.71826935 + - 0.6853943 + - 0.68727875 + - 0.71331406 + - 0.70212173 + - 0.6863136 + - 0.7036934 + - 0.7198372 + - 0.6837578 + - 0.6956711 + - 0.7065773 + - 0.7085228 + - 0.69114685 + - 0.69838715 + - 0.70476913 + - 0.7007942 + - 0.6952629 + - 0.69885254 + - 0.70163345 + - 0.7003212 + - 0.6984482 + - 0.69882965 + - 0.6984482 + - 0.7003212 + - 0.7016411 + - 0.6988411 + - 0.6952553 + - 0.7007866 + - 0.7047634 + - 0.69838715 + - 0.69114685 + - 0.70853233 + - 0.7065811 + - 0.6956692 + - 0.6837406 + - 0.719841 + - 0.7036953 + - 0.6863098 + - 0.702137 + - 0.7133045 + - 0.6872835 + - 0.6853914 + - 0.7182741 + - 0.6769719 + - 0.74254274 + - 0.6958027 + - 0.69097257 + - 0.68862224 + - 0.8049487 + - 0.6575437 m_AlignBytes: 16 stiffnesses: serializedContents: @@ -876,62 +879,62 @@ MonoBehaviour: m_AlignBytes: 16 restLengths: serializedContents: - - 0.6274185 - - 0.6171951 - - 0.7583618 - - 0.6603241 - - 0.73104095 - - 0.65579224 - - 0.6984024 - - 0.7384491 - - 0.6740875 - - 0.70095825 - - 0.7261467 - - 0.6775856 - - 0.6955986 - - 0.71237564 - - 0.69654083 - - 0.69026566 - - 0.7017021 - - 0.7121277 - - 0.68764114 - - 0.6953201 - - 0.7021179 - - 0.7080574 - - 0.6936035 - - 0.6975975 - - 0.7007866 - - 0.7031746 - - 0.6984062 - - 0.6991768 - - 0.6991844 - - 0.6983986 - - 0.7031784 - - 0.7007942 - - 0.6975956 - - 0.6936035 - - 0.7080612 - - 0.70212936 - - 0.6953201 - - 0.68763924 - - 0.71212196 - - 0.7016964 - - 0.6902695 - - 0.6965389 - - 0.71237946 - - 0.6955986 - - 0.67757607 - - 0.72615623 - - 0.70095825 - - 0.67408085 - - 0.73844147 - - 0.69838905 - - 0.65579367 - - 0.73103285 - - 0.6603303 - - 0.7583585 - - 0.61720514 - - 0.6274201 + - 0.62701416 + - 0.61681366 + - 0.75785065 + - 0.65991974 + - 0.73057556 + - 0.65538025 + - 0.69794464 + - 0.7379761 + - 0.67365265 + - 0.7005005 + - 0.72569656 + - 0.6771431 + - 0.6951637 + - 0.7119217 + - 0.6960983 + - 0.68982315 + - 0.7012558 + - 0.7116852 + - 0.68719864 + - 0.6948738 + - 0.7016792 + - 0.70760345 + - 0.6931572 + - 0.6971512 + - 0.70033646 + - 0.70272446 + - 0.6979599 + - 0.6987381 + - 0.6987381 + - 0.6979599 + - 0.70272446 + - 0.7003403 + - 0.6971493 + - 0.6931648 + - 0.7076149 + - 0.70168114 + - 0.6948738 + - 0.68720055 + - 0.7116718 + - 0.7012558 + - 0.6898327 + - 0.69610405 + - 0.7119274 + - 0.6951542 + - 0.67714214 + - 0.7256918 + - 0.7005091 + - 0.67364407 + - 0.7379751 + - 0.6979418 + - 0.65537786 + - 0.7305646 + - 0.65991473 + - 0.75786567 + - 0.6168027 + - 0.6270089 m_AlignBytes: 16 stiffnesses: serializedContents: @@ -1007,44 +1010,44 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.010177612 - - 0.023956299 - - 0.010360718 - - 0.0039901733 - - 0.007003784 - - 0.017547607 - - 0.00440979 - - 0.007858276 - - 0.0029525757 - - 0.0026397705 - - 0.0020332336 - - 0.0017776489 - - 0.0071144104 - - 0.0011711121 - - 0.0009460449 - - 0.0006980896 - - 0.00049972534 - - 0.0008010864 - - 0.00009536743 - - 0.00009918213 - - 0.0008010864 - - 0.00049972534 - - 0.0006980896 - - 0.00095176697 - - 0.0011711121 - - 0.0071163177 - - 0.001783371 - - 0.002029419 - - 0.0026416779 - - 0.002948761 - - 0.007860184 - - 0.0044116974 - - 0.017539024 - - 0.00699234 - - 0.003993511 - - 0.010358095 - - 0.023952723 - - 0.010179281 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 m_AlignBytes: 16 bendingStiffnesses: serializedContents: @@ -1141,43 +1144,43 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.05934906 - - 0.023101807 - - 0.011978149 - - 0.029067993 - - 0.0067749023 - - 0.0039138794 - - 0.004272461 - - 0.008327484 - - 0.0028495789 - - 0.007923126 - - 0.001953125 - - 0.0016975403 - - 0.0013198853 - - 0.0010948181 - - 0.0022697449 - - 0.00063323975 - - 0.0004310608 - - 0.00078964233 - - 0.000038146973 - - 0.00016403198 - - 0.00036621094 - - 0.0005645752 - - 0.0025463104 - - 0.0010261536 - - 0.0012435913 - - 0.0010433197 - - 0.0018596649 - - 0.0041179657 - - 0.0027446747 - - 0.0030584335 - - 0.004131317 - - 0.004548073 - - 0.0065689087 - - 0.0072050095 - - 0.011593819 - - 0.022318125 - - 0.06274855 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 m_AlignBytes: 16 bendingStiffnesses: serializedContents: @@ -1272,43 +1275,43 @@ MonoBehaviour: m_AlignBytes: 16 restBends: serializedContents: - - 0.0627594 - - 0.022315979 - - 0.01159668 - - 0.0072021484 - - 0.006576538 - - 0.004547119 - - 0.0041275024 - - 0.0030517578 - - 0.0027389526 - - 0.004119873 - - 0.0018615723 - - 0.0010490417 - - 0.0012435913 - - 0.001033783 - - 0.0025482178 - - 0.0005645752 - - 0.00036239624 - - 0.00016403198 - - 0.000030517578 - - 0.00078964233 - - 0.0004272461 - - 0.0006313324 - - 0.0022735596 - - 0.0010986328 - - 0.0013141632 - - 0.0016937256 - - 0.001947403 - - 0.007921219 - - 0.0028495789 - - 0.008333206 - - 0.0042686462 - - 0.0039138794 - - 0.0067825317 - - 0.029073238 - - 0.011973858 - - 0.02309823 - - 0.059343547 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 m_AlignBytes: 16 bendingStiffnesses: serializedContents: @@ -1401,7 +1404,363 @@ MonoBehaviour: shapeMatchingConstraintsData: batches: [] aerodynamicConstraintsData: - batches: [] + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f0000007000000071000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f0000007000000071000000 + m_ConstraintCount: 114 + m_ActiveConstraintCount: 114 + m_InitialActiveConstraintCount: 114 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f0000007000000071000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + aerodynamicCoeffs: + serializedContents: + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.70000005 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.6999999 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + - 0.7 + - 1 + - 1 + m_AlignBytes: 16 chainConstraintsData: batches: [] volumeConstraintsData: @@ -1417,7 +1776,7 @@ MonoBehaviour: data: - tangentMode: 0 inTangent: {x: -0.25, y: 0, z: 0} - position: {x: -78.089775, y: 0.000027569455, z: 0} + position: {x: -78.0394, y: 0.000027569455, z: 0} outTangent: {x: 0.25, y: 0, z: 0} - tangentMode: 0 inTangent: {x: -0.25, y: 0, z: 0} @@ -1448,28 +1807,28 @@ MonoBehaviour: m_Closed: 0 m_ArcLengthTable: - 0 - - 0.5508675 - - 2.0644803 - - 4.439497 - - 7.5745754 - - 11.368374 - - 15.719553 - - 20.526768 - - 25.688679 - - 31.103943 - - 36.67122 - - 42.28917 - - 47.856445 - - 53.27171 - - 58.43362 - - 63.240837 - - 67.59201 - - 71.38581 - - 74.52089 - - 76.895905 - - 78.409515 - - 78.96038 - m_TotalSplineLenght: 78.96038 + - 0.5505357 + - 2.0631967 + - 4.4367065 + - 7.569789 + - 11.361167 + - 15.709566 + - 20.513708 + - 25.672318 + - 31.084118 + - 36.64783 + - 42.262188 + - 47.8259 + - 53.2377 + - 58.39631 + - 63.20045 + - 67.54885 + - 71.34023 + - 74.47331 + - 76.846825 + - 78.35948 + - 78.91002 + m_TotalSplineLenght: 78.91002 OnPathChanged: m_PersistentCalls: m_Calls: [] @@ -1484,123 +1843,124 @@ MonoBehaviour: m_Calls: [] thickness: 0.35 resolution: 0.5 - m_InterParticleDistance: 0.69876444 + m_InterParticleDistance: 0.6983188 totalParticles: 114 - m_RestLength: 78.96037 + m_RestLength: 78.910034 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a0000003a0000003b0000003b0000003c0000003c0000003d0000003d0000003e0000003e0000003f0000003f00000040000000400000004100000041000000420000004200000043000000430000004400000044000000450000004500000046000000460000004700000047000000480000004800000049000000490000004a0000004a0000004b0000004b0000004c0000004c0000004d0000004d0000004e0000004e0000004f0000004f00000050000000500000005100000051000000520000005200000053000000530000005400000054000000550000005500000056000000560000005700000057000000580000005800000059000000590000005a0000005a0000005b0000005b0000005c0000005c0000005d0000005d0000005e0000005e0000005f0000005f00000060000000600000006100000061000000620000006200000063000000630000006400000064000000650000006500000066000000660000006700000067000000680000006800000069000000690000006a0000006a0000006b0000006b0000006c0000006c0000006d0000006d0000006e0000006e0000006f0000006f000000700000007000000071000000 restLengths: - - 0.657959 - - 0.6274185 - - 0.80545807 - - 0.6171951 - - 0.6890564 - - 0.7583618 - - 0.6914139 - - 0.6603241 - - 0.6962509 - - 0.73104095 - - 0.7430115 - - 0.65579224 - - 0.6773987 - - 0.6984024 - - 0.7187271 - - 0.7384491 - - 0.68582153 - - 0.6740875 - - 0.6877136 - - 0.70095825 - - 0.7137718 - - 0.7261467 - - 0.70257187 - - 0.6775856 - - 0.6867447 - - 0.6955986 - - 0.70415497 - - 0.71237564 - - 0.72029877 - - 0.69654083 - - 0.6841812 - - 0.69026566 - - 0.6961212 - - 0.7017021 - - 0.70703506 - - 0.7121277 - - 0.70897675 - - 0.68764114 - - 0.69158936 - - 0.6953201 - - 0.6988373 - - 0.7021179 - - 0.70521927 - - 0.7080574 - - 0.70124435 - - 0.6936035 - - 0.6956978 - - 0.6975975 - - 0.6992912 - - 0.7007866 - - 0.7020836 - - 0.7031746 - - 0.70077133 - - 0.6984062 - - 0.6988945 - - 0.6991768 - - 0.6992874 - - 0.6991844 - - 0.6988869 - - 0.6983986 - - 0.70077133 - - 0.7031784 - - 0.7020798 + - 0.657547 + - 0.62701416 + - 0.80493164 + - 0.61681366 + - 0.68862915 + - 0.75785065 + - 0.690979 + - 0.65991974 + - 0.69579315 + - 0.73057556 + - 0.7425308 + - 0.65538025 + - 0.67697906 + - 0.69794464 + - 0.71826935 + - 0.7379761 + - 0.6853943 + - 0.67365265 + - 0.68727875 + - 0.7005005 + - 0.71331406 + - 0.72569656 + - 0.70212173 + - 0.6771431 + - 0.6863136 + - 0.6951637 + - 0.7036934 + - 0.7119217 + - 0.7198372 + - 0.6960983 + - 0.6837578 + - 0.68982315 + - 0.6956711 + - 0.7012558 + - 0.7065773 + - 0.7116852 + - 0.7085228 + - 0.68719864 + - 0.69114685 + - 0.6948738 + - 0.69838715 + - 0.7016792 + - 0.70476913 + - 0.70760345 - 0.7007942 - - 0.6992912 - - 0.6975956 - - 0.6956997 - - 0.6936035 - - 0.70124245 - - 0.7080612 - - 0.7052078 - - 0.70212936 - - 0.69883347 - - 0.6953201 - - 0.69158363 - - 0.68763924 - - 0.7089863 - - 0.71212196 - - 0.7070408 - - 0.7016964 - - 0.6961155 - - 0.6902695 - - 0.6841831 - - 0.6965389 - - 0.7203064 - - 0.71237946 - - 0.70414543 - - 0.6955986 - - 0.6867504 - - 0.67757607 - - 0.7025757 - - 0.72615623 - - 0.7137613 - - 0.70095825 - - 0.6877241 - - 0.67408085 - - 0.68582535 - - 0.73844147 - - 0.71873474 - - 0.69838905 - - 0.6774101 - - 0.65579367 - - 0.74301386 - - 0.73103285 - - 0.69625187 - - 0.6603303 - - 0.6914048 - - 0.7583585 - - 0.68906343 - - 0.61720514 - - 0.80545086 - - 0.6274201 - - 0.657958 + - 0.6931572 + - 0.6952629 + - 0.6971512 + - 0.69885254 + - 0.70033646 + - 0.70163345 + - 0.70272446 + - 0.7003212 + - 0.6979599 + - 0.6984482 + - 0.6987381 + - 0.69882965 + - 0.6987381 + - 0.6984482 + - 0.6979599 + - 0.7003212 + - 0.70272446 + - 0.7016411 + - 0.7003403 + - 0.6988411 + - 0.6971493 + - 0.6952553 + - 0.6931648 + - 0.7007866 + - 0.7076149 + - 0.7047634 + - 0.70168114 + - 0.69838715 + - 0.6948738 + - 0.69114685 + - 0.68720055 + - 0.70853233 + - 0.7116718 + - 0.7065811 + - 0.7012558 + - 0.6956692 + - 0.6898327 + - 0.6837406 + - 0.69610405 + - 0.719841 + - 0.7119274 + - 0.7036953 + - 0.6951542 + - 0.6863098 + - 0.67714214 + - 0.702137 + - 0.7256918 + - 0.7133045 + - 0.7005091 + - 0.6872835 + - 0.67364407 + - 0.6853914 + - 0.7379751 + - 0.7182741 + - 0.6979418 + - 0.6769719 + - 0.65537786 + - 0.74254274 + - 0.7305646 + - 0.6958027 + - 0.65991473 + - 0.69097257 + - 0.75786567 + - 0.68862224 + - 0.6168027 + - 0.8049487 + - 0.6270089 + - 0.6575437 - 0 pooledParticles: 0 --- !u!114 &870036912147276740 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta index 3dd9abe0b..a0c762b5a 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4d31372b30ca34527b534f09a803ab15 +guid: 7e05f85bfaeb24a649317f63f656b6bb NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat index cba32df11..a78cc0ce2 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat @@ -8,28 +8,22 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: ChainRed - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION m_InvalidKeywords: [] - m_LightmapFlags: 7 - m_EnableInstancingVariants: 0 + m_LightmapFlags: 1 + m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -66,40 +60,13 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.6 - _GlossyReflections: 1 @@ -107,36 +74,14 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 ---- !u!114 &7783624191817883126 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat index b4715c29f..721b0b5be 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat @@ -1,18 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-7120631238355715381 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -21,28 +8,22 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: ChainWhite - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION m_InvalidKeywords: [] - m_LightmapFlags: 7 - m_EnableInstancingVariants: 0 + m_LightmapFlags: 1 + m_EnableInstancingVariants: 1 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -79,40 +60,13 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.6 - _GlossyReflections: 1 @@ -120,23 +74,14 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat index 2b6254bf7..4d30cc707 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat @@ -1,18 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-1092305325255329245 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -21,28 +8,22 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: GreenRope - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION m_InvalidKeywords: [] - m_LightmapFlags: 7 + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 2800000, guid: 1d4961a920a28426db6e5dbd2ed49050, type: 3} m_Scale: {x: 1, y: 1} @@ -83,36 +64,13 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 @@ -120,21 +78,13 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 0.17942329, g: 0.6037736, b: 0.19514, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat index b3809982d..24e622672 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat @@ -8,29 +8,23 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: LineRope - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION - _NORMALMAP m_InvalidKeywords: [] - m_LightmapFlags: 7 + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 2800000, guid: 61461ee4d289a4bc384e839abcf74473, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 2800000, guid: 7a6d7fa80b2a444089c9b87ba93966c7, type: 3} m_Scale: {x: 1, y: 1} @@ -67,40 +61,13 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.4 - _GlossyReflections: 1 @@ -108,36 +75,14 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 ---- !u!114 &822291016816043565 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat index 37d65ec1f..ef2abf912 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat @@ -8,30 +8,23 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: RedRope - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION - _NORMALMAP - - _OCCLUSIONMAP m_InvalidKeywords: [] - m_LightmapFlags: 7 + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 2800000, guid: 61461ee4d289a4bc384e839abcf74473, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 2800000, guid: 1020609c9ac9f4a14a078c1afd37a75e, type: 3} m_Scale: {x: 1, y: 1} @@ -68,40 +61,13 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.4 - _GlossyReflections: 1 @@ -109,36 +75,14 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 ---- !u!114 &7296605469653036472 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat index 87fbf93c4..fcb491f30 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat @@ -8,28 +8,22 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Rod - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - _EMISSION m_InvalidKeywords: [] - m_LightmapFlags: 7 + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 2800000, guid: 49dd156e3b48f41f791e9d75107f6b38, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -66,40 +60,13 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.7 - _GlossyReflections: 1 @@ -107,36 +74,14 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 ---- !u!114 &1221004176162671866 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Particle.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat similarity index 73% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/Particle.mat rename to Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat index ab437643f..29da8f0eb 100644 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/Particle.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat @@ -2,25 +2,30 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Particle - m_Shader: {fileID: 4800000, guid: 87908c483837f4df49e97fa1aa0dacda, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 5 + m_Name: Shark + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _NORMALMAP + m_InvalidKeywords: [] + m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - _BumpMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: e4a9139c969c3419a813c9513127f817, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _DetailAlbedoMap: @@ -40,7 +45,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0} + m_Texture: {fileID: 2800000, guid: 9c47de74aec0642928f43bb91a7346b7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: @@ -61,18 +66,20 @@ Material: - _Cutoff: 0.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _Glossiness: 0.5 - - _InvFade: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.75 + - _GlossyReflections: 1 - _Metallic: 0 - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _RadiusScale: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 - _SrcBlend: 1 - _UVSec: 0 - _ZWrite: 1 m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat.meta new file mode 100644 index 000000000..f72c06f54 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad417cd62ee7d4209afa3e3d86bee647 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat index 0dc9662f4..64ec4236e 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Snake - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -17,18 +17,12 @@ Material: m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 2800000, guid: 61461ee4d289a4bc384e839abcf74473, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -65,39 +59,12 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.6 - _GlossyReflections: 1 @@ -105,34 +72,13 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 ---- !u!114 &6388459937839729649 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 diff --git a/Assets/ThirdParty/Obi/Resources/ObiMaterials/InstancedStandard.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat similarity index 85% rename from Assets/ThirdParty/Obi/Resources/ObiMaterials/InstancedStandard.mat rename to Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat index 0b72e74af..191a3283a 100644 --- a/Assets/ThirdParty/Obi/Resources/ObiMaterials/InstancedStandard.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat @@ -2,20 +2,24 @@ %TAG !u! tag:unity3d.com,2011: --- !u!21 &2100000 Material: - serializedVersion: 6 + serializedVersion: 8 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: InstancedStandard + m_Name: TanglePeg m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 4 - m_EnableInstancingVariants: 1 + m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} disabledShaderPasses: [] + m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: @@ -40,7 +44,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MetallicGlossMap: @@ -62,7 +66,7 @@ Material: - _DetailNormalMapScale: 1 - _DstBlend: 0 - _GlossMapScale: 1 - - _Glossiness: 0.5 + - _Glossiness: 0.8 - _GlossyReflections: 1 - _Metallic: 0 - _Mode: 0 @@ -74,6 +78,7 @@ Material: - _UVSec: 0 - _ZWrite: 1 m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 0.7734498, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat.meta new file mode 100644 index 000000000..d4d9026a4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bcdcc68772c3b42ca94abeffddf3eb19 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat index 4a50414d0..f651f654a 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat @@ -1,18 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!114 &-7388297978476609726 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -21,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: WrapPeg - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -30,18 +17,12 @@ Material: m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: {} + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -78,39 +59,12 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - _GlossMapScale: 1 - _Glossiness: 0.8 - _GlossyReflections: 1 @@ -118,21 +72,13 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - _UVSec: 0 - - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 0.3568441, g: 0.9339623, b: 0.38412383, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} m_BuildTextureStacks: [] m_AllowLocking: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab index 74861d387..beb9883c9 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab @@ -25,12 +25,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 116810} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &3330700 MeshFilter: @@ -57,6 +58,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -78,6 +84,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab index 222d2e181..eb5501c88 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab @@ -25,12 +25,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 116810} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!33 &3330700 MeshFilter: @@ -57,6 +58,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -78,6 +84,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj new file mode 100644 index 000000000..610580231 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj @@ -0,0 +1,11018 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 14.08.2013 08:29:42 + +mtllib Shark.mtl + +# +# object great_white_shark +# + +v -0.788411 0.469182 -1.440535 +v 0.000000 0.623859 -3.313810 +v 0.000000 -0.034299 3.374330 +v 0.000000 -0.081471 2.547170 +v 0.000000 -0.063084 1.550987 +v 0.000000 -0.017118 0.830714 +v 0.000000 0.108771 -0.306628 +v 0.000000 0.396600 -2.259508 +v -0.364643 0.257481 -1.408966 +v 0.000000 0.230286 -1.381465 +v -0.544076 0.183225 -0.218446 +v -0.735302 0.134406 4.623686 +v -0.414110 0.043194 4.052600 +v -0.747287 0.139504 4.972197 +v -0.404189 0.103425 4.687736 +v -0.402782 0.090898 5.051456 +v -0.412100 0.088168 5.375933 +v 0.000000 1.022311 7.616058 +v -0.556226 1.107240 7.438728 +v -0.418169 1.099366 7.397717 +v -0.286445 1.068475 7.528789 +v -0.200882 1.005523 7.491678 +v -0.154214 1.035241 7.595179 +v -0.624665 1.045620 7.475090 +v -0.191222 0.368383 7.402486 +v -0.353348 0.425440 7.343808 +v -0.502583 0.581995 7.493086 +v -0.483014 0.727825 7.632405 +v -0.546659 0.957004 7.598269 +v -0.737711 1.087773 7.336395 +v -0.707222 0.942385 7.480309 +v -0.333362 0.701560 7.709418 +v -0.446846 0.867865 7.695375 +v -0.352898 0.545944 7.566257 +v -0.186938 0.511459 7.622266 +v -0.309029 0.838555 7.771639 +v -0.176666 0.660913 7.769929 +v -0.852437 0.877975 7.242527 +v -0.809891 0.994402 7.320856 +v -0.621224 0.768148 7.532959 +v -0.513143 0.449863 7.281170 +v -0.654713 0.505378 7.182827 +v -0.799028 0.563536 7.062317 +v -1.088825 0.706516 6.780196 +v -0.906284 0.744328 7.117725 +v -0.944777 0.634093 6.919909 +v -1.037318 0.815014 6.965506 +v -0.974609 0.929158 7.092916 +v -0.764309 0.689413 7.259150 +v -0.743522 0.817339 7.399426 +v -0.636788 0.634198 7.391329 +v -1.129229 0.901795 6.814305 +v -1.057061 0.570982 6.645980 +v -0.391109 0.237226 6.724459 +v -0.364754 0.314584 7.053168 +v -0.704672 0.387481 6.907848 +v -0.872015 0.453121 6.788566 +v -0.952931 0.367417 6.476990 +v -1.114394 0.510601 6.321710 +v -1.187012 0.402556 5.719851 +v -1.161938 0.378760 5.431072 +v -1.350176 0.590287 5.316800 +v -0.956741 0.219469 5.228363 +v -1.131980 0.361318 5.145022 +v -1.375073 0.558442 5.038369 +v -0.768929 0.154534 5.287313 +v -0.988043 0.300676 6.149660 +v -1.136354 0.461563 6.013940 +v -0.757535 0.304333 6.585647 +v -0.417476 0.168907 6.376730 +v -0.991814 0.230911 5.525332 +v -0.798575 0.165532 5.592230 +v -1.019765 0.246109 5.831659 +v -0.801251 0.226954 6.246830 +v -0.816815 0.177946 5.910890 +v -0.433403 0.097885 6.029599 +v -0.429011 0.075928 5.694320 +v 0.000000 3.827382 -5.507077 +v -0.144524 3.506025 -7.491770 +v -0.201791 3.578382 -6.814765 +v 0.000000 3.647791 -6.819415 +v -0.276314 3.645885 -6.171391 +v 0.000000 3.737124 -6.176731 +v 0.000000 1.747917 -7.716083 +v 0.000000 3.521364 -8.029909 +v 0.000000 4.218249 -3.387337 +v -0.539111 1.525422 -6.898022 +v -0.521816 1.454388 -7.379246 +v -0.510107 1.427016 -7.335085 +v -0.550610 1.636725 7.701257 +v -0.184183 1.470114 7.965120 +v -0.356142 1.480919 7.919915 +v -0.271136 1.575414 7.905256 +v -0.501439 1.483811 7.832011 +v -0.555953 1.557243 7.735547 +v -0.724057 1.452509 7.561075 +v -0.980422 1.417958 7.084308 +v -0.908534 1.447106 7.257532 +v -0.939935 1.419018 7.282726 +v -0.822492 1.446200 7.407862 +v -0.850670 1.419285 7.434948 +v -0.621158 1.471109 7.707720 +v -0.746773 1.423541 7.592715 +v -0.635186 1.442246 7.745333 +v -0.189242 1.413585 8.025587 +v -0.878852 1.403629 7.462059 +v -0.803563 1.388582 7.674817 +v -0.769487 1.406245 7.624363 +v -0.918289 1.385893 7.504447 +v -1.015227 1.382398 7.345387 +v -0.364442 1.431606 7.972756 +v -0.511598 1.442937 7.876547 +v -0.649219 1.425013 7.782948 +v -0.837635 1.408706 7.725255 +v -0.957725 1.405943 7.546875 +v -1.059111 1.400230 7.382830 +v -1.275143 1.454124 7.240187 +v -1.152580 1.355795 7.198538 +v -0.971344 1.402285 7.307949 +v -1.041840 1.358458 7.135857 +v -1.151396 1.271503 6.999184 +v -0.672117 1.404860 7.841801 +v -1.056155 1.484394 7.651218 +v -1.163909 1.469577 7.469476 +v -1.326932 1.620414 7.238987 +v -1.224995 1.634760 7.523807 +v -1.250408 1.787088 7.546576 +v -0.383821 1.376660 8.110682 +v -0.537700 1.393838 7.991468 +v -0.695014 1.422606 7.900669 +v -0.553632 1.412414 8.061825 +v -0.923319 1.481865 7.854587 +v -1.127282 1.641951 7.738727 +v -1.342574 2.172348 7.480217 +v -1.294769 2.532102 7.506557 +v -1.352066 2.338263 7.427687 +v -1.257386 1.939413 7.569346 +v -1.147958 1.787607 7.788406 +v -0.815891 1.631877 8.227547 +v -0.999347 1.628508 7.993338 +v -0.751804 1.495320 8.051482 +v -0.394889 1.398048 8.195772 +v -0.200110 1.357512 8.185737 +v 0.000000 1.349277 8.212379 +v -1.214207 2.188770 7.717457 +v -1.069025 1.938126 8.114807 +v -1.031270 1.766277 8.069627 +v -1.162103 1.946081 7.809398 +v -1.182947 2.233161 7.851377 +v -1.126709 2.097102 7.969667 +v -1.106549 2.226930 8.054207 +v -1.163681 2.397018 7.859357 +v -1.171106 2.320122 7.879097 +v -1.195835 2.586792 7.648397 +v -1.113602 2.548758 7.921816 +v -1.079027 2.416320 8.074515 +v -0.987455 2.446020 8.310556 +v -0.906179 2.177211 8.611516 +v -0.722897 2.153667 8.926217 +v -0.684620 1.892397 8.714986 +v -0.402494 2.128944 9.369587 +v -0.526007 2.129730 9.235456 +v -0.502418 2.300541 9.309047 +v -0.497417 1.972806 9.076187 +v -1.079963 2.751930 7.629907 +v -0.872609 2.624709 8.328406 +v -0.982538 2.695557 7.985207 +v -0.820370 2.897052 7.620287 +v -1.144595 2.758947 7.307598 +v -1.181666 2.724576 6.953297 +v -0.926009 2.982201 6.948767 +v -0.974306 3.031329 6.566297 +v -1.290257 2.689050 6.502546 +v -1.061330 3.240360 5.690906 +v -1.015304 3.131259 6.143333 +v -1.250426 2.812626 6.026449 +v -0.637892 3.182538 6.960979 +v -0.604655 3.123378 7.283537 +v -0.876698 2.945331 7.290977 +v -0.562742 3.045708 7.599047 +v -0.752195 2.827005 7.953977 +v -0.679889 2.762688 8.306867 +v -0.704027 3.366156 6.209093 +v 0.000000 3.326490 6.964999 +v 0.000000 3.400518 6.638300 +v -0.343268 3.480714 6.239543 +v 0.000000 3.501936 6.245602 +v -0.359057 3.592857 5.786156 +v -0.365462 3.697041 5.302405 +v -0.726746 3.460701 5.750815 +v -1.091510 3.329769 5.224496 +v -1.413728 3.125040 4.688398 +v 0.000000 3.236250 7.251406 +v 0.000000 3.640266 5.799026 +v 0.000000 3.747516 5.311316 +v -0.387191 2.295267 9.450975 +v -0.369698 2.581524 9.226277 +v -0.443558 2.460720 9.299537 +v -0.219986 2.500278 9.467626 +v -0.200603 2.562858 9.384016 +v -0.190367 2.747181 8.935636 +v -0.213110 2.838990 8.622107 +v -0.236318 2.938071 8.263367 +v -0.259580 3.034395 7.903247 +v 0.000000 3.146109 7.555100 +v -0.280685 3.127605 7.570430 +v -0.307988 2.655072 9.137687 +v -0.179909 2.660967 9.193696 +v -0.414944 2.789853 8.633687 +v -0.357935 2.709567 8.935786 +v -0.518414 2.962215 7.929586 +v -0.297371 3.207993 7.261970 +v -0.669860 3.259230 6.612320 +v -0.309821 3.284826 6.962750 +v -0.324545 3.365628 6.630441 +v -0.762722 2.567478 8.686997 +v -0.848360 2.384847 8.663476 +v -0.694145 2.332398 9.001245 +v -0.495740 2.624094 8.973136 +v -0.468353 2.878398 8.283106 +v -0.598352 2.694258 8.660836 +v -0.618653 2.501331 9.014657 +v -0.434504 4.066239 -3.388447 +v -0.310169 3.726294 -5.490697 +v -0.368948 3.862812 -4.494491 +v -0.543848 3.423990 -6.154593 +v 0.000000 3.991557 -4.510510 +v -0.425912 3.368622 -6.807328 +v -0.743447 3.566691 5.277687 +v -1.108208 3.438648 4.744079 +v -1.121783 3.551319 4.258739 +v -1.388063 3.272769 3.742223 +v -1.148591 3.678432 3.771743 +v -0.367676 4.042284 3.781043 +v 0.000000 3.951561 4.276679 +v 0.000000 4.067183 3.775253 +v 0.000000 3.826035 4.798529 +v -0.360056 3.924354 4.277819 +v -0.362987 3.788385 4.795018 +v -0.734798 3.798906 4.270558 +v -0.762929 3.922338 3.782633 +v -0.741866 3.673716 4.779359 +v -0.205910 1.384992 8.285470 +v -0.581512 1.513149 8.234276 +v -0.406351 1.516749 8.401046 +v -0.211129 1.515789 8.524104 +v 0.000000 1.380918 8.318741 +v -0.424925 1.671654 8.636567 +v -0.651821 1.775328 8.572427 +v -0.619022 1.658256 8.429867 +v -0.858530 1.757508 8.339116 +v -0.894635 1.883136 8.450686 +v -1.025930 2.209278 8.254758 +v -0.217715 1.669653 8.798027 +v -0.460961 1.818483 8.879627 +v -0.235700 1.817823 9.070906 +v -0.267638 2.049735 9.387136 +v -0.256868 1.971312 9.289336 +v -0.278408 2.128155 9.464476 +v -0.239372 2.437698 9.519227 +v -0.341750 2.449209 9.428987 +v -0.426443 0.750844 5.336720 +v 0.000000 0.670561 5.340981 +v 0.000000 0.670558 6.809538 +v -1.747295 2.596497 4.576942 +v -1.788563 2.671095 4.152533 +v -1.817885 2.060883 4.474732 +v -1.808951 1.664856 4.738643 +v -1.742348 1.295748 4.979033 +v -1.660190 1.000224 4.950203 +v -1.597694 1.006326 5.232381 +v -1.108631 0.344742 4.848625 +v -1.024067 0.308106 4.545835 +v -1.747019 1.619814 5.055710 +v -1.695059 1.945572 5.171840 +v -1.784789 2.001459 4.837373 +v -1.546445 2.435583 5.388470 +v -1.816055 1.717494 4.421183 +v -1.769969 1.330092 4.667004 +v -1.541045 0.746980 4.673993 +v -1.522184 0.755982 4.976873 +v -1.352621 0.567264 4.748600 +v -1.497356 0.769308 4.385693 +v -1.315610 0.590397 4.451360 +v -1.677155 1.018413 4.641562 +v -1.231535 2.339838 7.611917 +v -1.238822 2.340930 7.586387 +v -1.234151 2.261535 7.600157 +v -0.351596 4.421394 1.775378 +v -0.723395 4.261200 1.750265 +v -1.056803 4.037607 -0.456997 +v -1.086167 4.049907 0.830774 +v -1.086968 3.982332 1.717826 +v -0.758945 4.176072 2.597807 +v -0.364199 4.314102 2.597855 +v -0.773942 4.052736 3.295433 +v -0.377027 4.193604 3.296573 +v -1.134182 3.892794 2.592224 +v -1.006607 3.948726 -1.472503 +v -1.204535 3.558417 -1.499254 +v -1.269518 3.666516 -0.478873 +v -1.603313 1.950525 -1.506739 +v -1.397201 2.921571 -1.499641 +v -1.575572 2.320596 -1.504129 +v -1.482236 2.974503 -0.463777 +v -1.001465 3.368694 -3.376809 +v -0.868190 3.282744 -4.431761 +v -0.842237 3.690423 -3.389737 +v -0.737687 3.582855 -4.467461 +v -0.726800 3.215547 -5.421790 +v -0.618965 3.488625 -5.460131 +v -0.526898 3.092799 -6.785158 +v -0.625865 3.163263 -6.120244 +v -0.588290 2.721057 -7.465162 +v -0.451304 2.195697 -7.522432 +v -0.379298 2.255772 -8.142409 +v -0.528383 2.712663 -8.089670 +v -0.785462 2.371980 -6.032110 +v -0.765218 2.771445 -6.080977 +v -0.644759 2.331846 -6.762777 +v -0.661409 2.741493 -6.772437 +v -0.240677 1.834500 -7.665503 +v -0.538457 1.910943 -6.572131 +v -0.474638 3.033159 -7.460692 +v -0.336911 3.311973 -7.475662 +v -0.319961 3.220986 -8.090930 +v -0.461717 2.988378 -8.080609 +v -0.161294 3.411099 -8.111796 +v 0.000000 3.575256 -8.209820 +v -0.981431 0.858444 -2.317090 +v -1.230479 1.035141 -1.464463 +v -1.130594 1.087989 -2.321509 +v -1.204037 1.366044 -2.312809 +v -1.297322 1.662159 -2.312395 +v -1.411364 1.967781 -2.319409 +v -1.123112 3.474102 -2.287129 +v -1.293296 2.873250 -2.291785 +v -1.146752 2.827110 -3.365470 +v -0.806600 1.027764 -3.483463 +v -0.693707 0.555483 -2.302843 +v -1.036868 1.625970 -3.434320 +v -1.423079 2.306682 -2.309623 +v -0.302078 0.401748 -2.273668 +v -1.100423 0.780384 -1.457728 +v -1.210385 0.743811 -0.338872 +v -1.504763 1.268439 -0.387724 +v -1.331147 1.321893 -1.472773 +v -1.668470 1.574979 -0.415135 +v -1.719488 1.951716 -0.429610 +v -1.498808 1.613946 -1.493956 +v 0.000000 3.917669 -8.607714 +v -0.000004 1.353765 -6.302464 +v -0.579155 1.335906 -7.058488 +v -0.444836 1.505019 -7.274275 +v -0.448526 1.545714 -7.306075 +v 0.000000 4.211949 3.287727 +v -0.000002 4.348749 2.593961 +v -0.607919 1.410090 -7.057557 +v -0.476447 1.556169 -7.267494 +v -0.443726 1.548915 -7.563982 +v -0.536579 1.481511 -7.340335 +v -0.344150 1.028698 7.652440 +v -0.278132 0.941932 7.752140 +v -1.197938 2.445849 7.753337 +v -1.190282 2.470041 7.758137 +v -1.230794 2.422050 7.627457 +v -1.229495 2.404689 7.641677 +v -1.186463 2.255070 7.829026 +v -1.197764 2.193894 7.792367 +v -1.199003 2.215476 7.782496 +v -1.244093 2.079903 7.580927 +v -1.213172 2.214537 7.720547 +v -1.179620 2.090784 7.834637 +v -1.213682 2.443854 7.694027 +v -1.228418 2.207055 7.653707 +v -1.229606 2.277243 7.618937 +v -1.176980 2.443917 7.813666 +v -1.210502 2.464629 7.689317 +v -1.179326 2.324856 7.846637 +v -1.185614 2.424846 7.801456 +v -1.225628 2.227791 7.664627 +v -1.173287 2.383071 7.839737 +v -0.879101 1.345452 -4.904773 +v -0.866900 1.397133 -4.324602 +v -0.469301 0.913491 -4.199384 +v -0.555299 0.762156 -3.412180 +v -0.197393 0.780639 -4.066962 +v -0.911753 1.258362 -3.471160 +v -1.158056 2.026071 -3.404260 +v -1.214732 2.315916 -3.385330 +v -1.037018 2.360721 -4.396334 +v -0.376640 2.938242 -10.725307 +v -0.443264 2.958135 -9.231702 +v -0.442958 2.927100 -10.048237 +v -0.199883 1.940196 -8.212884 +v -0.501992 2.754759 -9.240403 +v -0.362801 2.325438 -8.666195 +v -0.496274 2.712045 -8.625722 +v -0.249452 3.193700 -10.648869 +v -0.151421 2.166849 -10.119249 +v 0.000000 2.125134 -10.083279 +v 0.000000 2.101734 -10.417657 +v -0.145196 2.020104 -9.233773 +v 0.000000 2.078499 -9.698350 +v -0.324107 2.389272 -10.000570 +v -0.186728 2.172732 -9.791831 +v -0.255920 2.296332 -10.639358 +v -0.117767 2.143266 -10.430947 +v 0.000000 1.972479 -10.678987 +v 0.000000 1.793320 -9.027020 +v -0.202718 2.047821 -8.723288 +v -0.366518 2.403477 -9.243193 +v -0.256685 2.157168 -9.237164 +v -0.498263 2.717199 -10.036839 +v -0.092138 2.026344 -10.700377 +v -0.079661 1.731285 -11.068179 +v -0.411182 2.672648 -10.716697 +v -0.155177 1.678320 -11.766847 +v -0.215048 2.032389 -11.217010 +v 0.000000 2.262788 -12.567460 +v -0.103781 2.345439 -12.363101 +v -0.072596 0.558383 -12.280480 +v 0.000000 0.170486 -12.874330 +v 0.000000 0.426602 -12.284471 +v -0.087872 0.866687 -11.996022 +v -0.105995 1.718324 -12.407260 +v 0.000000 1.982046 -12.669606 +v -0.108212 1.091213 -12.451451 +v 0.000000 0.885095 -12.922123 +v 0.000000 4.432842 -1.653850 +v 0.000000 4.356717 -2.389648 +v -0.931436 3.836859 -2.264095 +v -0.484178 4.206684 -2.466241 +v -0.000003 4.636251 1.156184 +v -0.836591 4.310844 -0.403726 +v -0.530879 4.255392 -1.860175 +v -0.337133 4.550865 -1.286647 +v -0.634454 4.502475 -0.347335 +v -0.528098 4.509135 0.858371 +v -0.353633 4.656351 0.708917 +v -0.787820 4.324920 0.900224 +v -0.496475 4.426287 -1.321468 +v -0.738512 4.226496 -1.407832 +v -0.377354 4.807536 -0.346450 +v -0.255803 4.800555 0.639917 +v -0.196952 4.972194 0.550262 +v -0.523043 4.650603 -0.322537 +v 0.000000 4.974951 0.753857 +v -0.291002 5.061264 -0.420514 +v -0.230531 5.609394 -0.491101 +v -0.126830 6.335931 -0.051499 +v -0.073589 7.636790 -1.126523 +v -0.150587 5.710160 0.246983 +v 0.000000 5.181471 0.657083 +v -0.173396 5.206644 0.449081 +v -0.073757 6.139584 -1.227016 +v -0.104306 7.402701 -0.942577 +v -0.100049 6.961100 -0.420859 +v -0.044198 7.845045 -1.263627 +v -0.000003 4.514892 -1.764892 +v -0.160898 4.603905 -1.427278 +v -0.144674 4.705746 -1.645918 +v -0.078344 5.982624 -1.218763 +v 0.000000 6.153354 -1.323727 +v 0.000000 6.634104 -1.337254 +v -0.094355 5.470734 -1.291432 +v -0.121826 4.954044 -1.524457 +v 0.000000 4.878065 -1.721475 +v 0.000000 4.546959 -2.017246 +v 0.000000 4.496469 -1.616428 +v 0.000000 6.353507 0.053513 +v 0.000000 4.815771 0.902948 +v 0.000000 0.746993 -11.950120 +v 0.000000 1.192757 -12.818291 +v 0.000000 2.105220 -12.461259 +v 0.000000 2.662333 -12.501657 +v 0.000000 2.937909 -12.478191 +v 0.000000 1.654874 -12.775063 +v 0.000000 3.248692 -12.607402 +v 0.000000 5.487003 -13.978440 +v 0.000000 5.637066 -14.045316 +v 0.000000 5.680266 -14.353501 +v 0.000000 5.875746 -14.266533 +v 0.000000 6.246162 -14.172215 +v 0.000000 5.787390 -13.181346 +v 0.000000 4.814877 -11.880760 +v 0.000000 6.290856 -14.149002 +v -0.141725 3.485646 -10.652797 +v -0.138620 3.379190 -10.423867 +v -0.274442 3.122721 -10.036116 +v -0.448925 2.953818 -8.612252 +v -0.319937 3.153609 -8.605712 +v -0.299204 3.108810 -9.218320 +v -0.193232 3.336672 -8.598571 +v -0.174758 3.297102 -8.879228 +v -0.147431 3.263556 -9.172451 +v -0.129584 3.296360 -10.005277 +v -0.136655 3.246794 -9.591721 +v -0.110540 3.462891 -8.593322 +v 0.000000 3.989776 -8.759383 +v -0.085796 3.417213 -8.836718 +v 0.000000 3.431229 -8.915168 +v 0.000000 3.361595 -9.068591 +v -0.000005 3.328901 -9.994657 +v 0.000000 3.429149 -10.397138 +v 0.000000 3.539712 -10.614217 +v 0.000000 6.092526 -13.699922 +v 0.000000 5.229016 -12.339537 +v -0.000006 4.377036 -11.442758 +v -0.301643 2.754789 -11.360047 +v -0.204701 2.695653 -11.894410 +v -0.211289 3.368010 -11.182538 +v -0.126893 3.755327 -10.965844 +v -0.116603 4.225614 -11.509084 +v -0.253166 3.597077 -11.795255 +v 0.000000 5.374022 -13.843084 +v 0.000000 5.197172 -13.771539 +v -0.110699 3.357044 -12.390697 +v -0.128594 3.848981 -12.513577 +v -0.000006 3.592920 -12.787930 +v -0.162260 4.510911 -12.879640 +v -0.112859 4.621455 -11.971480 +v -0.123785 5.122674 -12.522758 +v -0.102227 5.805183 -13.450114 +v -0.093986 5.309763 -13.637678 +v -0.084956 5.571456 -13.896873 +v -0.075926 5.833146 -14.156075 +v 0.000000 6.014286 -14.302771 +v 0.000000 6.246516 -14.488441 +v -0.073414 6.154620 -14.312218 +v -0.068423 6.190806 -14.020712 +v 0.000000 6.344481 -14.448197 +v 0.000000 6.981207 -0.353604 +v 0.000000 6.061249 -1.275164 +v -0.000004 5.974854 -1.352005 +v 0.000000 5.471133 -1.390128 +v 0.000000 6.704060 -1.302871 +v 0.000000 7.881681 -1.207760 +v 0.000000 7.285491 -1.392268 +v 0.000000 6.794930 -1.358278 +v -0.036473 7.776766 -1.378334 +v 0.000000 7.660941 -1.449339 +v -0.039914 7.270251 -1.342484 +v -0.057485 6.693021 -1.263106 +v -0.112214 6.753111 -0.825910 +v -0.093944 7.300551 -1.069976 +v -0.061349 7.570263 -1.215099 +v -0.053876 7.509920 -1.293559 +v 0.000000 4.502811 -1.990149 +v 0.000000 3.279280 -9.578547 +v 0.000000 4.299623 -13.140718 +v -1.518407 1.834275 6.360049 +v -1.097210 1.338226 7.167204 +v -1.215083 1.289559 7.014497 +v -1.354931 1.393737 6.996946 +v -1.411241 1.540806 6.934396 +v -1.373210 1.761693 7.229267 +v -1.470905 1.663032 6.876077 +v -1.387670 1.944634 7.205862 +v -1.387421 2.217396 7.182797 +v -1.490699 1.785258 6.817786 +v -1.489217 2.066433 6.672647 +v -1.373819 2.490672 7.166057 +v -1.460774 2.284230 6.548747 +v -1.011128 1.382451 7.110107 +v -1.087707 1.291362 6.983944 +v -1.117092 1.256835 6.880019 +v -1.059249 1.325840 6.844146 +v -1.015733 1.372476 6.709156 +v -0.851606 1.595154 7.107407 +v -0.898040 1.513902 7.139175 +v -0.742319 1.529484 7.460567 +v -1.056959 1.324728 6.958547 +v -1.026216 1.369773 6.933131 +v -0.999660 1.469268 6.815123 +v -0.272111 1.674930 7.868028 +v -0.711368 1.609389 7.436687 +v -0.412445 2.112591 5.349350 +v -0.412442 2.112591 7.154447 +v -0.765350 2.005449 5.331259 +v -0.963422 1.682241 5.311613 +v -0.963422 1.682241 6.087290 +v -0.965124 1.541031 6.771355 +v -0.765347 2.005449 6.643341 +v -3.123149 -0.620421 2.442191 +v -2.264591 1.020273 2.604362 +v -1.969388 1.204242 1.832933 +v -2.107220 1.085553 3.333797 +v -2.405988 0.521607 3.079754 +v -2.746841 -0.345042 2.773073 +v -2.872814 -0.223458 2.683175 +v -3.020550 -0.283113 2.271881 +v -3.399539 -0.975264 2.150519 +v -3.505139 -0.989130 1.733307 +v -1.850048 1.137786 1.362035 +v -2.118842 0.996459 1.785515 +v -2.230508 0.841911 3.239237 +v -2.645082 0.165009 2.904071 +v -2.554571 0.405798 1.706570 +v -3.889230 -1.567923 1.281458 +v -3.819989 -1.405683 0.847520 +v -2.686013 0.298284 2.564276 +v -2.468390 0.671649 2.699714 +v -3.794130 -1.389573 0.685667 +v -3.468899 -1.017420 0.749330 +v -3.201479 -0.661389 0.974183 +v -2.919338 -0.112050 1.511024 +v -2.358732 0.381360 1.128905 +v -2.312772 0.717237 1.761527 +v -1.960790 0.995499 1.249865 +v -2.852093 -0.234153 0.991595 +v -3.051839 -0.501525 0.902843 +v -4.187521 -1.927890 0.515990 +v -4.252350 -2.003429 0.610364 +v -4.086030 -1.799280 0.539087 +v -4.086240 -1.783382 0.656018 +v -3.420001 -0.813168 1.165130 +v -3.640260 -1.341453 1.789262 +v -3.888840 -1.679403 1.427447 +v -4.301790 -2.106300 0.758531 +v -4.320294 -2.114246 0.595010 +v -4.266840 -2.039190 0.523544 +v -4.137540 -1.898160 0.962066 +v -4.269990 -2.042520 0.760736 +v -4.165111 -1.983180 1.051874 +v -4.050271 -1.827840 0.525740 +v -4.276920 -2.078250 0.493781 +v -4.240951 -2.059650 0.515363 +v -4.292340 -2.125350 0.538499 +v -4.331640 -2.150850 0.521714 +v -4.362630 -2.199330 0.578303 +v -4.308361 -2.145150 0.588410 +v -4.275240 -2.130300 0.753287 +v -4.123470 -2.020200 1.043069 +v -4.221210 -2.076780 0.694529 +v -4.023631 -1.833960 0.632639 +v -4.061970 -1.962540 0.944636 +v -3.743400 -1.569453 1.029653 +v -3.742769 -1.429323 0.663605 +v -4.301910 -2.150340 0.671981 +v -2.043056 0.602232 3.425927 +v -2.258036 0.370140 3.203927 +v -2.506124 0.038721 3.010214 +v -2.571374 -0.390084 2.567996 +v -2.881896 -0.750588 2.342972 +v -2.989106 -0.738087 2.496668 +v -3.270959 -1.107684 2.197226 +v -3.815399 -1.740183 1.411233 +v -3.507779 -1.461003 1.752681 +v -3.577529 -1.449453 1.843527 +v -3.862500 -1.742493 1.471377 +v -1.789499 0.492576 3.077303 +v -2.021438 0.293649 2.923781 +v -2.269356 -0.020310 2.759306 +v -2.688383 -0.335601 1.713416 +v -3.188609 -1.114308 2.071943 +v -3.437219 -1.059630 0.800156 +v -3.282719 -0.871644 0.887531 +v -3.128219 -0.683658 0.974903 +v -3.288121 -1.071435 1.344254 +v -2.980469 -0.503025 1.020530 +v -2.725658 -0.176301 1.201262 +v -2.283752 0.336366 1.190807 +v -2.016848 0.639942 1.180196 +v -2.162834 0.340101 1.936583 +v -1.783943 0.885870 1.164173 +v -1.826489 0.666888 2.102021 +v -1.667423 0.575112 3.222288 +v -0.960230 1.129269 -5.263156 +v -0.966443 0.936024 -5.301796 +v -0.586721 1.543770 -5.707937 +v -0.573191 1.481184 -6.379386 +v -0.622403 1.494018 -6.431498 +v -0.787826 1.223589 -6.341531 +v -0.865634 1.277337 -5.668992 +v -0.685799 1.453947 -6.034034 +v -0.705242 1.307037 -6.636847 +v -0.810665 1.147398 -6.417789 +v -0.995045 1.007676 -6.005297 +v -0.999077 0.911910 -6.064396 +v -1.186713 0.659090 -5.687936 +v -0.750377 1.125795 -6.375820 +v -0.928778 0.889239 -6.048467 +v -0.678476 1.161390 -5.599633 +v -0.820115 0.957321 -5.293453 +v -0.578963 1.277547 -6.066640 +v -0.556718 1.371750 -6.452497 +v -0.507761 1.510002 -6.872667 +v -0.495065 1.449207 -6.915778 +v -0.718073 1.244490 -6.686077 +v -0.675095 1.219143 -6.663457 +v -0.616118 1.352640 -7.081982 +v -0.416342 1.383552 -5.789503 +v -0.452081 1.560486 -6.047740 +v -1.008416 2.808030 -4.398251 +v -0.866336 2.792796 -5.372530 +v -0.257687 1.645710 -7.004604 +v -0.241226 1.373790 -6.264847 +v -0.218069 1.217745 -5.854329 +v -0.567731 1.212900 -5.411834 +v -0.631370 1.086015 -4.898322 +v -0.396458 1.139865 -5.260213 +v 0.000000 1.302540 -5.848573 +v -0.425183 0.971436 -4.654093 +v -0.172790 1.045695 -5.183322 +v -0.237995 0.631563 -3.335020 +v 0.000000 0.788476 -4.042661 +v -0.430640 -0.027180 2.549786 +v -0.773102 0.073425 3.357170 +v -0.747320 0.110787 4.019179 +v -0.425042 -0.000501 3.366440 +v -0.423176 -0.004236 1.562138 +v -0.788873 0.059226 2.548139 +v -1.304420 0.560907 3.959061 +v -1.308824 0.491214 3.372017 +v -1.405442 0.598095 3.375677 +v -1.381070 0.634992 2.528726 +v -1.501091 0.655275 3.364607 +v -1.278149 0.632409 1.461680 +v -1.303058 0.502350 2.539541 +v -1.064738 0.242619 3.359240 +v -1.081523 0.228915 2.545418 +v -0.777563 0.078411 1.548149 +v -1.078139 0.411525 0.771347 +v -0.758216 0.132228 0.941867 +v -0.949151 0.427518 -0.310606 +v -1.260476 0.715602 0.833048 +v -1.375166 0.932265 0.949484 +v -1.330739 1.007115 -0.357943 +v -1.064567 0.274593 1.512227 +v -1.365467 0.829185 1.432706 +v -1.468076 0.974406 1.417931 +v -1.583663 1.224930 0.758084 +v -1.685375 2.340369 -0.444295 +v -1.328714 3.653046 0.790955 +v -1.586138 2.968503 0.781358 +v -1.629980 2.931231 1.681139 +v -1.359305 3.578568 1.697666 +v -1.767221 2.341368 0.766394 +v -1.793780 1.959261 0.752549 +v -1.790072 2.346420 1.642211 +v -1.749122 1.582761 0.783929 +v -1.816748 2.018694 1.612595 +v -1.731917 1.429797 1.406207 +v -1.575563 1.222809 1.062590 +v -1.663601 2.862522 2.582717 +v -1.890200 2.046729 2.581160 +v -1.163507 3.788115 3.291173 +v -1.377437 3.473604 2.586371 +v -1.828625 2.249058 3.285530 +v -1.832732 2.327961 2.577545 +v -1.710845 2.789400 3.272930 +v -1.868078 1.545960 1.838060 +v -1.815893 1.720821 1.598738 +v -1.955033 1.808913 2.586737 +v -1.897286 1.951347 3.305027 +v -1.857158 1.867578 3.738680 +v -1.820975 2.185446 3.720740 +v -1.853999 2.120766 4.106810 +v -1.740386 2.726049 3.720050 +v -1.404032 3.199014 4.213919 +v -1.403939 3.371979 3.277070 +v -1.764635 1.265703 1.438313 +v -1.664654 1.142403 1.264406 +v -1.784705 1.387101 4.366463 +v -1.842455 1.786473 4.098889 +v -1.851707 1.572138 3.741350 +v -1.730696 1.218675 4.008260 +v -1.918853 1.687287 3.325937 +v -1.833353 1.472112 4.068230 +v -1.552577 0.759345 2.449883 +v -1.590239 0.654744 3.308987 +v -1.459784 0.722658 2.503244 +v -1.554950 0.739275 3.759800 +v -1.684868 0.771348 3.694190 +v -1.662851 1.052307 4.282069 +v -1.713701 1.007112 3.905900 +v -1.600988 0.895854 4.020050 +v -1.859204 1.093770 3.668690 +v -2.055341 1.253532 3.344537 +v -1.830998 1.326228 3.727130 +v -2.000865 1.466409 3.349817 +v -1.992764 1.423911 2.593226 +v -2.011919 1.605765 2.592380 +v -1.876643 1.369989 1.853147 +v -2.096177 1.258239 2.581310 +v -1.909028 0.794721 3.572717 +v -1.678604 0.962046 1.308467 +v -1.746029 1.071669 1.149857 +v -1.574522 1.001313 1.415906 +v -1.672337 0.741063 2.356685 +v -1.453904 2.338293 5.750959 +v -1.327481 2.943366 5.597393 +v -1.676444 2.518596 4.996492 +v -1.389485 3.042453 5.151325 +v -0.785555 1.504506 -5.393353 +v -0.822398 1.646877 -5.314512 +v -0.925169 2.013060 -5.312743 +v -0.756962 2.002734 -5.931311 +v -0.643919 1.663434 -5.767154 +v -0.923027 2.383908 -5.335334 +v -1.830110 0.988317 1.006133 +v -2.089100 0.694719 1.108394 +v -2.550195 0.018885 1.138058 +v -2.650146 0.027240 1.077374 +v -2.794952 -0.141840 1.111931 +v -2.832726 -0.322395 1.066157 +v -4.330979 -2.125949 0.594299 +v -4.188666 -1.964934 0.485663 +v -4.156621 -1.952369 0.505541 +v -4.078771 -1.824630 0.491603 +v -3.770459 -1.403163 0.617771 +v -3.289470 -0.788454 0.829556 +v -1.032233 0.289026 3.989090 +v -1.448786 0.697206 3.941420 +v -1.056344 1.006468 6.947868 +v -1.355195 1.020312 6.341837 +v -1.309658 0.871464 6.043759 +v -1.257899 0.911613 6.402407 +v -1.139372 1.114092 6.716714 +v -1.181330 0.991924 6.683746 +v -1.107101 1.071007 6.816199 +v -1.041563 1.173102 6.803680 +v -1.014644 1.147099 6.905239 +v -0.966956 1.104532 7.028775 +v -0.941051 1.183395 6.938569 +v -0.904907 1.151766 7.055986 +v -0.853526 1.171917 7.043090 +v -0.603983 1.132411 7.157959 +v -0.782741 1.171746 6.911570 +v -1.300721 1.125141 6.636235 +v -0.383321 1.033771 7.342098 +v -0.635036 1.084567 6.977870 +v -1.015157 1.235376 6.785358 +v -0.930452 1.256781 6.709229 +v -0.961718 1.420638 6.642830 +v -0.992822 1.309986 6.687014 +v -0.885624 1.217190 6.765932 +v -0.733691 0.972588 5.316173 +v -0.426440 0.750844 6.688579 +v 0.000000 0.979894 7.537849 +v -0.733691 0.972588 6.216080 +v -0.913013 1.292895 5.308463 +v -0.913010 1.292895 5.997829 +v 0.000000 1.530363 4.548833 +v 0.000000 2.189652 5.903419 +v -0.977465 1.219512 6.820903 +v -1.087643 1.189302 6.756611 +v -1.205030 1.195125 6.831128 +v -1.320131 1.194480 6.746543 +v -1.439729 1.422741 6.753317 +v -1.483520 1.525296 6.661521 +v -1.507064 1.627854 6.569756 +v -1.233659 1.231206 6.897647 +v -1.373051 1.297614 6.850214 +v -1.499102 1.480170 6.445370 +v -1.436729 1.310796 6.667574 +v -1.493612 1.310844 6.366139 +v -1.448540 1.149045 6.332810 +v -1.563155 1.735368 5.993540 +v -1.544255 1.637781 6.191420 +v -1.590554 1.486725 5.854159 +v -1.555580 1.421796 6.071540 +v -1.518872 1.203369 6.011809 +v -1.685786 1.582713 5.352380 +v -1.616819 1.542645 5.616738 +v -1.462880 2.146295 6.001260 +v -1.496534 1.968105 6.182719 +v -1.559021 1.818693 5.757800 +v -1.599794 1.269099 5.529920 +v -1.554863 1.240575 5.775379 +v -1.507163 1.030659 5.497880 +v -1.424015 1.019949 6.003920 +v -1.455077 1.031064 5.753928 +v -1.628012 1.888248 5.486629 +v -1.206635 0.778522 6.518927 +v -1.253288 0.706345 6.132710 +v -1.317536 0.629404 5.589020 +v -1.257515 0.687271 5.856770 +v -1.332587 0.864427 5.782100 +v -1.401605 0.822217 5.525060 +v -1.475216 0.778356 5.256169 +v -1.674476 1.280304 5.264569 +v -0.392018 0.028131 0.895826 +v -0.913010 1.288047 6.617625 +v -0.226352 0.992911 7.713404 +v -0.782541 1.137691 7.151186 +v -0.832229 1.122886 7.188195 +v -0.000006 1.557180 -7.089445 +v -0.000005 3.553362 -7.504491 +v -0.268532 2.272831 9.543152 +v 0.000000 1.147224 -11.551182 +v 0.000000 1.656130 -11.028982 +v 0.000000 0.144829 -13.442556 +v -0.000011 7.621251 -0.858355 +v -0.000002 4.489125 1.784207 +v -0.000004 1.867887 -8.237753 +v 0.000000 7.913421 -1.504253 +v -0.000005 0.553715 -13.050191 +v -0.000006 3.837008 -10.916074 +v 0.000000 1.059918 -5.157254 +v -4.330979 -2.125949 0.594299 +v -4.320294 -2.114246 0.595010 +v -4.240951 -2.059650 0.515363 +v -4.188666 -1.964934 0.485663 +v -4.188666 -1.964934 0.485663 +v -4.156621 -1.952369 0.505541 +v -0.904907 1.151766 7.055986 +v -1.024784 1.269969 6.774074 +v -1.058811 1.242488 6.790955 +v -1.100289 1.242978 6.829710 +v -1.015157 1.235376 6.785358 +v -0.930452 1.256781 6.709229 +v -0.400425 0.976938 7.688704 +v -0.159956 0.809698 7.818166 +v -0.900350 1.080331 7.199248 +v 0.000000 3.803309 -8.451863 +v -0.387191 2.295267 9.450975 +v -0.661619 1.136829 7.306580 +v 0.000000 3.835392 -8.801773 +v 0.000000 1.591368 -9.223554 +v -0.083921 1.245576 -11.593570 +v -0.071318 0.369836 -12.971261 +v 0.000000 1.499709 -9.353113 +v -4.252350 -2.003429 0.610364 +v -4.292340 -2.125350 0.538499 +v -4.023631 -1.833960 0.632639 +v -0.995045 1.007676 -6.005297 +v -0.179474 0.876564 -4.518944 +v -4.188666 -1.964934 0.485663 +v -0.853526 1.171917 7.043090 +v -1.015157 1.235376 6.785358 +v -1.058811 1.276457 6.790954 +v -1.149968 1.186905 6.775416 +v -1.413314 1.195401 6.613931 +v -0.913010 1.288047 6.617625 +v 0.000000 5.727343 0.375541 +v -0.190790 6.107083 -0.611197 +v -0.131942 6.201291 0.012722 +v 0.000000 6.196429 0.134297 +v -0.176378 6.242195 -0.651696 +v 0.000000 0.890935 -4.487016 +v -0.183584 6.174639 -0.631446 +v -0.076051 6.061104 -1.222890 +v -0.129386 6.268611 -0.019389 +v 0.000000 6.274968 0.093905 +v -0.494044 4.579412 0.180791 +v -0.287153 4.889865 0.101906 +v -0.389423 4.725579 0.158690 +v -0.232199 5.133954 0.014283 +v -0.190559 5.659777 -0.122059 +v -0.106132 6.857105 -0.623385 +v -0.161366 6.154187 -0.299238 +v -0.151604 6.289063 -0.351598 +v -0.156485 6.221625 -0.325418 +v -0.341971 4.627254 -0.874908 +v -0.261014 4.756641 -0.996184 +v -0.084850 6.723066 -1.044508 +v -0.206414 5.007654 -0.972486 +v -0.162443 5.540064 -0.891267 +v -0.134567 6.044853 -0.914980 +v -0.125068 6.190889 -0.939356 +v -0.129817 6.117871 -0.927168 +v -0.072439 7.257837 -1.214364 +v -0.016736 7.686204 -1.041330 +v 0.000000 7.716813 -0.986566 +v -0.034011 7.494805 -1.374483 +v 0.000000 7.488658 -1.422513 +v -0.764140 1.127336 -4.275962 +v -0.080261 1.662603 -9.361574 +v -0.446095 2.955976 -8.921977 +v -0.499133 2.733402 -8.933063 +v -0.364660 2.364457 -8.954694 +v -0.229702 2.102494 -8.980226 +v -0.309571 3.131209 -8.912016 +v -1.121324 0.711048 -5.774669 +v -0.100057 1.353394 8.199059 +v -0.140344 3.136857 7.562765 +v -0.148687 3.222121 7.256688 +v -0.154912 3.305658 6.963875 +v -0.162274 3.383073 6.634371 +v -0.171635 3.491325 6.242572 +v -0.179530 3.616561 5.792591 +v -0.182732 3.722278 5.306861 +v -0.100301 2.559268 9.411632 +v -0.089954 2.661516 9.206971 +v -0.095183 2.750950 8.939371 +v -0.106555 2.844907 8.621837 +v -0.118159 2.948985 8.260487 +v -0.129790 3.045825 7.897576 +v -0.188516 4.202499 3.293558 +v -0.183841 4.054734 3.778147 +v -0.180031 3.937958 4.277248 +v -0.181495 3.807210 4.796773 +v -0.102956 1.382955 8.302106 +v -0.105564 1.517490 8.547131 +v -0.108856 1.668424 8.829556 +v -0.117848 1.817220 9.107386 +v -0.133817 2.051086 9.430861 +v -0.128432 1.971387 9.331757 +v -0.139202 2.130784 9.509506 +v -0.109991 2.495782 9.505816 +v -0.119684 2.432295 9.567991 +v -0.134264 2.289700 9.602544 +v -0.175801 4.455259 1.779792 +v -0.182102 4.331426 2.595908 +v -0.258335 2.521089 9.405805 +v -0.212522 -0.017400 3.370384 +v -0.207055 0.037062 4.065334 +v -0.202094 0.117184 4.710430 +v -0.201391 0.089486 5.078036 +v -0.206050 0.077254 5.401523 +v -0.195554 0.223231 6.757909 +v -0.182377 0.286351 7.090038 +v -0.208738 0.162694 6.407975 +v -0.214505 0.060091 5.721499 +v -0.216701 0.086153 6.059344 +v -0.215321 -0.054326 2.548478 +v -0.196010 0.005506 0.863270 +v -0.211589 -0.033660 1.556562 +v -0.151042 0.399174 -2.266588 +v -0.182324 0.243883 -1.395216 +v -0.272041 0.145998 -0.262537 +v -0.580715 0.076990 4.035890 +v -0.569746 0.118915 4.655710 +v -0.575035 0.115201 5.011827 +v -0.534713 0.351032 6.980509 +v -0.574322 0.270779 6.655052 +v -0.590515 0.121351 5.331623 +v -0.609364 0.197930 6.311780 +v -0.613793 0.120730 5.643274 +v -0.625109 0.137915 5.970244 +v -0.119002 0.627711 -3.324415 +v -0.599072 0.036462 3.361805 +v -0.575117 0.080179 0.918846 +v -0.600370 0.037087 1.555143 +v -0.609757 0.016023 2.548962 +v -0.516488 0.451174 7.278847 +v -0.512430 0.458782 7.295474 +v -0.576527 0.363331 -1.424751 +v -0.746614 0.305371 -0.264526 +v -0.927959 0.242123 4.910411 +v -0.879685 0.221256 4.584761 +v -0.396647 0.696859 -3.373600 +v -0.497893 0.478615 -2.288256 +v -0.333347 0.847065 -4.133173 +v -0.302329 0.924000 -4.586518 +v -0.346654 1.467138 -6.156294 +v -0.317206 1.300648 -5.821917 +v -0.284624 1.092780 -5.221767 +v -0.889777 0.199906 4.004135 +v -0.918920 0.158022 3.358205 +v -0.935198 0.144070 2.546778 +v -0.921065 0.176502 1.530188 +v -0.918178 0.271876 0.856607 +v -0.678326 3.535740 -4.963796 +v -0.339559 3.794553 -4.992594 +v 0.000000 3.909469 -5.008794 +v -0.797495 3.249145 -4.926776 +v -0.844649 1.522005 -4.819557 +v -0.937376 2.800413 -4.885390 +v -0.980023 2.372314 -4.865833 +v -0.958121 1.974417 -4.877053 +v -1.092240 1.808779 -3.420586 +v -0.991073 1.935774 -4.441362 +v -0.703759 2.023032 8.820601 +v -0.511712 2.051268 9.155821 +v -0.900407 2.030173 8.531101 +v -1.047478 2.073702 8.184782 +v -0.113149 1.739460 8.962193 +v -0.321811 1.971715 9.231791 +v -0.361470 2.050324 9.298208 +v -0.041024 7.816984 -1.310769 +v -0.019031 7.721359 -1.412301 +v -0.176821 4.646301 0.932550 +v -0.330065 4.572790 1.005317 +v -0.127906 4.808163 0.771432 +v -0.098480 4.973572 0.652059 +v -0.063421 6.344719 0.001007 +v -0.086702 5.194057 0.553082 +v -0.050030 6.971153 -0.387232 +v -0.022105 7.863363 -1.235694 +v -0.075298 5.718751 0.311262 +v -0.065976 6.198860 0.073509 +v -0.064699 6.271790 0.037258 +v -0.008374 7.701509 -1.013948 +v -0.090431 0.743531 -12.701984 +v -0.443111 2.942617 -9.639969 +v -0.500128 2.735979 -9.638621 +v -0.072605 2.049301 -9.466062 +v -0.221707 2.164950 -9.514498 +v -0.345313 2.396374 -9.621881 +v -0.286823 3.115765 -9.627218 +v -0.409799 2.932671 -10.386772 +v -0.454723 2.694923 -10.376768 +v -0.261947 3.158210 -10.342492 +v -0.290014 2.342802 -10.319963 +v -0.308001 2.367319 -10.151452 +v -0.478621 2.707150 -10.190189 +v -0.429209 2.929410 -10.188605 +v -0.269060 3.138009 -10.168095 +v -0.132728 3.325180 -10.150924 +v 0.000000 3.361886 -10.127089 +v -0.000014 2.105220 -12.461259 +v -0.254819 3.072582 -11.268055 +v -0.232882 3.219802 -11.836754 +v 0.000000 4.975075 -12.058704 +v -0.118322 4.872064 -12.247119 +v -0.145427 4.179946 -12.696609 +v 0.000000 3.951504 -13.039208 +v -0.217427 2.932348 -11.868374 +v -0.275271 2.933772 -11.308237 +v -0.109066 2.679843 -12.341629 +v -0.192465 2.444295 -11.862893 +v -0.277131 2.550299 -11.319557 +v -0.112976 2.927302 -12.325741 +v -0.104893 2.030640 -12.385267 +v -0.176575 2.117885 -11.821964 +v -0.235786 2.205387 -11.251264 +v -0.107367 5.642466 -13.229023 +v 0.000000 5.732892 -13.099184 +v 0.000000 5.884174 -13.345831 +v -0.089506 5.439608 -13.766284 +v -0.104550 5.731641 -13.350189 +v 0.000000 5.809293 -13.218571 +v -0.081325 5.676683 -14.001101 +v -0.090508 5.938873 -13.647932 +v 0.000000 6.004039 -13.549540 +v -0.081294 6.043985 -13.803465 +v -0.079469 6.066023 -14.227453 +v 0.000000 6.224835 -13.955671 +v 0.000000 6.082816 -14.357561 +v 0.000000 6.158680 -13.827797 +v -0.074859 6.117395 -13.912088 +v -0.077698 5.949584 -14.191765 +v -0.040805 5.916960 -14.223951 +v 0.000000 6.167389 -14.425179 +v -0.046878 6.221632 -14.364780 +v 0.000000 6.284554 -14.289021 +v -0.195589 3.339673 -10.650833 +v -0.202013 3.209540 -10.020697 +v -0.256585 3.245140 -8.602141 +v -0.223318 3.186183 -9.195385 +v -0.169091 3.561668 -11.074191 +v -0.184885 3.911345 -11.652169 +v -0.120727 4.235218 -12.242529 +v -0.143023 4.816792 -12.701199 +v -0.093592 5.688319 -13.673494 +v -0.242165 3.214156 -8.895622 +v -0.211739 3.181280 -9.609469 +v -0.200284 3.268700 -10.383180 +v -0.200894 3.231595 -10.159510 +v -0.131875 4.526005 -12.471864 +v -0.100677 5.476114 -13.433351 +v -0.097028 5.585624 -13.558237 +v -0.085917 5.807778 -13.824516 +v -0.078610 5.938566 -13.979771 +v -0.073946 6.120568 -14.142096 +v -0.036717 6.193822 -14.246683 +v -0.076278 6.033490 -14.051927 +v -0.023449 6.253093 -14.326900 +v -0.313852 3.473502 -6.811047 +v -0.240718 3.408999 -7.483716 +v -0.553318 3.722833 -4.480975 +v -0.638371 3.878331 -3.389092 +v -0.464567 3.607459 -5.475414 +v -0.410081 3.534937 -6.162992 +v -0.240628 3.316042 -8.101362 +v -0.707807 4.021771 -2.365168 +v -0.508943 3.665146 -4.978194 +v -0.455321 2.971098 -8.346431 +v -0.512329 2.712354 -8.357697 +v -0.371050 2.290605 -8.404303 +v -0.201301 1.994008 -8.468086 +v 0.000000 1.909989 -8.526316 +v -0.319949 3.187297 -8.348321 +v -0.177263 3.373885 -8.355184 +v -0.098129 3.483091 -8.457928 +v -0.248606 3.280591 -8.351751 +v -0.000014 3.803309 -8.451863 +v -0.041800 3.512553 -8.172581 +v -0.447510 2.954897 -8.767115 +v -0.216210 2.075158 -8.851757 +v -0.314754 3.142409 -8.758864 +v -0.183995 3.316887 -8.738899 +v -0.098168 3.440052 -8.715020 +v -0.497704 2.722723 -8.779392 +v -0.363731 2.344948 -8.810444 +v -0.249375 3.229648 -8.748882 +v -0.057552 1.983867 -9.452366 +v 0.000000 3.653726 -8.306202 +v -0.058158 3.637040 -8.600517 +v -0.043497 3.626302 -8.819245 +v 0.000000 3.633310 -8.858470 +v -0.049072 3.643200 -8.454896 +v -0.051776 3.631310 -8.737202 +v -0.025983 3.830602 -8.749534 +v -0.024499 3.817363 -8.605142 +v 0.000000 3.933094 -8.774946 +v -0.012948 3.931325 -8.755766 +v -0.074893 3.558928 -8.456491 +v -0.084449 3.549633 -8.596906 +v -0.073672 3.541039 -8.726732 +v -0.062088 3.534406 -8.826925 +v 0.000000 3.530407 -8.887341 +v -0.238928 2.231600 -11.256454 +v -0.179189 2.171574 -11.828695 +v -0.104599 2.113806 -12.379411 +v -0.021007 6.282511 -14.437347 +v -0.009243 6.308505 -14.400448 +v -0.000007 6.341561 -14.376413 +v -1.157102 2.568877 7.777184 +v -1.031251 2.732025 7.791574 +v -0.786283 2.862028 7.787131 +v -0.540578 3.003961 7.764317 +v 0.000000 3.101682 7.723503 +v -0.270133 3.081000 7.736838 +v -0.135067 3.091341 7.730171 +v -1.092788 2.321625 8.064361 +v -1.006693 2.327649 8.282658 +v -0.877270 2.281029 8.637496 +v -0.514213 2.215135 9.272251 +v -0.394843 2.212105 9.410281 +v -0.708521 2.243032 8.963731 +v -0.273470 2.200493 9.503814 +v -0.136733 2.210242 9.556026 +v -1.008418 1.403086 7.464852 +v -0.966758 1.384145 7.424916 +v -0.925098 1.402957 7.385004 +v -1.110032 1.476985 7.560347 +v -1.176139 1.638355 7.631267 +v -1.199183 1.787347 7.667492 +v -1.209745 1.942747 7.689372 +v -1.211857 2.085344 7.707782 +v -0.983072 1.404515 7.505863 +v -1.083094 1.480690 7.605783 +v -1.151711 1.640153 7.684997 +v -1.173571 1.787477 7.727949 +v -0.942524 1.385019 7.464682 +v -0.901975 1.403293 7.423532 +v -1.185924 1.944414 7.749385 +v -1.195738 2.088064 7.771209 +v -1.197764 2.193894 7.792367 +v -0.824170 1.404937 7.543211 +v -0.860926 1.387237 7.589632 +v -0.897680 1.407324 7.636065 +v -0.989737 1.483129 7.752903 +v -1.063315 1.635229 7.866033 +v -1.089614 1.776942 7.929016 +v -1.115564 1.942103 7.962103 +v -0.927574 2.660133 8.156806 +v -0.716042 2.794846 8.130422 +v -0.247949 2.986233 8.083306 +v -0.493384 2.920306 8.106346 +v -0.123974 2.997405 8.079032 +v -1.111568 2.092630 8.010777 +v -1.219526 1.461850 7.354831 +v -1.105846 1.378012 7.290684 +v -1.056219 1.360312 7.256295 +v -1.006592 1.380371 7.221903 +v -1.275964 1.627587 7.381396 +v -1.311809 1.774390 7.387921 +v -1.322528 1.942024 7.387604 +v -1.342574 2.172348 7.480217 +v -1.169517 0.837635 6.660570 +v -1.212747 0.958971 6.568310 +v -1.322057 1.084082 6.520927 +v -1.366415 1.135764 6.501388 +v -1.445415 1.241552 6.514871 +v -1.461682 1.378555 6.578679 +v -0.118757 0.908146 7.776113 +v -0.102238 0.957934 7.753042 +v 0.000000 0.930195 7.784478 +v -0.077108 1.028776 7.605618 +v -0.100442 0.992708 7.514764 +v -0.213223 0.710702 5.338850 +v -0.213221 0.710701 6.749059 +v -0.102238 0.957934 7.753042 +v -0.568081 0.902747 7.579506 +v -0.499515 1.007318 7.593684 +v -0.451532 1.060906 7.503548 +v -0.475718 1.109600 7.323461 +v -0.467860 1.050831 7.219772 +v -0.568074 1.071054 7.074764 +v -0.426440 0.750844 6.688579 +v -0.674785 1.147991 7.060369 +v -0.849483 1.169967 7.049247 +v -0.852691 1.171915 7.041536 +v -0.901609 1.180493 6.931842 +v -0.952435 1.218890 6.806871 +v -0.974512 1.245647 6.748828 +v -0.976682 1.263244 6.737537 +v -0.866790 1.219668 6.767122 +v -0.755436 1.154754 6.868383 +v -0.597202 0.874083 6.425976 +v -0.666500 0.924095 5.320666 +v -0.508698 0.810210 6.562080 +v -0.540916 0.833460 5.329064 +v -0.795431 1.421548 7.518828 +v -0.767665 1.449714 7.493199 +v -0.820180 1.521693 7.299871 +v -0.781487 1.602271 7.272047 +v -0.588895 2.059020 6.898893 +v -0.588898 2.059020 5.340304 +v -0.874599 1.419213 7.394143 +v -0.849457 1.446484 7.360750 +v -0.893449 1.419157 7.361999 +v -0.862518 1.446621 7.337930 +v -0.973976 1.401533 7.200189 +v -0.941953 1.433556 7.177006 +v -0.901646 1.507411 7.142037 +v -0.901661 1.507277 7.142295 +v -0.908534 1.447106 7.257532 +v -0.506376 1.463947 7.853655 +v -0.360156 1.457072 7.945468 +v -0.187071 1.437848 7.999634 +v -0.105628 1.409633 8.033222 +v -0.096634 1.436373 8.005179 +v -0.086277 1.467188 7.972872 +v -0.102920 1.576536 7.928577 +v -0.121803 1.682959 7.889006 +v 0.000001 2.189652 7.275077 +v -0.345991 2.015098 -7.593967 +v -0.289591 2.097984 -8.177647 +v -0.398072 1.778326 -6.788368 +v -0.282760 2.186629 -8.694741 +v -0.255418 2.281002 -9.896200 +v -0.174029 2.161338 -10.669867 +v -0.311602 2.280322 -9.240178 +v -0.147355 1.881837 -11.142594 +v -0.119549 1.461948 -11.680208 +v -0.098042 0.978950 -12.223737 +v -0.297181 2.233476 -8.967460 +v -0.081513 0.650957 -12.491232 +v -0.283510 2.280662 -9.568190 +v -0.203891 2.243034 -10.375456 +v -0.229711 2.267084 -10.135351 +v -0.286175 2.142307 -8.436194 +v -0.289970 2.210052 -8.831100 +v -0.131996 1.947428 -9.259753 +v 0.000000 2.008741 -9.598274 +v -0.108832 1.819900 -9.305342 +v -0.049339 1.832943 -9.453801 +v 0.000000 1.838845 -9.520983 +v -0.046161 1.691904 -9.454356 +v 0.000000 1.688417 -9.532793 +v -0.096741 1.984336 -9.034204 +v -0.060755 1.925107 -9.059778 +v -0.048005 1.805043 -9.149770 +v -0.035889 1.623215 -9.285259 +v 0.000000 1.480913 -9.479207 +v -0.005835 1.480627 -9.488686 +v 0.000000 1.465410 -9.561747 +v -0.038313 1.960334 -8.873912 +v -0.499196 2.726589 -9.837730 +v -0.204218 2.168841 -9.653164 +v -0.280633 3.119243 -9.831667 +v -0.133120 3.271577 -9.798498 +v 0.000000 3.304090 -9.786602 +v -0.443035 2.934859 -9.844103 +v -0.036310 2.063900 -9.582206 +v -0.334710 2.392823 -9.811226 +v -0.206876 3.195410 -9.815084 +v -0.034154 1.996304 -9.525320 +v -0.269464 2.280832 -9.732195 +v -0.038734 1.835894 -9.487392 +v -0.030116 1.690160 -9.493574 +v 0.000000 3.950513 -4.759652 +v -0.188434 0.828601 -4.292953 +v -0.447242 0.942463 -4.426738 +v -0.754423 1.150122 -4.505904 +v 0.000000 0.839705 -4.264838 +v -0.317838 0.885532 -4.359845 +v -0.708007 3.559297 -4.715628 +v -0.354254 3.828682 -4.743542 +v -0.832843 3.265944 -4.679268 +v -0.855775 1.459569 -4.572080 +v -0.972896 2.804221 -4.641820 +v -1.008520 2.366518 -4.631083 +v -0.974597 1.955095 -4.659207 +v -0.531130 3.693990 -4.729585 +v 0.000000 0.880619 7.787120 +v 0.000000 1.957512 -8.823058 +v 0.788412 0.469182 -1.440535 +v 0.949152 0.427518 -0.310606 +v 1.210386 0.743811 -0.338872 +v 1.100424 0.780384 -1.457728 +v 0.576528 0.363331 -1.424751 +v 0.746614 0.305371 -0.264526 +v 0.302079 0.401748 -2.273668 +v 0.364644 0.257481 -1.408966 +v 0.497893 0.478615 -2.288256 +v 0.151042 0.399174 -2.266588 +v 0.182325 0.243883 -1.395216 +v 0.119002 0.627711 -3.324415 +v 0.212523 -0.017400 3.370384 +v 0.215322 -0.054326 2.548477 +v 0.544077 0.183225 -0.218446 +v 0.272041 0.145998 -0.262537 +v 0.735303 0.134406 4.623686 +v 0.747321 0.110787 4.019179 +v 0.580716 0.076990 4.035890 +v 0.569746 0.118915 4.655710 +v 0.425043 -0.000501 3.366440 +v 0.414111 0.043194 4.052600 +v 0.599073 0.036462 3.361805 +v 0.207055 0.037062 4.065334 +v 0.000000 0.130944 4.733126 +v 0.202095 0.117184 4.710430 +v 0.000000 0.030930 4.078070 +v 0.747288 0.139504 4.972197 +v 0.927960 0.242123 4.910411 +v 0.879685 0.221256 4.584761 +v 0.575035 0.115201 5.011827 +v 0.402783 0.090898 5.051456 +v 0.404190 0.103425 4.687736 +v 0.201391 0.089486 5.078036 +v 0.000000 0.088074 5.104615 +v 0.000000 0.066340 5.427113 +v 0.206050 0.077254 5.401523 +v 0.391110 0.237226 6.724459 +v 0.195555 0.223231 6.757908 +v 0.182377 0.286351 7.090038 +v 0.364755 0.314584 7.053168 +v 0.191223 0.368383 7.402485 +v 0.353349 0.425440 7.343808 +v 0.102238 0.957934 7.753042 +v 0.077109 1.028776 7.605618 +v 0.344151 1.028698 7.652439 +v 0.226353 0.992911 7.713404 +v 0.154215 1.035241 7.595179 +v 0.286446 1.068475 7.528789 +v 0.782541 1.137691 7.151186 +v 0.661620 1.136829 7.306580 +v 0.603984 1.132411 7.157959 +v 0.674786 1.147991 7.060369 +v 0.556227 1.107240 7.438728 +v 0.475719 1.109600 7.323461 +v 0.418170 1.099366 7.397717 +v 0.451532 1.060906 7.503548 +v 0.200883 1.005523 7.491678 +v 0.100443 0.992708 7.514764 +v 0.737712 1.087773 7.336395 +v 0.624666 1.045620 7.475090 +v 0.000000 0.659617 7.792789 +v 0.000000 0.842044 7.788106 +v 0.159957 0.809698 7.818165 +v 0.176667 0.660913 7.769928 +v 0.000000 0.499495 7.643269 +v 0.186939 0.511459 7.622265 +v 0.000000 0.350818 7.422409 +v 0.352899 0.545944 7.566257 +v 0.502584 0.581995 7.493086 +v 0.512431 0.458782 7.295474 +v 0.513144 0.449863 7.281170 +v 0.483015 0.727825 7.632405 +v 0.333363 0.701560 7.709418 +v 0.621225 0.768148 7.532959 +v 0.636789 0.634198 7.391329 +v 0.568082 0.902747 7.579506 +v 0.446847 0.867865 7.695375 +v 0.707223 0.942385 7.480309 +v 0.743523 0.817339 7.399426 +v 0.809892 0.994402 7.320856 +v 0.832230 1.122886 7.188195 +v 0.900350 1.080331 7.199247 +v 0.904908 1.151766 7.055986 +v 0.966957 1.104532 7.028775 +v 0.309030 0.838555 7.771639 +v 0.400425 0.976938 7.688704 +v 0.278133 0.941932 7.752140 +v 0.118757 0.908146 7.776113 +v 0.974610 0.929158 7.092916 +v 0.852438 0.877975 7.242527 +v 0.764310 0.689413 7.259150 +v 0.654714 0.505378 7.182827 +v 0.516488 0.451174 7.278847 +v 0.704673 0.387481 6.907848 +v 0.534714 0.351032 6.980509 +v 0.799029 0.563536 7.062317 +v 0.872016 0.453121 6.788566 +v 0.944778 0.634093 6.919909 +v 1.057062 0.570982 6.645979 +v 1.088826 0.706516 6.780196 +v 1.037319 0.815014 6.965506 +v 0.906285 0.744328 7.117725 +v 1.056345 1.006468 6.947868 +v 1.129230 0.901795 6.814305 +v 1.169517 0.837635 6.660570 +v 1.206636 0.778522 6.518927 +v 1.253289 0.706345 6.132710 +v 1.114395 0.510601 6.321710 +v 0.574323 0.270779 6.655052 +v 0.757536 0.304333 6.585647 +v 0.952932 0.367417 6.476990 +v 1.136355 0.461563 6.013939 +v 1.257516 0.687271 5.856770 +v 1.187013 0.402556 5.719851 +v 1.317537 0.629404 5.589020 +v 1.161939 0.378760 5.431072 +v 1.350177 0.590287 5.316800 +v 1.131981 0.361318 5.145022 +v 1.375074 0.558442 5.038369 +v 0.956742 0.219469 5.228363 +v 0.991815 0.230911 5.525332 +v 1.108632 0.344742 4.848625 +v 1.475217 0.778356 5.256169 +v 1.522185 0.755982 4.976873 +v 1.352622 0.567264 4.748600 +v 0.412101 0.088168 5.375933 +v 0.590515 0.121351 5.331623 +v 0.768930 0.154534 5.287313 +v 0.798576 0.165532 5.592230 +v 1.019766 0.246109 5.831659 +v 0.988044 0.300676 6.149660 +v 0.801252 0.226954 6.246830 +v 0.609364 0.197930 6.311779 +v 0.417477 0.168907 6.376730 +v 0.000000 0.209236 6.791359 +v 0.208738 0.162694 6.407974 +v 0.000000 0.156481 6.439219 +v 0.000000 0.044254 5.748680 +v 0.214506 0.060091 5.721499 +v 0.429012 0.075928 5.694319 +v 0.613794 0.120730 5.643274 +v 0.816816 0.177946 5.910890 +v 0.625110 0.137915 5.970244 +v 0.433404 0.097885 6.029599 +v 0.216702 0.086153 6.059344 +v 0.000000 0.074422 6.089089 +v 0.144525 3.506025 -7.491770 +v 0.201792 3.578382 -6.814765 +v 0.276315 3.645885 -6.171391 +v 0.310170 3.726294 -5.490697 +v 0.313852 3.473502 -6.811047 +v 0.410082 3.534937 -6.162992 +v 0.425913 3.368622 -6.807328 +v 0.240718 3.408999 -7.483716 +v 0.336912 3.311973 -7.475662 +v 0.240628 3.316042 -8.101362 +v 0.319962 3.220986 -8.090930 +v 0.161295 3.411099 -8.111796 +v 0.240678 1.834500 -7.665503 +v 0.257688 1.645710 -7.004604 +v 0.199884 1.940196 -8.212884 +v 0.448527 1.545714 -7.306075 +v 0.476448 1.556169 -7.267494 +v 0.539112 1.525422 -6.898022 +v 0.507762 1.510002 -6.872667 +v 0.510108 1.427016 -7.335085 +v 0.521817 1.454388 -7.379246 +v 0.443727 1.548915 -7.563982 +v 0.579156 1.335906 -7.058488 +v 0.616119 1.352640 -7.081982 +v 0.000000 1.689465 7.906006 +v 0.000000 1.577223 7.942846 +v 0.102920 1.576536 7.928577 +v 0.121803 1.682959 7.889006 +v 0.272112 1.674930 7.868027 +v 0.271137 1.575414 7.905256 +v 0.555954 1.557243 7.735546 +v 0.550611 1.636725 7.701256 +v 0.742320 1.529484 7.460567 +v 0.711369 1.609389 7.436687 +v 0.086277 1.467188 7.972872 +v 0.184184 1.470114 7.965120 +v 0.356143 1.480919 7.919915 +v 0.501440 1.483811 7.832011 +v 0.621159 1.471109 7.707720 +v 0.724058 1.452509 7.561075 +v 0.822493 1.446200 7.407862 +v 0.849457 1.446484 7.360750 +v 0.820180 1.521693 7.299871 +v 0.980423 1.417958 7.084307 +v 1.011129 1.382451 7.110107 +v 1.056960 1.324728 6.958547 +v 1.026217 1.369773 6.933131 +v 0.941953 1.433556 7.177006 +v 0.908535 1.447106 7.257532 +v 0.939936 1.419018 7.282726 +v 0.973976 1.401533 7.200189 +v 0.850671 1.419285 7.434948 +v 0.874599 1.419213 7.394142 +v 0.767665 1.449714 7.493199 +v 0.746774 1.423541 7.592715 +v 0.795431 1.421548 7.518828 +v 0.635187 1.442246 7.745333 +v 0.506377 1.463947 7.853655 +v 0.511599 1.442937 7.876547 +v 0.649220 1.425013 7.782948 +v 0.360156 1.457072 7.945467 +v 0.364443 1.431606 7.972756 +v 0.187071 1.437848 7.999634 +v 0.189243 1.413585 8.025587 +v 0.096634 1.436373 8.005178 +v 0.000000 1.434625 8.011285 +v 0.105628 1.409633 8.033222 +v 0.769488 1.406245 7.624363 +v 0.824170 1.404937 7.543211 +v 0.918290 1.385893 7.504446 +v 0.878853 1.403629 7.462059 +v 0.860927 1.387237 7.589632 +v 0.803564 1.388582 7.674816 +v 0.672118 1.404860 7.841801 +v 0.957726 1.405943 7.546875 +v 0.897681 1.407324 7.636065 +v 0.983072 1.404515 7.505863 +v 0.942524 1.385019 7.464682 +v 0.901976 1.403293 7.423531 +v 0.383822 1.376660 8.110682 +v 0.537701 1.393838 7.991468 +v 0.837636 1.408706 7.725254 +v 0.695015 1.422606 7.900669 +v 1.056156 1.484394 7.651218 +v 0.989738 1.483129 7.752903 +v 1.083094 1.480690 7.605783 +v 1.059112 1.400230 7.382830 +v 1.163910 1.469577 7.469475 +v 1.219527 1.461850 7.354831 +v 1.105846 1.378012 7.290684 +v 1.015228 1.382398 7.345387 +v 1.056219 1.360312 7.256295 +v 0.971345 1.402285 7.307949 +v 1.006593 1.380371 7.221903 +v 1.041841 1.358458 7.135857 +v 1.097211 1.338226 7.167204 +v 1.151397 1.271503 6.999184 +v 1.087708 1.291362 6.983944 +v 0.200111 1.357512 8.185737 +v 0.553633 1.412414 8.061825 +v 0.923320 1.481865 7.854587 +v 0.751805 1.495320 8.051482 +v 1.127283 1.641951 7.738727 +v 1.063315 1.635229 7.866032 +v 1.110033 1.476985 7.560347 +v 1.176139 1.638355 7.631267 +v 1.224996 1.634760 7.523807 +v 1.275144 1.454124 7.240187 +v 1.275964 1.627587 7.381396 +v 1.326933 1.620414 7.238987 +v 1.373211 1.761693 7.229267 +v 1.311810 1.774390 7.387921 +v 1.387671 1.944634 7.205862 +v 1.322528 1.942024 7.387604 +v 1.250409 1.787088 7.546576 +v 1.199183 1.787347 7.667492 +v 0.394890 1.398048 8.195772 +v 0.581513 1.513149 8.234276 +v 0.999348 1.628508 7.993338 +v 0.815892 1.631877 8.227547 +v 1.147959 1.787607 7.788406 +v 1.089615 1.776942 7.929016 +v 1.257387 1.939413 7.569346 +v 1.209745 1.942747 7.689372 +v 1.342575 2.172348 7.480217 +v 1.352067 2.338263 7.427687 +v 1.387422 2.217396 7.182797 +v 1.342575 2.172348 7.480217 +v 1.373820 2.490672 7.166057 +v 1.294770 2.532102 7.506557 +v 1.238823 2.340930 7.586386 +v 1.230795 2.422050 7.627457 +v 1.234152 2.261535 7.600157 +v 1.244094 2.079903 7.580927 +v 1.228419 2.207055 7.653707 +v 1.211857 2.085344 7.707781 +v 1.162104 1.946081 7.809398 +v 1.115565 1.942103 7.962103 +v 1.031271 1.766277 8.069626 +v 0.858531 1.757508 8.339116 +v 0.619023 1.658256 8.429867 +v 0.406352 1.516749 8.401046 +v 0.205911 1.384992 8.285470 +v 0.100057 1.353394 8.199059 +v 1.214208 2.188770 7.717457 +v 0.651822 1.775328 8.572427 +v 1.069026 1.938126 8.114807 +v 0.894636 1.883136 8.450686 +v 1.047478 2.073702 8.184782 +v 1.111568 2.092630 8.010777 +v 1.182948 2.233161 7.851377 +v 1.179621 2.090784 7.834637 +v 1.126710 2.097102 7.969667 +v 1.106550 2.226930 8.054207 +v 1.079028 2.416320 8.074515 +v 1.092789 2.321625 8.064361 +v 1.006693 2.327649 8.282658 +v 0.987456 2.446020 8.310556 +v 1.171107 2.320122 7.879097 +v 1.113603 2.548758 7.921816 +v 1.176981 2.443917 7.813666 +v 1.163682 2.397018 7.859356 +v 1.173288 2.383071 7.839737 +v 1.179327 2.324856 7.846636 +v 1.195836 2.586792 7.648397 +v 1.210503 2.464629 7.689316 +v 1.190283 2.470041 7.758137 +v 1.157102 2.568877 7.777184 +v 1.144596 2.758947 7.307598 +v 1.079964 2.751930 7.629907 +v 1.031251 2.732025 7.791574 +v 0.872610 2.624709 8.328406 +v 0.927574 2.660133 8.156806 +v 0.848361 2.384847 8.663476 +v 0.877270 2.281029 8.637496 +v 0.708522 2.243032 8.963731 +v 0.694146 2.332398 9.001245 +v 0.684621 1.892397 8.714986 +v 0.703759 2.023032 8.820601 +v 0.900408 2.030173 8.531101 +v 0.497418 1.972806 9.076187 +v 0.511713 2.051268 9.155821 +v 0.321811 1.971715 9.231791 +v 0.361471 2.050324 9.298208 +v 0.502419 2.300541 9.309047 +v 0.514213 2.215135 9.272251 +v 0.394843 2.212105 9.410281 +v 0.387192 2.295267 9.450975 +v 1.181667 2.724576 6.953297 +v 0.752196 2.827005 7.953977 +v 0.982539 2.695557 7.985207 +v 0.716043 2.794846 8.130422 +v 0.786283 2.862028 7.787131 +v 0.820371 2.897052 7.620287 +v 0.876699 2.945331 7.290977 +v 0.926010 2.982201 6.948767 +v 0.974307 3.031329 6.566297 +v 1.290258 2.689050 6.502546 +v 1.250427 2.812626 6.026449 +v 1.015305 3.131259 6.143333 +v 1.091511 3.329769 5.224496 +v 1.061331 3.240360 5.690906 +v 0.726747 3.460701 5.750815 +v 0.743448 3.566691 5.277687 +v 0.704028 3.366156 6.209093 +v 1.327482 2.943366 5.597393 +v 0.669861 3.259230 6.612320 +v 0.637893 3.182538 6.960979 +v 0.604656 3.123378 7.283537 +v 0.562743 3.045708 7.599047 +v 0.518415 2.962215 7.929586 +v 0.540579 3.003961 7.764317 +v 0.493384 2.920306 8.106346 +v 0.679890 2.762688 8.306867 +v 0.762723 2.567478 8.686997 +v 0.598353 2.694258 8.660836 +v 0.324546 3.365628 6.630440 +v 0.343269 3.480714 6.239542 +v 0.359058 3.592857 5.786156 +v 0.297372 3.207993 7.261970 +v 0.280686 3.127605 7.570429 +v 0.140344 3.136857 7.562765 +v 0.148687 3.222121 7.256687 +v 0.309822 3.284826 6.962750 +v 0.154912 3.305658 6.963875 +v 0.162274 3.383073 6.634371 +v 0.171636 3.491325 6.242572 +v 0.179530 3.616561 5.792591 +v 0.182733 3.722278 5.306861 +v 0.365463 3.697041 5.302405 +v 1.108209 3.438648 4.744079 +v 0.741867 3.673716 4.779359 +v 1.413729 3.125040 4.688398 +v 1.389486 3.042453 5.151325 +v 1.404033 3.199014 4.213919 +v 1.121784 3.551319 4.258739 +v 1.788564 2.671095 4.152533 +v 1.747296 2.596497 4.576942 +v 0.362988 3.788385 4.795018 +v 0.181495 3.807210 4.796773 +v 0.443559 2.460720 9.299537 +v 0.341751 2.449209 9.428987 +v 0.258335 2.521089 9.405805 +v 0.369699 2.581524 9.226277 +v 0.200604 2.562858 9.384016 +v 0.307989 2.655072 9.137687 +v 0.000000 2.555679 9.439246 +v 0.100302 2.559268 9.411632 +v 0.109992 2.495782 9.505816 +v 0.000000 2.491287 9.544005 +v 0.179910 2.660967 9.193696 +v 0.089955 2.661516 9.206971 +v 0.190368 2.747181 8.935636 +v 0.095184 2.750950 8.939371 +v 0.213111 2.838990 8.622107 +v 0.106555 2.844907 8.621837 +v 0.236319 2.938071 8.263367 +v 0.118159 2.948985 8.260487 +v 0.259581 3.034395 7.903246 +v 0.247950 2.986233 8.083306 +v 0.123975 2.997405 8.079031 +v 0.129790 3.045825 7.897576 +v 0.270133 3.081000 7.736837 +v 0.135067 3.091341 7.730171 +v 0.357936 2.709567 8.935786 +v 0.414945 2.789853 8.633687 +v 0.468354 2.878398 8.283106 +v 0.495741 2.624094 8.973136 +v 0.618654 2.501331 9.014657 +v 0.368949 3.862812 -4.494491 +v 0.434505 4.066239 -3.388447 +v 0.618966 3.488625 -5.460131 +v 0.678327 3.535740 -4.963796 +v 0.508943 3.665146 -4.978194 +v 0.464568 3.607459 -5.475414 +v 0.553318 3.722833 -4.480975 +v 0.638371 3.878331 -3.389092 +v 0.339559 3.794553 -4.992594 +v 0.543849 3.423990 -6.154593 +v 0.734799 3.798906 4.270558 +v 1.388064 3.272769 3.742223 +v 1.148592 3.678432 3.771743 +v 1.403940 3.371979 3.277069 +v 1.163508 3.788115 3.291173 +v 0.762930 3.922338 3.782633 +v 0.773943 4.052736 3.295432 +v 0.367677 4.042284 3.781042 +v 0.377028 4.193604 3.296573 +v 0.188517 4.202499 3.293557 +v 0.183841 4.054734 3.778147 +v 0.360057 3.924354 4.277819 +v 0.180031 3.937958 4.277248 +v 0.102956 1.382955 8.302106 +v 0.211130 1.515789 8.524104 +v 0.424926 1.671654 8.636567 +v 0.000000 1.519191 8.570156 +v 0.105564 1.517490 8.547131 +v 0.217716 1.669653 8.798027 +v 0.460962 1.818483 8.879627 +v 0.000000 1.667196 8.861087 +v 0.108856 1.668424 8.829556 +v 0.235701 1.817823 9.070906 +v 0.113149 1.739460 8.962193 +v 0.000000 1.971462 9.374177 +v 0.000000 2.052438 9.474586 +v 0.133818 2.051086 9.430861 +v 0.128433 1.971387 9.331757 +v 0.256869 1.971312 9.289336 +v 0.117849 1.817220 9.107386 +v 0.278409 2.128155 9.464476 +v 0.267639 2.049735 9.387136 +v 0.139203 2.130784 9.509506 +v 0.273470 2.200493 9.503814 +v 0.402495 2.128944 9.369587 +v 0.268532 2.272831 9.543152 +v 0.136733 2.210242 9.556026 +v 0.134264 2.289700 9.602544 +v 0.000000 2.426892 9.616756 +v 0.119685 2.432295 9.567991 +v 0.239373 2.437698 9.519227 +v 0.733692 0.972588 5.316173 +v 0.666500 0.924095 5.320666 +v 0.426444 0.750844 5.336720 +v 0.213223 0.710702 5.338850 +v 0.213222 0.710701 6.749059 +v 0.000000 2.189652 7.275076 +v -0.000000 2.189652 7.275076 +v 1.854000 2.120766 4.106810 +v 1.817886 2.060883 4.474732 +v 1.676445 2.518596 4.996492 +v 1.784790 2.001459 4.837373 +v 1.816056 1.717494 4.421183 +v 1.808952 1.664856 4.738643 +v 1.769970 1.330092 4.667004 +v 1.784706 1.387101 4.366463 +v 1.742349 1.295748 4.979033 +v 1.747020 1.619814 5.055710 +v 1.660191 1.000224 4.950203 +v 1.677156 1.018413 4.641562 +v 1.597695 1.006326 5.232381 +v 1.674477 1.280304 5.264569 +v 1.541046 0.746980 4.673993 +v 1.024068 0.308106 4.545835 +v 1.315611 0.590397 4.451360 +v 0.889777 0.199906 4.004134 +v 1.685787 1.582713 5.352380 +v 1.695060 1.945572 5.171840 +v 1.546446 2.435583 5.388470 +v 1.628013 1.888248 5.486629 +v 1.453905 2.338293 5.750959 +v 1.662852 1.052307 4.282069 +v 1.497357 0.769308 4.385693 +v 1.229607 2.277243 7.618937 +v 1.231536 2.339838 7.611917 +v 0.528099 4.509135 0.858371 +v 0.787821 4.324920 0.900224 +v 0.723396 4.261200 1.750264 +v 0.351597 4.421394 1.775378 +v 1.086168 4.049907 0.830774 +v 1.086969 3.982332 1.717826 +v 1.056804 4.037607 -0.456997 +v 0.836592 4.310844 -0.403726 +v 1.269519 3.666516 -0.478873 +v 1.328715 3.653046 0.790955 +v 1.359306 3.578568 1.697665 +v 0.758946 4.176072 2.597807 +v 1.134183 3.892794 2.592223 +v 0.364200 4.314102 2.597855 +v 0.175801 4.455259 1.779792 +v 0.182103 4.331426 2.595907 +v 1.006608 3.948726 -1.472503 +v 1.204536 3.558417 -1.499254 +v 1.482237 2.974503 -0.463777 +v 1.397202 2.921571 -1.499641 +v 1.586139 2.968503 0.781358 +v 1.685376 2.340369 -0.444295 +v 1.767222 2.341368 0.766394 +v 1.603314 1.950525 -1.506739 +v 1.719489 1.951716 -0.429610 +v 1.575573 2.320596 -1.504129 +v 1.123113 3.474102 -2.287129 +v 1.293297 2.873250 -2.291785 +v 0.931437 3.836859 -2.264095 +v 1.001466 3.368694 -3.376809 +v 0.842238 3.690423 -3.389737 +v 0.868191 3.282744 -4.431761 +v 0.737688 3.582855 -4.467461 +v 0.726801 3.215547 -5.421790 +v 0.797496 3.249145 -4.926776 +v 0.625866 3.163263 -6.120244 +v 0.526899 3.092799 -6.785158 +v 0.832843 3.265944 -4.679268 +v 0.972897 2.804221 -4.641820 +v 1.008417 2.808030 -4.398251 +v 0.765219 2.771445 -6.080977 +v 0.866337 2.792796 -5.372530 +v 0.661410 2.741493 -6.772437 +v 0.588291 2.721057 -7.465162 +v 0.474639 3.033159 -7.460692 +v 0.451305 2.195697 -7.522432 +v 0.644760 2.331846 -6.762777 +v 0.379299 2.255772 -8.142409 +v 0.528384 2.712663 -8.089670 +v 0.345991 2.015098 -7.593967 +v 0.289591 2.097984 -8.177647 +v 0.461718 2.988378 -8.080609 +v 0.785463 2.371980 -6.032110 +v 0.923028 2.383908 -5.335334 +v 0.538458 1.910943 -6.572131 +v 0.398073 1.778326 -6.788368 +v 0.756963 2.002734 -5.931311 +v 0.041801 3.512553 -8.172581 +v 0.098130 3.483091 -8.457928 +v 0.177264 3.373885 -8.355184 +v 0.074893 3.558928 -8.456491 +v 0.024499 3.817363 -8.605142 +v 0.000015 3.803309 -8.451863 +v 0.981432 0.858444 -2.317090 +v 0.693708 0.555483 -2.302843 +v 1.230480 1.035141 -1.464463 +v 1.130595 1.087989 -2.321509 +v 1.331148 1.321893 -1.472773 +v 1.204038 1.366044 -2.312809 +v 1.498809 1.613946 -1.493956 +v 1.297323 1.662159 -2.312395 +v 1.411365 1.967781 -2.319409 +v 1.423080 2.306682 -2.309623 +v 1.146753 2.827110 -3.365470 +v 0.555300 0.762156 -3.412180 +v 0.396648 0.696859 -3.373600 +v 0.806601 1.027764 -3.483463 +v 0.911754 1.258362 -3.471160 +v 1.036869 1.625970 -3.434320 +v 1.092240 1.808779 -3.420586 +v 1.214733 2.315916 -3.385330 +v 1.158057 2.026071 -3.404260 +v 1.330740 1.007115 -0.357943 +v 1.504764 1.268439 -0.387724 +v 1.668471 1.574979 -0.415135 +v 0.495066 1.449207 -6.915778 +v 0.444837 1.505019 -7.274275 +v 0.607920 1.410090 -7.057557 +v 0.536580 1.481511 -7.340335 +v 1.197939 2.445849 7.753336 +v 1.185615 2.424846 7.801456 +v 1.229496 2.404689 7.641676 +v 1.213683 2.443854 7.694027 +v 1.225629 2.227791 7.664627 +v 1.186464 2.255070 7.829026 +v 1.197765 2.193894 7.792366 +v 1.197765 2.193894 7.792366 +v 1.199004 2.215476 7.782496 +v 1.213173 2.214537 7.720547 +v 1.195739 2.088064 7.771209 +v 0.866901 1.397133 -4.324602 +v 0.991074 1.935774 -4.441362 +v 0.974598 1.955095 -4.659207 +v 0.855775 1.459569 -4.572080 +v 0.844650 1.522005 -4.819557 +v 0.822399 1.646877 -5.314512 +v 0.785556 1.504506 -5.393353 +v 0.879102 1.345452 -4.904773 +v 0.179475 0.876564 -4.518944 +v 0.188434 0.828601 -4.292953 +v 0.317838 0.885532 -4.359845 +v 0.302329 0.924000 -4.586518 +v 0.425184 0.971436 -4.654093 +v 0.447243 0.942463 -4.426738 +v 0.754423 1.150122 -4.505904 +v 0.631371 1.086015 -4.898322 +v 0.197394 0.780639 -4.066962 +v 0.237996 0.631563 -3.335020 +v 0.333348 0.847065 -4.133173 +v 1.037019 2.360721 -4.396334 +v 0.301644 2.754789 -11.360047 +v 0.411183 2.672648 -10.716697 +v 0.376641 2.938242 -10.725307 +v 0.429210 2.929410 -10.188605 +v 0.409800 2.932671 -10.386772 +v 0.454723 2.694923 -10.376768 +v 0.478621 2.707150 -10.190189 +v 0.443265 2.958135 -9.231702 +v 0.443112 2.942617 -9.639969 +v 0.500128 2.735979 -9.638621 +v 0.501993 2.754759 -9.240403 +v 0.448926 2.953818 -8.612252 +v 0.447510 2.954897 -8.767115 +v 0.497704 2.722723 -8.779392 +v 0.496275 2.712045 -8.625722 +v 0.455322 2.971098 -8.346431 +v 0.512329 2.712354 -8.357697 +v 0.371050 2.290605 -8.404303 +v 0.286176 2.142307 -8.436194 +v 0.201301 1.994008 -8.468086 +v 0.202719 2.047821 -8.723288 +v 0.000000 1.933346 -8.850438 +v 0.366519 2.403477 -9.243193 +v 0.345313 2.396374 -9.621881 +v 0.364660 2.364457 -8.954694 +v 0.499134 2.733402 -8.933063 +v 0.269060 3.138009 -10.168095 +v 0.261948 3.158210 -10.342492 +v 0.274443 3.122721 -10.036116 +v 0.442959 2.927100 -10.048237 +v 0.443035 2.934859 -9.844103 +v 0.280633 3.119243 -9.831667 +v 0.151422 2.166849 -10.119249 +v 0.186729 2.172732 -9.791831 +v 0.117768 2.143266 -10.430947 +v 0.145197 2.020104 -9.233773 +v 0.072606 2.049301 -9.466062 +v 0.057552 1.983867 -9.452366 +v 0.131996 1.947428 -9.259753 +v 0.036310 2.063900 -9.582206 +v 0.204218 2.168841 -9.653164 +v 0.308002 2.367319 -10.151452 +v 0.290014 2.342802 -10.319963 +v 0.203891 2.243034 -10.375456 +v 0.229712 2.267084 -10.135351 +v 0.092139 2.026344 -10.700377 +v 0.324108 2.389272 -10.000570 +v 0.255418 2.281002 -9.896200 +v 0.269464 2.280832 -9.732195 +v 0.334710 2.392823 -9.811226 +v 0.035889 1.623215 -9.285259 +v 0.256686 2.157168 -9.237164 +v 0.229702 2.102494 -8.980226 +v 0.297181 2.233476 -8.967460 +v 0.311602 2.280322 -9.240178 +v 0.255921 2.296332 -10.639358 +v 0.238928 2.231600 -11.256454 +v 0.235786 2.205387 -11.251264 +v 0.174030 2.161338 -10.669867 +v 0.147355 1.881837 -11.142594 +v 0.079662 1.731285 -11.068179 +v 0.179189 2.171574 -11.828695 +v 0.176576 2.117885 -11.821964 +v 0.119550 1.461948 -11.680208 +v 0.083922 1.245576 -11.593570 +v 0.087873 0.866687 -11.996022 +v 0.103782 2.345439 -12.363101 +v 0.109066 2.679843 -12.341629 +v 0.104893 2.030640 -12.385267 +v 0.104599 2.113806 -12.379411 +v 0.000015 2.105220 -12.461259 +v 0.155178 1.678320 -11.766847 +v 0.105996 1.718324 -12.407260 +v 0.108213 1.091213 -12.451451 +v 0.098043 0.978950 -12.223737 +v 0.072597 0.558383 -12.280480 +v 0.071319 0.369836 -12.971261 +v 0.090431 0.743531 -12.701984 +v 0.081514 0.650957 -12.491232 +v 0.000000 1.286699 -12.849672 +v 0.337134 4.550865 -1.286647 +v 0.530880 4.255392 -1.860175 +v 0.496476 4.426287 -1.321468 +v 0.484179 4.206684 -2.466241 +v 0.707808 4.021771 -2.365168 +v 0.738513 4.226496 -1.407832 +v 0.523044 4.650603 -0.322537 +v 0.634455 4.502475 -0.347335 +v 0.353634 4.656351 0.708917 +v 0.255804 4.800555 0.639917 +v 0.389424 4.725579 0.158690 +v 0.494044 4.579412 0.180791 +v 0.176821 4.646301 0.932550 +v 0.330065 4.572790 1.005317 +v 0.160899 4.603905 -1.427278 +v 0.341971 4.627254 -0.874908 +v 0.377355 4.807536 -0.346450 +v 0.261015 4.756641 -0.996184 +v 0.291003 5.061264 -0.420514 +v 0.206415 5.007654 -0.972486 +v 0.196953 4.972194 0.550262 +v 0.173397 5.206644 0.449081 +v 0.232200 5.133954 0.014283 +v 0.287154 4.889865 0.101906 +v 0.127906 4.808163 0.771432 +v 0.098481 4.973572 0.652059 +v 0.086703 5.194057 0.553082 +v 0.190560 5.659777 -0.122059 +v 0.230532 5.609394 -0.491101 +v 0.131942 6.201291 0.012722 +v 0.129386 6.268611 -0.019389 +v 0.156485 6.221625 -0.325418 +v 0.161366 6.154187 -0.299237 +v 0.126831 6.335931 -0.051499 +v 0.100050 6.961100 -0.420859 +v 0.106132 6.857105 -0.623385 +v 0.151604 6.289063 -0.351598 +v 0.104307 7.402701 -0.942577 +v 0.093945 7.300551 -1.069976 +v 0.112215 6.753111 -0.825910 +v 0.073590 7.636790 -1.126523 +v 0.061350 7.570263 -1.215099 +v 0.063421 6.344719 0.001007 +v 0.050031 6.971153 -0.387232 +v 0.064699 6.271790 0.037258 +v 0.190790 6.107083 -0.611197 +v 0.183584 6.174639 -0.631446 +v 0.129818 6.117871 -0.927168 +v 0.134567 6.044853 -0.914980 +v 0.057486 6.693021 -1.263106 +v 0.073758 6.139584 -1.227016 +v 0.125068 6.190889 -0.939356 +v 0.084850 6.723066 -1.044508 +v 0.019031 7.721359 -1.412301 +v 0.036474 7.776766 -1.378334 +v 0.041024 7.816984 -1.310769 +v 0.000012 7.621251 -0.858355 +v 0.000000 7.491805 -0.793408 +v 0.044199 7.845045 -1.263627 +v 0.022105 7.863363 -1.235694 +v 0.008374 7.701509 -1.013948 +v 0.144675 4.705746 -1.645918 +v 0.121827 4.954044 -1.524457 +v 0.162444 5.540064 -0.891267 +v 0.078345 5.982624 -1.218763 +v 0.076051 6.061104 -1.222890 +v 0.094356 5.470734 -1.291432 +v 0.141726 3.485646 -10.652797 +v 0.126894 3.755327 -10.965844 +v 0.138621 3.379190 -10.423867 +v 0.195589 3.339673 -10.650833 +v 0.200284 3.268700 -10.383180 +v 0.129585 3.296360 -10.005277 +v 0.202014 3.209540 -10.020697 +v 0.206877 3.195410 -9.815084 +v 0.133120 3.271577 -9.798498 +v 0.319938 3.153609 -8.605712 +v 0.314754 3.142409 -8.758864 +v 0.319950 3.187297 -8.348321 +v 0.248607 3.280591 -8.351751 +v 0.256585 3.245140 -8.602141 +v 0.193233 3.336672 -8.598571 +v 0.110541 3.462891 -8.593322 +v 0.174759 3.297102 -8.879228 +v 0.183996 3.316887 -8.738899 +v 0.098169 3.440052 -8.715020 +v 0.085797 3.417213 -8.836718 +v 0.147432 3.263556 -9.172451 +v 0.223318 3.186183 -9.195385 +v 0.242165 3.214156 -8.895622 +v 0.132729 3.325180 -10.150924 +v 0.136656 3.246794 -9.591721 +v 0.012948 3.931325 -8.755766 +v 0.062088 3.534406 -8.826925 +v 0.123786 5.122674 -12.522758 +v 0.118323 4.872064 -12.247119 +v 0.112860 4.621455 -11.971480 +v 0.116604 4.225614 -11.509084 +v 0.169092 3.561668 -11.074191 +v 0.254819 3.072582 -11.268055 +v 0.275272 2.933772 -11.308237 +v 0.192465 2.444295 -11.862893 +v 0.204702 2.695653 -11.894410 +v 0.232882 3.219802 -11.836754 +v 0.217427 2.932348 -11.868374 +v 0.253167 3.597077 -11.795255 +v 0.211290 3.368010 -11.182538 +v 0.184885 3.911345 -11.652169 +v 0.128595 3.848981 -12.513577 +v 0.120727 4.235218 -12.242529 +v 0.112976 2.927302 -12.325741 +v 0.110700 3.357044 -12.390697 +v 0.081326 5.676683 -14.001101 +v 0.075927 5.833146 -14.156075 +v 0.089506 5.439608 -13.766284 +v 0.084957 5.571456 -13.896873 +v 0.162261 4.510911 -12.879640 +v 0.093987 5.309763 -13.637678 +v 0.145428 4.179946 -12.696609 +v 0.131875 4.526005 -12.471864 +v 0.143023 4.816792 -12.701199 +v 0.104550 5.731641 -13.350189 +v 0.102228 5.805183 -13.450114 +v 0.093592 5.688319 -13.673494 +v 0.097028 5.585624 -13.558237 +v 0.040805 5.916960 -14.223951 +v 0.079469 6.066023 -14.227453 +v 0.073414 6.154620 -14.312218 +v 0.021007 6.282511 -14.437347 +v 0.009243 6.308505 -14.400448 +v 0.068424 6.190806 -14.020712 +v 0.053877 7.509920 -1.293559 +v 0.034011 7.494805 -1.374483 +v 0.039915 7.270251 -1.342484 +v 0.072439 7.257837 -1.214364 +v 0.416343 1.383552 -5.789503 +v 0.586722 1.543770 -5.707937 +v 0.643920 1.663434 -5.767154 +v 0.452082 1.560486 -6.047740 +v 1.496535 1.968105 6.182719 +v 1.460775 2.284230 6.548746 +v 1.462881 2.146295 6.001260 +v 1.518408 1.834275 6.360049 +v 1.489218 2.066433 6.672647 +v 1.215084 1.289559 7.014496 +v 1.152581 1.355795 7.198538 +v 1.354932 1.393737 6.996946 +v 1.411242 1.540806 6.934395 +v 1.470906 1.663032 6.876076 +v 1.490700 1.785258 6.817786 +v 1.117093 1.256835 6.880019 +v 1.233660 1.231206 6.897646 +v 1.100290 1.242978 6.829710 +v 1.058812 1.276579 6.790954 +v 1.059250 1.325840 6.844145 +v 0.992823 1.309986 6.687014 +v 1.015734 1.372476 6.709156 +v 0.999661 1.469268 6.815123 +v 0.965125 1.541031 6.771355 +v 0.961719 1.420638 6.642830 +v 0.851607 1.595154 7.107407 +v 0.898041 1.513902 7.139175 +v 0.781488 1.602271 7.272047 +v 0.412443 2.112591 7.154447 +v 0.588895 2.059020 6.898893 +v 0.412446 2.112591 5.349350 +v 0.588898 2.059020 5.340304 +v 0.765351 2.005449 5.331259 +v 0.963423 1.682241 5.311613 +v 0.963423 1.682241 6.087290 +v 0.765348 2.005449 6.643341 +v 0.913014 1.292895 5.308463 +v 3.201479 -0.661389 0.974183 +v 3.128219 -0.683658 0.974903 +v 3.282719 -0.871644 0.887531 +v 3.289470 -0.788454 0.829556 +v 2.980469 -0.503025 1.020530 +v 3.051839 -0.501525 0.902843 +v 3.270959 -1.107684 2.197226 +v 2.989106 -0.738087 2.496668 +v 3.123149 -0.620421 2.442190 +v 3.399539 -0.975264 2.150519 +v 3.577529 -1.449453 1.843527 +v 3.640260 -1.341453 1.789262 +v 3.862500 -1.742493 1.471377 +v 3.888840 -1.679403 1.427447 +v 1.969389 1.204242 1.832933 +v 2.118842 0.996459 1.785515 +v 2.264591 1.020273 2.604362 +v 2.096177 1.258239 2.581310 +v 2.107220 1.085553 3.333797 +v 2.230508 0.841911 3.239237 +v 1.909029 0.794721 3.572717 +v 2.043056 0.602232 3.425926 +v 2.405988 0.521607 3.079754 +v 2.258036 0.370140 3.203926 +v 2.506124 0.038721 3.010214 +v 2.645082 0.165009 2.904071 +v 2.746841 -0.345042 2.773072 +v 2.872814 -0.223458 2.683174 +v 2.686013 0.298284 2.564276 +v 3.020550 -0.283113 2.271880 +v 3.505139 -0.989130 1.733307 +v 3.889230 -1.567923 1.281458 +v 1.850049 1.137786 1.362035 +v 1.960791 0.995499 1.249865 +v 2.089100 0.694719 1.108394 +v 2.312772 0.717237 1.761527 +v 2.468390 0.671649 2.699714 +v 2.554571 0.405798 1.706570 +v 2.919338 -0.112050 1.511024 +v 3.420001 -0.813168 1.165130 +v 3.819989 -1.405684 0.847520 +v 4.137540 -1.898160 0.962066 +v 4.086240 -1.783382 0.656018 +v 3.770459 -1.403163 0.617771 +v 4.078771 -1.824630 0.491603 +v 4.086030 -1.799280 0.539087 +v 3.794130 -1.389573 0.685667 +v 3.468899 -1.017420 0.749330 +v 2.852093 -0.234153 0.991595 +v 2.794952 -0.141840 1.111931 +v 2.358732 0.381360 1.128905 +v 2.650146 0.027240 1.077374 +v 1.746030 1.071669 1.149857 +v 1.830111 0.988317 1.006133 +v 4.252350 -2.003429 0.610364 +v 4.266840 -2.039190 0.523544 +v 4.320294 -2.114246 0.595010 +v 4.187521 -1.927890 0.515990 +v 4.165111 -1.983180 1.051874 +v 4.123470 -2.020200 1.043069 +v 4.330979 -2.125949 0.594299 +v 4.362630 -2.199330 0.578303 +v 4.308361 -2.145150 0.588410 +v 4.301910 -2.150340 0.671981 +v 4.275240 -2.130301 0.753287 +v 4.301790 -2.106300 0.758531 +v 4.331640 -2.150850 0.521714 +v 4.276920 -2.078250 0.493781 +v 4.188666 -1.964934 0.485663 +v 4.269990 -2.042521 0.760736 +v 4.023631 -1.833960 0.632639 +v 4.050271 -1.827840 0.525740 +v 3.742769 -1.429323 0.663605 +v 3.743400 -1.569453 1.029653 +v 4.156621 -1.952369 0.505541 +v 4.240951 -2.059650 0.515363 +v 4.292340 -2.125350 0.538499 +v 4.221210 -2.076780 0.694529 +v 4.061970 -1.962540 0.944636 +v 3.288121 -1.071435 1.344254 +v 3.437219 -1.059630 0.800156 +v 4.188666 -1.964934 0.485663 +v 1.789500 0.492576 3.077303 +v 2.021438 0.293649 2.923781 +v 2.269356 -0.020310 2.759306 +v 2.571374 -0.390084 2.567995 +v 2.881896 -0.750588 2.342972 +v 3.188609 -1.114308 2.071943 +v 3.507779 -1.461003 1.752681 +v 3.815399 -1.740183 1.411233 +v 1.826490 0.666888 2.102021 +v 2.162834 0.340101 1.936583 +v 2.688383 -0.335601 1.713415 +v 2.832726 -0.322395 1.066157 +v 2.725658 -0.176301 1.201262 +v 2.550195 0.018885 1.138057 +v 2.283752 0.336366 1.190807 +v 2.016848 0.639942 1.180196 +v 1.783944 0.885870 1.164173 +v 1.678605 0.962046 1.308467 +v 1.672338 0.741063 2.356685 +v 1.667424 0.575112 3.222287 +v 1.186713 0.659090 -5.687936 +v 0.960231 1.129269 -5.263156 +v 0.865635 1.277337 -5.668992 +v 0.995046 1.007676 -6.005297 +v 0.966444 0.936024 -5.301796 +v 0.685800 1.453947 -6.034034 +v 0.573192 1.481184 -6.379386 +v 0.622404 1.494018 -6.431498 +v 0.787827 1.223589 -6.341531 +v 0.705243 1.307037 -6.636847 +v 0.718074 1.244490 -6.686077 +v 0.810666 1.147398 -6.417789 +v 0.999078 0.911910 -6.064396 +v 0.750378 1.125795 -6.375820 +v 0.675096 1.219143 -6.663457 +v 0.556719 1.371750 -6.452497 +v 0.578964 1.277547 -6.066640 +v 0.928779 0.889239 -6.048467 +v 0.678477 1.161390 -5.599633 +v 1.121324 0.711048 -5.774669 +v 0.820116 0.957321 -5.293453 +v 0.567732 1.212900 -5.411834 +v 0.346654 1.467138 -6.156294 +v 0.317206 1.300648 -5.821917 +v 1.008521 2.366518 -4.631083 +v 0.925170 2.013060 -5.312743 +v 0.241227 1.373790 -6.264847 +v 0.218070 1.217745 -5.854329 +v 0.396459 1.139865 -5.260213 +v 0.284625 1.092780 -5.221767 +v 0.172791 1.045695 -5.183322 +v 0.211590 -0.033660 1.556562 +v 0.430641 -0.027180 2.549786 +v 0.609757 0.016023 2.548962 +v 0.773103 0.073425 3.357169 +v 0.918921 0.158022 3.358205 +v 0.196011 0.005506 0.863270 +v 0.392019 0.028131 0.895826 +v 0.575118 0.080179 0.918846 +v 0.758217 0.132228 0.941867 +v 0.600370 0.037087 1.555143 +v 0.777564 0.078411 1.548149 +v 0.788874 0.059226 2.548139 +v 0.935199 0.144070 2.546778 +v 1.308825 0.491214 3.372017 +v 1.064739 0.242619 3.359240 +v 1.032234 0.289026 3.989090 +v 1.304421 0.560907 3.959061 +v 1.405443 0.598095 3.375676 +v 1.448787 0.697206 3.941420 +v 1.381071 0.634992 2.528726 +v 1.303059 0.502350 2.539541 +v 1.459785 0.722658 2.503244 +v 1.501092 0.655275 3.364607 +v 1.365468 0.829185 1.432706 +v 1.468077 0.974406 1.417931 +v 1.375167 0.932265 0.949484 +v 1.554951 0.739275 3.759800 +v 1.278150 0.632409 1.461680 +v 1.081524 0.228915 2.545418 +v 0.921066 0.176502 1.530188 +v 0.918178 0.271876 0.856607 +v 1.078140 0.411525 0.771347 +v 1.260477 0.715602 0.833048 +v 1.583664 1.224930 0.758084 +v 1.749123 1.582761 0.783929 +v 1.064568 0.274593 1.512227 +v 1.575564 1.222809 1.062590 +v 1.815894 1.720821 1.598737 +v 1.793781 1.959261 0.752549 +v 1.663602 2.862522 2.582717 +v 1.377438 3.473604 2.586371 +v 1.629981 2.931231 1.681139 +v 1.790073 2.346420 1.642211 +v 1.816749 2.018694 1.612595 +v 1.731918 1.429797 1.406207 +v 1.664655 1.142403 1.264405 +v 1.764636 1.265703 1.438313 +v 1.574523 1.001313 1.415906 +v 1.552578 0.759345 2.449883 +v 1.832733 2.327961 2.577544 +v 1.890201 2.046729 2.581160 +v 1.955034 1.808913 2.586737 +v 1.897287 1.951347 3.305026 +v 1.918854 1.687287 3.325937 +v 1.828626 2.249058 3.285529 +v 1.710846 2.789400 3.272929 +v 1.820976 2.185446 3.720740 +v 1.857159 1.867578 3.738680 +v 1.740387 2.726049 3.720050 +v 1.868079 1.545960 1.838060 +v 1.876644 1.369989 1.853147 +v 2.011919 1.605765 2.592380 +v 2.000865 1.466409 3.349817 +v 1.851708 1.572138 3.741349 +v 1.842456 1.786473 4.098889 +v 1.833354 1.472112 4.068230 +v 1.730697 1.218675 4.008260 +v 1.830999 1.326228 3.727130 +v 1.590240 0.654744 3.308987 +v 1.684869 0.771348 3.694189 +v 1.600989 0.895854 4.020049 +v 1.713702 1.007112 3.905900 +v 1.859205 1.093770 3.668690 +v 2.055341 1.253532 3.344537 +v 1.992765 1.423911 2.593226 +v 0.958122 1.974417 -4.877053 +v 0.980023 2.372314 -4.865833 +v 4.252350 -2.003429 0.610364 +v 4.330979 -2.125949 0.594299 +v 4.320294 -2.114246 0.595010 +v 4.188666 -1.964934 0.485663 +v 4.292340 -2.125350 0.538499 +v 4.240951 -2.059650 0.515363 +v 4.156621 -1.952369 0.505541 +v 4.023631 -1.833960 0.632639 +v 4.188666 -1.964934 0.485663 +v 1.014645 1.147099 6.905239 +v 1.107102 1.071007 6.816199 +v 1.355196 1.020312 6.341837 +v 1.424016 1.019949 6.003920 +v 1.309659 0.871464 6.043759 +v 1.257900 0.911613 6.402407 +v 1.322058 1.084082 6.520927 +v 1.212747 0.958972 6.568310 +v 1.139373 1.114092 6.716713 +v 1.300722 1.125141 6.636235 +v 1.181331 0.991924 6.683746 +v 1.041564 1.173102 6.803680 +v 0.977466 1.219512 6.820902 +v 0.941052 1.183395 6.938568 +v 0.853527 1.171917 7.043089 +v 0.852691 1.171915 7.041536 +v 0.901610 1.180493 6.931842 +v 0.853527 1.171917 7.043089 +v 0.904908 1.151766 7.055986 +v 0.849483 1.169967 7.049246 +v 0.755436 1.154754 6.868383 +v 0.866790 1.181964 6.742342 +v 0.885624 1.217190 6.765932 +v 0.782742 1.171746 6.911570 +v 0.930453 1.256781 6.709229 +v 1.087644 1.189302 6.756611 +v 0.383322 1.033771 7.342098 +v 0.952435 1.218890 6.806871 +v 1.015158 1.235376 6.785358 +v 0.974512 1.245647 6.748828 +v 1.024785 1.269969 6.774074 +v 0.976683 1.263244 6.737537 +v 1.015158 1.235376 6.785358 +v 1.058812 1.242488 6.790955 +v 0.913011 1.288047 6.617625 +v 0.733692 0.972588 6.216080 +v 0.913011 1.292895 5.997829 +v 0.597203 0.874083 6.425976 +v 0.426441 0.750844 6.688579 +v 0.508698 0.810210 6.562080 +v 0.635037 1.084567 6.977869 +v 0.568074 1.071054 7.074764 +v 0.426441 0.750844 6.688579 +v 1.320132 1.194480 6.746542 +v 1.149969 1.186905 6.775416 +v 1.205031 1.195125 6.831127 +v 1.373052 1.297614 6.850214 +v 1.436730 1.310796 6.667574 +v 1.439730 1.422741 6.753317 +v 1.499103 1.480170 6.445370 +v 1.461682 1.378555 6.578679 +v 1.483521 1.525296 6.661520 +v 1.507065 1.627854 6.569756 +v 1.544256 1.637781 6.191420 +v 1.555581 1.421796 6.071539 +v 1.493613 1.310844 6.366139 +v 1.445415 1.241552 6.514871 +v 1.413315 1.195401 6.613930 +v 1.448541 1.149045 6.332810 +v 1.366415 1.135764 6.501388 +v 1.518873 1.203369 6.011809 +v 1.563156 1.735368 5.993540 +v 1.590555 1.486725 5.854159 +v 1.554864 1.240575 5.775379 +v 1.455078 1.031064 5.753928 +v 1.616820 1.542645 5.616738 +v 1.559022 1.818693 5.757799 +v 1.599795 1.269099 5.529920 +v 1.507164 1.030659 5.497880 +v 1.401606 0.822217 5.525060 +v 1.332588 0.864427 5.782099 +v 0.423177 -0.004236 1.562138 +v 0.150588 5.710160 0.246983 +v 0.075298 5.718751 0.311262 +v 0.065976 6.198860 0.073509 +v 0.176378 6.242195 -0.651696 +v 0.000000 7.459325 -0.804931 +v 0.000000 7.555954 -0.874842 +v 0.000000 7.619603 -0.960261 +v 0.016736 7.686204 -1.041330 +v 0.000000 7.645075 -0.942380 +v 0.469302 0.913491 -4.199384 +v 0.764140 1.127336 -4.275962 +v 0.446095 2.955976 -8.921977 +v 0.363731 2.344948 -8.810444 +v 0.216210 2.075158 -8.851757 +v 0.289971 2.210052 -8.831100 +v 0.309571 3.131209 -8.912016 +v 0.299205 3.108810 -9.218320 +v 0.249375 3.229648 -8.748882 +v 0.219987 2.500278 9.467626 +v 0.000000 2.662065 9.220246 +v 0.000000 2.754720 8.943106 +v 0.000000 2.850825 8.621567 +v 0.000000 2.959899 8.257607 +v 0.000000 3.008577 8.074757 +v 0.000000 3.057255 7.891907 +v 0.000000 1.816617 9.143866 +v 0.000000 2.133414 9.554536 +v 0.000000 2.219991 9.608235 +v 0.000000 2.306569 9.661936 +v 0.000000 0.258118 7.126908 +v 0.708007 3.559297 -4.715628 +v 0.531130 3.693990 -4.729585 +v 0.354254 3.828682 -4.743542 +v 0.937377 2.800413 -4.885390 +v 0.722898 2.153667 8.926217 +v 0.906180 2.177211 8.611516 +v 0.526008 2.129730 9.235456 +v 1.025931 2.209278 8.254758 +v 0.499196 2.726589 -9.837730 +v 0.286824 3.115765 -9.627218 +v 0.221707 2.164950 -9.514498 +v 0.283510 2.280662 -9.568190 +v 0.211740 3.181280 -9.609469 +v 0.249453 3.193700 -10.648869 +v 0.200894 3.231595 -10.159510 +v 0.498264 2.717199 -10.036839 +v 0.277131 2.550299 -11.319557 +v 0.215049 2.032389 -11.217010 +v 0.100677 5.476114 -13.433351 +v 0.107367 5.642466 -13.229023 +v 0.085917 5.807778 -13.824516 +v 0.090508 5.938873 -13.647932 +v 0.078610 5.938566 -13.979771 +v 0.081294 6.043985 -13.803465 +v 0.077698 5.949584 -14.191765 +v 0.076278 6.033490 -14.051927 +v 0.073947 6.120568 -14.142096 +v 0.074859 6.117395 -13.912088 +v 0.036717 6.193822 -14.246683 +v 0.046878 6.221632 -14.364780 +v 0.023449 6.253093 -14.326900 +v 0.362802 2.325438 -8.666195 +v 0.282760 2.186629 -8.694741 +v 0.084449 3.549633 -8.596906 +v 0.073673 3.541039 -8.726732 +v 0.034154 1.996304 -9.525320 +v 0.049072 3.643200 -8.454896 +v 0.043497 3.626302 -8.819245 +v 0.051776 3.631310 -8.737202 +v 0.025983 3.830602 -8.749534 +v 0.058158 3.637040 -8.600517 +v 1.008419 1.403086 7.464851 +v 0.966759 1.384145 7.424916 +v 0.925099 1.402957 7.385004 +v 1.151711 1.640153 7.684997 +v 1.173571 1.787477 7.727949 +v 1.185924 1.944414 7.749385 +v 0.102238 0.957934 7.753042 +v 0.000000 0.880619 7.787120 +v 0.546660 0.957004 7.598269 +v 0.499515 1.007318 7.593683 +v 0.467860 1.050831 7.219772 +v 0.540916 0.833460 5.329064 +v 0.901661 1.507277 7.142295 +v 0.908535 1.447106 7.257532 +v 0.893449 1.419157 7.361999 +v 0.862518 1.446621 7.337930 +v 0.901646 1.507411 7.142037 +v 0.096741 1.984336 -9.034204 +v 0.038314 1.960334 -8.873912 +v 0.049339 1.832943 -9.453801 +v 0.046161 1.691904 -9.454356 +v 0.080262 1.662603 -9.361574 +v 0.108833 1.819900 -9.305342 +v 0.048005 1.805043 -9.149770 +v 0.000000 1.906072 -8.889236 +v 0.060755 1.925107 -9.059778 +v 0.038735 1.835894 -9.487392 +v 0.030116 1.690160 -9.493574 +v 0.005835 1.480627 -9.488686 +v 0.000000 1.957512 -8.823058 +v 0.000000 0.930195 7.784478 +v 0.000000 7.555954 -0.874842 +v -0.868781 0.448350 -0.875571 +v 0.000000 0.169528 -0.844047 +v -0.454360 0.220353 -0.813706 +v -1.031705 3.993166 -0.964750 +v -1.237027 3.612466 -0.989064 +v -1.661401 1.951120 -0.968175 +v -1.630474 2.330482 -0.974212 +v -1.439719 2.948037 -0.981709 +v -1.155404 0.762097 -0.898300 +v -1.280609 1.021128 -0.911203 +v -1.417955 1.295166 -0.930249 +v -1.583639 1.594462 -0.954546 +v -0.787552 4.268670 -0.905779 +v -0.430088 4.600734 -0.804592 +v -0.565465 4.464381 -0.834402 +v -0.227183 0.194941 -0.828877 +v -0.661571 0.334351 -0.844639 +v 0.868782 0.448350 -0.875571 +v 1.155405 0.762097 -0.898300 +v 0.661571 0.334351 -0.844639 +v 0.454360 0.220353 -0.813706 +v 0.227183 0.194941 -0.828876 +v 1.031705 3.993166 -0.964750 +v 1.237027 3.612466 -0.989064 +v 1.439719 2.948037 -0.981709 +v 1.661401 1.951120 -0.968175 +v 1.630474 2.330482 -0.974212 +v 1.280610 1.021128 -0.911203 +v 1.417956 1.295166 -0.930249 +v 1.583640 1.594462 -0.954546 +v 0.787552 4.268670 -0.905779 +v 0.430089 4.600734 -0.804592 +v 0.565465 4.464381 -0.834402 +v 0.339055 4.626878 -0.883805 +v 1.071486 4.043756 0.186888 +v 0.812206 4.317882 0.248249 +v 1.299117 3.659781 0.156041 +v 1.534188 2.971503 0.158790 +v 1.726299 2.340868 0.161049 +v 0.581277 4.505805 0.255518 +v 0.196009 0.068451 0.294599 +v 0.423579 0.113088 0.328154 +v 0.651147 0.157726 0.361710 +v 0.832396 0.288624 0.296040 +v 1.013646 0.419521 0.230370 +v 1.235431 0.729706 0.247088 +v 1.352953 0.969690 0.295770 +v 1.544214 1.246684 0.185180 +v 1.708797 1.578870 0.184397 +v 1.756635 1.955488 0.161469 +v -1.071485 4.043756 0.186888 +v -1.299116 3.659781 0.156041 +v -1.534187 2.971503 0.158790 +v -0.812206 4.317882 0.248249 +v -0.581276 4.505805 0.255518 +v -0.196009 0.068451 0.294599 +v -0.651146 0.157726 0.361710 +v -1.013645 0.419521 0.230370 +v -1.235431 0.729706 0.247088 +v -1.352953 0.969690 0.295770 +v -1.544213 1.246684 0.185180 +v -1.708796 1.578870 0.184397 +v -1.756634 1.955488 0.161469 +v -1.726298 2.340868 0.161049 +v -0.423579 0.113088 0.328154 +v -0.832396 0.288624 0.296040 +v 0.000000 0.042257 0.294287 +v 0.000000 0.842044 7.788106 +v -0.118757 0.908146 7.776113 +v -0.118757 0.908146 7.776113 +v 0.000000 0.842044 7.788106 +v 0.000000 7.491805 -0.793408 +v 0.000000 6.981207 -0.353604 +v 0.000000 6.981207 -0.353604 +v 0.000000 7.491805 -0.793408 +v 0.000000 6.981207 -0.353604 +v 0.000000 7.555954 -0.874842 +v 0.000000 5.732892 -13.099184 +v 0.000000 5.809293 -13.218571 +v 0.000000 5.809293 -13.218571 +v 0.000000 5.732892 -13.099184 +v 0.000000 0.842044 7.788106 +v 0.118757 0.908146 7.776113 +v 0.118757 0.908146 7.776113 +v 0.000000 0.842044 7.788106 +# 2735 vertices + +vt 0.590928 -1.494311 0.000000 +vt 0.592165 -1.441361 0.000000 +vt 0.606540 -1.500347 0.000000 +vt 0.607346 -1.527874 0.000000 +vt 0.592921 -1.515487 0.000000 +vt 0.582566 -1.550740 0.000000 +vt 0.562326 -1.541520 0.000000 +vt 0.522142 -1.507261 0.000000 +vt 0.519947 -1.446893 0.000000 +vt 0.475431 -1.499751 0.000000 +vt 0.473388 -1.444316 0.000000 +vt 0.443607 -1.443343 0.000000 +vt 0.442597 -1.386132 0.000000 +vt 0.416770 -1.381189 0.000000 +vt 0.415531 -1.294937 0.000000 +vt 0.374740 -1.302715 0.000000 +vt 0.372185 -1.212062 0.000000 +vt 0.344024 -1.223621 0.000000 +vt 0.523532 -1.610601 0.000000 +vt 0.476868 -1.634191 0.000000 +vt 0.479462 -1.691017 0.000000 +vt 0.524654 -1.567310 0.000000 +vt 0.475402 -1.584196 0.000000 +vt 0.476107 -1.541826 0.000000 +vt 0.446946 -1.501985 0.000000 +vt 0.416933 -1.439118 0.000000 +vt 0.374791 -1.385177 0.000000 +vt 0.347571 -1.314428 0.000000 +vt 0.315913 -1.324631 0.000000 +vt 0.316114 -1.234680 0.000000 +vt 0.294725 -1.240592 0.000000 +vt 0.296242 -1.169249 0.000000 +vt 0.375255 -1.444526 0.000000 +vt 0.346700 -1.388624 0.000000 +vt 0.313735 -1.397374 0.000000 +vt 0.292049 -1.333177 0.000000 +vt 0.286418 -1.410687 0.000000 +vt 0.312322 -1.442898 0.000000 +vt 0.346050 -1.440139 0.000000 +vt 0.375707 -1.511823 0.000000 +vt 0.415135 -1.503257 0.000000 +vt 0.447038 -1.552912 0.000000 +vt 0.447547 -1.607413 0.000000 +vt 0.446338 -1.654965 0.000000 +vt 0.446752 -1.715340 0.000000 +vt 0.406444 -1.674046 0.000000 +vt 0.344433 -1.492112 0.000000 +vt 0.409720 -1.620384 0.000000 +vt 0.371450 -1.624734 0.000000 +vt 0.414354 -1.561123 0.000000 +vt 0.380545 -1.565754 0.000000 +vt 0.358791 -1.572479 0.000000 +vt 0.346300 -1.533487 0.000000 +vt 0.333462 -1.519934 0.000000 +vt 0.340622 -1.555324 0.000000 +vt 0.328430 -1.542978 0.000000 +vt 0.336681 -1.565476 0.000000 +vt 0.325683 -1.555901 0.000000 +vt 0.305091 -1.545244 0.000000 +vt 0.304983 -1.561234 0.000000 +vt 0.336735 -1.586342 0.000000 +vt 0.342602 -1.582103 0.000000 +vt 0.326903 -1.614759 0.000000 +vt 0.253071 -1.632311 0.000000 +vt 0.245566 -1.648103 0.000000 +vt 0.267425 -1.661375 0.000000 +vt 0.273240 -1.646918 0.000000 +vt 0.263867 -1.616103 0.000000 +vt 0.279274 -1.636400 0.000000 +vt 0.302187 -1.638321 0.000000 +vt 0.303563 -1.630440 0.000000 +vt 0.331470 -1.622061 0.000000 +vt 0.361689 -1.670706 0.000000 +vt 0.341241 -1.656297 0.000000 +vt 0.300284 -1.652797 0.000000 +vt 0.273935 -1.564515 0.000000 +vt 0.278446 -1.584978 0.000000 +vt 0.254884 -1.587066 0.000000 +vt 0.242067 -1.603366 0.000000 +vt 0.235244 -1.625701 0.000000 +vt 0.236464 -1.664327 0.000000 +vt 0.262601 -1.682771 0.000000 +vt 0.297502 -1.680034 0.000000 +vt 0.335429 -1.696165 0.000000 +vt 0.331033 -1.760641 0.000000 +vt 0.292504 -1.772077 0.000000 +vt 0.252555 -1.551578 0.000000 +vt 0.239698 -1.571025 0.000000 +vt 0.227602 -1.598818 0.000000 +vt 0.219895 -1.652916 0.000000 +vt 0.234426 -1.708492 0.000000 +vt 0.260252 -1.719750 0.000000 +vt 0.294263 -1.717558 0.000000 +vt 0.259273 -1.773625 0.000000 +vt 0.233188 -1.769038 0.000000 +vt 0.216253 -1.700998 0.000000 +vt 0.213807 -1.768662 0.000000 +vt 0.291767 -1.838698 0.000000 +vt 0.259684 -1.836845 0.000000 +vt 0.234681 -1.836018 0.000000 +vt 0.212716 -1.832632 0.000000 +vt 0.403717 -1.731732 0.000000 +vt 0.358570 -1.734979 0.000000 +vt 0.330536 -1.820323 0.000000 +vt 0.292140 -1.903167 0.000000 +vt 0.260174 -1.902717 0.000000 +vt 0.233395 -1.901878 0.000000 +vt 0.209900 -1.900594 0.000000 +vt 0.200128 -1.830599 0.000000 +vt 0.204227 -1.761708 0.000000 +vt 0.207223 -1.704071 0.000000 +vt 0.189831 -1.791338 0.000000 +vt 0.449378 -1.773914 0.000000 +vt 0.482736 -1.745417 0.000000 +vt 0.487142 -1.784114 0.000000 +vt 0.525027 -1.744065 0.000000 +vt 0.402566 -1.800541 0.000000 +vt 0.351063 -1.803245 0.000000 +vt 0.331763 -1.886241 0.000000 +vt 0.294060 -1.998123 0.000000 +vt 0.261291 -1.998123 0.000000 +vt 0.354697 -1.861627 0.000000 +vt 0.335668 -1.963089 0.000000 +vt 0.365162 -1.918325 0.000000 +vt 0.413414 -1.863550 0.000000 +vt 0.454220 -1.818596 0.000000 +vt 0.233092 -1.998123 0.000000 +vt 0.207490 -1.998123 0.000000 +vt 0.196899 -1.903391 0.000000 +vt 0.187704 -1.838594 0.000000 +vt 0.179061 -1.788542 0.000000 +vt 0.181658 -1.742250 0.000000 +vt 0.170196 -1.741237 0.000000 +vt 0.174723 -1.690471 0.000000 +vt 0.161322 -1.687738 0.000000 +vt 0.165349 -1.649178 0.000000 +vt 0.150577 -1.647974 0.000000 +vt 0.193355 -1.998123 0.000000 +vt 0.184304 -1.916180 0.000000 +vt 0.176877 -1.841777 0.000000 +vt 0.167131 -1.791695 0.000000 +vt 0.155805 -1.744368 0.000000 +vt 0.143720 -1.690302 0.000000 +vt 0.125860 -1.643955 0.000000 +vt 0.132003 -1.610751 0.000000 +vt 0.082223 -1.664710 0.000000 +vt 0.075563 -1.699664 0.000000 +vt 0.089610 -1.705625 0.000000 +vt 0.097597 -1.668863 0.000000 +vt 0.105760 -1.716434 0.000000 +vt 0.121155 -1.684910 0.000000 +vt 0.118027 -1.742299 0.000000 +vt 0.139482 -1.742248 0.000000 +vt 0.151598 -1.793337 0.000000 +vt 0.163360 -1.844024 0.000000 +vt 0.171416 -1.921191 0.000000 +vt 0.181675 -1.998123 0.000000 +vt 0.097411 -1.747905 0.000000 +vt 0.119529 -1.906975 0.000000 +vt 0.122115 -1.998123 0.000000 +vt 0.096454 -1.979342 0.000000 +vt 0.141310 -1.918942 0.000000 +vt 0.146040 -1.838457 0.000000 +vt 0.132669 -1.790749 0.000000 +vt 0.110892 -1.788463 0.000000 +vt 0.090330 -1.781697 0.000000 +vt 0.081150 -1.740666 0.000000 +vt 0.067490 -1.733082 0.000000 +vt 0.063452 -1.695331 0.000000 +vt 0.056688 -1.727679 0.000000 +vt 0.083082 -1.815702 0.000000 +vt 0.073683 -1.773260 0.000000 +vt 0.061013 -1.766202 0.000000 +vt 0.067845 -1.805737 0.000000 +vt 0.077691 -1.847184 0.000000 +vt 0.102912 -1.824921 0.000000 +vt 0.095799 -1.893192 0.000000 +vt 0.075643 -1.880779 0.000000 +vt 0.062982 -1.836631 0.000000 +vt 0.055767 -1.796061 0.000000 +vt 0.051101 -1.759935 0.000000 +vt 0.047642 -1.721780 0.000000 +vt 0.054948 -1.692947 0.000000 +vt 0.061178 -1.665146 0.000000 +vt 0.069144 -1.663610 0.000000 +vt 0.055851 -1.664450 0.000000 +vt 0.066297 -1.639099 0.000000 +vt 0.048154 -1.689095 0.000000 +vt 0.042312 -1.717822 0.000000 +vt 0.043389 -1.752899 0.000000 +vt 0.046475 -1.787097 0.000000 +vt 0.051095 -1.823497 0.000000 +vt 0.059784 -1.865820 0.000000 +vt 0.076566 -1.916809 0.000000 +vt 0.079779 -1.956599 0.000000 +vt 0.040757 -1.808938 0.000000 +vt 0.045238 -1.846102 0.000000 +vt 0.058445 -1.895681 0.000000 +vt 0.058582 -1.925624 0.000000 +vt 0.042193 -1.871274 0.000000 +vt 0.040662 -1.895972 0.000000 +vt 0.031305 -1.850318 0.000000 +vt 0.035047 -1.828789 0.000000 +vt 0.028504 -1.814632 0.000000 +vt 0.032866 -1.796256 0.000000 +vt 0.023777 -1.801886 0.000000 +vt 0.027396 -1.785532 0.000000 +vt 0.038320 -1.777341 0.000000 +vt 0.037770 -1.745502 0.000000 +vt 0.051476 -1.648531 0.000000 +vt 0.061158 -1.640058 0.000000 +vt 0.064489 -1.617326 0.000000 +vt 0.038954 -1.694980 0.000000 +vt 0.026146 -1.737531 0.000000 +vt 0.020882 -1.767666 0.000000 +vt 0.015974 -1.787372 0.000000 +vt 0.017825 -1.821418 0.000000 +vt 0.024378 -1.831994 0.000000 +vt 0.026290 -1.866354 0.000000 +vt 0.011290 -1.799756 0.000000 +vt 0.014673 -1.763152 0.000000 +vt 0.022742 -1.726604 0.000000 +vt 0.041762 -1.668921 0.000000 +vt 0.056991 -1.617540 0.000000 +vt 0.055156 -1.596577 0.000000 +vt 0.008746 -1.783705 0.000000 +vt 0.125406 -1.833760 0.000000 +vt 0.186903 -1.696989 0.000000 +vt 0.192653 -1.751974 0.000000 +vt 0.197694 -1.705134 0.000000 +vt 0.190461 -1.656656 0.000000 +vt 0.140107 -1.998123 0.000000 +vt 0.158115 -1.923390 0.000000 +vt 0.168522 -1.998123 0.000000 +vt 0.154804 -1.998123 0.000000 +vt 0.594770 -1.604048 0.000000 +vt 0.599111 -1.574327 0.000000 +vt 0.581246 -1.604864 0.000000 +vt 0.611623 -1.555549 0.000000 +vt 0.617143 -1.590482 0.000000 +vt 0.591557 -1.635438 0.000000 +vt 0.570062 -1.638296 0.000000 +vt 0.564251 -1.673203 0.000000 +vt 0.552353 -1.647222 0.000000 +vt 0.548140 -1.689670 0.000000 +vt 0.520854 -1.663489 0.000000 +vt 0.614482 -1.445965 0.000000 +vt 0.618470 -1.523681 0.000000 +vt 0.631315 -1.564903 0.000000 +vt 0.622697 -1.619578 0.000000 +vt 0.593698 -1.658245 0.000000 +vt 0.565907 -1.693971 0.000000 +vt 0.549731 -1.706705 0.000000 +vt 0.521232 -1.711851 0.000000 +vt 0.639041 -1.598096 0.000000 +vt 0.666089 -1.571621 0.000000 +vt 0.658095 -1.531948 0.000000 +vt 0.638163 -1.465243 0.000000 +vt 0.618935 -1.386380 0.000000 +vt 0.592883 -1.381416 0.000000 +vt 0.592464 -1.318407 0.000000 +vt 0.618369 -1.325547 0.000000 +vt 0.591979 -1.251556 0.000000 +vt 0.617392 -1.264145 0.000000 +vt 0.591289 -1.205736 0.000000 +vt 0.616074 -1.220584 0.000000 +vt 0.593173 -1.154422 0.000000 +vt 0.615889 -1.171577 0.000000 +vt 0.599003 -1.119578 0.000000 +vt 0.617705 -1.144318 0.000000 +vt 0.662816 -1.174689 0.000000 +vt 0.664387 -1.192741 0.000000 +vt 0.639267 -1.188892 0.000000 +vt 0.640050 -1.162971 0.000000 +vt 0.638607 -1.234041 0.000000 +vt 0.640213 -1.276789 0.000000 +vt 0.644697 -1.331903 0.000000 +vt 0.648125 -1.395863 0.000000 +vt 0.680287 -1.437896 0.000000 +vt 0.688807 -1.513222 0.000000 +vt 0.667975 -1.235484 0.000000 +vt 0.684586 -1.189772 0.000000 +vt 0.673988 -1.159874 0.000000 +vt 0.695542 -1.554549 0.000000 +vt 0.717034 -1.557598 0.000000 +vt 0.713097 -1.522795 0.000000 +vt 0.706473 -1.452648 0.000000 +vt 0.676310 -1.342834 0.000000 +vt 0.670685 -1.285197 0.000000 +vt 0.703277 -1.354226 0.000000 +vt 0.697273 -1.291975 0.000000 +vt 0.691630 -1.240725 0.000000 +vt 0.674080 -1.144837 0.000000 +vt 0.676805 -1.106695 0.000000 +vt 0.684907 -1.100333 0.000000 +vt 0.687126 -1.102847 0.000000 +vt 0.696252 -1.114714 0.000000 +vt 0.525086 -1.044053 0.000000 +vt 0.563733 -1.087789 0.000000 +vt 0.387381 -1.910405 0.000000 +vt 0.386453 -1.907733 0.000000 +vt 0.381982 -1.906575 0.000000 +vt 0.401941 -1.914162 0.000000 +vt 0.385126 -1.918928 0.000000 +vt 0.387647 -1.921755 0.000000 +vt 0.403322 -1.938097 0.000000 +vt 0.402613 -1.943667 0.000000 +vt 0.388820 -1.906694 0.000000 +vt 0.403451 -1.902720 0.000000 +vt 0.402483 -1.908047 0.000000 +vt 0.482590 -1.959442 0.000000 +vt 0.514505 -1.955261 0.000000 +vt 0.498568 -1.893268 0.000000 +vt 0.472127 -1.908422 0.000000 +vt 0.443956 -1.916963 0.000000 +vt 0.452370 -1.966875 0.000000 +vt 0.427631 -1.953513 0.000000 +vt 0.424247 -1.916230 0.000000 +vt 0.423981 -1.902796 0.000000 +vt 0.442909 -1.895802 0.000000 +vt 0.478544 -1.886325 0.000000 +vt 0.520312 -1.930539 0.000000 +vt 0.428140 -1.964350 0.000000 +vt 0.459643 -1.989051 0.000000 +vt 0.493963 -1.994280 0.000000 +vt 0.529474 -1.991678 0.000000 +vt 0.559288 -1.991382 0.000000 +vt 0.553374 -1.951923 0.000000 +vt 0.530109 -1.922046 0.000000 +vt 0.553633 -1.895935 0.000000 +vt 0.543899 -1.879244 0.000000 +vt 0.519139 -1.835732 0.000000 +vt 0.552719 -1.821755 0.000000 +vt 0.583780 -1.705039 0.000000 +vt 0.581304 -1.706488 0.000000 +vt 0.572264 -1.735272 0.000000 +vt 0.574459 -1.739983 0.000000 +vt 0.561021 -1.778002 0.000000 +vt 0.566472 -1.785545 0.000000 +vt 0.564634 -1.841739 0.000000 +vt 0.539806 -1.787494 0.000000 +vt 0.551521 -1.751714 0.000000 +vt 0.566317 -1.717392 0.000000 +vt 0.577834 -1.695803 0.000000 +vt 0.585532 -1.692688 0.000000 +vt 0.424982 -1.892766 0.000000 +vt 0.445057 -1.879698 0.000000 +vt 0.476981 -1.872089 0.000000 +vt 0.067745 -1.582462 0.000000 +vt 0.074001 -1.578822 0.000000 +vt 0.076523 -1.563028 0.000000 +vt 0.068938 -1.540070 0.000000 +vt 0.069607 -1.555387 0.000000 +vt 0.072679 -1.535981 0.000000 +vt 0.061220 -1.556660 0.000000 +vt 0.061044 -1.573948 0.000000 +vt 0.071043 -1.515590 0.000000 +vt 0.076420 -1.531893 0.000000 +vt 0.067817 -1.520307 0.000000 +vt 0.061396 -1.519704 0.000000 +vt 0.057308 -1.526108 0.000000 +vt 0.056146 -1.561882 0.000000 +vt 0.055607 -1.579136 0.000000 +vt 0.049636 -1.491689 0.000000 +vt 0.040920 -1.488740 0.000000 +vt 0.039453 -1.493529 0.000000 +vt 0.031137 -1.491360 0.000000 +vt 0.033586 -1.499729 0.000000 +vt 0.047788 -1.495727 0.000000 +vt 0.048688 -1.504969 0.000000 +vt 0.055816 -1.500169 0.000000 +vt 0.063152 -1.506295 0.000000 +vt 0.065833 -1.501933 0.000000 +vt 0.045574 -1.511990 0.000000 +vt 0.058119 -1.496033 0.000000 +vt 0.031878 -1.507013 0.000000 +vt 0.016637 -1.502894 0.000000 +vt 0.016832 -1.492939 0.000000 +vt 0.021542 -1.486149 0.000000 +vt 0.031931 -1.485008 0.000000 +vt 0.042387 -1.483950 0.000000 +vt 0.051485 -1.487650 0.000000 +vt 0.060422 -1.491896 0.000000 +vt 0.068515 -1.497570 0.000000 +vt 0.074269 -1.510873 0.000000 +vt 0.001306 -1.494628 0.000000 +vt 0.044253 -1.476796 0.000000 +vt 0.022099 -1.478823 0.000000 +vt 0.012510 -1.479819 0.000000 +vt 0.001824 -1.483959 0.000000 +vt 0.064034 -1.453471 0.000000 +vt 0.075047 -1.460783 0.000000 +vt 0.083881 -1.432119 0.000000 +vt 0.056583 -1.474657 0.000000 +vt 0.046119 -1.469642 0.000000 +vt 0.034001 -1.470381 0.000000 +vt 0.012861 -1.471720 0.000000 +vt 0.002341 -1.473290 0.000000 +vt 0.002779 -1.464289 0.000000 +vt 0.063440 -1.485841 0.000000 +vt 0.054034 -1.481154 0.000000 +vt 0.066457 -1.479787 0.000000 +vt 0.075648 -1.484789 0.000000 +vt 0.072081 -1.491180 0.000000 +vt 0.084222 -1.466680 0.000000 +vt 0.093058 -1.481364 0.000000 +vt 0.082992 -1.498099 0.000000 +vt 0.078630 -1.504486 0.000000 +vt 0.081322 -1.526890 0.000000 +vt 0.094242 -1.442449 0.000000 +vt 0.104722 -1.461998 0.000000 +vt 0.113933 -1.441943 0.000000 +vt 0.101572 -1.416095 0.000000 +vt 0.120869 -1.405478 0.000000 +vt 0.023664 -1.461783 0.000000 +vt 0.035279 -1.462105 0.000000 +vt 0.050634 -1.445945 0.000000 +vt 0.070492 -1.420497 0.000000 +vt 0.089909 -1.404892 0.000000 +vt 0.108264 -1.387326 0.000000 +vt 0.121635 -1.355956 0.000000 +vt 0.133371 -1.368011 0.000000 +vt 0.128450 -1.327870 0.000000 +vt 0.140453 -1.312477 0.000000 +vt 0.130270 -1.284333 0.000000 +vt 0.123260 -1.314045 0.000000 +vt 0.115823 -1.358186 0.000000 +vt 0.120629 -1.330894 0.000000 +vt 0.095995 -1.374557 0.000000 +vt 0.076107 -1.391026 0.000000 +vt 0.055746 -1.408106 0.000000 +vt 0.038916 -1.434224 0.000000 +vt 0.024672 -1.452069 0.000000 +vt 0.014062 -1.452431 0.000000 +vt 0.003609 -1.442902 0.000000 +vt 0.014910 -1.441240 0.000000 +vt 0.104732 -1.345241 0.000000 +vt 0.114893 -1.336146 0.000000 +vt 0.042180 -1.397203 0.000000 +vt 0.060254 -1.379239 0.000000 +vt 0.084211 -1.358095 0.000000 +vt 0.098229 -1.340779 0.000000 +vt 0.110670 -1.319893 0.000000 +vt 0.099334 -1.311112 0.000000 +vt 0.087452 -1.302784 0.000000 +vt 0.103048 -1.272988 0.000000 +vt 0.112500 -1.301316 0.000000 +vt 0.113653 -1.255250 0.000000 +vt 0.115789 -1.286087 0.000000 +vt 0.116179 -1.288260 0.000000 +vt 0.126537 -1.258982 0.000000 +vt 0.121992 -1.276810 0.000000 +vt 0.125074 -1.294381 0.000000 +vt 0.090138 -1.254400 0.000000 +vt 0.070577 -1.245063 0.000000 +vt 0.067747 -1.287183 0.000000 +vt 0.050203 -1.271772 0.000000 +vt 0.047724 -1.341348 0.000000 +vt 0.034241 -1.298772 0.000000 +vt 0.035051 -1.258096 0.000000 +vt 0.026457 -1.252202 0.000000 +vt 0.036896 -1.221098 0.000000 +vt 0.028179 -1.215820 0.000000 +vt 0.018404 -1.268853 0.000000 +vt 0.110570 -1.214377 0.000000 +vt 0.126586 -1.219639 0.000000 +vt 0.139931 -1.240379 0.000000 +vt 0.152071 -1.261056 0.000000 +vt 0.091612 -1.209746 0.000000 +vt 0.111573 -1.161777 0.000000 +vt 0.127024 -1.166337 0.000000 +vt 0.140947 -1.178433 0.000000 +vt 0.155540 -1.193876 0.000000 +vt 0.170856 -1.207144 0.000000 +vt 0.169460 -1.294361 0.000000 +vt 0.191290 -1.278710 0.000000 +vt 0.227577 -1.193990 0.000000 +vt 0.209284 -1.199004 0.000000 +vt 0.208394 -1.129267 0.000000 +vt 0.189630 -1.133489 0.000000 +vt 0.190500 -1.203792 0.000000 +vt 0.210185 -1.269703 0.000000 +vt 0.171244 -1.139303 0.000000 +vt 0.155456 -1.130928 0.000000 +vt 0.141114 -1.122312 0.000000 +vt 0.127278 -1.115911 0.000000 +vt 0.112536 -1.112953 0.000000 +vt 0.093050 -1.159920 0.000000 +vt 0.072386 -1.204922 0.000000 +vt 0.170022 -1.078906 0.000000 +vt 0.187676 -1.070359 0.000000 +vt 0.206477 -1.065513 0.000000 +vt 0.140948 -1.072335 0.000000 +vt 0.127177 -1.070554 0.000000 +vt 0.125964 -1.025503 0.000000 +vt 0.140036 -1.019027 0.000000 +vt 0.154673 -1.075328 0.000000 +vt 0.153712 -1.010623 0.000000 +vt 0.168181 -1.007411 0.000000 +vt 0.185267 -1.002871 0.000000 +vt 0.204602 -1.002871 0.000000 +vt 0.225920 -1.060981 0.000000 +vt 0.227158 -1.123879 0.000000 +vt 0.246266 -1.186306 0.000000 +vt 0.246100 -1.257389 0.000000 +vt 0.264052 -1.251135 0.000000 +vt 0.261129 -1.349253 0.000000 +vt 0.111154 -1.032892 0.000000 +vt 0.224424 -1.002872 0.000000 +vt 0.245597 -1.056585 0.000000 +vt 0.246409 -1.116777 0.000000 +vt 0.265304 -1.110105 0.000000 +vt 0.112706 -1.070264 0.000000 +vt 0.094664 -1.071326 0.000000 +vt 0.264676 -1.179071 0.000000 +vt 0.228194 -1.264358 0.000000 +vt 0.160552 -1.375513 0.000000 +vt 0.196369 -1.376942 0.000000 +vt 0.211570 -1.365063 0.000000 +vt 0.227883 -1.359666 0.000000 +vt 0.245252 -1.354527 0.000000 +vt 0.119308 -1.277911 0.000000 +vt 0.122201 -1.281286 0.000000 +vt 0.119551 -1.281017 0.000000 +vt 0.052167 -1.234462 0.000000 +vt 0.054510 -1.196952 0.000000 +vt 0.074341 -1.161384 0.000000 +vt 0.058215 -1.159194 0.000000 +vt 0.045150 -1.151599 0.000000 +vt 0.040479 -1.183994 0.000000 +vt 0.094332 -1.111872 0.000000 +vt 0.076094 -1.076261 0.000000 +vt 0.075813 -1.117600 0.000000 +vt 0.059519 -1.093050 0.000000 +vt 0.059924 -1.125787 0.000000 +vt 0.045049 -1.109936 0.000000 +vt 0.049429 -1.131354 0.000000 +vt 0.033750 -1.143417 0.000000 +vt 0.032060 -1.181552 0.000000 +vt 0.028830 -1.163698 0.000000 +vt 0.028151 -1.114051 0.000000 +vt 0.041750 -1.084874 0.000000 +vt 0.057503 -1.064972 0.000000 +vt 0.075711 -1.044230 0.000000 +vt 0.093838 -1.036763 0.000000 +vt 0.557203 -1.131802 0.000000 +vt 0.516714 -1.104841 0.000000 +vt 0.552613 -1.194808 0.000000 +vt 0.513689 -1.179779 0.000000 +vt 0.470200 -1.218648 0.000000 +vt 0.471105 -1.159674 0.000000 +vt 0.443205 -1.151542 0.000000 +vt 0.513476 -1.234565 0.000000 +vt 0.551861 -1.246622 0.000000 +vt 0.470509 -1.306074 0.000000 +vt 0.514163 -1.313522 0.000000 +vt 0.552729 -1.316174 0.000000 +vt 0.442142 -1.210480 0.000000 +vt 0.415283 -1.143426 0.000000 +vt 0.442089 -1.300299 0.000000 +vt 0.471896 -1.388738 0.000000 +vt 0.517031 -1.390437 0.000000 +vt 0.555864 -1.381379 0.000000 +vt 0.347728 -1.046174 0.000000 +vt 0.345154 -1.089328 0.000000 +vt 0.372072 -1.102195 0.000000 +vt 0.371916 -1.147159 0.000000 +vt 0.413037 -1.205463 0.000000 +vt 0.348432 -1.002871 0.000000 +vt 0.318629 -1.042435 0.000000 +vt 0.343658 -1.154041 0.000000 +vt 0.318589 -1.098304 0.000000 +vt 0.280323 -1.245846 0.000000 +vt 0.281359 -1.173319 0.000000 +vt 0.281715 -1.104802 0.000000 +vt 0.296919 -1.100902 0.000000 +vt 0.281051 -1.044769 0.000000 +vt 0.296695 -1.042209 0.000000 +vt 0.299724 -1.002871 0.000000 +vt 0.264500 -1.050821 0.000000 +vt 0.317602 -1.165430 0.000000 +vt 0.280698 -1.002875 0.000000 +vt 0.263459 -1.002877 0.000000 +vt 0.244300 -1.002875 0.000000 +vt 0.210996 -1.655101 0.000000 +vt 0.214607 -1.604196 0.000000 +vt 0.229951 -1.542608 0.000000 +vt 0.242227 -1.529133 0.000000 +vt 0.247611 -1.479342 0.000000 +vt 0.262338 -1.467968 0.000000 +vt 0.254746 -1.428298 0.000000 +vt 0.270473 -1.418840 0.000000 +vt 0.277528 -1.341093 0.000000 +vt 0.256246 -1.514288 0.000000 +vt 0.275658 -1.497706 0.000000 +vt 0.281173 -1.456764 0.000000 +vt 0.310062 -1.484286 0.000000 +vt 0.306534 -1.518735 0.000000 +vt 0.272028 -1.533689 0.000000 +vt 0.069311 -1.568009 0.000000 +vt 0.077469 -1.548681 0.000000 +vt 0.060658 -1.585581 0.000000 +vt 0.059133 -1.600918 0.000000 +vt 0.066363 -1.598332 0.000000 +vt 0.104958 -1.635268 0.000000 +vt 0.088683 -1.632837 0.000000 +vt 0.074650 -1.634535 0.000000 +vt 0.067196 -1.616181 0.000000 +vt 0.079216 -1.608818 0.000000 +vt 0.072399 -1.594989 0.000000 +vt 0.082708 -1.589593 0.000000 +vt 0.108975 -1.607283 0.000000 +vt 0.093825 -1.606511 0.000000 +vt 0.113766 -1.584077 0.000000 +vt 0.135691 -1.582011 0.000000 +vt 0.138022 -1.552811 0.000000 +vt 0.155203 -1.614178 0.000000 +vt 0.157676 -1.578463 0.000000 +vt 0.158575 -1.540807 0.000000 +vt 0.138831 -1.522826 0.000000 +vt 0.116736 -1.539872 0.000000 +vt 0.115901 -1.518888 0.000000 +vt 0.101569 -1.531284 0.000000 +vt 0.112397 -1.493210 0.000000 +vt 0.099328 -1.507950 0.000000 +vt 0.128049 -1.507488 0.000000 +vt 0.138267 -1.494457 0.000000 +vt 0.149182 -1.418690 0.000000 +vt 0.133183 -1.458485 0.000000 +vt 0.124110 -1.478336 0.000000 +vt 0.157872 -1.502480 0.000000 +vt 0.155509 -1.465161 0.000000 +vt 0.027536 -1.421293 0.000000 +vt 0.063716 -1.350995 0.000000 +vt 0.044757 -1.368741 0.000000 +vt 0.029800 -1.381501 0.000000 +vt 0.016391 -1.409298 0.000000 +vt 0.004001 -1.430517 0.000000 +vt 0.031945 -1.335490 0.000000 +vt 0.017542 -1.368135 0.000000 +vt 0.004001 -1.399524 0.000000 +vt 0.018868 -1.319180 0.000000 +vt 0.004001 -1.366125 0.000000 +vt 0.004001 -1.321399 0.000000 +vt 0.019337 -1.279916 0.000000 +vt 0.018521 -1.252949 0.000000 +vt 0.020942 -1.213698 0.000000 +vt 0.004001 -1.254163 0.000000 +vt 0.004001 -1.275770 0.000000 +vt 0.004001 -1.284609 0.000000 +vt 0.011652 -1.185944 0.000000 +vt 0.015963 -1.164604 0.000000 +vt 0.021269 -1.141642 0.000000 +vt 0.025424 -1.180835 0.000000 +vt 0.121897 -1.328335 0.000000 +vt 0.124318 -1.315580 0.000000 +vt 0.958873 -1.893777 0.000000 +vt 0.953808 -1.861751 0.000000 +vt 0.994546 -1.852151 0.000000 +vt 0.954338 -1.827497 0.000000 +vt 0.965123 -1.799370 0.000000 +vt 0.980062 -1.779385 0.000000 +vt 0.999357 -1.730440 0.000000 +vt 0.970663 -1.924002 0.000000 +vt 0.928244 -1.945391 0.000000 +vt 0.926769 -1.893220 0.000000 +vt 0.927048 -1.856910 0.000000 +vt 0.923277 -1.822591 0.000000 +vt 0.925764 -1.764183 0.000000 +vt 0.938117 -1.710843 0.000000 +vt 0.956645 -1.685330 0.000000 +vt 0.989201 -1.948489 0.000000 +vt 0.942482 -1.983014 0.000000 +vt 0.916796 -1.998607 0.000000 +vt 0.909100 -1.990362 0.000000 +vt 0.906615 -1.967295 0.000000 +vt 0.907843 -1.926622 0.000000 +vt 0.904987 -1.885869 0.000000 +vt 0.902730 -1.858766 0.000000 +vt 0.900427 -1.834083 0.000000 +vt 0.899434 -1.809395 0.000000 +vt 0.901911 -1.768313 0.000000 +vt 0.903507 -1.730192 0.000000 +vt 0.912863 -1.702382 0.000000 +vt 0.919938 -1.674206 0.000000 +vt 0.931004 -1.666544 0.000000 +vt 0.239676 -1.435187 0.000000 +vt 0.225132 -1.441651 0.000000 +vt 0.234272 -1.489750 0.000000 +vt 0.222098 -1.496886 0.000000 +vt 0.218564 -1.551303 0.000000 +vt 0.206801 -1.556883 0.000000 +vt 0.203634 -1.608481 0.000000 +vt 0.193201 -1.609948 0.000000 +vt 0.200662 -1.658381 0.000000 +vt 0.195318 -1.560638 0.000000 +vt 0.208998 -1.503417 0.000000 +vt 0.211009 -1.448208 0.000000 +vt 0.196543 -1.510135 0.000000 +vt 0.197906 -1.454998 0.000000 +vt 0.112348 -1.316229 0.000000 +vt 0.111931 -1.330433 0.000000 +vt 0.113731 -1.300853 0.000000 +vt 0.113361 -1.326869 0.000000 +vt 0.116186 -1.331598 0.000000 +vt 0.118006 -1.338238 0.000000 +vt 0.118890 -1.334722 0.000000 +vt 0.635545 -1.834651 0.000000 +vt 0.664843 -1.844897 0.000000 +vt 0.663736 -1.821580 0.000000 +vt 0.658145 -1.927803 0.000000 +vt 0.624734 -1.916325 0.000000 +vt 0.609506 -1.826174 0.000000 +vt 0.632450 -1.808114 0.000000 +vt 0.605818 -1.797296 0.000000 +vt 0.649104 -2.000000 0.000000 +vt 0.674404 -2.000000 0.000000 +vt 0.630588 -2.000000 0.000000 +vt 0.624247 -2.000000 0.000000 +vt 0.606706 -1.897207 0.000000 +vt 0.591098 -1.821240 0.000000 +vt 0.584928 -1.788339 0.000000 +vt 0.691797 -1.603798 0.000000 +vt 0.685165 -1.594479 0.000000 +vt 0.672168 -1.603508 0.000000 +vt 0.683532 -1.617246 0.000000 +vt 0.706602 -1.627915 0.000000 +vt 0.680387 -1.681479 0.000000 +vt 0.662003 -1.656000 0.000000 +vt 0.633129 -1.717710 0.000000 +vt 0.649271 -1.633070 0.000000 +vt 0.619739 -1.688735 0.000000 +vt 0.593859 -1.749042 0.000000 +vt 0.611552 -1.768040 0.000000 +vt 0.637651 -1.785493 0.000000 +vt 0.668662 -1.802818 0.000000 +vt 0.650162 -1.754521 0.000000 +vt 0.731355 -1.656428 0.000000 +vt 0.697042 -1.593955 0.000000 +vt 0.691308 -1.574101 0.000000 +vt 0.712508 -1.619079 0.000000 +vt 0.735445 -1.646480 0.000000 +vt 0.319701 -1.002891 0.000000 +vt 0.178356 -1.651137 0.000000 +vt 0.181639 -1.609963 0.000000 +vt 0.169174 -1.612300 0.000000 +vt 0.171333 -1.571906 0.000000 +vt 0.183419 -1.564786 0.000000 +vt 0.171678 -1.528616 0.000000 +vt 0.184355 -1.517579 0.000000 +vt 0.170287 -1.485541 0.000000 +vt 0.183866 -1.467952 0.000000 +vt 0.168411 -1.439861 0.000000 +vt 0.182301 -1.419072 0.000000 +vt 0.115901 -1.562303 0.000000 +vt 0.101592 -1.549777 0.000000 +vt 0.087816 -1.541102 0.000000 +vt 0.087365 -1.557073 0.000000 +vt 0.100481 -1.568195 0.000000 +vt 0.086223 -1.521888 0.000000 +vt 0.324517 -1.611261 0.000000 +vt 0.085471 -1.574157 0.000000 +vt 0.097086 -1.587238 0.000000 +vt 0.124699 -1.282167 0.000000 +vt 0.124666 -1.286551 0.000000 +vt 0.125604 -1.299490 0.000000 +vt 0.735771 -1.543787 0.000000 +vt 0.868464 -1.449891 0.000000 +vt 0.831471 -1.447903 0.000000 +vt 0.832612 -1.407113 0.000000 +vt 0.790689 -1.379832 0.000000 +vt 0.791941 -1.431306 0.000000 +vt 0.744584 -1.342777 0.000000 +vt 0.750824 -1.406667 0.000000 +vt 0.718187 -1.313491 0.000000 +vt 0.723628 -1.375553 0.000000 +vt 0.728746 -1.470001 0.000000 +vt 0.767888 -1.602933 0.000000 +vt 0.753775 -1.484318 0.000000 +vt 0.783954 -1.327620 0.000000 +vt 0.831175 -1.363399 0.000000 +vt 0.776932 -1.653661 0.000000 +vt 0.789319 -1.603460 0.000000 +vt 0.789028 -1.583573 0.000000 +vt 0.759135 -1.643469 0.000000 +vt 0.766556 -1.664376 0.000000 +vt 0.769892 -1.669891 0.000000 +vt 0.796397 -1.535006 0.000000 +vt 0.806950 -1.546212 0.000000 +vt 0.809411 -1.534909 0.000000 +vt 0.796609 -1.555446 0.000000 +vt 0.783281 -1.546125 0.000000 +vt 0.759508 -1.551500 0.000000 +vt 0.790233 -1.495239 0.000000 +vt 0.823086 -1.508166 0.000000 +vt 0.851456 -1.544599 0.000000 +vt 0.821917 -1.551077 0.000000 +vt 0.838329 -1.586606 0.000000 +vt 0.818290 -1.558999 0.000000 +vt 0.833771 -1.598464 0.000000 +vt 0.872707 -1.595751 0.000000 +vt 0.854798 -1.647519 0.000000 +vt 0.855348 -1.715277 0.000000 +vt 0.849165 -1.663175 0.000000 +vt 0.774210 -1.675986 0.000000 +vt 0.780923 -1.676583 0.000000 +vt 0.920535 -1.537478 0.000000 +vt 0.930603 -1.561657 0.000000 +vt 0.928462 -1.575369 0.000000 +vt 0.904673 -1.608760 0.000000 +vt 0.888811 -1.680042 0.000000 +vt 0.862037 -1.697608 0.000000 +vt 0.866439 -1.733115 0.000000 +vt 0.859678 -1.750128 0.000000 +vt 0.873211 -1.788904 0.000000 +vt 0.926320 -1.589081 0.000000 +vt 0.922038 -1.616506 0.000000 +vt 0.907985 -1.701513 0.000000 +vt 0.904568 -1.721845 0.000000 +vt 0.889277 -1.773130 0.000000 +vt 0.899397 -1.756141 0.000000 +vt 0.890270 -1.817101 0.000000 +vt 0.448424 -1.026541 0.000000 +vt 0.460156 -1.009018 0.000000 +vt 0.465046 -1.083032 0.000000 +vt 0.460564 -1.009188 0.000000 +vt 0.416465 -1.096594 0.000000 +vt 0.417352 -1.060327 0.000000 +vt 0.378312 -1.060181 0.000000 +vt 0.386269 -1.035703 0.000000 +vt 0.418597 -1.030385 0.000000 +vt 0.448674 -1.060313 0.000000 +vt 0.486775 -1.018199 0.000000 +vt 0.483748 -1.090110 0.000000 +vt 0.371632 -1.012923 0.000000 +vt 0.446848 -1.102002 0.000000 +vt 0.873556 -1.057154 0.000000 +vt 0.882301 -1.034338 0.000000 +vt 0.877625 -1.076667 0.000000 +vt 0.868702 -1.170970 0.000000 +vt 0.856767 -1.162794 0.000000 +vt 0.872678 -1.033555 0.000000 +vt 0.838879 -1.143008 0.000000 +vt 0.836671 -1.247690 0.000000 +vt 0.848911 -1.264801 0.000000 +vt 0.862667 -1.275749 0.000000 +vt 0.856602 -1.311743 0.000000 +vt 0.843253 -1.294858 0.000000 +vt 0.831256 -1.278594 0.000000 +vt 0.822419 -1.228117 0.000000 +vt 0.794525 -1.194206 0.000000 +vt 0.806075 -1.115153 0.000000 +vt 0.759715 -1.155960 0.000000 +vt 0.722991 -1.114285 0.000000 +vt 0.737200 -1.068398 0.000000 +vt 0.697592 -1.056618 0.000000 +vt 0.704073 -1.041870 0.000000 +vt 0.683979 -1.038960 0.000000 +vt 0.686805 -1.026919 0.000000 +vt 0.754748 -1.174980 0.000000 +vt 0.816185 -1.255371 0.000000 +vt 0.788251 -1.028544 0.000000 +vt 0.778228 -1.026391 0.000000 +vt 0.743095 -1.018616 0.000000 +vt 0.683446 -1.001410 0.000000 +vt 0.674577 -1.016457 0.000000 +vt 0.669294 -1.010868 0.000000 +vt 0.674465 -1.035880 0.000000 +vt 0.717604 -1.126985 0.000000 +vt 0.669081 -1.032925 0.000000 +vt 0.682678 -1.069603 0.000000 +vt 0.884478 -1.023802 0.000000 +vt 0.891191 -1.009180 0.000000 +vt 0.886146 -1.001169 0.000000 +vt 0.856125 -1.034210 0.000000 +vt 0.821950 -1.034136 0.000000 +vt 0.791851 -1.011704 0.000000 +vt 0.785059 -1.011152 0.000000 +vt 0.778266 -1.010600 0.000000 +vt 0.750097 -1.007531 0.000000 +vt 0.821321 -1.014169 0.000000 +vt 0.864709 -1.009795 0.000000 +vt 0.911712 -1.376173 0.000000 +vt 0.902175 -1.303666 0.000000 +vt 0.871793 -1.337811 0.000000 +vt 0.874605 -1.380220 0.000000 +vt 0.901591 -1.479251 0.000000 +vt 0.943406 -1.408566 0.000000 +vt 0.941100 -1.506833 0.000000 +vt 0.946986 -1.478539 0.000000 +vt 0.958182 -1.427882 0.000000 +vt 0.966740 -1.378092 0.000000 +vt 0.947957 -1.345697 0.000000 +vt 0.961157 -1.264556 0.000000 +vt 0.980454 -1.268193 0.000000 +vt 0.979086 -1.143921 0.000000 +vt 0.990721 -1.164675 0.000000 +vt 0.992966 -1.146823 0.000000 +vt 0.985707 -1.104695 0.000000 +vt 0.995277 -1.127823 0.000000 +vt 0.996872 -1.096645 0.000000 +vt 0.992327 -1.065469 0.000000 +vt 0.997689 -1.080234 0.000000 +vt 0.998506 -1.063823 0.000000 +vt 0.997879 -1.053395 0.000000 +vt 0.990076 -1.039680 0.000000 +vt 0.918930 -1.263019 0.000000 +vt 0.933605 -1.196023 0.000000 +vt 0.964147 -1.093431 0.000000 +vt 0.980260 -1.035985 0.000000 +vt 0.996635 -1.032298 0.000000 +vt 0.996733 -1.024555 0.000000 +vt 0.993292 -1.019213 0.000000 +vt 0.986591 -1.029888 0.000000 +vt 0.983862 -1.018574 0.000000 +vt 0.967548 -1.048480 0.000000 +vt 0.948655 -1.096395 0.000000 +vt 0.918020 -1.195984 0.000000 +vt 0.909298 -1.235384 0.000000 +vt 0.895102 -1.279751 0.000000 +vt 0.868171 -1.322349 0.000000 +vt 0.841689 -1.338467 0.000000 +vt 0.840453 -1.326999 0.000000 +vt 0.817873 -1.318832 0.000000 +vt 0.786259 -1.292840 0.000000 +vt 0.738767 -1.277552 0.000000 +vt 0.713570 -1.257357 0.000000 +vt 0.704198 -1.204683 0.000000 +vt 0.695617 -1.167916 0.000000 +vt 0.715974 -1.214550 0.000000 +vt 0.709123 -1.176195 0.000000 +vt 0.733426 -1.232167 0.000000 +vt 0.754549 -1.252159 0.000000 +vt 0.818910 -1.306408 0.000000 +vt 0.786953 -1.272963 0.000000 +vt 0.754786 -1.228972 0.000000 +vt 0.727630 -1.190724 0.000000 +vt 0.717370 -1.167818 0.000000 +vt 0.742804 -1.006548 0.000000 +vt 0.735512 -1.005566 0.000000 +vt 0.707649 -1.009399 0.000000 +vt 0.691990 -1.017693 0.000000 +vt 0.706908 -1.001807 0.000000 +vt 0.818734 -1.750746 0.000000 +vt 0.821558 -1.743763 0.000000 +vt 0.836605 -1.765130 0.000000 +vt 0.806083 -1.725569 0.000000 +vt 0.767717 -1.873315 0.000000 +vt 0.731884 -1.857072 0.000000 +vt 0.734750 -1.844921 0.000000 +vt 0.770279 -1.864333 0.000000 +vt 0.804203 -1.890521 0.000000 +vt 0.805482 -1.885027 0.000000 +vt 0.839887 -1.906794 0.000000 +vt 0.697293 -1.839755 0.000000 +vt 0.701933 -1.823977 0.000000 +vt 0.728434 -1.809179 0.000000 +vt 0.795259 -1.852893 0.000000 +vt 0.680426 -1.775428 0.000000 +vt 0.710091 -1.707665 0.000000 +vt 0.755581 -1.744866 0.000000 +vt 0.819690 -1.799653 0.000000 +vt 0.844632 -1.887231 0.000000 +vt 0.862555 -1.849119 0.000000 +vt 0.872334 -1.903581 0.000000 +vt 0.875543 -1.838784 0.000000 +vt 0.895359 -1.881641 0.000000 +vt 0.891669 -1.880324 0.000000 +vt 0.870737 -1.841385 0.000000 +vt 0.847863 -1.792350 0.000000 +vt 0.833298 -1.771548 0.000000 +vt 0.786481 -1.715187 0.000000 +vt 0.772770 -1.699979 0.000000 +vt 0.759059 -1.684771 0.000000 +vt 0.802608 -1.732966 0.000000 +vt 0.895671 -1.905655 0.000000 +vt 0.902254 -1.909584 0.000000 +vt 0.901453 -1.918279 0.000000 +vt 0.899046 -1.894277 0.000000 +vt 0.885574 -1.880452 0.000000 +vt 0.840665 -1.902468 0.000000 +vt 0.870833 -1.913367 0.000000 +vt 0.890827 -1.920774 0.000000 +vt 0.896034 -1.923808 0.000000 +vt 0.900198 -1.923259 0.000000 +vt 0.901816 -1.929562 0.000000 +vt 0.902802 -1.925418 0.000000 +vt 0.903007 -1.915511 0.000000 +vt 0.901766 -1.898455 0.000000 +vt 0.888213 -1.913529 0.000000 +vt 0.879281 -1.968759 0.000000 +vt 0.881910 -1.980870 0.000000 +vt 0.851332 -1.993116 0.000000 +vt 0.892315 -1.971011 0.000000 +vt 0.903579 -1.896675 0.000000 +vt 0.904864 -1.915397 0.000000 +vt 0.903982 -1.928508 0.000000 +vt 0.901738 -1.935303 0.000000 +vt 0.897240 -1.930644 0.000000 +vt 0.891578 -1.926810 0.000000 +vt 0.871482 -1.917706 0.000000 +vt 0.891390 -1.939873 0.000000 +vt 0.872790 -1.931483 0.000000 +vt 0.847530 -1.950827 0.000000 +vt 0.791573 -1.948929 0.000000 +vt 0.894119 -1.958670 0.000000 +vt 0.901972 -1.947420 0.000000 +vt 0.698768 -1.857813 0.000000 +vt 0.732920 -1.868553 0.000000 +vt 0.769226 -1.883032 0.000000 +vt 0.805016 -1.895773 0.000000 +vt 0.840911 -1.909371 0.000000 +vt 0.720049 -1.939264 0.000000 +vt 0.812356 -2.000000 0.000000 +vt 0.793879 -2.000000 0.000000 +vt 0.775403 -2.000000 0.000000 +vt 0.756302 -2.000000 0.000000 +vt 0.737200 -2.000000 0.000000 +vt 0.721244 -2.000000 0.000000 +vt 0.705288 -2.000000 0.000000 +vt 0.762013 -1.675753 0.000000 +vt 0.776310 -1.691565 0.000000 +vt 0.790608 -1.707376 0.000000 +vt 0.900073 -1.959154 0.000000 +vt 0.896981 -1.878276 0.000000 +vt 0.878507 -1.833722 0.000000 +vt 0.851652 -1.786498 0.000000 +vt 0.390421 -1.005564 0.000000 +vt 0.789915 -1.216425 0.000000 +vt 0.777015 -1.094719 0.000000 +vt 0.767205 -1.164189 0.000000 +vt 0.763570 -1.185377 0.000000 +vt 0.768845 -1.089199 0.000000 +vt 0.772930 -1.091959 0.000000 +vt 0.783239 -1.027467 0.000000 +vt 0.763460 -1.160074 0.000000 +vt 0.759159 -1.180178 0.000000 +vt 0.401810 -1.048015 0.000000 +vt 0.846719 -1.205242 0.000000 +vt 0.858806 -1.217885 0.000000 +vt 0.404509 -1.017974 0.000000 +vt 0.830649 -1.185562 0.000000 +vt 0.800300 -1.154680 0.000000 +vt 0.730096 -1.091341 0.000000 +vt 0.772110 -1.129454 0.000000 +vt 0.764280 -1.122580 0.000000 +vt 0.768195 -1.126017 0.000000 +vt 0.871129 -1.114062 0.000000 +vt 0.864722 -1.098175 0.000000 +vt 0.740147 -1.043507 0.000000 +vt 0.847502 -1.088609 0.000000 +vt 0.814013 -1.074645 0.000000 +vt 0.782633 -1.061631 0.000000 +vt 0.773536 -1.057795 0.000000 +vt 0.778085 -1.059713 0.000000 +vt 0.707526 -1.025428 0.000000 +vt 0.680666 -1.049033 0.000000 +vt 0.677689 -1.056144 0.000000 +vt 0.693307 -1.007996 0.000000 +vt 0.693821 -1.001585 0.000000 +vt 0.557941 -1.596903 0.000000 +vt 0.731385 -1.328134 0.000000 +vt 0.737226 -1.391110 0.000000 +vt 0.741261 -1.477160 0.000000 +vt 0.747639 -1.547643 0.000000 +vt 0.726169 -1.267455 0.000000 +vt 0.502894 -1.879317 0.000000 +vt 0.490766 -1.880166 0.000000 +vt 0.006606 -1.206461 0.000000 +vt 0.008836 -1.447666 0.000000 +vt 0.126570 -1.048028 0.000000 +vt 0.140492 -1.045681 0.000000 +vt 0.154193 -1.042975 0.000000 +vt 0.169102 -1.043159 0.000000 +vt 0.186471 -1.036615 0.000000 +vt 0.205539 -1.034192 0.000000 +vt 0.225172 -1.031927 0.000000 +vt 0.030951 -1.128734 0.000000 +vt 0.043399 -1.097405 0.000000 +vt 0.058511 -1.079011 0.000000 +vt 0.075902 -1.060246 0.000000 +vt 0.094251 -1.054044 0.000000 +vt 0.111930 -1.051578 0.000000 +vt 0.296956 -1.022540 0.000000 +vt 0.280875 -1.023822 0.000000 +vt 0.263979 -1.026849 0.000000 +vt 0.244949 -1.029730 0.000000 +vt 0.009456 -1.435879 0.000000 +vt 0.010196 -1.404411 0.000000 +vt 0.010771 -1.367130 0.000000 +vt 0.011434 -1.320289 0.000000 +vt 0.011202 -1.272311 0.000000 +vt 0.011669 -1.282262 0.000000 +vt 0.011261 -1.253556 0.000000 +vt 0.025050 -1.152670 0.000000 +vt 0.020693 -1.172719 0.000000 +vt 0.016297 -1.199821 0.000000 +vt 0.013774 -1.210080 0.000000 +vt 0.348080 -1.024523 0.000000 +vt 0.319165 -1.022663 0.000000 +vt 0.033010 -1.160599 0.000000 +vt 0.260733 -1.950420 0.000000 +vt 0.233243 -1.950001 0.000000 +vt 0.208695 -1.949359 0.000000 +vt 0.195127 -1.950757 0.000000 +vt 0.182990 -1.957152 0.000000 +vt 0.120822 -1.952549 0.000000 +vt 0.096126 -1.936267 0.000000 +vt 0.140709 -1.958533 0.000000 +vt 0.169969 -1.959657 0.000000 +vt 0.156460 -1.960757 0.000000 +vt 0.293100 -1.950645 0.000000 +vt 0.359930 -1.889976 0.000000 +vt 0.333715 -1.924665 0.000000 +vt 0.484939 -1.764766 0.000000 +vt 0.451799 -1.796255 0.000000 +vt 0.407990 -1.832045 0.000000 +vt 0.234038 -1.868948 0.000000 +vt 0.211308 -1.866613 0.000000 +vt 0.198514 -1.866995 0.000000 +vt 0.099355 -1.859057 0.000000 +vt 0.122468 -1.870368 0.000000 +vt 0.186004 -1.877387 0.000000 +vt 0.143675 -1.878700 0.000000 +vt 0.174147 -1.881484 0.000000 +vt 0.160737 -1.883707 0.000000 +vt 0.523130 -1.727958 0.000000 +vt 0.565493 -1.688779 0.000000 +vt 0.259929 -1.869781 0.000000 +vt 0.352880 -1.832436 0.000000 +vt 0.331150 -1.853282 0.000000 +vt 0.291954 -1.870933 0.000000 +vt 0.077818 -1.846440 0.000000 +vt 0.076698 -1.846472 0.000000 +vt 0.448065 -1.744627 0.000000 +vt 0.403141 -1.766137 0.000000 +vt 0.202177 -1.796154 0.000000 +vt 0.213262 -1.800647 0.000000 +vt 0.521043 -1.687670 0.000000 +vt 0.481099 -1.718217 0.000000 +vt 0.550246 -1.668446 0.000000 +vt 0.567156 -1.655750 0.000000 +vt 0.624892 -1.544292 0.000000 +vt 0.614383 -1.573015 0.000000 +vt 0.593163 -1.619743 0.000000 +vt 0.233934 -1.802528 0.000000 +vt 0.259479 -1.805235 0.000000 +vt 0.292136 -1.805387 0.000000 +vt 0.330784 -1.790482 0.000000 +vt 0.354816 -1.769112 0.000000 +vt 0.571951 -1.200272 0.000000 +vt 0.575188 -1.143112 0.000000 +vt 0.581368 -1.103683 0.000000 +vt 0.571920 -1.249089 0.000000 +vt 0.576627 -1.517915 0.000000 +vt 0.572597 -1.317291 0.000000 +vt 0.574373 -1.381397 0.000000 +vt 0.576874 -1.451439 0.000000 +vt 0.521139 -1.479678 0.000000 +vt 0.561584 -1.461517 0.000000 +vt 0.048964 -1.306560 0.000000 +vt 0.034646 -1.278434 0.000000 +vt 0.065731 -1.319089 0.000000 +vt 0.085832 -1.330440 0.000000 +vt 0.011088 -1.344768 0.000000 +vt 0.023361 -1.285007 0.000000 +vt 0.024648 -1.272536 0.000000 +vt 0.674511 -1.027898 0.000000 +vt 0.678820 -1.009259 0.000000 +vt 0.378951 -1.024313 0.000000 +vt 0.859635 -1.293746 0.000000 +vt 0.375807 -1.042459 0.000000 +vt 0.846082 -1.279830 0.000000 +vt 0.833964 -1.263142 0.000000 +vt 0.757231 -1.165470 0.000000 +vt 0.819302 -1.241744 0.000000 +vt 0.720297 -1.120635 0.000000 +vt 0.671773 -1.034402 0.000000 +vt 0.685582 -1.067610 0.000000 +vt 0.792220 -1.205316 0.000000 +vt 0.765387 -1.174783 0.000000 +vt 0.761309 -1.170126 0.000000 +vt 0.679177 -1.052589 0.000000 +vt 0.889036 -1.724908 0.000000 +vt 0.767637 -1.361305 0.000000 +vt 0.771382 -1.418987 0.000000 +vt 0.778458 -1.593253 0.000000 +vt 0.771394 -1.548813 0.000000 +vt 0.772004 -1.489779 0.000000 +vt 0.761361 -1.302586 0.000000 +vt 0.811651 -1.393472 0.000000 +vt 0.811706 -1.439605 0.000000 +vt 0.807564 -1.345510 0.000000 +vt 0.806660 -1.501703 0.000000 +vt 0.797993 -1.498292 0.000000 +vt 0.800857 -1.435050 0.000000 +vt 0.799380 -1.385488 0.000000 +vt 0.794125 -1.335326 0.000000 +vt 0.797259 -1.301884 0.000000 +vt 0.797468 -1.283968 0.000000 +vt 0.928462 -1.575369 0.000000 +vt 0.871646 -1.413785 0.000000 +vt 0.907476 -1.419315 0.000000 +vt 0.913659 -1.215684 0.000000 +vt 0.926268 -1.229521 0.000000 +vt 0.954557 -1.305127 0.000000 +vt 0.973483 -1.325801 0.000000 +vt 0.904249 -1.452185 0.000000 +vt 0.870256 -1.429556 0.000000 +vt 0.928509 -1.496037 0.000000 +vt 0.894454 -1.508035 0.000000 +vt 0.863649 -1.476700 0.000000 +vt 0.934410 -1.465370 0.000000 +vt 0.912573 -1.573260 0.000000 +vt 0.885187 -1.545414 0.000000 +vt 0.855529 -1.521919 0.000000 +vt 0.956865 -1.117890 0.000000 +vt 0.945665 -1.106115 0.000000 +vt 0.954648 -1.081197 0.000000 +vt 0.982371 -1.124458 0.000000 +vt 0.960856 -1.104486 0.000000 +vt 0.950011 -1.092956 0.000000 +vt 0.988369 -1.088922 0.000000 +vt 0.969733 -1.073515 0.000000 +vt 0.962069 -1.062375 0.000000 +vt 0.974125 -1.057857 0.000000 +vt 0.990135 -1.046771 0.000000 +vt 0.976206 -1.027821 0.000000 +vt 0.997512 -1.047169 0.000000 +vt 0.971877 -1.038151 0.000000 +vt 0.977193 -1.046921 0.000000 +vt 0.991231 -1.056120 0.000000 +vt 0.994896 -1.059882 0.000000 +vt 0.997059 -1.039486 0.000000 +vt 0.992483 -1.034211 0.000000 +vt 0.989514 -1.025232 0.000000 +vt 0.836432 -1.350933 0.000000 +vt 0.785107 -1.310230 0.000000 +vt 0.708884 -1.231020 0.000000 +vt 0.736097 -1.254859 0.000000 +vt 0.873199 -1.359015 0.000000 +vt 0.906944 -1.339919 0.000000 +vt 0.933443 -1.304358 0.000000 +vt 0.947381 -1.230289 0.000000 +vt 0.974927 -1.099063 0.000000 +vt 0.721071 -1.241002 0.000000 +vt 0.757955 -1.277372 0.000000 +vt 0.812719 -1.332171 0.000000 +vt 0.795692 -1.318605 0.000000 +vt 0.940412 -1.267324 0.000000 +vt 0.967976 -1.130906 0.000000 +vt 0.971614 -1.114472 0.000000 +vt 0.979051 -1.081219 0.000000 +vt 0.983226 -1.061663 0.000000 +vt 0.985198 -1.041378 0.000000 +vt 0.988333 -1.034784 0.000000 +vt 0.984212 -1.051520 0.000000 +vt 0.990998 -1.029721 0.000000 +vt 0.638937 -1.211467 0.000000 +vt 0.666181 -1.214113 0.000000 +vt 0.554908 -1.163305 0.000000 +vt 0.515201 -1.142310 0.000000 +vt 0.592231 -1.180079 0.000000 +vt 0.615982 -1.196080 0.000000 +vt 0.688108 -1.215248 0.000000 +vt 0.477426 -1.124892 0.000000 +vt 0.573570 -1.171692 0.000000 +vt 0.707730 -1.302733 0.000000 +vt 0.713452 -1.364890 0.000000 +vt 0.717610 -1.461324 0.000000 +vt 0.724434 -1.533291 0.000000 +vt 0.730107 -1.574776 0.000000 +vt 0.702600 -1.249041 0.000000 +vt 0.694392 -1.197227 0.000000 +vt 0.688126 -1.160658 0.000000 +vt 0.698496 -1.223134 0.000000 +vt 0.676805 -1.106695 0.000000 +vt 0.677229 -1.156718 0.000000 +vt 0.724786 -1.320812 0.000000 +vt 0.741705 -1.545715 0.000000 +vt 0.719869 -1.262406 0.000000 +vt 0.710086 -1.209616 0.000000 +vt 0.702370 -1.172056 0.000000 +vt 0.730427 -1.383332 0.000000 +vt 0.735003 -1.473580 0.000000 +vt 0.714978 -1.236011 0.000000 +vt 0.780825 -1.603251 0.000000 +vt 0.675443 -1.125766 0.000000 +vt 0.690262 -1.134125 0.000000 +vt 0.702688 -1.145454 0.000000 +vt 0.706811 -1.141266 0.000000 +vt 0.682465 -1.133677 0.000000 +vt 0.694748 -1.137451 0.000000 +vt 0.690510 -1.118213 0.000000 +vt 0.686821 -1.112411 0.000000 +vt 0.690476 -1.107204 0.000000 +vt 0.688368 -1.108490 0.000000 +vt 0.685445 -1.147878 0.000000 +vt 0.692950 -1.151085 0.000000 +vt 0.698345 -1.153784 0.000000 +vt 0.705516 -1.158965 0.000000 +vt 0.712188 -1.154787 0.000000 +vt 0.856146 -1.518482 0.000000 +vt 0.886711 -1.539266 0.000000 +vt 0.914676 -1.563807 0.000000 +vt 0.994829 -1.028880 0.000000 +vt 0.993432 -1.024969 0.000000 +vt 0.992080 -1.021143 0.000000 +vt 0.120468 -1.257224 0.000000 +vt 0.118578 -1.217008 0.000000 +vt 0.119299 -1.164057 0.000000 +vt 0.119907 -1.114432 0.000000 +vt 0.118559 -1.029198 0.000000 +vt 0.119942 -1.070409 0.000000 +vt 0.119250 -1.049803 0.000000 +vt 0.101191 -1.292050 0.000000 +vt 0.088795 -1.278592 0.000000 +vt 0.069162 -1.266123 0.000000 +vt 0.035974 -1.239597 0.000000 +vt 0.027318 -1.234011 0.000000 +vt 0.051185 -1.253117 0.000000 +vt 0.019732 -1.233324 0.000000 +vt 0.005303 -1.230312 0.000000 +vt 0.012518 -1.231818 0.000000 +vt 0.071053 -1.482288 0.000000 +vt 0.067760 -1.488510 0.000000 +vt 0.064469 -1.494733 0.000000 +vt 0.079635 -1.463732 0.000000 +vt 0.089061 -1.437284 0.000000 +vt 0.095741 -1.410493 0.000000 +vt 0.102130 -1.380942 0.000000 +vt 0.110278 -1.351714 0.000000 +vt 0.068755 -1.481037 0.000000 +vt 0.077341 -1.462257 0.000000 +vt 0.086471 -1.434701 0.000000 +vt 0.092825 -1.407693 0.000000 +vt 0.065600 -1.487176 0.000000 +vt 0.062445 -1.493315 0.000000 +vt 0.099062 -1.377749 0.000000 +vt 0.107505 -1.348477 0.000000 +vt 0.111931 -1.330433 0.000000 +vt 0.055953 -1.489773 0.000000 +vt 0.058737 -1.483498 0.000000 +vt 0.061520 -1.477222 0.000000 +vt 0.069541 -1.457127 0.000000 +vt 0.077186 -1.426308 0.000000 +vt 0.083008 -1.397959 0.000000 +vt 0.090103 -1.366326 0.000000 +vt 0.101091 -1.212062 0.000000 +vt 0.102312 -1.160848 0.000000 +vt 0.102496 -1.034827 0.000000 +vt 0.103685 -1.070795 0.000000 +vt 0.103434 -1.112412 0.000000 +vt 0.103091 -1.052811 0.000000 +vt 0.095860 -1.338803 0.000000 +vt 0.088640 -1.474022 0.000000 +vt 0.079320 -1.491444 0.000000 +vt 0.075355 -1.497833 0.000000 +vt 0.071392 -1.504221 0.000000 +vt 0.099482 -1.452224 0.000000 +vt 0.107753 -1.429019 0.000000 +vt 0.114567 -1.396402 0.000000 +vt 0.121635 -1.355956 0.000000 +vt 0.109858 -1.677215 0.000000 +vt 0.113534 -1.638832 0.000000 +vt 0.117994 -1.608641 0.000000 +vt 0.123510 -1.583159 0.000000 +vt 0.120848 -1.596052 0.000000 +vt 0.124744 -1.558508 0.000000 +vt 0.125575 -1.533053 0.000000 +vt 0.033584 -1.881386 0.000000 +vt 0.027431 -1.851104 0.000000 +vt 0.025444 -1.851157 0.000000 +vt 0.025657 -1.841912 0.000000 +vt 0.013632 -1.793564 0.000000 +vt 0.011710 -1.773428 0.000000 +vt 0.912948 -1.994485 0.000000 +vt 0.979932 -1.936245 0.000000 +vt 0.935363 -1.964203 0.000000 +vt 0.020457 -1.812779 0.000000 +vt 0.049145 -1.789672 0.000000 +vt 0.040765 -1.780266 0.000000 +vt 0.042483 -1.783894 0.000000 +vt 0.035166 -1.763071 0.000000 +vt 0.029234 -1.753252 0.000000 +vt 0.030113 -1.724352 0.000000 +vt 0.029130 -1.707231 0.000000 +vt 0.907027 -1.953635 0.000000 +vt 0.036702 -1.684266 0.000000 +vt 0.907516 -1.937442 0.000000 +vt 0.928244 -1.945391 0.000000 +vt 0.043914 -1.676582 0.000000 +vt 0.058879 -1.662701 0.000000 +vt 0.055413 -1.665854 0.000000 +vt 0.055799 -1.664262 0.000000 +vt 0.058746 -1.642169 0.000000 +vt 0.062480 -1.617383 0.000000 +vt 0.062894 -1.599573 0.000000 +vt 0.063354 -1.591873 0.000000 +vt 0.049758 -1.628381 0.000000 +vt 0.905602 -1.894651 0.000000 +vt 0.045916 -1.647860 0.000000 +vt 0.906679 -1.910013 0.000000 +vt 0.927424 -1.916396 0.000000 +vt 0.961451 -1.900387 0.000000 +vt 0.927849 -1.931424 0.000000 +vt 0.966270 -1.912741 0.000000 +vt 0.053609 -1.493723 0.000000 +vt 0.051344 -1.497695 0.000000 +vt 0.055042 -1.512336 0.000000 +vt 0.051441 -1.519049 0.000000 +vt 0.902709 -1.749253 0.000000 +vt 0.931941 -1.737513 0.000000 +vt 0.972592 -1.789377 0.000000 +vt 0.060187 -1.497615 0.000000 +vt 0.058115 -1.502089 0.000000 +vt 0.061816 -1.498860 0.000000 +vt 0.059229 -1.503019 0.000000 +vt 0.068324 -1.508463 0.000000 +vt 0.065321 -1.512809 0.000000 +vt 0.061716 -1.519164 0.000000 +vt 0.061720 -1.519135 0.000000 +vt 0.063152 -1.506295 0.000000 +vt 0.031523 -1.488273 0.000000 +vt 0.021811 -1.482606 0.000000 +vt 0.012710 -1.475196 0.000000 +vt 0.008406 -1.468437 0.000000 +vt 0.007803 -1.472111 0.000000 +vt 0.007104 -1.476348 0.000000 +vt 0.007521 -1.487368 0.000000 +vt 0.008168 -1.498328 0.000000 +vt 0.926051 -1.669974 0.000000 +vt 0.956645 -1.685330 0.000000 +vt 0.684547 -1.475559 0.000000 +vt 0.709785 -1.487721 0.000000 +vt 0.648129 -1.498595 0.000000 +vt 0.732258 -1.506894 0.000000 +vt 0.786757 -1.520682 0.000000 +vt 0.822502 -1.529621 0.000000 +vt 0.756642 -1.517909 0.000000 +vt 0.844893 -1.565603 0.000000 +vt 0.863752 -1.621635 0.000000 +vt 0.875424 -1.688825 0.000000 +vt 0.744450 -1.512401 0.000000 +vt 0.877737 -1.729011 0.000000 +vt 0.771699 -1.519295 0.000000 +vt 0.808035 -1.518306 0.000000 +vt 0.797195 -1.516649 0.000000 +vt 0.721022 -1.497308 0.000000 +vt 0.738354 -1.509648 0.000000 +vt 0.769727 -1.613245 0.000000 +vt 0.782013 -1.641141 0.000000 +vt 0.772953 -1.631341 0.000000 +vt 0.781495 -1.624611 0.000000 +vt 0.785380 -1.623775 0.000000 +vt 0.785380 -1.623775 0.000000 +vt 0.781495 -1.624611 0.000000 +vt 0.756201 -1.595970 0.000000 +vt 0.758351 -1.610034 0.000000 +vt 0.765229 -1.638120 0.000000 +vt 0.771195 -1.659586 0.000000 +vt 0.773039 -1.662635 0.000000 +vt 0.776960 -1.676231 0.000000 +vt 0.780025 -1.651358 0.000000 +vt 0.778566 -1.676373 0.000000 +vt 0.783438 -1.624193 0.000000 +vt 0.746757 -1.591153 0.000000 +vt 0.781662 -1.425146 0.000000 +vt 0.777338 -1.547469 0.000000 +vt 0.772657 -1.315103 0.000000 +vt 0.770404 -1.272500 0.000000 +vt 0.770869 -1.250968 0.000000 +vt 0.779163 -1.370568 0.000000 +vt 0.783743 -1.588413 0.000000 +vt 0.781119 -1.492509 0.000000 +vt 0.771531 -1.293801 0.000000 +vt 0.785072 -1.603356 0.000000 +vt 0.779228 -1.519989 0.000000 +vt 0.783438 -1.624193 0.000000 +vt 0.783438 -1.624193 0.000000 +vt 0.781122 -1.651433 0.000000 +vt 0.779568 -1.676463 0.000000 +vt 0.572550 -1.095736 0.000000 +vt 0.556195 -1.681437 0.000000 +vt 0.561208 -1.642759 0.000000 +vt 0.565815 -1.593769 0.000000 +vt 0.557612 -1.697742 0.000000 +vt 0.558702 -1.662098 0.000000 +vt 0.562282 -1.197540 0.000000 +vt 0.566195 -1.137457 0.000000 +vt 0.561890 -1.247855 0.000000 +vt 0.569477 -1.529718 0.000000 +vt 0.562663 -1.316732 0.000000 +vt 0.565119 -1.381388 0.000000 +vt 0.569229 -1.456478 0.000000 +vt 0.564239 -1.167499 0.000000 +vt 0.027380 -1.862869 0.000000 +vt 0.743319 -1.589605 0.000000 +vt 0.911852 -1.672553 0.000000 +vt 0.684445 -1.057049 0.000000 +vt 0.689818 -1.064299 0.000000 +vt 0.693719 -1.072999 0.000000 +vt 0.690844 -1.075648 0.000000 +vt 0.682275 -1.059854 0.000000 +vt 0.028298 -1.866741 0.000000 +vt 0.027655 -1.861896 0.000000 +vt 0.743703 -1.590411 0.000000 +vt 0.748650 -1.607294 0.000000 +vt 0.748289 -1.606488 0.000000 +vt 0.446752 -1.715340 0.000000 +vt 0.403717 -1.731732 0.000000 +vt 0.406444 -1.674046 0.000000 +vt 0.446338 -1.654965 0.000000 +vt 0.448065 -1.744627 0.000000 +vt 0.403141 -1.766137 0.000000 +vt 0.482736 -1.745417 0.000000 +vt 0.449378 -1.773914 0.000000 +vt 0.481099 -1.718217 0.000000 +vt 0.484939 -1.764766 0.000000 +vt 0.451799 -1.796255 0.000000 +vt 0.525027 -1.744065 0.000000 +vt 0.487142 -1.784114 0.000000 +vt 0.523130 -1.727958 0.000000 +vt 0.294060 -1.998123 0.000000 +vt 0.261291 -1.998123 0.000000 +vt 0.260733 -1.950420 0.000000 +vt 0.293100 -1.950645 0.000000 +vt 0.402566 -1.800541 0.000000 +vt 0.407990 -1.832045 0.000000 +vt 0.212716 -1.832632 0.000000 +vt 0.234681 -1.836018 0.000000 +vt 0.234038 -1.868948 0.000000 +vt 0.211308 -1.866613 0.000000 +vt 0.260174 -1.902717 0.000000 +vt 0.233395 -1.901878 0.000000 +vt 0.259929 -1.869781 0.000000 +vt 0.233243 -1.950001 0.000000 +vt 0.207490 -1.998123 0.000000 +vt 0.208695 -1.949359 0.000000 +vt 0.233092 -1.998123 0.000000 +vt 0.200128 -1.830599 0.000000 +vt 0.202177 -1.796154 0.000000 +vt 0.213262 -1.800647 0.000000 +vt 0.198514 -1.866995 0.000000 +vt 0.196899 -1.903391 0.000000 +vt 0.209900 -1.900594 0.000000 +vt 0.195127 -1.950757 0.000000 +vt 0.193355 -1.998123 0.000000 +vt 0.181675 -1.998123 0.000000 +vt 0.182990 -1.957152 0.000000 +vt 0.119529 -1.906975 0.000000 +vt 0.120822 -1.952549 0.000000 +vt 0.096126 -1.936267 0.000000 +vt 0.095799 -1.893192 0.000000 +vt 0.076566 -1.916809 0.000000 +vt 0.075643 -1.880779 0.000000 +vt 0.020457 -1.812779 0.000000 +vt 0.017825 -1.821418 0.000000 +vt 0.011290 -1.799756 0.000000 +vt 0.013632 -1.793564 0.000000 +vt 0.027396 -1.785532 0.000000 +vt 0.023777 -1.801886 0.000000 +vt 0.015974 -1.787372 0.000000 +vt 0.020882 -1.767666 0.000000 +vt 0.048154 -1.689095 0.000000 +vt 0.042312 -1.717822 0.000000 +vt 0.038954 -1.694980 0.000000 +vt 0.043914 -1.676582 0.000000 +vt 0.037770 -1.745502 0.000000 +vt 0.030113 -1.724352 0.000000 +vt 0.026146 -1.737531 0.000000 +vt 0.029234 -1.753252 0.000000 +vt 0.014673 -1.763152 0.000000 +vt 0.011710 -1.773428 0.000000 +vt 0.047642 -1.721780 0.000000 +vt 0.043389 -1.752899 0.000000 +vt 0.040662 -1.895972 0.000000 +vt 0.033584 -1.881386 0.000000 +vt 0.031305 -1.850318 0.000000 +vt 0.042193 -1.871274 0.000000 +vt 0.058582 -1.925624 0.000000 +vt 0.058445 -1.895681 0.000000 +vt 0.079779 -1.956599 0.000000 +vt 0.059784 -1.865820 0.000000 +vt 0.062982 -1.836631 0.000000 +vt 0.076698 -1.846472 0.000000 +vt 0.077691 -1.847184 0.000000 +vt 0.051095 -1.823497 0.000000 +vt 0.045238 -1.846102 0.000000 +vt 0.055767 -1.796061 0.000000 +vt 0.067845 -1.805737 0.000000 +vt 0.049145 -1.789672 0.000000 +vt 0.040757 -1.808938 0.000000 +vt 0.051101 -1.759935 0.000000 +vt 0.061013 -1.766202 0.000000 +vt 0.056688 -1.727679 0.000000 +vt 0.054948 -1.692947 0.000000 +vt 0.063452 -1.695331 0.000000 +vt 0.061178 -1.665146 0.000000 +vt 0.069144 -1.663610 0.000000 +vt 0.035047 -1.828789 0.000000 +vt 0.032866 -1.796256 0.000000 +vt 0.028504 -1.814632 0.000000 +vt 0.027431 -1.851104 0.000000 +vt 0.075563 -1.699664 0.000000 +vt 0.067490 -1.733082 0.000000 +vt 0.073683 -1.773260 0.000000 +vt 0.083082 -1.815702 0.000000 +vt 0.077818 -1.846440 0.000000 +vt 0.102912 -1.824921 0.000000 +vt 0.099355 -1.859057 0.000000 +vt 0.090330 -1.781697 0.000000 +vt 0.110892 -1.788463 0.000000 +vt 0.097411 -1.747905 0.000000 +vt 0.118027 -1.742299 0.000000 +vt 0.105760 -1.716434 0.000000 +vt 0.089610 -1.705625 0.000000 +vt 0.081150 -1.740666 0.000000 +vt 0.082223 -1.664710 0.000000 +vt 0.097597 -1.668863 0.000000 +vt 0.109858 -1.677215 0.000000 +vt 0.121155 -1.684910 0.000000 +vt 0.143720 -1.690302 0.000000 +vt 0.139482 -1.742248 0.000000 +vt 0.122468 -1.870368 0.000000 +vt 0.125406 -1.833760 0.000000 +vt 0.132669 -1.790749 0.000000 +vt 0.155805 -1.744368 0.000000 +vt 0.161322 -1.687738 0.000000 +vt 0.170196 -1.741237 0.000000 +vt 0.174723 -1.690471 0.000000 +vt 0.181658 -1.742250 0.000000 +vt 0.186903 -1.696989 0.000000 +vt 0.192653 -1.751974 0.000000 +vt 0.197694 -1.705134 0.000000 +vt 0.189831 -1.791338 0.000000 +vt 0.179061 -1.788542 0.000000 +vt 0.204227 -1.761708 0.000000 +vt 0.190461 -1.656656 0.000000 +vt 0.200662 -1.658381 0.000000 +vt 0.207223 -1.704071 0.000000 +vt 0.184304 -1.916180 0.000000 +vt 0.186004 -1.877387 0.000000 +vt 0.187704 -1.838594 0.000000 +vt 0.176877 -1.841777 0.000000 +vt 0.167131 -1.791695 0.000000 +vt 0.151598 -1.793337 0.000000 +vt 0.146040 -1.838457 0.000000 +vt 0.143675 -1.878700 0.000000 +vt 0.141310 -1.918942 0.000000 +vt 0.122115 -1.998123 0.000000 +vt 0.140709 -1.958533 0.000000 +vt 0.140107 -1.998123 0.000000 +vt 0.168522 -1.998123 0.000000 +vt 0.169969 -1.959657 0.000000 +vt 0.171416 -1.921191 0.000000 +vt 0.174147 -1.881484 0.000000 +vt 0.163360 -1.844024 0.000000 +vt 0.160737 -1.883707 0.000000 +vt 0.158115 -1.923390 0.000000 +vt 0.156460 -1.960757 0.000000 +vt 0.154804 -1.998123 0.000000 +vt 0.662816 -1.174689 0.000000 +vt 0.664387 -1.192741 0.000000 +vt 0.639267 -1.188892 0.000000 +vt 0.640050 -1.162971 0.000000 +vt 0.617705 -1.144318 0.000000 +vt 0.615889 -1.171577 0.000000 +vt 0.599003 -1.119578 0.000000 +vt 0.593173 -1.154422 0.000000 +vt 0.638937 -1.211467 0.000000 +vt 0.615982 -1.196080 0.000000 +vt 0.638607 -1.234041 0.000000 +vt 0.666181 -1.214113 0.000000 +vt 0.667975 -1.235484 0.000000 +vt 0.688108 -1.215248 0.000000 +vt 0.691630 -1.240725 0.000000 +vt 0.684586 -1.189772 0.000000 +vt 0.673988 -1.159874 0.000000 +vt 0.688807 -1.513222 0.000000 +vt 0.695542 -1.554549 0.000000 +vt 0.666089 -1.571621 0.000000 +vt 0.658095 -1.531948 0.000000 +vt 0.713097 -1.522795 0.000000 +vt 0.717034 -1.557598 0.000000 +vt 0.385126 -1.918928 0.000000 +vt 0.387647 -1.921755 0.000000 +vt 0.403322 -1.938097 0.000000 +vt 0.402613 -1.943667 0.000000 +vt 0.388820 -1.906694 0.000000 +vt 0.386453 -1.907733 0.000000 +vt 0.381982 -1.906575 0.000000 +vt 0.403451 -1.902720 0.000000 +vt 0.402483 -1.908047 0.000000 +vt 0.001306 -1.494628 0.000000 +vt 0.001824 -1.483959 0.000000 +vt 0.007521 -1.487368 0.000000 +vt 0.008168 -1.498328 0.000000 +vt 0.016637 -1.502894 0.000000 +vt 0.016832 -1.492939 0.000000 +vt 0.033586 -1.499729 0.000000 +vt 0.031878 -1.507013 0.000000 +vt 0.048688 -1.504969 0.000000 +vt 0.045574 -1.511990 0.000000 +vt 0.002341 -1.473290 0.000000 +vt 0.007104 -1.476348 0.000000 +vt 0.012510 -1.479819 0.000000 +vt 0.021542 -1.486149 0.000000 +vt 0.031137 -1.491360 0.000000 +vt 0.039453 -1.493529 0.000000 +vt 0.047788 -1.495727 0.000000 +vt 0.055816 -1.500169 0.000000 +vt 0.058115 -1.502089 0.000000 +vt 0.055042 -1.512336 0.000000 +vt 0.067817 -1.520307 0.000000 +vt 0.071043 -1.515590 0.000000 +vt 0.072679 -1.535981 0.000000 +vt 0.068938 -1.540070 0.000000 +vt 0.065321 -1.512809 0.000000 +vt 0.063152 -1.506295 0.000000 +vt 0.065833 -1.501933 0.000000 +vt 0.068324 -1.508463 0.000000 +vt 0.058119 -1.496033 0.000000 +vt 0.060187 -1.497615 0.000000 +vt 0.051344 -1.497695 0.000000 +vt 0.049636 -1.491689 0.000000 +vt 0.053609 -1.493723 0.000000 +vt 0.040920 -1.488740 0.000000 +vt 0.031523 -1.488273 0.000000 +vt 0.031931 -1.485008 0.000000 +vt 0.042387 -1.483950 0.000000 +vt 0.021811 -1.482606 0.000000 +vt 0.022099 -1.478823 0.000000 +vt 0.012710 -1.475196 0.000000 +vt 0.012861 -1.471720 0.000000 +vt 0.007803 -1.472111 0.000000 +vt 0.002779 -1.464289 0.000000 +vt 0.008406 -1.468437 0.000000 +vt 0.051485 -1.487650 0.000000 +vt 0.055953 -1.489773 0.000000 +vt 0.063440 -1.485841 0.000000 +vt 0.060422 -1.491896 0.000000 +vt 0.058737 -1.483498 0.000000 +vt 0.054034 -1.481154 0.000000 +vt 0.044253 -1.476796 0.000000 +vt 0.066457 -1.479787 0.000000 +vt 0.061520 -1.477222 0.000000 +vt 0.068755 -1.481037 0.000000 +vt 0.065600 -1.487176 0.000000 +vt 0.062445 -1.493315 0.000000 +vt 0.023664 -1.461783 0.000000 +vt 0.034001 -1.470381 0.000000 +vt 0.056583 -1.474657 0.000000 +vt 0.046119 -1.469642 0.000000 +vt 0.075047 -1.460783 0.000000 +vt 0.069541 -1.457127 0.000000 +vt 0.077341 -1.462257 0.000000 +vt 0.075648 -1.484789 0.000000 +vt 0.084222 -1.466680 0.000000 +vt 0.088640 -1.474022 0.000000 +vt 0.079320 -1.491444 0.000000 +vt 0.072081 -1.491180 0.000000 +vt 0.075355 -1.497833 0.000000 +vt 0.068515 -1.497570 0.000000 +vt 0.071392 -1.504221 0.000000 +vt 0.074269 -1.510873 0.000000 +vt 0.078630 -1.504486 0.000000 +vt 0.081322 -1.526890 0.000000 +vt 0.076420 -1.531893 0.000000 +vt 0.014062 -1.452431 0.000000 +vt 0.035279 -1.462105 0.000000 +vt 0.064034 -1.453471 0.000000 +vt 0.050634 -1.445945 0.000000 +vt 0.083881 -1.432119 0.000000 +vt 0.077186 -1.426308 0.000000 +vt 0.079635 -1.463732 0.000000 +vt 0.089061 -1.437284 0.000000 +vt 0.094242 -1.442449 0.000000 +vt 0.093058 -1.481364 0.000000 +vt 0.099482 -1.452224 0.000000 +vt 0.104722 -1.461998 0.000000 +vt 0.113933 -1.441943 0.000000 +vt 0.107753 -1.429019 0.000000 +vt 0.120869 -1.405478 0.000000 +vt 0.114567 -1.396402 0.000000 +vt 0.101572 -1.416095 0.000000 +vt 0.095741 -1.410493 0.000000 +vt 0.024672 -1.452069 0.000000 +vt 0.038916 -1.434224 0.000000 +vt 0.070492 -1.420497 0.000000 +vt 0.055746 -1.408106 0.000000 +vt 0.089909 -1.404892 0.000000 +vt 0.083008 -1.397959 0.000000 +vt 0.108264 -1.387326 0.000000 +vt 0.102130 -1.380942 0.000000 +vt 0.121635 -1.355956 0.000000 +vt 0.128450 -1.327870 0.000000 +vt 0.133371 -1.368011 0.000000 +vt 0.121635 -1.355956 0.000000 +vt 0.140453 -1.312477 0.000000 +vt 0.130270 -1.284333 0.000000 +vt 0.123260 -1.314045 0.000000 +vt 0.125074 -1.294381 0.000000 +vt 0.120629 -1.330894 0.000000 +vt 0.115823 -1.358186 0.000000 +vt 0.118006 -1.338238 0.000000 +vt 0.110278 -1.351714 0.000000 +vt 0.095995 -1.374557 0.000000 +vt 0.090103 -1.366326 0.000000 +vt 0.076107 -1.391026 0.000000 +vt 0.060254 -1.379239 0.000000 +vt 0.042180 -1.397203 0.000000 +vt 0.027536 -1.421293 0.000000 +vt 0.014910 -1.441240 0.000000 +vt 0.003609 -1.442902 0.000000 +vt 0.008836 -1.447666 0.000000 +vt 0.114893 -1.336146 0.000000 +vt 0.044757 -1.368741 0.000000 +vt 0.084211 -1.358095 0.000000 +vt 0.063716 -1.350995 0.000000 +vt 0.085832 -1.330440 0.000000 +vt 0.095860 -1.338803 0.000000 +vt 0.110670 -1.319893 0.000000 +vt 0.104732 -1.345241 0.000000 +vt 0.098229 -1.340779 0.000000 +vt 0.099334 -1.311112 0.000000 +vt 0.103048 -1.272988 0.000000 +vt 0.101191 -1.292050 0.000000 +vt 0.088795 -1.278592 0.000000 +vt 0.090138 -1.254400 0.000000 +vt 0.112500 -1.301316 0.000000 +vt 0.113653 -1.255250 0.000000 +vt 0.119308 -1.277911 0.000000 +vt 0.115789 -1.286087 0.000000 +vt 0.116179 -1.288260 0.000000 +vt 0.113731 -1.300853 0.000000 +vt 0.126537 -1.258982 0.000000 +vt 0.124699 -1.282167 0.000000 +vt 0.121992 -1.276810 0.000000 +vt 0.120468 -1.257224 0.000000 +vt 0.139931 -1.240379 0.000000 +vt 0.126586 -1.219639 0.000000 +vt 0.118578 -1.217008 0.000000 +vt 0.091612 -1.209746 0.000000 +vt 0.101091 -1.212062 0.000000 +vt 0.070577 -1.245063 0.000000 +vt 0.069162 -1.266123 0.000000 +vt 0.051185 -1.253117 0.000000 +vt 0.052167 -1.234462 0.000000 +vt 0.047724 -1.341348 0.000000 +vt 0.048964 -1.306560 0.000000 +vt 0.065731 -1.319089 0.000000 +vt 0.034241 -1.298772 0.000000 +vt 0.034646 -1.278434 0.000000 +vt 0.023361 -1.285007 0.000000 +vt 0.024648 -1.272536 0.000000 +vt 0.036896 -1.221098 0.000000 +vt 0.035974 -1.239597 0.000000 +vt 0.027318 -1.234011 0.000000 +vt 0.028179 -1.215820 0.000000 +vt 0.152071 -1.261056 0.000000 +vt 0.111573 -1.161777 0.000000 +vt 0.110570 -1.214377 0.000000 +vt 0.102312 -1.160848 0.000000 +vt 0.119299 -1.164057 0.000000 +vt 0.127024 -1.166337 0.000000 +vt 0.140947 -1.178433 0.000000 +vt 0.155540 -1.193876 0.000000 +vt 0.170856 -1.207144 0.000000 +vt 0.169460 -1.294361 0.000000 +vt 0.191290 -1.278710 0.000000 +vt 0.190500 -1.203792 0.000000 +vt 0.227577 -1.193990 0.000000 +vt 0.209284 -1.199004 0.000000 +vt 0.208394 -1.129267 0.000000 +vt 0.227158 -1.123879 0.000000 +vt 0.189630 -1.133489 0.000000 +vt 0.210185 -1.269703 0.000000 +vt 0.171244 -1.139303 0.000000 +vt 0.155456 -1.130928 0.000000 +vt 0.141114 -1.122312 0.000000 +vt 0.127278 -1.115911 0.000000 +vt 0.112536 -1.112953 0.000000 +vt 0.119907 -1.114432 0.000000 +vt 0.103434 -1.112412 0.000000 +vt 0.093050 -1.159920 0.000000 +vt 0.072386 -1.204922 0.000000 +vt 0.074341 -1.161384 0.000000 +vt 0.170022 -1.078906 0.000000 +vt 0.187676 -1.070359 0.000000 +vt 0.206477 -1.065513 0.000000 +vt 0.140948 -1.072335 0.000000 +vt 0.127177 -1.070554 0.000000 +vt 0.126570 -1.048028 0.000000 +vt 0.140492 -1.045681 0.000000 +vt 0.154673 -1.075328 0.000000 +vt 0.154193 -1.042975 0.000000 +vt 0.169102 -1.043159 0.000000 +vt 0.186471 -1.036615 0.000000 +vt 0.205539 -1.034192 0.000000 +vt 0.225172 -1.031927 0.000000 +vt 0.225920 -1.060981 0.000000 +vt 0.246266 -1.186306 0.000000 +vt 0.246409 -1.116777 0.000000 +vt 0.246100 -1.257389 0.000000 +vt 0.228194 -1.264358 0.000000 +vt 0.264052 -1.251135 0.000000 +vt 0.264676 -1.179071 0.000000 +vt 0.261129 -1.349253 0.000000 +vt 0.245252 -1.354527 0.000000 +vt 0.245597 -1.056585 0.000000 +vt 0.244949 -1.029730 0.000000 +vt 0.040479 -1.183994 0.000000 +vt 0.032060 -1.181552 0.000000 +vt 0.033010 -1.160599 0.000000 +vt 0.045150 -1.151599 0.000000 +vt 0.033750 -1.143417 0.000000 +vt 0.049429 -1.131354 0.000000 +vt 0.028151 -1.114051 0.000000 +vt 0.030951 -1.128734 0.000000 +vt 0.025050 -1.152670 0.000000 +vt 0.021269 -1.141642 0.000000 +vt 0.045049 -1.109936 0.000000 +vt 0.043399 -1.097405 0.000000 +vt 0.059519 -1.093050 0.000000 +vt 0.058511 -1.079011 0.000000 +vt 0.076094 -1.076261 0.000000 +vt 0.075902 -1.060246 0.000000 +vt 0.094664 -1.071326 0.000000 +vt 0.094251 -1.054044 0.000000 +vt 0.112706 -1.070264 0.000000 +vt 0.103685 -1.070795 0.000000 +vt 0.103091 -1.052811 0.000000 +vt 0.111930 -1.051578 0.000000 +vt 0.119942 -1.070409 0.000000 +vt 0.119250 -1.049803 0.000000 +vt 0.059924 -1.125787 0.000000 +vt 0.075813 -1.117600 0.000000 +vt 0.094332 -1.111872 0.000000 +vt 0.058215 -1.159194 0.000000 +vt 0.054510 -1.196952 0.000000 +vt 0.525086 -1.044053 0.000000 +vt 0.563733 -1.087789 0.000000 +vt 0.557203 -1.131802 0.000000 +vt 0.516714 -1.104841 0.000000 +vt 0.591289 -1.205736 0.000000 +vt 0.571951 -1.200272 0.000000 +vt 0.573570 -1.171692 0.000000 +vt 0.592231 -1.180079 0.000000 +vt 0.554908 -1.163305 0.000000 +vt 0.515201 -1.142310 0.000000 +vt 0.575188 -1.143112 0.000000 +vt 0.581368 -1.103683 0.000000 +vt 0.616074 -1.220584 0.000000 +vt 0.265304 -1.110105 0.000000 +vt 0.280323 -1.245846 0.000000 +vt 0.281359 -1.173319 0.000000 +vt 0.294725 -1.240592 0.000000 +vt 0.296242 -1.169249 0.000000 +vt 0.281715 -1.104802 0.000000 +vt 0.296919 -1.100902 0.000000 +vt 0.281051 -1.044769 0.000000 +vt 0.296695 -1.042209 0.000000 +vt 0.299724 -1.002871 0.000000 +vt 0.296956 -1.022540 0.000000 +vt 0.280875 -1.023822 0.000000 +vt 0.280698 -1.002875 0.000000 +vt 0.264500 -1.050821 0.000000 +vt 0.263459 -1.002877 0.000000 +vt 0.263979 -1.026849 0.000000 +vt 0.244300 -1.002875 0.000000 +vt 0.004001 -1.430517 0.000000 +vt 0.009456 -1.435879 0.000000 +vt 0.016391 -1.409298 0.000000 +vt 0.029800 -1.381501 0.000000 +vt 0.004001 -1.399524 0.000000 +vt 0.010196 -1.404411 0.000000 +vt 0.017542 -1.368135 0.000000 +vt 0.031945 -1.335490 0.000000 +vt 0.004001 -1.366125 0.000000 +vt 0.010771 -1.367130 0.000000 +vt 0.018868 -1.319180 0.000000 +vt 0.011088 -1.344768 0.000000 +vt 0.004001 -1.284609 0.000000 +vt 0.004001 -1.275770 0.000000 +vt 0.011202 -1.272311 0.000000 +vt 0.011669 -1.282262 0.000000 +vt 0.019337 -1.279916 0.000000 +vt 0.011434 -1.320289 0.000000 +vt 0.018521 -1.252949 0.000000 +vt 0.018404 -1.268853 0.000000 +vt 0.011261 -1.253556 0.000000 +vt 0.019732 -1.233324 0.000000 +vt 0.026457 -1.252202 0.000000 +vt 0.020942 -1.213698 0.000000 +vt 0.012518 -1.231818 0.000000 +vt 0.013774 -1.210080 0.000000 +vt 0.015963 -1.164604 0.000000 +vt 0.020693 -1.172719 0.000000 +vt 0.025424 -1.180835 0.000000 +vt 0.016297 -1.199821 0.000000 +vt 0.994546 -1.852151 0.000000 +vt 0.958873 -1.893777 0.000000 +vt 0.961451 -1.900387 0.000000 +vt 0.970663 -1.924002 0.000000 +vt 0.979932 -1.936245 0.000000 +vt 0.942482 -1.983014 0.000000 +vt 0.989201 -1.948489 0.000000 +vt 0.935363 -1.964203 0.000000 +vt 0.956645 -1.685330 0.000000 +vt 0.931004 -1.666544 0.000000 +vt 0.926051 -1.669974 0.000000 +vt 0.956645 -1.685330 0.000000 +vt 0.254746 -1.428298 0.000000 +vt 0.239676 -1.435187 0.000000 +vt 0.227883 -1.359666 0.000000 +vt 0.225132 -1.441651 0.000000 +vt 0.234272 -1.489750 0.000000 +vt 0.222098 -1.496886 0.000000 +vt 0.218564 -1.551303 0.000000 +vt 0.229951 -1.542608 0.000000 +vt 0.206801 -1.556883 0.000000 +vt 0.208998 -1.503417 0.000000 +vt 0.203634 -1.608481 0.000000 +vt 0.214607 -1.604196 0.000000 +vt 0.193201 -1.609948 0.000000 +vt 0.195318 -1.560638 0.000000 +vt 0.210996 -1.655101 0.000000 +vt 0.213807 -1.768662 0.000000 +vt 0.216253 -1.700998 0.000000 +vt 0.233934 -1.802528 0.000000 +vt 0.196543 -1.510135 0.000000 +vt 0.211009 -1.448208 0.000000 +vt 0.211570 -1.365063 0.000000 +vt 0.197906 -1.454998 0.000000 +vt 0.196369 -1.376942 0.000000 +vt 0.227602 -1.598818 0.000000 +vt 0.219895 -1.652916 0.000000 +vt 0.121897 -1.328335 0.000000 +vt 0.124318 -1.315580 0.000000 +vt 0.378312 -1.060181 0.000000 +vt 0.372072 -1.102195 0.000000 +vt 0.345154 -1.089328 0.000000 +vt 0.347728 -1.046174 0.000000 +vt 0.371916 -1.147159 0.000000 +vt 0.343658 -1.154041 0.000000 +vt 0.415283 -1.143426 0.000000 +vt 0.416465 -1.096594 0.000000 +vt 0.413037 -1.205463 0.000000 +vt 0.372185 -1.212062 0.000000 +vt 0.344024 -1.223621 0.000000 +vt 0.318589 -1.098304 0.000000 +vt 0.317602 -1.165430 0.000000 +vt 0.318629 -1.042435 0.000000 +vt 0.348432 -1.002871 0.000000 +vt 0.348080 -1.024523 0.000000 +vt 0.319165 -1.022663 0.000000 +vt 0.319701 -1.002891 0.000000 +vt 0.443205 -1.151542 0.000000 +vt 0.442142 -1.210480 0.000000 +vt 0.415531 -1.294937 0.000000 +vt 0.442089 -1.300299 0.000000 +vt 0.374740 -1.302715 0.000000 +vt 0.416770 -1.381189 0.000000 +vt 0.374791 -1.385177 0.000000 +vt 0.443607 -1.443343 0.000000 +vt 0.416933 -1.439118 0.000000 +vt 0.442597 -1.386132 0.000000 +vt 0.470200 -1.218648 0.000000 +vt 0.470509 -1.306074 0.000000 +vt 0.471105 -1.159674 0.000000 +vt 0.513476 -1.234565 0.000000 +vt 0.513689 -1.179779 0.000000 +vt 0.551861 -1.246622 0.000000 +vt 0.552613 -1.194808 0.000000 +vt 0.591979 -1.251556 0.000000 +vt 0.571920 -1.249089 0.000000 +vt 0.617392 -1.264145 0.000000 +vt 0.640213 -1.276789 0.000000 +vt 0.561890 -1.247855 0.000000 +vt 0.562663 -1.316732 0.000000 +vt 0.552729 -1.316174 0.000000 +vt 0.618369 -1.325547 0.000000 +vt 0.592464 -1.318407 0.000000 +vt 0.644697 -1.331903 0.000000 +vt 0.676310 -1.342834 0.000000 +vt 0.670685 -1.285197 0.000000 +vt 0.680287 -1.437896 0.000000 +vt 0.648125 -1.395863 0.000000 +vt 0.706473 -1.452648 0.000000 +vt 0.703277 -1.354226 0.000000 +vt 0.684547 -1.475559 0.000000 +vt 0.709785 -1.487721 0.000000 +vt 0.697273 -1.291975 0.000000 +vt 0.618935 -1.386380 0.000000 +vt 0.592883 -1.381416 0.000000 +vt 0.638163 -1.465243 0.000000 +vt 0.648129 -1.498595 0.000000 +vt 0.614482 -1.445965 0.000000 +vt 0.677229 -1.156718 0.000000 +vt 0.688126 -1.160658 0.000000 +vt 0.694392 -1.197227 0.000000 +vt 0.674080 -1.144837 0.000000 +vt 0.685445 -1.147878 0.000000 +vt 0.676805 -1.106695 0.000000 +vt 0.684907 -1.100333 0.000000 +vt 0.686821 -1.112411 0.000000 +vt 0.676805 -1.106695 0.000000 +vt 0.476868 -1.634191 0.000000 +vt 0.479462 -1.691017 0.000000 +vt 0.447547 -1.607413 0.000000 +vt 0.475402 -1.584196 0.000000 +vt 0.447038 -1.552912 0.000000 +vt 0.476107 -1.541826 0.000000 +vt 0.446946 -1.501985 0.000000 +vt 0.475431 -1.499751 0.000000 +vt 0.473388 -1.444316 0.000000 +vt 0.471896 -1.388738 0.000000 +vt 0.514163 -1.313522 0.000000 +vt 0.520854 -1.663489 0.000000 +vt 0.521043 -1.687670 0.000000 +vt 0.523532 -1.610601 0.000000 +vt 0.524654 -1.567310 0.000000 +vt 0.522142 -1.507261 0.000000 +vt 0.521139 -1.479678 0.000000 +vt 0.517031 -1.390437 0.000000 +vt 0.519947 -1.446893 0.000000 +vt 0.549731 -1.706705 0.000000 +vt 0.409720 -1.620384 0.000000 +vt 0.414354 -1.561123 0.000000 +vt 0.415135 -1.503257 0.000000 +vt 0.583780 -1.705039 0.000000 +vt 0.574459 -1.739983 0.000000 +vt 0.572264 -1.735272 0.000000 +vt 0.581304 -1.706488 0.000000 +vt 0.566317 -1.717392 0.000000 +vt 0.577834 -1.695803 0.000000 +vt 0.585532 -1.692688 0.000000 +vt 0.401941 -1.914162 0.000000 +vt 0.387381 -1.910405 0.000000 +vt 0.122201 -1.281286 0.000000 +vt 0.119551 -1.281017 0.000000 +vt 0.125604 -1.299490 0.000000 +vt 0.124666 -1.286551 0.000000 +vt 0.118890 -1.334722 0.000000 +vt 0.112348 -1.316229 0.000000 +vt 0.111931 -1.330433 0.000000 +vt 0.111931 -1.330433 0.000000 +vt 0.113361 -1.326869 0.000000 +vt 0.116186 -1.331598 0.000000 +vt 0.107505 -1.348477 0.000000 +vt 0.562326 -1.541520 0.000000 +vt 0.561584 -1.461517 0.000000 +vt 0.569229 -1.456478 0.000000 +vt 0.569477 -1.529718 0.000000 +vt 0.576627 -1.517915 0.000000 +vt 0.590928 -1.494311 0.000000 +vt 0.592921 -1.515487 0.000000 +vt 0.582566 -1.550740 0.000000 +vt 0.564251 -1.673203 0.000000 +vt 0.556195 -1.681437 0.000000 +vt 0.558702 -1.662098 0.000000 +vt 0.567156 -1.655750 0.000000 +vt 0.570062 -1.638296 0.000000 +vt 0.561208 -1.642759 0.000000 +vt 0.565815 -1.593769 0.000000 +vt 0.581246 -1.604864 0.000000 +vt 0.548140 -1.689670 0.000000 +vt 0.521232 -1.711851 0.000000 +vt 0.550246 -1.668446 0.000000 +vt 0.555864 -1.381379 0.000000 +vt 0.868464 -1.449891 0.000000 +vt 0.831471 -1.447903 0.000000 +vt 0.832612 -1.407113 0.000000 +vt 0.799380 -1.385488 0.000000 +vt 0.811651 -1.393472 0.000000 +vt 0.811706 -1.439605 0.000000 +vt 0.800857 -1.435050 0.000000 +vt 0.744584 -1.342777 0.000000 +vt 0.767637 -1.361305 0.000000 +vt 0.771382 -1.418987 0.000000 +vt 0.750824 -1.406667 0.000000 +vt 0.718187 -1.313491 0.000000 +vt 0.724786 -1.320812 0.000000 +vt 0.730427 -1.383332 0.000000 +vt 0.723628 -1.375553 0.000000 +vt 0.707730 -1.302733 0.000000 +vt 0.713452 -1.364890 0.000000 +vt 0.717610 -1.461324 0.000000 +vt 0.721022 -1.497308 0.000000 +vt 0.724434 -1.533291 0.000000 +vt 0.735771 -1.543787 0.000000 +vt 0.743319 -1.589605 0.000000 +vt 0.730107 -1.574776 0.000000 +vt 0.753775 -1.484318 0.000000 +vt 0.772004 -1.489779 0.000000 +vt 0.741261 -1.477160 0.000000 +vt 0.737226 -1.391110 0.000000 +vt 0.794125 -1.335326 0.000000 +vt 0.807564 -1.345510 0.000000 +vt 0.783954 -1.327620 0.000000 +vt 0.790689 -1.379832 0.000000 +vt 0.779163 -1.370568 0.000000 +vt 0.772657 -1.315103 0.000000 +vt 0.796397 -1.535006 0.000000 +vt 0.796609 -1.555446 0.000000 +vt 0.789028 -1.583573 0.000000 +vt 0.783281 -1.546125 0.000000 +vt 0.809411 -1.534909 0.000000 +vt 0.806950 -1.546212 0.000000 +vt 0.767888 -1.602933 0.000000 +vt 0.778458 -1.593253 0.000000 +vt 0.780825 -1.603251 0.000000 +vt 0.769727 -1.613245 0.000000 +vt 0.783743 -1.588413 0.000000 +vt 0.777338 -1.547469 0.000000 +vt 0.797993 -1.498292 0.000000 +vt 0.806660 -1.501703 0.000000 +vt 0.808035 -1.518306 0.000000 +vt 0.797195 -1.516649 0.000000 +vt 0.821917 -1.551077 0.000000 +vt 0.818290 -1.558999 0.000000 +vt 0.790233 -1.495239 0.000000 +vt 0.786757 -1.520682 0.000000 +vt 0.779228 -1.519989 0.000000 +vt 0.781119 -1.492509 0.000000 +vt 0.776960 -1.676231 0.000000 +vt 0.774210 -1.675986 0.000000 +vt 0.769892 -1.669891 0.000000 +vt 0.773039 -1.662635 0.000000 +vt 0.759508 -1.551500 0.000000 +vt 0.747639 -1.547643 0.000000 +vt 0.744450 -1.512401 0.000000 +vt 0.756642 -1.517909 0.000000 +vt 0.823086 -1.508166 0.000000 +vt 0.856146 -1.518482 0.000000 +vt 0.855529 -1.521919 0.000000 +vt 0.822502 -1.529621 0.000000 +vt 0.844893 -1.565603 0.000000 +vt 0.838329 -1.586606 0.000000 +vt 0.833771 -1.598464 0.000000 +vt 0.886711 -1.539266 0.000000 +vt 0.885187 -1.545414 0.000000 +vt 0.863752 -1.621635 0.000000 +vt 0.854798 -1.647519 0.000000 +vt 0.849165 -1.663175 0.000000 +vt 0.862037 -1.697608 0.000000 +vt 0.855348 -1.715277 0.000000 +vt 0.920535 -1.537478 0.000000 +vt 0.928509 -1.496037 0.000000 +vt 0.941100 -1.506833 0.000000 +vt 0.930603 -1.561657 0.000000 +vt 0.928462 -1.575369 0.000000 +vt 0.926320 -1.589081 0.000000 +vt 0.912573 -1.573260 0.000000 +vt 0.914676 -1.563807 0.000000 +vt 0.928462 -1.575369 0.000000 +vt 0.872707 -1.595751 0.000000 +vt 0.904673 -1.608760 0.000000 +vt 0.888811 -1.680042 0.000000 +vt 0.875424 -1.688825 0.000000 +vt 0.866439 -1.733115 0.000000 +vt 0.859678 -1.750128 0.000000 +vt 0.873211 -1.788904 0.000000 +vt 0.889277 -1.773130 0.000000 +vt 0.889036 -1.724908 0.000000 +vt 0.877737 -1.729011 0.000000 +vt 0.922038 -1.616506 0.000000 +vt 0.911852 -1.672553 0.000000 +vt 0.904568 -1.721845 0.000000 +vt 0.899397 -1.756141 0.000000 +vt 0.448424 -1.026541 0.000000 +vt 0.460156 -1.009018 0.000000 +vt 0.465046 -1.083032 0.000000 +vt 0.448674 -1.060313 0.000000 +vt 0.486775 -1.018199 0.000000 +vt 0.483748 -1.090110 0.000000 +vt 0.477426 -1.124892 0.000000 +vt 0.446848 -1.102002 0.000000 +vt 0.418597 -1.030385 0.000000 +vt 0.417352 -1.060327 0.000000 +vt 0.386269 -1.035703 0.000000 +vt 0.390421 -1.005564 0.000000 +vt 0.404509 -1.017974 0.000000 +vt 0.401810 -1.048015 0.000000 +vt 0.371632 -1.012923 0.000000 +vt 0.378951 -1.024313 0.000000 +vt 0.375807 -1.042459 0.000000 +vt 0.873556 -1.057154 0.000000 +vt 0.884478 -1.023802 0.000000 +vt 0.882301 -1.034338 0.000000 +vt 0.877625 -1.076667 0.000000 +vt 0.868702 -1.170970 0.000000 +vt 0.871129 -1.114062 0.000000 +vt 0.856767 -1.162794 0.000000 +vt 0.864722 -1.098175 0.000000 +vt 0.838879 -1.143008 0.000000 +vt 0.847502 -1.088609 0.000000 +vt 0.836671 -1.247690 0.000000 +vt 0.822419 -1.228117 0.000000 +vt 0.830649 -1.185562 0.000000 +vt 0.846719 -1.205242 0.000000 +vt 0.858806 -1.217885 0.000000 +vt 0.862667 -1.275749 0.000000 +vt 0.859635 -1.293746 0.000000 +vt 0.846082 -1.279830 0.000000 +vt 0.848911 -1.264801 0.000000 +vt 0.833964 -1.263142 0.000000 +vt 0.816185 -1.255371 0.000000 +vt 0.819302 -1.241744 0.000000 +vt 0.831256 -1.278594 0.000000 +vt 0.800300 -1.154680 0.000000 +vt 0.806075 -1.115153 0.000000 +vt 0.767205 -1.164189 0.000000 +vt 0.763460 -1.160074 0.000000 +vt 0.768195 -1.126017 0.000000 +vt 0.772110 -1.129454 0.000000 +vt 0.759715 -1.155960 0.000000 +vt 0.722991 -1.114285 0.000000 +vt 0.730096 -1.091341 0.000000 +vt 0.764280 -1.122580 0.000000 +vt 0.697592 -1.056618 0.000000 +vt 0.704073 -1.041870 0.000000 +vt 0.737200 -1.068398 0.000000 +vt 0.683979 -1.038960 0.000000 +vt 0.686805 -1.026919 0.000000 +vt 0.757231 -1.165470 0.000000 +vt 0.720297 -1.120635 0.000000 +vt 0.754748 -1.174980 0.000000 +vt 0.761309 -1.170126 0.000000 +vt 0.759159 -1.180178 0.000000 +vt 0.777015 -1.094719 0.000000 +vt 0.772930 -1.091959 0.000000 +vt 0.778085 -1.059713 0.000000 +vt 0.782633 -1.061631 0.000000 +vt 0.743095 -1.018616 0.000000 +vt 0.778228 -1.026391 0.000000 +vt 0.773536 -1.057795 0.000000 +vt 0.740147 -1.043507 0.000000 +vt 0.683446 -1.001410 0.000000 +vt 0.678820 -1.009259 0.000000 +vt 0.669294 -1.010868 0.000000 +vt 0.674577 -1.016457 0.000000 +vt 0.674511 -1.027898 0.000000 +vt 0.682678 -1.069603 0.000000 +vt 0.685582 -1.067610 0.000000 +vt 0.690844 -1.075648 0.000000 +vt 0.717604 -1.126985 0.000000 +vt 0.674465 -1.035880 0.000000 +vt 0.671773 -1.034402 0.000000 +vt 0.677689 -1.056144 0.000000 +vt 0.669081 -1.032925 0.000000 +vt 0.679177 -1.052589 0.000000 +vt 0.891191 -1.009180 0.000000 +vt 0.872678 -1.033555 0.000000 +vt 0.886146 -1.001169 0.000000 +vt 0.864709 -1.009795 0.000000 +vt 0.856125 -1.034210 0.000000 +vt 0.814013 -1.074645 0.000000 +vt 0.788251 -1.028544 0.000000 +vt 0.783239 -1.027467 0.000000 +vt 0.791851 -1.011704 0.000000 +vt 0.778266 -1.010600 0.000000 +vt 0.750097 -1.007531 0.000000 +vt 0.821950 -1.034136 0.000000 +vt 0.821321 -1.014169 0.000000 +vt 0.841689 -1.338467 0.000000 +vt 0.840453 -1.326999 0.000000 +vt 0.868171 -1.322349 0.000000 +vt 0.871793 -1.337811 0.000000 +vt 0.817873 -1.318832 0.000000 +vt 0.818910 -1.306408 0.000000 +vt 0.836432 -1.350933 0.000000 +vt 0.812719 -1.332171 0.000000 +vt 0.786259 -1.292840 0.000000 +vt 0.785107 -1.310230 0.000000 +vt 0.771531 -1.293801 0.000000 +vt 0.770404 -1.272500 0.000000 +vt 0.713570 -1.257357 0.000000 +vt 0.719869 -1.262406 0.000000 +vt 0.702600 -1.249041 0.000000 +vt 0.698496 -1.223134 0.000000 +vt 0.708884 -1.231020 0.000000 +vt 0.704198 -1.204683 0.000000 +vt 0.695617 -1.167916 0.000000 +vt 0.715974 -1.214550 0.000000 +vt 0.710086 -1.209616 0.000000 +vt 0.702370 -1.172056 0.000000 +vt 0.709123 -1.176195 0.000000 +vt 0.733426 -1.232167 0.000000 +vt 0.736097 -1.254859 0.000000 +vt 0.721071 -1.241002 0.000000 +vt 0.727630 -1.190724 0.000000 +vt 0.797259 -1.301884 0.000000 +vt 0.797468 -1.283968 0.000000 +vt 0.786953 -1.272963 0.000000 +vt 0.770869 -1.250968 0.000000 +vt 0.754786 -1.228972 0.000000 +vt 0.754549 -1.252159 0.000000 +vt 0.690476 -1.107204 0.000000 +vt 0.688368 -1.108490 0.000000 +vt 0.717370 -1.167818 0.000000 +vt 0.705516 -1.158965 0.000000 +vt 0.712188 -1.154787 0.000000 +vt 0.918020 -1.195984 0.000000 +vt 0.933605 -1.196023 0.000000 +vt 0.926268 -1.229521 0.000000 +vt 0.913659 -1.215684 0.000000 +vt 0.895102 -1.279751 0.000000 +vt 0.909298 -1.235384 0.000000 +vt 0.918930 -1.263019 0.000000 +vt 0.902175 -1.303666 0.000000 +vt 0.873199 -1.359015 0.000000 +vt 0.871646 -1.413785 0.000000 +vt 0.870256 -1.429556 0.000000 +vt 0.894454 -1.508035 0.000000 +vt 0.901591 -1.479251 0.000000 +vt 0.907476 -1.419315 0.000000 +vt 0.904249 -1.452185 0.000000 +vt 0.911712 -1.376173 0.000000 +vt 0.874605 -1.380220 0.000000 +vt 0.906944 -1.339919 0.000000 +vt 0.947957 -1.345697 0.000000 +vt 0.933443 -1.304358 0.000000 +vt 0.934410 -1.465370 0.000000 +vt 0.943406 -1.408566 0.000000 +vt 0.988369 -1.088922 0.000000 +vt 0.992327 -1.065469 0.000000 +vt 0.997689 -1.080234 0.000000 +vt 0.996872 -1.096645 0.000000 +vt 0.995277 -1.127823 0.000000 +vt 0.992966 -1.146823 0.000000 +vt 0.982371 -1.124458 0.000000 +vt 0.985707 -1.104695 0.000000 +vt 0.980454 -1.268193 0.000000 +vt 0.961157 -1.264556 0.000000 +vt 0.979086 -1.143921 0.000000 +vt 0.990721 -1.164675 0.000000 +vt 0.966740 -1.378092 0.000000 +vt 0.954557 -1.305127 0.000000 +vt 0.973483 -1.325801 0.000000 +vt 0.958182 -1.427882 0.000000 +vt 0.946986 -1.478539 0.000000 +vt 0.940412 -1.267324 0.000000 +vt 0.947381 -1.230289 0.000000 +vt 0.960856 -1.104486 0.000000 +vt 0.964147 -1.093431 0.000000 +vt 0.974927 -1.099063 0.000000 +vt 0.971614 -1.114472 0.000000 +vt 0.998506 -1.063823 0.000000 +vt 0.994896 -1.059882 0.000000 +vt 0.997879 -1.053395 0.000000 +vt 0.990135 -1.046771 0.000000 +vt 0.990076 -1.039680 0.000000 +vt 0.997512 -1.047169 0.000000 +vt 0.994829 -1.028880 0.000000 +vt 0.996733 -1.024555 0.000000 +vt 0.996635 -1.032298 0.000000 +vt 0.993292 -1.019213 0.000000 +vt 0.993432 -1.024969 0.000000 +vt 0.992080 -1.021143 0.000000 +vt 0.983862 -1.018574 0.000000 +vt 0.986591 -1.029888 0.000000 +vt 0.980260 -1.035985 0.000000 +vt 0.976206 -1.027821 0.000000 +vt 0.735512 -1.005566 0.000000 +vt 0.691990 -1.017693 0.000000 +vt 0.693821 -1.001585 0.000000 +vt 0.693307 -1.007996 0.000000 +vt 0.706908 -1.001807 0.000000 +vt 0.707649 -1.009399 0.000000 +vt 0.707526 -1.025428 0.000000 +vt 0.611623 -1.555549 0.000000 +vt 0.607346 -1.527874 0.000000 +vt 0.606540 -1.500347 0.000000 +vt 0.618470 -1.523681 0.000000 +vt 0.168411 -1.439861 0.000000 +vt 0.160552 -1.375513 0.000000 +vt 0.182301 -1.419072 0.000000 +vt 0.155509 -1.465161 0.000000 +vt 0.149182 -1.418690 0.000000 +vt 0.086223 -1.521888 0.000000 +vt 0.082992 -1.498099 0.000000 +vt 0.099328 -1.507950 0.000000 +vt 0.112397 -1.493210 0.000000 +vt 0.124110 -1.478336 0.000000 +vt 0.133183 -1.458485 0.000000 +vt 0.077469 -1.548681 0.000000 +vt 0.087816 -1.541102 0.000000 +vt 0.076523 -1.563028 0.000000 +vt 0.069311 -1.568009 0.000000 +vt 0.069607 -1.555387 0.000000 +vt 0.060658 -1.585581 0.000000 +vt 0.061044 -1.573948 0.000000 +vt 0.061220 -1.556660 0.000000 +vt 0.056146 -1.561882 0.000000 +vt 0.055607 -1.579136 0.000000 +vt 0.057308 -1.526108 0.000000 +vt 0.061396 -1.519704 0.000000 +vt 0.051441 -1.519049 0.000000 +vt 0.919938 -1.674206 0.000000 +vt 0.912863 -1.702382 0.000000 +vt 0.938117 -1.710843 0.000000 +vt 0.903507 -1.730192 0.000000 +vt 0.902709 -1.749253 0.000000 +vt 0.931941 -1.737513 0.000000 +vt 0.980062 -1.779385 0.000000 +vt 0.972592 -1.789377 0.000000 +vt 0.965123 -1.799370 0.000000 +vt 0.954338 -1.827497 0.000000 +vt 0.923277 -1.822591 0.000000 +vt 0.925764 -1.764183 0.000000 +vt 0.953808 -1.861751 0.000000 +vt 0.899434 -1.809395 0.000000 +vt 0.901911 -1.768313 0.000000 +vt 0.818734 -1.750746 0.000000 +vt 0.821558 -1.743763 0.000000 +vt 0.836605 -1.765130 0.000000 +vt 0.833298 -1.771548 0.000000 +vt 0.806083 -1.725569 0.000000 +vt 0.802608 -1.732966 0.000000 +vt 0.767717 -1.873315 0.000000 +vt 0.731884 -1.857072 0.000000 +vt 0.734750 -1.844921 0.000000 +vt 0.770279 -1.864333 0.000000 +vt 0.804203 -1.890521 0.000000 +vt 0.805482 -1.885027 0.000000 +vt 0.839887 -1.906794 0.000000 +vt 0.840665 -1.902468 0.000000 +vt 0.649271 -1.633070 0.000000 +vt 0.662003 -1.656000 0.000000 +vt 0.633129 -1.717710 0.000000 +vt 0.619739 -1.688735 0.000000 +vt 0.593859 -1.749042 0.000000 +vt 0.611552 -1.768040 0.000000 +vt 0.584928 -1.788339 0.000000 +vt 0.605818 -1.797296 0.000000 +vt 0.637651 -1.785493 0.000000 +vt 0.632450 -1.808114 0.000000 +vt 0.663736 -1.821580 0.000000 +vt 0.668662 -1.802818 0.000000 +vt 0.697293 -1.839755 0.000000 +vt 0.701933 -1.823977 0.000000 +vt 0.680426 -1.775428 0.000000 +vt 0.728434 -1.809179 0.000000 +vt 0.795259 -1.852893 0.000000 +vt 0.844632 -1.887231 0.000000 +vt 0.672168 -1.603508 0.000000 +vt 0.683532 -1.617246 0.000000 +vt 0.706602 -1.627915 0.000000 +vt 0.680387 -1.681479 0.000000 +vt 0.650162 -1.754521 0.000000 +vt 0.710091 -1.707665 0.000000 +vt 0.755581 -1.744866 0.000000 +vt 0.819690 -1.799653 0.000000 +vt 0.862555 -1.849119 0.000000 +vt 0.872334 -1.903581 0.000000 +vt 0.885574 -1.880452 0.000000 +vt 0.875543 -1.838784 0.000000 +vt 0.895359 -1.881641 0.000000 +vt 0.891669 -1.880324 0.000000 +vt 0.870737 -1.841385 0.000000 +vt 0.847863 -1.792350 0.000000 +vt 0.786481 -1.715187 0.000000 +vt 0.772770 -1.699979 0.000000 +vt 0.731355 -1.656428 0.000000 +vt 0.759059 -1.684771 0.000000 +vt 0.685165 -1.594479 0.000000 +vt 0.691797 -1.603798 0.000000 +vt 0.895671 -1.905655 0.000000 +vt 0.902254 -1.909584 0.000000 +vt 0.901453 -1.918279 0.000000 +vt 0.899046 -1.894277 0.000000 +vt 0.870833 -1.913367 0.000000 +vt 0.871482 -1.917706 0.000000 +vt 0.896034 -1.923808 0.000000 +vt 0.900198 -1.923259 0.000000 +vt 0.901816 -1.929562 0.000000 +vt 0.901738 -1.935303 0.000000 +vt 0.897240 -1.930644 0.000000 +vt 0.891578 -1.926810 0.000000 +vt 0.890827 -1.920774 0.000000 +vt 0.902802 -1.925418 0.000000 +vt 0.903007 -1.915511 0.000000 +vt 0.901766 -1.898455 0.000000 +vt 0.888213 -1.913529 0.000000 +vt 0.879281 -1.968759 0.000000 +vt 0.881910 -1.980870 0.000000 +vt 0.851332 -1.993116 0.000000 +vt 0.847530 -1.950827 0.000000 +vt 0.892315 -1.971011 0.000000 +vt 0.903579 -1.896675 0.000000 +vt 0.904864 -1.915397 0.000000 +vt 0.903982 -1.928508 0.000000 +vt 0.891390 -1.939873 0.000000 +vt 0.872790 -1.931483 0.000000 +vt 0.791573 -1.948929 0.000000 +vt 0.812356 -2.000000 0.000000 +vt 0.894119 -1.958670 0.000000 +vt 0.901972 -1.947420 0.000000 +vt 0.609506 -1.826174 0.000000 +vt 0.635545 -1.834651 0.000000 +vt 0.664843 -1.844897 0.000000 +vt 0.698768 -1.857813 0.000000 +vt 0.732920 -1.868553 0.000000 +vt 0.769226 -1.883032 0.000000 +vt 0.805016 -1.895773 0.000000 +vt 0.840911 -1.909371 0.000000 +vt 0.624734 -1.916325 0.000000 +vt 0.658145 -1.927803 0.000000 +vt 0.720049 -1.939264 0.000000 +vt 0.793879 -2.000000 0.000000 +vt 0.775403 -2.000000 0.000000 +vt 0.756302 -2.000000 0.000000 +vt 0.737200 -2.000000 0.000000 +vt 0.721244 -2.000000 0.000000 +vt 0.705288 -2.000000 0.000000 +vt 0.674404 -2.000000 0.000000 +vt 0.649104 -2.000000 0.000000 +vt 0.630588 -2.000000 0.000000 +vt 0.624247 -2.000000 0.000000 +vt 0.606706 -1.897207 0.000000 +vt 0.591098 -1.821240 0.000000 +vt 0.498568 -1.893268 0.000000 +vt 0.514505 -1.955261 0.000000 +vt 0.482590 -1.959442 0.000000 +vt 0.472127 -1.908422 0.000000 +vt 0.520312 -1.930539 0.000000 +vt 0.559288 -1.991382 0.000000 +vt 0.529474 -1.991678 0.000000 +vt 0.493963 -1.994280 0.000000 +vt 0.459643 -1.989051 0.000000 +vt 0.452370 -1.966875 0.000000 +vt 0.428140 -1.964350 0.000000 +vt 0.427631 -1.953513 0.000000 +vt 0.443956 -1.916963 0.000000 +vt 0.424247 -1.916230 0.000000 +vt 0.423981 -1.902796 0.000000 +vt 0.442909 -1.895802 0.000000 +vt 0.478544 -1.886325 0.000000 +vt 0.539806 -1.787494 0.000000 +vt 0.551521 -1.751714 0.000000 +vt 0.561021 -1.778002 0.000000 +vt 0.552719 -1.821755 0.000000 +vt 0.519139 -1.835732 0.000000 +vt 0.543899 -1.879244 0.000000 +vt 0.502894 -1.879317 0.000000 +vt 0.530109 -1.922046 0.000000 +vt 0.553374 -1.951923 0.000000 +vt 0.553633 -1.895935 0.000000 +vt 0.564634 -1.841739 0.000000 +vt 0.566472 -1.785545 0.000000 +vt 0.476981 -1.872089 0.000000 +vt 0.490766 -1.880166 0.000000 +vt 0.445057 -1.879698 0.000000 +vt 0.424982 -1.892766 0.000000 +vt 0.624892 -1.544292 0.000000 +vt 0.614383 -1.573015 0.000000 +vt 0.565119 -1.381388 0.000000 +vt 0.592165 -1.441361 0.000000 +vt 0.631315 -1.564903 0.000000 +vt 0.639041 -1.598096 0.000000 +vt 0.622697 -1.619578 0.000000 +vt 0.617143 -1.590482 0.000000 +vt 0.594770 -1.604048 0.000000 +vt 0.593163 -1.619743 0.000000 +vt 0.599111 -1.574327 0.000000 +vt 0.591557 -1.635438 0.000000 +vt 0.593698 -1.658245 0.000000 +vt 0.565907 -1.693971 0.000000 +vt 0.565493 -1.688779 0.000000 +vt 0.557612 -1.697742 0.000000 +vt 0.333715 -1.924665 0.000000 +vt 0.335668 -1.963089 0.000000 +vt 0.292140 -1.903167 0.000000 +vt 0.291954 -1.870933 0.000000 +vt 0.259684 -1.836845 0.000000 +vt 0.259479 -1.805235 0.000000 +vt 0.365162 -1.918325 0.000000 +vt 0.359930 -1.889976 0.000000 +vt 0.413414 -1.863550 0.000000 +vt 0.354697 -1.861627 0.000000 +vt 0.352880 -1.832436 0.000000 +vt 0.351063 -1.803245 0.000000 +vt 0.331150 -1.853282 0.000000 +vt 0.330536 -1.820323 0.000000 +vt 0.291767 -1.838698 0.000000 +vt 0.292136 -1.805387 0.000000 +vt 0.260252 -1.719750 0.000000 +vt 0.259273 -1.773625 0.000000 +vt 0.233188 -1.769038 0.000000 +vt 0.234426 -1.708492 0.000000 +vt 0.262601 -1.682771 0.000000 +vt 0.236464 -1.664327 0.000000 +vt 0.297502 -1.680034 0.000000 +vt 0.294263 -1.717558 0.000000 +vt 0.300284 -1.652797 0.000000 +vt 0.267425 -1.661375 0.000000 +vt 0.341241 -1.656297 0.000000 +vt 0.331470 -1.622061 0.000000 +vt 0.371450 -1.624734 0.000000 +vt 0.245566 -1.648103 0.000000 +vt 0.335429 -1.696165 0.000000 +vt 0.292504 -1.772077 0.000000 +vt 0.330784 -1.790482 0.000000 +vt 0.354816 -1.769112 0.000000 +vt 0.358570 -1.734979 0.000000 +vt 0.361689 -1.670706 0.000000 +vt 0.380545 -1.565754 0.000000 +vt 0.375707 -1.511823 0.000000 +vt 0.331033 -1.760641 0.000000 +vt 0.358791 -1.572479 0.000000 +vt 0.344433 -1.492112 0.000000 +vt 0.375255 -1.444526 0.000000 +vt 0.315913 -1.324631 0.000000 +vt 0.316114 -1.234680 0.000000 +vt 0.347571 -1.314428 0.000000 +vt 0.346700 -1.388624 0.000000 +vt 0.346050 -1.440139 0.000000 +vt 0.346300 -1.533487 0.000000 +vt 0.342602 -1.582103 0.000000 +vt 0.340622 -1.555324 0.000000 +vt 0.326903 -1.614759 0.000000 +vt 0.302187 -1.638321 0.000000 +vt 0.313735 -1.397374 0.000000 +vt 0.312322 -1.442898 0.000000 +vt 0.310062 -1.484286 0.000000 +vt 0.281173 -1.456764 0.000000 +vt 0.275658 -1.497706 0.000000 +vt 0.286418 -1.410687 0.000000 +vt 0.292049 -1.333177 0.000000 +vt 0.270473 -1.418840 0.000000 +vt 0.262338 -1.467968 0.000000 +vt 0.277528 -1.341093 0.000000 +vt 0.333462 -1.519934 0.000000 +vt 0.328430 -1.542978 0.000000 +vt 0.306534 -1.518735 0.000000 +vt 0.272028 -1.533689 0.000000 +vt 0.256246 -1.514288 0.000000 +vt 0.247611 -1.479342 0.000000 +vt 0.336681 -1.565476 0.000000 +vt 0.325683 -1.555901 0.000000 +vt 0.336735 -1.586342 0.000000 +vt 0.242227 -1.529133 0.000000 +vt 0.239698 -1.571025 0.000000 +vt 0.252555 -1.551578 0.000000 +vt 0.273240 -1.646918 0.000000 +vt 0.253071 -1.632311 0.000000 +vt 0.235244 -1.625701 0.000000 +vt 0.242067 -1.603366 0.000000 +vt 0.254884 -1.587066 0.000000 +vt 0.273935 -1.564515 0.000000 +vt 0.305091 -1.545244 0.000000 +vt 0.304983 -1.561234 0.000000 +vt 0.278446 -1.584978 0.000000 +vt 0.263867 -1.616103 0.000000 +vt 0.324517 -1.611261 0.000000 +vt 0.303563 -1.630440 0.000000 +vt 0.279274 -1.636400 0.000000 +vt 0.576874 -1.451439 0.000000 +vt 0.574373 -1.381397 0.000000 +vt 0.691308 -1.574101 0.000000 +vt 0.697042 -1.593955 0.000000 +vt 0.712508 -1.619079 0.000000 +vt 0.735445 -1.646480 0.000000 +vt 0.762013 -1.675753 0.000000 +vt 0.776310 -1.691565 0.000000 +vt 0.790608 -1.707376 0.000000 +vt 0.900073 -1.959154 0.000000 +vt 0.896981 -1.878276 0.000000 +vt 0.878507 -1.833722 0.000000 +vt 0.851652 -1.786498 0.000000 +vt 0.074650 -1.634535 0.000000 +vt 0.088683 -1.632837 0.000000 +vt 0.132003 -1.610751 0.000000 +vt 0.155203 -1.614178 0.000000 +vt 0.150577 -1.647974 0.000000 +vt 0.125860 -1.643955 0.000000 +vt 0.117994 -1.608641 0.000000 +vt 0.113534 -1.638832 0.000000 +vt 0.093825 -1.606511 0.000000 +vt 0.108975 -1.607283 0.000000 +vt 0.104958 -1.635268 0.000000 +vt 0.079216 -1.608818 0.000000 +vt 0.067196 -1.616181 0.000000 +vt 0.066297 -1.639099 0.000000 +vt 0.061158 -1.640058 0.000000 +vt 0.058879 -1.662701 0.000000 +vt 0.055851 -1.664450 0.000000 +vt 0.055799 -1.664262 0.000000 +vt 0.058746 -1.642169 0.000000 +vt 0.055413 -1.665854 0.000000 +vt 0.045916 -1.647860 0.000000 +vt 0.049758 -1.628381 0.000000 +vt 0.056991 -1.617540 0.000000 +vt 0.051476 -1.648531 0.000000 +vt 0.082708 -1.589593 0.000000 +vt 0.097086 -1.587238 0.000000 +vt 0.022742 -1.726604 0.000000 +vt 0.064489 -1.617326 0.000000 +vt 0.062480 -1.617383 0.000000 +vt 0.066363 -1.598332 0.000000 +vt 0.062894 -1.599573 0.000000 +vt 0.067745 -1.582462 0.000000 +vt 0.063354 -1.591873 0.000000 +vt 0.074001 -1.578822 0.000000 +vt 0.055156 -1.596577 0.000000 +vt 0.059133 -1.600918 0.000000 +vt 0.926769 -1.893220 0.000000 +vt 0.927048 -1.856910 0.000000 +vt 0.927424 -1.916396 0.000000 +vt 0.916796 -1.998607 0.000000 +vt 0.912948 -1.994485 0.000000 +vt 0.909100 -1.990362 0.000000 +vt 0.928244 -1.945391 0.000000 +vt 0.906615 -1.967295 0.000000 +vt 0.927849 -1.931424 0.000000 +vt 0.907843 -1.926622 0.000000 +vt 0.907516 -1.937442 0.000000 +vt 0.928244 -1.945391 0.000000 +vt 0.905602 -1.894651 0.000000 +vt 0.906679 -1.910013 0.000000 +vt 0.904987 -1.885869 0.000000 +vt 0.902730 -1.858766 0.000000 +vt 0.900427 -1.834083 0.000000 +vt 0.999357 -1.730440 0.000000 +vt 0.100481 -1.568195 0.000000 +vt 0.085471 -1.574157 0.000000 +vt 0.087365 -1.557073 0.000000 +vt 0.072399 -1.594989 0.000000 +vt 0.101592 -1.549777 0.000000 +vt 0.101569 -1.531284 0.000000 +vt 0.116736 -1.539872 0.000000 +vt 0.115901 -1.518888 0.000000 +vt 0.138831 -1.522826 0.000000 +vt 0.125575 -1.533053 0.000000 +vt 0.128049 -1.507488 0.000000 +vt 0.138267 -1.494457 0.000000 +vt 0.157872 -1.502480 0.000000 +vt 0.158575 -1.540807 0.000000 +vt 0.138022 -1.552811 0.000000 +vt 0.124744 -1.558508 0.000000 +vt 0.115901 -1.562303 0.000000 +vt 0.135691 -1.582011 0.000000 +vt 0.123510 -1.583159 0.000000 +vt 0.157676 -1.578463 0.000000 +vt 0.170287 -1.485541 0.000000 +vt 0.171678 -1.528616 0.000000 +vt 0.171333 -1.571906 0.000000 +vt 0.169174 -1.612300 0.000000 +vt 0.120848 -1.596052 0.000000 +vt 0.184355 -1.517579 0.000000 +vt 0.183866 -1.467952 0.000000 +vt 0.183419 -1.564786 0.000000 +vt 0.181639 -1.609963 0.000000 +vt 0.178356 -1.651137 0.000000 +vt 0.165349 -1.649178 0.000000 +vt 0.331763 -1.886241 0.000000 +vt 0.794525 -1.194206 0.000000 +vt 0.792220 -1.205316 0.000000 +vt 0.765387 -1.174783 0.000000 +vt 0.768845 -1.089199 0.000000 +vt 0.785059 -1.011152 0.000000 +vt 0.693719 -1.072999 0.000000 +vt 0.689818 -1.064299 0.000000 +vt 0.684445 -1.057049 0.000000 +vt 0.680666 -1.049033 0.000000 +vt 0.682275 -1.059854 0.000000 +vt 0.552353 -1.647222 0.000000 +vt 0.557941 -1.596903 0.000000 +vt 0.731385 -1.328134 0.000000 +vt 0.735003 -1.473580 0.000000 +vt 0.741705 -1.545715 0.000000 +vt 0.738354 -1.509648 0.000000 +vt 0.726169 -1.267455 0.000000 +vt 0.738767 -1.277552 0.000000 +vt 0.714978 -1.236011 0.000000 +vt 0.125964 -1.025503 0.000000 +vt 0.140036 -1.019027 0.000000 +vt 0.153712 -1.010623 0.000000 +vt 0.168181 -1.007411 0.000000 +vt 0.185267 -1.002871 0.000000 +vt 0.204602 -1.002871 0.000000 +vt 0.224424 -1.002872 0.000000 +vt 0.028830 -1.163698 0.000000 +vt 0.041750 -1.084874 0.000000 +vt 0.057503 -1.064972 0.000000 +vt 0.075711 -1.044230 0.000000 +vt 0.093838 -1.036763 0.000000 +vt 0.102496 -1.034827 0.000000 +vt 0.111154 -1.032892 0.000000 +vt 0.118559 -1.029198 0.000000 +vt 0.004001 -1.321399 0.000000 +vt 0.004001 -1.254163 0.000000 +vt 0.005303 -1.230312 0.000000 +vt 0.011652 -1.185944 0.000000 +vt 0.096454 -1.979342 0.000000 +vt 0.454220 -1.818596 0.000000 +vt 0.562282 -1.197540 0.000000 +vt 0.564239 -1.167499 0.000000 +vt 0.566195 -1.137457 0.000000 +vt 0.572550 -1.095736 0.000000 +vt 0.572597 -1.317291 0.000000 +vt 0.050203 -1.271772 0.000000 +vt 0.067747 -1.287183 0.000000 +vt 0.035051 -1.258096 0.000000 +vt 0.087452 -1.302784 0.000000 +vt 0.856602 -1.311743 0.000000 +vt 0.843253 -1.294858 0.000000 +vt 0.789915 -1.216425 0.000000 +vt 0.763570 -1.185377 0.000000 +vt 0.907985 -1.701513 0.000000 +vt 0.781662 -1.425146 0.000000 +vt 0.761361 -1.302586 0.000000 +vt 0.771394 -1.548813 0.000000 +vt 0.771699 -1.519295 0.000000 +vt 0.757955 -1.277372 0.000000 +vt 0.831175 -1.363399 0.000000 +vt 0.795692 -1.318605 0.000000 +vt 0.791941 -1.431306 0.000000 +vt 0.863649 -1.476700 0.000000 +vt 0.851456 -1.544599 0.000000 +vt 0.967976 -1.130906 0.000000 +vt 0.956865 -1.117890 0.000000 +vt 0.945665 -1.106115 0.000000 +vt 0.950011 -1.092956 0.000000 +vt 0.954648 -1.081197 0.000000 +vt 0.948655 -1.096395 0.000000 +vt 0.979051 -1.081219 0.000000 +vt 0.969733 -1.073515 0.000000 +vt 0.962069 -1.062375 0.000000 +vt 0.983226 -1.061663 0.000000 +vt 0.974125 -1.057857 0.000000 +vt 0.967548 -1.048480 0.000000 +vt 0.991231 -1.056120 0.000000 +vt 0.984212 -1.051520 0.000000 +vt 0.985198 -1.041378 0.000000 +vt 0.977193 -1.046921 0.000000 +vt 0.971877 -1.038151 0.000000 +vt 0.988333 -1.034784 0.000000 +vt 0.997059 -1.039486 0.000000 +vt 0.992483 -1.034211 0.000000 +vt 0.990998 -1.029721 0.000000 +vt 0.989514 -1.025232 0.000000 +vt 0.728746 -1.470001 0.000000 +vt 0.732258 -1.506894 0.000000 +vt 0.692950 -1.151085 0.000000 +vt 0.698345 -1.153784 0.000000 +vt 0.785072 -1.603356 0.000000 +vt 0.675443 -1.125766 0.000000 +vt 0.682465 -1.133677 0.000000 +vt 0.702688 -1.145454 0.000000 +vt 0.696252 -1.114714 0.000000 +vt 0.706811 -1.141266 0.000000 +vt 0.694748 -1.137451 0.000000 +vt 0.690510 -1.118213 0.000000 +vt 0.690262 -1.134125 0.000000 +vt 0.006606 -1.206461 0.000000 +vt 0.071053 -1.482288 0.000000 +vt 0.067760 -1.488510 0.000000 +vt 0.064469 -1.494733 0.000000 +vt 0.086471 -1.434701 0.000000 +vt 0.092825 -1.407693 0.000000 +vt 0.099062 -1.377749 0.000000 +vt 0.113766 -1.584077 0.000000 +vt 0.025444 -1.851157 0.000000 +vt 0.024378 -1.831994 0.000000 +vt 0.028298 -1.866741 0.000000 +vt 0.025657 -1.841912 0.000000 +vt 0.027655 -1.861896 0.000000 +vt 0.027380 -1.862869 0.000000 +vt 0.026290 -1.866354 0.000000 +vt 0.008746 -1.783705 0.000000 +vt 0.046475 -1.787097 0.000000 +vt 0.042483 -1.783894 0.000000 +vt 0.040765 -1.780266 0.000000 +vt 0.035166 -1.763071 0.000000 +vt 0.038320 -1.777341 0.000000 +vt 0.029130 -1.707231 0.000000 +vt 0.907027 -1.953635 0.000000 +vt 0.036702 -1.684266 0.000000 +vt 0.041762 -1.668921 0.000000 +vt 0.966270 -1.912741 0.000000 +vt 0.061720 -1.519135 0.000000 +vt 0.063152 -1.506295 0.000000 +vt 0.061816 -1.498860 0.000000 +vt 0.059229 -1.503019 0.000000 +vt 0.061716 -1.519164 0.000000 +vt 0.756201 -1.595970 0.000000 +vt 0.746757 -1.591153 0.000000 +vt 0.781495 -1.624611 0.000000 +vt 0.782013 -1.641141 0.000000 +vt 0.776932 -1.653661 0.000000 +vt 0.772953 -1.631341 0.000000 +vt 0.771195 -1.659586 0.000000 +vt 0.766556 -1.664376 0.000000 +vt 0.759135 -1.643469 0.000000 +vt 0.765229 -1.638120 0.000000 +vt 0.748650 -1.607294 0.000000 +vt 0.758351 -1.610034 0.000000 +vt 0.783438 -1.624193 0.000000 +vt 0.783438 -1.624193 0.000000 +vt 0.781495 -1.624611 0.000000 +vt 0.778566 -1.676373 0.000000 +vt 0.780025 -1.651358 0.000000 +vt 0.779568 -1.676463 0.000000 +vt 0.743703 -1.590411 0.000000 +vt 0.789319 -1.603460 0.000000 +vt 0.785380 -1.623775 0.000000 +vt 0.785380 -1.623775 0.000000 +vt 0.781122 -1.651433 0.000000 +vt 0.780923 -1.676583 0.000000 +vt 0.748289 -1.606488 0.000000 +vt 0.578955 -1.694752 0.000000 +vt 0.567981 -1.781509 0.000000 +vt 0.084154 -1.588112 0.000000 +vt 0.905326 -1.893363 0.000000 +vt 0.575735 -1.738647 0.000000 +vt 0.578955 -1.694752 0.000000 +vt 0.567981 -1.781509 0.000000 +vt 0.905326 -1.893363 0.000000 +vt 0.425234 -1.723536 0.000000 +vt 0.433817 -1.841073 0.000000 +vt 0.433817 -1.841073 0.000000 +vt 0.425972 -1.787228 0.000000 +vt 0.429244 -1.147484 0.000000 +vt 0.427590 -1.207972 0.000000 +vt 0.430270 -1.441231 0.000000 +vt 0.429684 -1.383661 0.000000 +vt 0.428810 -1.297618 0.000000 +vt 0.426391 -1.664505 0.000000 +vt 0.428634 -1.613899 0.000000 +vt 0.430696 -1.557018 0.000000 +vt 0.431040 -1.502621 0.000000 +vt 0.431657 -1.099298 0.000000 +vt 0.433511 -1.028463 0.000000 +vt 0.873163 -1.123819 0.000000 +vt 0.433013 -1.060320 0.000000 +vt 0.429895 -1.814150 0.000000 +vt 0.425603 -1.755382 0.000000 +vt 0.425235 -1.723536 0.000000 +vt 0.426391 -1.664505 0.000000 +vt 0.425603 -1.755382 0.000000 +vt 0.425972 -1.787228 0.000000 +vt 0.429894 -1.814150 0.000000 +vt 0.429244 -1.147484 0.000000 +vt 0.427590 -1.207972 0.000000 +vt 0.428810 -1.297618 0.000000 +vt 0.430270 -1.441231 0.000000 +vt 0.429684 -1.383661 0.000000 +vt 0.428633 -1.613899 0.000000 +vt 0.430696 -1.557017 0.000000 +vt 0.431040 -1.502621 0.000000 +vt 0.431657 -1.099298 0.000000 +vt 0.433511 -1.028463 0.000000 +vt 0.873164 -1.123818 0.000000 +vt 0.433013 -1.060320 0.000000 +vt 0.871168 -1.113146 0.000000 +vt 0.393600 -1.145293 0.000000 +vt 0.394269 -1.099395 0.000000 +vt 0.392611 -1.208763 0.000000 +vt 0.395136 -1.298826 0.000000 +vt 0.395781 -1.383183 0.000000 +vt 0.397832 -1.060254 0.000000 +vt 0.384055 -1.862589 0.000000 +vt 0.380435 -1.832241 0.000000 +vt 0.376814 -1.801893 0.000000 +vt 0.378979 -1.767624 0.000000 +vt 0.381144 -1.733356 0.000000 +vt 0.384067 -1.672376 0.000000 +vt 0.390585 -1.622559 0.000000 +vt 0.397449 -1.563439 0.000000 +vt 0.395421 -1.507540 0.000000 +vt 0.396094 -1.441822 0.000000 +vt 0.393600 -1.145293 0.000000 +vt 0.392611 -1.208763 0.000000 +vt 0.395136 -1.298826 0.000000 +vt 0.394269 -1.099395 0.000000 +vt 0.397832 -1.060254 0.000000 +vt 0.384055 -1.862588 0.000000 +vt 0.376815 -1.801893 0.000000 +vt 0.381144 -1.733356 0.000000 +vt 0.384067 -1.672376 0.000000 +vt 0.390585 -1.622559 0.000000 +vt 0.397449 -1.563439 0.000000 +vt 0.395421 -1.507540 0.000000 +vt 0.396094 -1.441822 0.000000 +vt 0.395781 -1.383183 0.000000 +vt 0.380435 -1.832241 0.000000 +vt 0.378979 -1.767624 0.000000 +vt 0.387920 -1.892490 0.000000 +vt 0.387920 -1.892490 0.000000 +# 3092 texture coords + +g great_white_shark +usemtl _Sharkgreatwhiteshark +f 2651/3022 2659/3031 344/44 1/45 +f 726/102 2651/3022 2667/3040 1041/1136 +f 343/114 9/113 1040/1135 1045/1140 +f 9/113 343/114 1021/1115 1022/1116 +f 2/116 8/115 1021/1115 1033/1127 +f 3/121 1008/1102 1018/1112 4/120 +f 2653/3025 2666/3039 1023/1117 11/117 +f 12/101 710/100 1024/1118 1025/1119 +f 711/106 13/107 1024/1118 1034/1129 +f 13/107 711/106 1008/1102 1009/1103 +f 1010/1104 1009/1103 1410/127 1408/128 +f 12/101 14/109 1042/1137 1043/1138 +f 14/109 12/101 1025/1119 1026/1120 +f 16/129 15/108 1010/1104 1011/1105 +f 1418/138 1419/157 1012/1106 1011/1105 +f 1013/1107 1014/1108 55/177 54/159 +f 1014/1108 25/194 26/178 55/177 +f 1278/1380 2649/217 18/220 1274/1375 +f 23/216 21/215 362/207 886/206 +f 887/188 919/189 829/213 1286/1392 +f 19/209 1282/1386 829/213 919/189 +f 21/215 20/214 1281/1385 362/207 +f 22/221 21/215 23/216 +f 23/216 1274/1375 1275/1376 22/221 +f 24/190 19/209 919/189 30/182 +f 1445/201 1446/1371 915/202 37/200 +f 37/200 35/198 1449/199 1445/201 +f 35/198 25/194 1451/195 1449/199 +f 25/194 35/198 34/193 26/178 +f 26/178 34/193 27/179 1039/1134 +f 26/178 1039/1134 41/175 +f 34/193 32/197 28/192 27/179 +f 40/180 51/174 27/179 28/192 +f 1279/1381 40/180 28/192 33/196 +f 31/181 50/173 40/180 1279/1381 +f 30/182 39/170 31/181 24/190 +f 888/183 916/169 39/170 30/182 +f 827/184 825/185 916/169 888/183 +f 32/197 36/203 33/196 28/192 +f 36/203 363/204 914/205 33/196 +f 35/198 37/200 32/197 34/193 +f 37/200 915/202 36/203 32/197 +f 363/204 36/203 915/202 1271/1372 +f 38/168 39/170 916/169 48/147 +f 50/173 31/181 39/170 38/168 +f 50/173 49/172 51/174 40/180 +f 51/174 42/171 1038/1133 27/179 +f 1039/1134 27/179 1038/1133 +f 42/171 56/176 1027/1121 1038/1133 +f 43/166 57/165 56/176 42/171 +f 43/166 46/158 53/152 57/165 +f 44/150 53/152 46/158 +f 46/158 45/167 47/148 44/150 +f 42/171 51/174 49/172 43/166 +f 45/167 46/158 43/166 49/172 +f 45/167 38/168 48/147 47/148 +f 49/172 50/173 38/168 45/167 +f 825/185 816/146 48/147 916/169 +f 816/146 52/149 47/148 48/147 +f 876/151 53/152 44/150 1265/1364 +f 877/143 59/153 53/152 876/151 +f 54/159 55/177 1027/1121 1028/1122 +f 57/165 58/164 69/227 56/176 +f 53/152 59/153 58/164 57/165 +f 877/143 879/135 68/142 59/153 +f 879/135 878/134 60/133 68/142 +f 878/134 62/228 61/132 60/133 +f 62/228 65/230 64/229 61/132 +f 63/112 71/131 61/132 64/229 +f 272/110 1042/1137 63/112 64/229 +f 882/231 281/695 65/230 62/228 +f 65/230 282/111 272/110 64/229 +f 16/129 17/139 1029/1123 1026/1120 +f 66/130 72/140 71/131 63/112 +f 71/131 73/141 60/133 61/132 +f 73/141 67/154 68/142 60/133 +f 67/154 58/164 59/153 68/142 +f 74/163 69/227 58/164 67/154 +f 1028/1122 1030/1124 70/162 54/159 +f 1013/1107 1015/1109 1521/232 1519/160 +f 1419/157 1522/234 1016/1110 1012/1106 +f 17/139 77/156 1031/1125 1029/1123 +f 72/140 75/155 73/141 71/131 +f 75/155 74/163 67/154 73/141 +f 1030/1124 1032/1126 76/233 70/162 +f 1015/1109 1017/1111 1530/235 1521/232 +f 1522/234 1530/235 1017/1111 1016/1110 +f 77/156 76/233 1032/1126 1031/1125 +f 80/273 81/274 890/271 79/272 +f 80/273 82/268 83/270 81/274 +f 82/268 224/267 78/269 83/270 +f 82/268 80/273 1162/1259 1167/1264 +f 1162/1259 1163/1260 325/281 228/275 +f 325/281 1163/1260 1168/1265 326/292 +f 890/271 85/283 328/282 79/272 +f 889/256 697/257 322/280 84/284 +f 322/280 395/286 897/285 84/284 +f 87/306 688/307 355/304 359/305 +f 360/345 355/334 89/344 88/3014 +f 353/309 692/310 88/301 89/308 +f 1555/386 1556/390 1320/1430 1321/1431 +f 95/368 90/376 576/377 93/378 +f 572/370 577/374 90/376 95/368 +f 1556/390 1596/398 1319/1429 1320/1430 +f 93/378 91/389 92/379 +f 94/367 95/368 93/378 92/379 +f 95/368 94/367 102/366 +f 95/368 102/366 96/369 572/370 +f 100/371 1306/1416 1301/1410 572/370 +f 573/354 574/352 97/359 565/357 +f 98/372 99/373 1309/1419 1310/1420 +f 100/371 101/375 1305/1415 1306/1416 +f 96/369 103/364 1299/1408 1300/1409 +f 102/366 104/365 103/364 96/369 +f 104/365 1314/1424 112/380 113/381 +f 112/380 1314/1424 1315/1425 111/388 +f 111/388 1315/1425 1316/1426 105/397 +f 1318/1428 1596/399 1317/1427 +f 103/364 108/382 1244/1342 1299/1408 +f 104/365 113/381 108/382 103/364 +f 109/400 106/383 1244/1342 1245/1343 +f 113/381 122/387 107/401 108/382 +f 115/402 109/400 1245/1343 1246/1344 +f 109/400 115/402 1235/1333 1239/1337 +f 106/383 109/400 1239/1337 1240/1338 +f 111/388 128/415 129/396 112/380 +f 129/396 122/387 113/381 112/380 +f 122/387 130/395 114/394 107/401 +f 123/392 115/402 1246/1344 1247/1345 +f 115/402 123/392 1236/1334 1235/1333 +f 116/403 124/405 1257/1356 1258/1357 +f 110/404 116/403 1258/1357 1259/1358 +f 119/384 110/404 1259/1358 1260/1359 +f 99/373 119/384 1260/1359 1309/1419 +f 121/409 566/358 120/385 553/408 +f 105/397 143/434 128/415 111/388 +f 129/396 131/416 130/395 122/387 +f 130/395 141/417 132/391 114/394 +f 133/393 123/392 1247/1345 1248/1346 +f 1230/1328 1231/1329 126/410 124/405 +f 1257/1356 1261/1360 125/411 117/406 +f 125/411 1261/1360 1262/1361 557/412 +f 557/412 1262/1361 1263/1362 559/414 +f 127/413 126/410 1231/1329 1232/1330 +f 128/415 142/433 131/416 129/396 +f 131/416 244/432 141/417 130/395 +f 141/417 139/431 140/418 132/391 +f 138/419 133/393 1248/1346 1249/1347 +f 137/420 127/413 1232/1330 1233/1331 +f 134/421 136/423 560/422 1263/1362 +f 560/422 559/414 1263/1362 +f 134/421 1263/1362 1264/1363 +f 560/422 136/423 563/424 +f 135/425 169/467 563/424 136/423 +f 287/426 366/453 135/425 136/423 +f 134/421 288/428 287/426 136/423 +f 371/427 375/706 288/428 1264/1363 +f 134/421 1264/1363 288/428 +f 371/427 137/420 1233/1331 1234/1332 +f 148/429 138/419 1249/1347 1250/1348 +f 139/431 251/440 147/430 140/418 +f 244/432 250/439 139/431 141/417 +f 142/433 245/633 244/432 131/416 +f 143/434 243/436 142/433 128/415 +f 1596/399 144/435 977/1070 1317/1427 +f 145/438 375/706 371/427 1234/1332 +f 250/439 249/635 251/440 139/431 +f 251/440 252/634 146/441 147/430 +f 146/441 1069/1164 1256/1355 1250/1348 +f 149/443 373/437 150/442 151/444 +f 150/442 1256/1355 151/444 +f 156/446 1219/1316 1220/1317 157/454 +f 151/444 1219/1316 153/447 149/443 +f 155/448 377/522 152/449 156/446 +f 382/450 379/703 153/447 152/449 +f 154/451 378/764 365/452 1212/1309 +f 154/451 165/466 169/467 135/425 +f 1212/1309 1213/1310 165/466 154/451 +f 157/454 166/469 1251/1349 156/446 +f 157/454 1220/1317 1221/1318 217/455 +f 217/455 1221/1318 1224/1321 218/525 +f 160/458 1066/1161 1068/1163 252/634 +f 164/459 1067/1162 1066/1161 160/458 +f 1071/1166 1072/1167 1067/1162 164/459 +f 163/462 1222/1319 1223/1320 918/463 +f 170/468 563/424 169/467 +f 181/470 167/465 1251/1349 1252/1350 +f 1213/1310 1214/1311 168/471 165/466 +f 168/471 179/472 169/467 165/466 +f 171/473 170/468 169/467 179/472 +f 172/474 173/475 170/468 171/473 +f 172/474 175/481 176/476 173/475 +f 190/479 229/503 191/477 174/478 +f 174/478 175/481 183/480 190/479 +f 793/482 176/476 175/481 174/478 +f 213/483 183/480 175/481 172/474 +f 171/473 177/484 213/483 172/474 +f 179/472 178/485 177/484 171/473 +f 179/472 168/471 180/486 178/485 +f 211/487 1215/1312 1214/1311 181/470 +f 181/470 1252/1350 1254/1353 211/487 +f 216/489 221/527 182/488 166/469 +f 215/490 186/491 183/480 213/483 +f 186/491 188/492 190/479 183/480 +f 212/493 206/494 978/1071 979/1072 +f 214/497 212/493 979/1072 980/1073 +f 214/497 980/1073 981/1074 215/490 +f 215/490 981/1074 982/1075 186/491 +f 186/491 982/1075 983/1076 188/492 +f 188/492 983/1076 984/1077 189/502 +f 189/502 229/503 190/479 188/492 +f 229/503 242/511 230/504 191/477 +f 192/505 795/516 191/477 230/504 +f 230/504 231/515 761/506 192/505 +f 266/507 265/521 192/505 761/506 +f 189/502 984/1077 994/1087 239/510 +f 239/510 242/511 229/503 189/502 +f 918/463 261/539 198/530 163/462 +f 261/539 1007/1101 197/529 198/530 +f 200/538 207/537 197/529 1007/1101 +f 1777/541 985/1078 1002/1095 1780/653 +f 200/538 985/1078 986/1079 208/536 +f 208/536 986/1079 987/1080 201/534 +f 201/534 987/1080 988/1081 202/532 +f 202/532 988/1081 989/1082 203/514 +f 204/513 1253/1352 1255/1354 990/1083 +f 206/494 1217/1314 1218/1315 978/1071 +f 200/538 208/536 207/537 +f 208/536 201/534 210/535 207/537 +f 201/534 202/532 209/533 210/535 +f 202/532 203/514 220/531 209/533 +f 211/487 1254/1353 1253/1352 204/513 +f 180/486 1215/1312 1217/1314 206/494 +f 206/494 212/493 178/485 180/486 +f 212/493 214/497 177/484 178/485 +f 214/497 215/490 213/483 177/484 +f 210/535 219/528 197/529 207/537 +f 157/454 217/455 216/489 166/469 +f 218/525 222/526 216/489 217/455 +f 218/525 1224/1321 1222/1319 163/462 +f 222/526 218/525 163/462 198/530 +f 197/529 219/528 222/526 198/530 +f 209/533 221/527 219/528 210/535 +f 220/531 182/488 221/527 209/533 +f 222/526 219/528 221/527 216/489 +f 86/298 227/299 225/546 223/547 +f 311/265 1056/1151 1170/1267 1166/1263 +f 225/546 1164/1261 1165/1262 223/547 +f 224/267 1057/1152 1058/1153 78/269 +f 226/266 311/265 1166/1263 1167/1264 +f 242/511 240/512 231/515 230/504 +f 231/515 233/574 232/573 761/506 +f 233/574 748/32 762/31 232/573 +f 241/575 296/576 748/32 233/574 +f 234/577 297/578 296/576 241/575 +f 991/1084 992/1085 236/582 356/579 +f 241/575 240/512 238/580 234/577 +f 235/583 236/582 992/1085 993/1086 +f 237/584 235/583 993/1086 994/1087 +f 240/512 242/511 239/510 238/580 +f 233/574 231/515 240/512 241/575 +f 144/435 247/638 995/1088 977/1070 +f 243/436 246/637 245/633 142/433 +f 245/633 248/636 250/439 244/432 +f 247/638 1826/641 996/1089 995/1088 +f 246/637 254/640 248/636 245/633 +f 248/636 255/639 249/635 250/439 +f 249/635 160/458 252/634 251/440 +f 252/634 1068/1163 1069/1164 146/441 +f 1826/641 1830/643 997/1090 996/1089 +f 254/640 256/642 255/639 248/636 +f 255/639 164/459 160/458 249/635 +f 256/642 1071/1166 164/459 255/639 +f 256/642 254/640 997/1090 1070/1165 +f 1834/650 1835/649 999/1092 1000/1093 +f 258/645 256/642 998/1091 1000/1093 +f 259/646 257/464 999/1092 1001/1094 +f 259/646 1225/1322 1223/1320 161/461 +f 891/647 1225/1322 1226/1324 1004/1098 +f 1780/653 1002/1095 1003/1096 1848/652 +f 260/654 891/647 1004/1097 1003/1096 +f 260/654 261/539 918/463 891/647 +f 845/659 843/658 839/657 1296/1405 +f 263/672 1276/1378 1277/1379 264/673 +f 1321/1432 1322/1433 1856/671 1555/686 +f 759/591 267/687 265/521 266/507 +f 794/520 795/516 192/505 265/521 +f 267/687 276/688 794/520 265/521 +f 278/689 268/690 276/688 267/687 +f 278/689 765/587 279/691 268/690 +f 269/692 274/697 268/690 279/691 +f 279/691 285/586 270/693 269/692 +f 271/694 883/696 269/692 270/693 +f 281/695 882/231 271/694 270/693 +f 281/695 280/585 282/111 65/230 +f 282/111 284/96 273/97 272/110 +f 710/100 12/101 1043/1138 1051/1146 +f 883/696 865/699 274/697 269/692 +f 275/698 276/688 268/690 274/697 +f 277/519 794/520 276/688 275/698 +f 865/699 875/700 275/698 274/697 +f 875/700 792/518 277/519 275/698 +f 765/587 776/89 285/586 279/691 +f 280/585 281/695 270/693 285/586 +f 280/585 283/90 284/96 282/111 +f 285/586 776/89 283/90 280/585 +f 287/426 288/428 376/655 286/656 +f 439/829 441/566 290/565 289/564 +f 292/567 293/571 290/565 441/566 +f 2701/3075 2704/3078 435/827 291/559 +f 2701/3075 2702/3076 735/17 292/567 +f 735/17 738/18 293/571 292/567 +f 293/571 298/581 294/572 290/565 +f 294/572 295/570 289/564 290/565 +f 1005/1099 1006/1100 357/743 896/569 +f 356/579 357/743 1006/1100 991/1084 +f 294/572 296/576 297/578 295/570 +f 298/581 748/32 296/576 294/572 +f 2654/3026 2655/3027 301/568 291/559 +f 305/15 301/568 2655/3027 2658/3030 +f 735/17 2702/3076 2703/3077 736/16 +f 736/16 2703/3077 2714/3088 739/27 +f 2656/3028 2657/3029 304/13 302/12 +f 2657/3029 2658/3030 303/560 304/13 +f 336/550 337/555 303/560 300/558 +f 299/552 432/551 336/550 300/558 +f 432/551 308/549 306/553 336/550 +f 308/549 309/548 307/554 306/553 +f 310/263 1059/1154 1056/1151 311/265 +f 311/265 226/266 313/264 310/263 +f 226/266 228/275 312/276 313/264 +f 307/554 1376/1491 1378/1493 695/557 +f 310/263 313/264 319/262 696/261 +f 313/264 312/276 321/277 319/262 +f 312/276 324/289 314/288 321/277 +f 315/279 320/278 321/277 314/288 +f 314/288 317/290 316/287 315/279 +f 322/280 1323/1434 1324/1435 395/286 +f 324/289 327/291 317/290 314/288 +f 318/259 801/260 696/261 319/262 +f 319/262 321/277 320/278 318/259 +f 320/278 315/279 323/258 +f 697/257 1325/1436 1323/1434 322/280 +f 323/258 799/247 318/259 320/278 +f 228/275 325/281 324/289 312/276 +f 325/281 326/292 327/291 324/289 +f 1181/1278 1178/1275 1177/1274 328/282 +f 329/293 1201/1298 1178/1275 1181/1278 +f 1198/1295 1180/1277 917/294 351/295 +f 340/21 1/45 344/44 330/20 +f 331/43 332/23 330/20 344/44 +f 347/42 333/24 332/23 331/43 +f 350/25 334/10 333/24 347/42 +f 302/12 335/11 334/10 350/25 +f 304/13 342/561 335/11 302/12 +f 303/560 337/555 342/561 304/13 +f 336/550 306/553 338/556 337/555 +f 340/21 386/246 1044/1139 1045/1140 +f 340/21 330/20 339/19 386/246 +f 330/20 332/23 388/22 339/19 +f 332/23 333/24 341/8 388/22 +f 334/10 1064/1159 341/8 333/24 +f 335/11 342/561 390/562 389/9 +f 342/561 337/555 338/556 390/562 +f 707/253 1395/1523 2/116 1033/1127 +f 344/44 2659/3031 2660/3032 331/43 +f 331/43 2660/3032 2661/3033 347/42 +f 347/42 2661/3033 2662/3034 350/25 +f 350/25 2662/3034 2656/3028 302/12 +f 888/183 30/182 919/189 887/188 +f 689/336 354/335 355/334 688/337 +f 353/343 89/344 354/335 689/336 +f 355/334 354/335 89/344 +f 359/305 361/300 358/303 87/306 +f 361/300 359/305 355/304 +f 360/302 88/301 361/300 355/304 +f 88/301 692/310 358/303 361/300 +f 377/522 365/452 364/523 380/524 +f 367/766 374/765 378/764 366/453 +f 366/453 287/426 286/656 367/766 +f 375/706 381/707 376/655 288/428 +f 149/443 153/447 379/703 368/701 +f 1243/1341 149/443 368/701 369/702 +f 369/702 368/701 370/704 +f 372/705 145/438 369/702 370/704 +f 372/705 381/707 375/706 145/438 +f 145/438 1234/1332 1242/1340 369/702 +f 369/702 1242/1340 1243/1341 +f 364/523 365/452 378/764 374/765 +f 382/450 152/449 377/522 380/524 +f 1065/1160 1380/1495 1377/1492 384/7 +f 797/1 796/5 383/6 1060/1155 +f 929/243 1369/1484 1373/1488 1047/1142 +f 1370/1485 1371/1486 701/238 704/242 +f 387/245 706/254 1044/1139 1046/1141 +f 341/8 1065/1160 384/7 388/22 +f 341/8 1064/1159 1065/1160 +f 391/563 1065/1160 389/9 390/562 +f 390/562 338/556 695/557 391/563 +f 306/553 307/554 695/557 338/556 +f 392/770 1112/1209 510/768 417/769 +f 1100/1197 1094/1191 1095/1192 1099/1196 +f 1088/1185 1089/1186 396/774 393/773 +f 1182/1279 1187/1284 398/776 491/775 +f 1171/1268 1172/1269 317/290 327/291 +f 1172/1269 1173/1270 316/287 317/290 +f 395/286 1324/1435 1338/1449 1174/1271 +f 411/767 2026/1498 1175/1272 1174/1271 +f 412/779 396/774 1089/1186 1092/1189 +f 412/779 973/1064 972/1063 396/774 +f 1096/1193 1094/1191 1100/1197 1101/1198 +f 490/780 394/771 1360/1473 1357/1470 +f 404/784 406/792 400/788 401/791 +f 402/789 401/791 400/788 408/790 +f 403/778 1090/1187 1190/1287 1340/1451 +f 404/784 1361/1474 1356/1469 406/792 +f 1097/1194 1336/1447 1337/1448 1098/1195 +f 409/799 402/789 408/790 415/797 +f 1327/1438 1365/1478 1362/1475 405/794 +f 924/805 921/787 1350/1462 1351/1463 +f 413/793 974/1065 1333/1444 1329/1440 +f 407/795 1097/1194 1095/1192 417/769 +f 1119/1216 419/796 407/795 1206/1303 +f 415/797 1328/1439 1330/1441 416/798 +f 416/798 893/800 409/799 415/797 +f 1206/1303 1207/1304 1118/1215 1119/1216 +f 416/798 1330/1441 1331/1442 922/802 +f 893/800 416/798 922/802 892/804 +f 892/804 922/802 425/812 473/803 +f 476/889 420/808 421/807 1113/1210 +f 427/816 1117/1214 1208/1305 475/809 +f 475/809 1208/1305 1104/1201 +f 1208/1305 1117/1214 1118/1215 1207/1304 +f 418/801 426/810 428/811 +f 1331/1442 1332/1443 425/812 922/802 +f 422/813 424/814 473/803 425/812 +f 422/813 923/820 423/815 424/814 +f 428/811 1087/1184 1334/1445 1332/1443 +f 2084/1499 428/811 478/817 +f 426/810 478/817 428/811 +f 899/821 923/820 1087/1184 429/819 +f 1334/1445 1087/1184 923/820 422/813 +f 899/821 2081/2265 894/822 923/820 +f 894/822 2081/2265 423/815 923/820 +f 436/825 442/832 437/823 430/824 +f 470/826 2085/2272 430/824 437/823 +f 431/833 433/834 436/825 430/824 +f 1169/1266 443/836 436/825 433/834 +f 308/549 432/551 1169/1266 1165/1262 +f 86/298 223/547 433/834 431/833 +f 2654/3026 2663/3035 443/836 299/552 +f 442/832 436/825 443/836 +f 2664/3036 2665/3038 438/828 447/831 +f 440/830 445/1028 949/1041 947/1038 +f 438/828 2705/3079 947/1038 +f 434/835 1075/1170 1076/1172 +f 289/564 1005/1099 1076/1172 439/829 +f 2704/3078 2705/3079 438/828 435/827 +f 2663/3035 2665/3038 442/832 443/836 +f 461/837 460/872 470/838 437/839 +f 437/839 2664/3037 956/1048 461/837 +f 444/841 957/1049 956/1048 447/840 +f 449/843 959/1051 957/1049 444/841 +f 455/850 950/1042 948/1039 446/844 +f 444/841 447/840 949/1040 948/1039 +f 440/846 1075/1171 1077/1173 445/845 +f 445/845 1077/1173 1078/1174 446/844 +f 454/861 1080/1176 1078/1174 448/849 +f 449/843 950/1042 951/1043 450/852 +f 945/1036 955/1047 953/1045 939/1031 +f 458/854 952/1044 954/1046 451/853 +f 457/856 546/857 545/855 952/1044 +f 546/857 457/856 452/858 547/859 +f 451/853 1079/1175 1081/1177 458/854 +f 471/860 1079/1175 1085/1182 946/1037 +f 943/1034 963/1055 961/1053 938/1030 +f 544/864 456/863 962/1054 958/1050 +f 898/867 2138/2341 542/865 1074/1169 +f 541/866 547/859 452/858 1073/1168 +f 2142/1503 1081/1177 533/869 2650/1179 +f 895/871 2650/1179 533/869 +f 538/870 1082/1178 1086/1183 966/1058 +f 549/873 2099/2289 460/872 461/837 +f 462/842 469/874 549/873 461/837 +f 462/842 467/875 468/882 469/874 +f 449/843 450/852 960/1052 959/1051 +f 944/1035 534/878 535/877 463/862 +f 464/879 456/863 544/864 465/880 +f 466/876 463/862 535/877 536/881 +f 466/876 536/881 468/882 467/875 +f 488/922 506/923 900/921 513/885 +f 489/924 505/934 506/923 488/922 +f 1140/1237 1151/1248 489/924 488/922 +f 497/925 1141/1238 1363/1476 1358/1471 +f 1184/1281 1182/1279 491/775 492/927 +f 492/927 491/775 1171/1268 1176/1273 +f 1176/1273 1179/1276 1142/1239 492/927 +f 494/928 1177/1274 1178/1275 499/929 +f 1185/1282 1186/1283 501/931 495/930 +f 496/932 1143/1240 1149/1246 495/930 +f 501/931 503/937 496/932 495/930 +f 505/934 489/924 1102/1199 1103/1200 +f 504/935 497/925 1358/1471 1359/1472 +f 496/932 503/937 550/936 498/933 +f 500/296 2177/2401 1199/1296 1200/1297 +f 502/938 501/931 1204/1301 1205/1302 +f 502/938 2171/2389 503/937 501/931 +f 508/918 523/908 1108/1205 1107/1204 +f 522/907 514/884 509/920 486/919 +f 514/884 513/885 900/921 509/920 +f 488/922 513/885 1144/1241 1140/1237 +f 1105/1202 1112/1209 392/770 +f 421/807 1114/1211 511/887 1113/1210 +f 1112/1209 1105/1202 1106/1203 1111/1208 +f 512/886 1144/1241 1145/1242 515/883 +f 515/883 1145/1242 1146/1243 519/893 +f 1116/1213 1111/1208 1106/1203 518/888 +f 527/902 482/903 481/901 1126/1223 +f 516/898 1123/1220 526/899 480/900 +f 551/895 521/894 525/896 517/897 +f 520/892 519/893 1109/1206 1110/1207 +f 520/892 479/891 518/888 519/893 +f 479/891 477/890 1116/1213 518/888 +f 521/894 1109/1206 1153/1250 1147/1244 +f 524/909 1148/1245 1155/1252 1124/1221 +f 527/902 1136/1233 483/904 482/903 +f 530/906 1132/1229 528/905 1130/1227 +f 532/912 2213/2456 529/911 1209/1306 +f 532/913 1210/1307 1211/1308 +f 531/910 1131/1228 487/915 484/914 +f 537/939 2134/2336 465/880 544/864 +f 540/940 2134/2336 537/939 544/864 +f 547/859 541/866 548/942 +f 542/865 968/1060 967/1059 1074/1169 +f 539/943 543/941 967/1059 968/1060 +f 543/941 539/943 540/940 544/864 +f 958/1050 545/855 546/857 964/1056 +f 546/857 547/859 548/942 964/1056 +f 800/3 694/248 693/239 671/4 +f 564/517 173/475 867/754 868/753 +f 552/632 562/628 564/517 868/753 +f 553/408 118/407 554/760 121/409 +f 117/406 555/625 554/760 118/407 +f 125/411 556/624 555/625 117/406 +f 557/412 558/630 556/624 125/411 +f 559/414 561/629 558/630 557/412 +f 560/422 562/628 561/629 559/414 +f 563/424 564/517 562/628 560/422 +f 170/468 173/475 564/517 563/424 +f 176/476 792/518 867/754 173/475 +f 567/601 566/358 121/409 854/757 +f 121/409 554/760 854/757 +f 933/600 568/353 567/601 911/351 +f 566/358 573/354 565/357 120/385 +f 567/601 573/354 566/358 +f 568/353 574/352 573/354 567/601 +f 933/600 837/602 569/356 568/353 +f 575/355 574/352 568/353 569/356 +f 569/356 836/363 583/362 575/355 +f 570/361 571/360 575/355 583/362 +f 571/360 570/361 1302/1411 1301/1410 +f 574/352 575/355 571/360 97/359 +f 576/685 90/684 579/670 1322/1433 +f 579/670 1856/671 1322/1433 +f 579/670 90/684 577/683 +f 1302/1412 1303/1413 579/670 577/683 +f 578/662 579/670 1303/1413 1304/1414 +f 845/659 578/662 1304/1414 580/661 +f 581/660 843/658 845/659 580/661 +f 580/661 584/669 582/668 581/660 +f 584/669 570/682 583/681 582/668 +f 658/946 813/971 606/944 659/945 +f 606/944 612/975 661/947 659/945 +f 585/950 593/951 647/948 646/949 +f 593/951 618/953 650/952 647/948 +f 618/953 619/981 651/954 650/952 +f 586/730 786/732 587/731 596/729 +f 586/730 597/734 588/733 786/732 +f 597/734 641/715 787/722 588/733 +f 589/735 642/714 641/715 597/734 +f 589/735 598/736 643/710 642/714 +f 598/736 591/956 590/955 643/710 +f 591/956 585/950 646/949 590/955 +f 591/956 598/736 602/959 592/957 +f 594/958 600/963 619/981 618/953 +f 594/958 618/953 593/951 592/957 +f 592/957 593/951 585/950 591/956 +f 610/726 596/729 587/731 595/725 +f 610/726 803/727 609/728 596/729 +f 609/728 603/737 586/730 596/729 +f 603/737 589/735 597/734 586/730 +f 603/737 602/959 598/736 589/735 +f 599/960 607/961 592/957 602/959 +f 607/961 617/962 594/958 592/957 +f 617/962 601/964 600/963 594/958 +f 601/964 616/980 623/965 600/963 +f 602/959 603/737 609/728 599/960 +f 615/968 604/969 812/966 811/967 +f 605/970 812/966 604/969 617/962 +f 604/969 601/964 617/962 +f 605/970 617/962 813/971 +f 606/944 813/971 617/962 607/961 +f 606/944 607/961 611/972 +f 607/961 806/973 611/972 +f 599/960 608/738 805/974 607/961 +f 607/961 805/974 806/973 +f 609/728 803/727 608/738 599/960 +f 595/725 789/724 802/723 610/726 +f 611/972 612/975 606/944 +f 622/977 627/988 621/978 925/976 +f 613/979 930/989 622/977 925/976 +f 925/976 616/980 615/968 613/979 +f 616/980 601/964 604/969 615/968 +f 651/954 619/981 625/982 634/1001 +f 808/985 631/986 632/998 620/983 +f 632/998 640/999 633/1000 625/982 +f 633/1000 634/1001 625/982 +f 632/998 625/982 620/983 +f 621/984 808/985 620/983 +f 630/987 631/986 808/985 +f 621/978 627/988 630/987 808/985 +f 930/989 628/996 627/988 622/977 +f 613/979 615/968 811/967 930/989 +f 616/980 925/976 624/990 623/965 +f 621/984 620/983 624/990 925/976 +f 625/982 623/965 624/990 620/983 +f 619/981 600/963 623/965 625/982 +f 639/993 638/1004 636/991 626/992 +f 626/992 636/991 810/994 +f 930/989 810/995 628/996 +f 629/997 630/987 627/988 628/996 +f 632/998 631/986 630/987 629/997 +f 635/1002 637/1003 634/1001 633/1000 +f 635/1002 809/1006 636/991 637/1003 +f 638/1004 648/1012 637/1003 636/991 +f 639/993 657/1014 660/1005 638/1004 +f 635/1002 632/998 629/1007 809/1006 +f 635/1002 633/1000 640/999 632/998 +f 642/714 653/708 652/713 641/715 +f 643/710 654/709 653/708 642/714 +f 590/955 644/1008 654/709 643/710 +f 646/949 645/1009 644/1008 590/955 +f 647/948 656/1010 645/1009 646/949 +f 650/952 649/1011 656/1010 647/948 +f 649/1011 660/1005 656/1010 +f 648/1012 638/1004 660/1005 649/1011 +f 648/1012 651/954 634/1001 637/1003 +f 649/1011 650/952 651/954 648/1012 +f 667/712 652/713 653/708 665/711 +f 653/708 654/709 665/711 +f 644/1008 655/1013 665/711 654/709 +f 645/1009 656/1010 655/1013 644/1008 +f 660/1005 661/1017 655/1013 656/1010 +f 658/1015 659/1016 660/1005 657/1014 +f 661/1017 660/1005 659/1016 +f 807/1018 662/1019 655/1013 661/1017 +f 655/1013 662/1019 804/1020 +f 663/717 665/711 655/1013 804/1020 +f 665/711 663/717 664/716 +f 666/718 667/712 665/711 664/716 +f 788/719 791/720 667/712 666/718 +f 791/720 668/721 652/713 667/712 +f 668/721 787/722 641/715 652/713 +f 675/311 928/314 681/313 669/312 +f 681/313 670/322 669/312 +f 1371/327 383/326 669/312 670/322 +f 383/326 796/325 675/311 669/312 +f 671/324 676/316 675/311 796/325 +f 672/323 673/317 676/316 671/324 +f 672/339 687/338 688/337 673/3015 +f 688/307 87/306 673/317 +f 675/311 676/316 674/315 928/314 +f 673/317 677/318 674/315 676/316 +f 87/306 358/303 677/318 673/317 +f 358/303 692/310 690/319 677/318 +f 678/320 674/315 677/318 690/319 +f 674/315 678/320 680/321 928/314 +f 928/314 680/321 681/313 +f 687/338 686/333 682/341 691/342 +f 686/333 684/331 683/332 682/341 +f 976/1067 685/329 670/322 681/313 +f 685/329 701/328 1371/327 670/322 +f 685/329 684/331 700/330 701/328 +f 684/331 686/333 671/340 700/330 +f 686/333 687/338 672/339 671/340 +f 687/338 689/336 688/337 +f 691/342 353/343 689/336 687/338 +f 976/1068 681/313 680/321 683/348 +f 683/348 680/321 678/320 682/347 +f 690/319 691/346 682/347 678/320 +f 692/310 353/309 691/346 690/319 +f 799/247 323/258 694/248 800/3 +f 694/248 1048/1143 1049/1144 693/239 +f 695/557 1378/1493 1379/1494 391/563 +f 799/247 798/2 801/260 318/259 +f 1325/1436 697/257 698/249 1048/1143 +f 889/256 352/255 698/249 697/257 +f 703/250 699/240 698/249 352/255 +f 702/236 693/239 1049/1144 1050/1145 +f 702/236 700/237 671/4 693/239 +f 702/236 704/242 701/238 700/237 +f 703/250 901/251 705/241 699/240 +f 704/242 702/236 1050/1145 1047/1142 +f 901/251 942/252 929/243 705/241 +f 942/1128 1372/1487 1369/1484 929/243 +f 4/120 1018/1112 1020/1114 5/123 +f 708/105 711/106 1034/1129 1037/1132 +f 709/99 710/100 1051/1146 1052/1147 +f 2706/3080 7/125 2717/3091 +f 2706/3080 2715/3089 1023/1117 7/125 +f 725/118 1035/1130 1036/1131 723/104 +f 1036/1131 1037/1132 713/98 723/104 +f 709/99 1052/1147 1053/1148 713/98 +f 814/95 714/91 715/92 721/94 +f 714/91 815/81 716/82 715/92 +f 717/83 720/93 715/92 716/82 +f 716/82 718/66 773/75 717/83 +f 773/75 732/72 731/74 717/83 +f 732/72 745/52 728/49 731/74 +f 815/81 774/65 718/66 716/82 +f 719/84 720/93 717/83 731/74 +f 720/93 722/86 721/94 715/92 +f 1053/1148 1054/1149 723/104 713/98 +f 1054/1149 1055/1150 725/118 723/104 +f 11/117 2707/3081 2716/3090 1041/1136 +f 2708/3082 2709/3083 345/46 726/102 +f 2709/3083 2710/3084 729/48 345/46 +f 729/48 2710/3084 2711/3085 346/50 +f 346/50 2711/3085 2712/3086 348/41 +f 730/85 719/84 727/73 724/103 +f 719/84 730/85 722/86 720/93 +f 731/74 728/49 727/73 719/84 +f 745/52 733/51 728/49 +f 745/52 754/47 742/40 733/51 +f 348/41 2712/3086 2713/3087 349/26 +f 349/26 2713/3087 2714/3088 734/14 +f 738/18 737/28 746/29 749/30 +f 298/581 293/571 738/18 749/30 +f 736/16 737/28 738/18 735/17 +f 739/27 741/34 737/28 736/16 +f 740/33 743/39 741/34 739/27 +f 742/40 754/47 743/39 740/33 +f 744/53 753/54 754/47 745/52 +f 764/62 763/55 744/53 745/52 +f 745/52 732/72 790/63 764/62 +f 732/72 773/75 771/70 790/63 +f 737/28 741/34 751/35 746/29 +f 741/34 743/39 747/38 751/35 +f 743/39 754/47 755/597 747/38 +f 749/30 762/31 748/32 298/581 +f 755/597 769/595 756/596 747/38 +f 750/37 751/35 747/38 756/596 +f 752/36 746/29 751/35 750/37 +f 756/596 757/590 758/592 750/37 +f 760/593 752/36 750/37 758/592 +f 763/55 785/56 753/54 744/53 +f 784/598 755/597 754/47 753/54 +f 784/598 782/599 769/595 755/597 +f 769/595 767/594 757/590 756/596 +f 757/590 766/589 759/591 758/592 +f 266/507 760/593 758/592 759/591 +f 761/506 232/573 760/593 266/507 +f 232/573 762/31 752/36 760/593 +f 762/31 749/30 746/29 752/36 +f 595/57 587/58 785/56 763/55 +f 763/55 764/62 789/61 595/57 +f 770/588 768/88 776/89 765/587 +f 765/587 278/689 766/589 770/588 +f 267/687 759/591 766/589 278/689 +f 757/590 767/594 770/588 766/589 +f 767/594 781/87 768/88 770/588 +f 767/594 769/595 782/599 781/87 +f 773/75 718/66 772/67 771/70 +f 718/66 774/65 775/64 772/67 +f 778/80 777/79 775/64 774/65 +f 778/80 774/65 815/81 +f 815/81 283/90 776/89 778/80 +f 776/89 768/88 777/79 778/80 +f 768/88 781/87 779/78 777/79 +f 781/87 782/599 780/76 779/78 +f 782/599 784/598 783/59 780/76 +f 784/598 753/54 785/56 783/59 +f 587/58 786/60 783/59 785/56 +f 786/60 588/77 780/76 783/59 +f 588/77 787/68 779/78 780/76 +f 787/68 775/64 777/79 779/78 +f 764/62 790/63 788/761 789/61 +f 790/63 771/70 791/71 788/761 +f 771/70 772/67 668/69 791/71 +f 772/67 775/64 787/68 668/69 +f 793/482 277/519 792/518 176/476 +f 795/516 794/520 277/519 793/482 +f 795/516 793/482 174/478 191/477 +f 797/1 800/3 671/4 796/5 +f 798/2 799/247 800/3 797/1 +f 798/2 1063/1158 1062/1157 801/260 +f 666/739 802/723 789/724 788/740 +f 664/741 803/727 802/723 666/739 +f 663/742 608/738 803/727 664/741 +f 804/1021 805/974 608/738 663/742 +f 662/1022 806/973 805/974 804/1021 +f 807/1023 611/972 806/973 662/1022 +f 807/1023 661/947 612/975 611/972 +f 614/976 902/985 903/984 +f 905/1006 926/1007 904/1024 +f 811/967 626/1025 810/995 930/989 +f 812/966 639/1026 626/1025 811/967 +f 812/966 605/970 657/1027 639/1026 +f 813/971 658/946 657/1027 605/970 +f 907/994 927/991 906/1006 +f 284/96 714/91 814/95 273/97 +f 283/90 815/81 714/91 284/96 +f 816/146 825/185 824/607 822/606 +f 818/137 819/144 817/145 873/617 +f 817/145 819/144 1266/1365 1267/1366 +f 820/613 848/3016 831/612 821/605 +f 821/605 822/606 820/613 +f 822/606 824/607 823/609 820/613 +f 824/607 826/187 847/608 823/609 +f 825/185 827/184 826/187 824/607 +f 826/211 827/1393 931/186 1288/1395 +f 826/211 1288/1395 1289/1396 +f 908/184 888/183 887/188 828/186 +f 931/186 1287/1394 1288/1395 +f 1293/1400 838/224 830/210 1294/1402 +f 1293/1401 842/666 835/678 838/3017 +f 820/613 823/609 848/611 +f 832/222 20/214 21/215 22/221 +f 847/212 826/211 1289/1396 1290/1397 +f 932/604 847/212 1290/1397 1291/1398 +f 1291/1398 1292/1399 909/349 932/604 +f 837/602 933/600 909/349 1292/1399 +f 834/604 909/349 910/350 +f 843/658 844/667 842/666 839/657 +f 842/666 1295/1404 1296/1405 839/657 +f 264/673 1277/1379 1275/1377 841/674 +f 22/675 840/665 832/676 +f 840/665 1297/1406 833/677 1284/1390 +f 840/665 1284/1390 1285/1391 +f 1295/1404 842/666 1293/1401 1294/1403 +f 844/667 936/679 835/678 842/666 +f 581/660 582/668 844/667 843/658 +f 582/668 836/680 936/679 844/667 +f 836/680 582/668 583/681 +f 845/659 2250/2507 846/663 578/662 +f 846/663 1856/671 579/670 578/662 +f 934/762 911/351 849/758 850/759 +f 831/763 848/611 934/762 850/759 +f 932/610 848/611 823/609 847/608 +f 848/611 932/610 910/350 +f 910/350 911/351 934/762 848/611 +f 567/601 854/757 849/758 911/351 +f 854/757 855/623 850/756 849/758 +f 855/623 851/622 857/621 850/756 +f 852/626 853/627 856/620 1270/1370 +f 852/626 558/630 561/629 853/627 +f 562/628 552/632 853/627 561/629 +f 555/625 855/623 854/757 554/760 +f 556/624 851/622 855/623 555/625 +f 558/630 852/626 851/622 556/624 +f 853/627 552/632 861/631 856/620 +f 863/619 858/616 856/620 861/631 +f 1270/1370 856/620 858/616 1269/1369 +f 935/755 831/759 850/756 857/621 +f 858/616 859/615 1268/1367 1269/1369 +f 863/619 864/618 859/615 858/616 +f 552/632 868/753 860/751 861/631 +f 862/749 863/619 861/631 860/751 +f 871/747 864/618 863/619 862/749 +f 874/746 873/617 864/618 871/747 +f 817/145 859/615 864/618 873/617 +f 1267/1366 1268/1368 859/615 817/145 +f 866/750 869/752 875/700 865/699 +f 869/752 867/754 792/518 875/700 +f 869/752 860/751 868/753 867/754 +f 866/750 862/749 860/751 869/752 +f 870/748 871/747 862/749 866/750 +f 872/745 874/746 871/747 870/748 +f 881/744 880/136 874/746 872/745 +f 880/136 818/137 873/617 874/746 +f 822/606 821/605 52/149 816/146 +f 876/151 1265/1364 1266/1365 819/144 +f 819/144 818/137 877/143 876/151 +f 818/137 880/136 879/135 877/143 +f 880/136 881/744 878/134 879/135 +f 881/744 882/231 62/228 878/134 +f 872/745 271/694 882/231 881/744 +f 872/745 870/748 883/696 271/694 +f 870/748 866/750 865/699 883/696 +f 884/122 1019/1113 1020/1114 712/119 +f 455/850 1080/1176 1083/1180 453/851 +f 463/862 466/876 960/1052 961/1053 +f 450/852 951/1043 953/1045 938/1030 +f 453/851 1083/1180 1084/1181 939/1031 +f 451/853 954/1046 955/1047 945/1036 +f 939/1031 1084/1181 1085/1182 945/1036 +f 941/1033 962/1054 963/1055 943/1034 +f 944/1035 456/863 464/879 534/878 +f 447/831 438/828 947/1038 949/1041 +f 950/1042 449/843 444/841 948/1039 +f 949/1040 445/845 446/844 948/1039 +f 950/1042 455/850 453/851 951/1043 +f 955/1047 943/1034 938/1030 953/1045 +f 952/1044 545/855 941/1033 954/1046 +f 951/1043 453/851 939/1031 953/1045 +f 954/1046 941/1033 943/1034 955/1047 +f 957/1049 462/842 461/837 956/1048 +f 467/875 462/842 957/1049 959/1051 +f 944/1035 463/862 961/1053 963/1055 +f 962/1054 941/1033 545/855 958/1050 +f 466/876 467/875 959/1051 960/1052 +f 450/852 938/1030 961/1053 960/1052 +f 456/863 944/1035 963/1055 962/1054 +f 458/854 2552/1502 2553/1501 457/856 +f 952/1044 458/854 457/856 +f 543/941 964/1056 548/942 967/1059 +f 964/1056 543/941 544/864 958/1050 +f 2553/1501 2554/1500 965/1057 457/856 +f 452/858 457/856 965/1057 +f 2554/1500 2556/1504 1086/1183 965/1057 +f 541/866 1074/1169 967/1059 548/942 +f 339/19 969/1061 385/244 386/246 +f 969/1061 339/19 388/22 384/7 +f 393/773 396/774 972/1063 971/1062 +f 973/1064 1188/1285 1187/1284 972/1063 +f 974/1065 1183/1280 1339/1450 1333/1444 +f 493/926 393/773 971/1062 975/1066 +f 1184/1281 1189/1286 1149/1246 975/1066 +f 683/332 684/331 685/329 976/1067 +f 205/495 193/496 979/1072 978/1071 +f 193/496 184/498 980/1073 979/1072 +f 184/498 185/499 981/1074 980/1073 +f 981/1074 185/499 187/500 982/1075 +f 187/500 194/501 983/1076 982/1075 +f 194/501 195/509 984/1077 983/1076 +f 195/509 237/584 994/1087 984/1077 +f 985/1078 200/538 199/540 1002/1095 +f 985/1078 1777/541 2567/542 986/1079 +f 986/1079 2567/542 2568/543 987/1080 +f 987/1080 2568/543 2569/544 988/1081 +f 2569/544 2570/545 989/1082 988/1081 +f 2570/545 2571/1351 1255/1354 989/1082 +f 2572/508 1216/1313 1218/1315 990/1083 +f 297/578 234/577 992/1085 991/1084 +f 234/577 238/580 993/1086 992/1085 +f 238/580 239/510 994/1087 993/1086 +f 243/436 143/434 977/1070 995/1088 +f 246/637 243/436 995/1088 996/1089 +f 254/640 246/637 996/1089 997/1090 +f 997/1090 1830/643 1070/1165 +f 257/464 258/645 1000/1093 999/1092 +f 2573/644 1834/650 1000/1093 998/1091 +f 1835/649 2574/648 1001/1094 999/1092 +f 2574/648 2575/1323 1226/1324 1001/1094 +f 1002/1095 199/540 260/654 1003/1096 +f 1004/1097 2576/651 1848/652 1003/1096 +f 289/564 295/570 1006/1100 1005/1099 +f 295/570 297/578 991/1084 1006/1100 +f 1005/1099 896/569 434/835 1076/1172 +f 261/539 260/654 199/540 1007/1101 +f 1007/1101 199/540 200/538 +f 711/106 708/105 1018/1112 1008/1102 +f 3/121 1410/127 1009/1103 1008/1102 +f 15/108 13/107 1009/1103 1010/1104 +f 1408/128 1418/138 1011/1105 1010/1104 +f 17/139 16/129 1011/1105 1012/1106 +f 1519/160 2577/161 1014/1108 1013/1107 +f 54/159 70/162 1015/1109 1013/1107 +f 77/156 17/139 1012/1106 1016/1110 +f 70/162 76/233 1017/1111 1015/1109 +f 76/233 77/156 1016/1110 1017/1111 +f 1018/1112 708/105 712/119 1020/1114 +f 1019/1113 6/124 5/123 1020/1114 +f 2577/161 1451/195 25/194 1014/1108 +f 8/115 10/126 1022/1116 1021/1115 +f 343/114 706/254 1033/1127 1021/1115 +f 1022/1116 10/126 2652/3023 2666/3039 +f 13/107 15/108 1025/1119 1024/1118 +f 710/100 709/99 1034/1129 1024/1118 +f 15/108 16/129 1026/1120 1025/1119 +f 56/176 69/227 1028/1122 1027/1121 +f 66/130 14/109 1026/1120 1029/1123 +f 69/227 74/163 1030/1124 1028/1122 +f 72/140 66/130 1029/1123 1031/1125 +f 74/163 75/155 1032/1126 1030/1124 +f 75/155 72/140 1031/1125 1032/1126 +f 706/254 387/245 707/253 1033/1127 +f 709/99 713/98 1037/1132 1034/1129 +f 1035/1130 725/118 2707/3081 2715/3089 +f 1035/1130 884/122 712/119 1036/1131 +f 712/119 708/105 1037/1132 1036/1131 +f 1027/1121 55/177 26/178 41/175 +f 1027/1121 41/175 1038/1133 +f 1038/1133 41/175 1039/1134 +f 9/113 2653/3025 2667/3040 1040/1135 +f 1/45 340/21 1045/1140 1040/1135 +f 272/110 273/97 1043/1138 1042/1137 +f 273/97 814/95 1051/1146 1043/1138 +f 706/254 343/114 1045/1140 1044/1139 +f 385/244 1370/1485 1373/1488 1046/1141 +f 386/246 385/244 1046/1141 1044/1139 +f 1048/1143 698/249 699/240 1049/1144 +f 699/240 705/241 1050/1145 1049/1144 +f 705/241 929/243 1047/1142 1050/1145 +f 814/95 721/94 1052/1147 1051/1146 +f 721/94 722/86 1053/1148 1052/1147 +f 722/86 730/85 1054/1149 1053/1148 +f 730/85 724/103 1055/1150 1054/1149 +f 724/103 2708/3082 2716/3090 1055/1150 +f 14/109 66/130 63/112 1042/1137 +f 1056/1151 1374/1489 1381/1496 1170/1267 +f 1057/1152 1375/1490 1368/1483 1058/1153 +f 1059/1154 1376/1491 1374/1489 1056/1151 +f 1059/1154 310/263 696/261 1061/1156 +f 1063/1158 798/2 797/1 1060/1155 +f 1061/1156 696/261 801/260 1062/1157 +f 1380/1495 1379/1494 1062/1157 1063/1158 +f 1371/1486 1377/1492 1060/1155 383/6 +f 334/10 335/11 389/9 1064/1159 +f 802/723 803/727 610/726 +f 1066/1161 159/457 158/456 1068/1163 +f 1067/1162 162/460 159/457 1066/1161 +f 1068/1163 158/456 253/445 1069/1164 +f 1069/1164 253/445 151/444 1256/1355 +f 161/461 162/460 1067/1162 1072/1167 +f 1830/643 2573/644 998/1091 1070/1165 +f 1070/1165 998/1091 256/642 +f 256/642 258/645 1071/1166 +f 258/645 257/464 1072/1167 1071/1166 +f 257/464 259/646 161/461 1072/1167 +f 452/858 965/1057 459/868 1073/1168 +f 459/868 1082/1178 898/867 1073/1168 +f 541/866 1073/1168 898/867 1074/1169 +f 440/830 439/829 1076/1172 1075/1170 +f 1075/1171 434/847 472/848 1077/1173 +f 1077/1173 472/848 448/849 1078/1174 +f 1080/1176 455/850 446/844 1078/1174 +f 1079/1175 471/860 533/869 1081/1177 +f 1079/1175 451/853 945/1036 1085/1182 +f 1082/1178 459/868 965/1057 1086/1183 +f 1080/1176 454/861 937/1029 1083/1180 +f 1083/1180 937/1029 940/1032 1084/1181 +f 1084/1181 940/1032 946/1037 1085/1182 +f 895/871 966/1058 1086/1183 2556/1504 +f 2650/1179 895/871 2556/1504 +f 538/870 2144/2350 898/867 1082/1178 +f 1087/1184 428/811 474/818 429/819 +f 1360/1473 1355/1468 1089/1186 1088/1185 +f 1089/1186 1355/1468 1362/1475 1092/1189 +f 393/773 493/926 1093/1190 1088/1185 +f 1090/1187 403/778 413/793 1091/1188 +f 1091/1188 413/793 1329/1440 1335/1446 +f 493/926 1143/1240 1150/1247 1093/1190 +f 1094/1191 392/770 417/769 1095/1192 +f 399/781 392/770 1094/1191 1096/1193 +f 1098/1195 1099/1196 1095/1192 1097/1194 +f 1096/1193 1101/1198 1152/1249 1151/1248 +f 407/795 1328/1439 1336/1447 1097/1194 +f 400/788 406/792 1327/1438 1337/1448 +f 405/794 414/772 1099/1196 1098/1195 +f 1099/1196 414/772 394/771 1100/1197 +f 1100/1197 394/771 490/780 1101/1198 +f 1101/1198 490/780 1141/1238 1152/1249 +f 497/925 504/935 1103/1200 1102/1199 +f 417/769 510/768 1115/1212 +f 1115/1212 510/768 511/887 1114/1211 +f 399/781 512/886 1105/1202 392/770 +f 512/886 515/883 1106/1203 1105/1202 +f 515/883 519/893 518/888 1106/1203 +f 522/907 486/919 1107/1204 1108/1205 +f 1109/1206 519/893 1146/1243 1153/1250 +f 1109/1206 521/894 551/895 1110/1207 +f 477/890 476/889 1113/1210 1116/1213 +f 1116/1213 1113/1210 511/887 1111/1208 +f 1111/1208 511/887 510/768 1112/1209 +f 427/816 478/817 426/810 1117/1214 +f 426/810 418/801 1118/1215 1117/1214 +f 1118/1215 418/801 419/796 1119/1216 +f 525/896 521/894 1147/1244 1154/1251 +f 523/908 508/918 1121/1218 1120/1217 +f 1124/1221 1125/1222 1122/1219 524/909 +f 516/898 517/897 525/896 1123/1220 +f 525/896 1154/1251 1155/1252 1123/1220 +f 1121/1218 485/917 1125/1222 1120/1217 +f 1124/1221 1120/1217 1125/1222 +f 526/899 1126/1223 481/901 480/900 +f 526/899 1148/1245 1156/1253 1126/1223 +f 524/909 1122/1219 1128/1225 1127/1224 +f 1126/1223 1156/1253 1157/1254 527/902 +f 1127/1224 1128/1225 507/916 1129/1226 +f 1136/1233 527/902 1135/1232 +f 1130/1227 1135/1232 1160/1257 1158/1255 +f 1134/1231 1133/1230 1131/1228 531/910 +f 1130/1227 1158/1255 1159/1256 530/906 +f 1135/1232 527/902 1157/1254 1160/1257 +f 1129/1226 507/916 1133/1230 1134/1231 +f 528/905 1136/1233 1135/1232 1130/1227 +f 528/905 2210/2451 483/904 1136/1233 +f 1132/1229 530/906 1138/1235 1137/1234 +f 530/906 1159/1256 1161/1258 1138/1235 +f 399/781 1096/1193 1151/1248 1140/1237 +f 1141/1238 490/780 1357/1470 1363/1476 +f 1168/1265 328/282 1177/1274 1179/1276 +f 1143/1240 493/926 975/1066 1149/1246 +f 512/886 399/781 1140/1237 1144/1241 +f 513/885 514/884 1145/1242 1144/1241 +f 514/884 522/907 1146/1243 1145/1242 +f 1108/1205 523/908 1147/1244 1153/1250 +f 1148/1245 526/899 1123/1220 1155/1252 +f 532/912 1209/1306 1210/1307 +f 1142/1239 494/928 1185/1282 1189/1286 +f 1143/1240 496/932 498/933 1150/1247 +f 1102/1199 489/924 1151/1248 1152/1249 +f 497/925 1102/1199 1152/1249 1141/1238 +f 522/907 1108/1205 1153/1250 1146/1243 +f 523/908 1120/1217 1154/1251 1147/1244 +f 1154/1251 1120/1217 1124/1221 1155/1252 +f 1148/1245 524/909 1127/1224 1156/1253 +f 1156/1253 1127/1224 1129/1226 1157/1254 +f 1160/1257 1134/1231 531/910 1158/1255 +f 1158/1255 531/910 484/914 1159/1256 +f 1157/1254 1129/1226 1134/1231 1160/1257 +f 1159/1256 484/914 1139/1236 1161/1258 +f 228/275 226/266 1167/1264 1162/1259 +f 80/273 79/272 1163/1260 1162/1259 +f 1163/1260 79/272 328/282 1168/1265 +f 1057/1152 224/267 1166/1263 1170/1267 +f 309/548 308/549 1165/1262 1164/1261 +f 224/267 82/268 1167/1264 1166/1263 +f 433/834 223/547 1165/1262 1169/1266 +f 225/546 1375/1490 1381/1496 1164/1261 +f 1169/1266 432/551 299/552 443/836 +f 491/775 398/776 1172/1269 1171/1268 +f 398/776 397/777 1173/1270 1172/1269 +f 397/777 1326/1437 1338/1449 1173/1270 +f 897/285 395/286 1174/1271 1175/1272 +f 327/291 326/292 1176/1273 1171/1268 +f 326/292 1168/1265 1179/1276 1176/1273 +f 494/928 1142/1239 1179/1276 1177/1274 +f 328/282 85/283 1181/1278 +f 85/283 1942/2100 329/293 1181/1278 +f 971/1062 972/1063 1187/1284 1182/1279 +f 975/1066 971/1062 1182/1279 1184/1281 +f 494/928 499/929 1186/1283 1185/1282 +f 1188/1285 397/777 398/776 1187/1284 +f 1183/1280 411/767 1326/1437 1339/1450 +f 492/927 1142/1239 1189/1286 1184/1281 +f 495/930 1149/1246 1189/1286 1185/1282 +f 499/929 1202/1299 1203/1300 1186/1283 +f 1090/1187 1361/1474 1364/1477 1190/1287 +f 1180/1277 1195/1292 1191/1288 917/294 +f 1202/1299 499/929 1178/1275 1201/1298 +f 1204/1301 501/931 1186/1283 1203/1300 +f 920/297 2615/2952 1194/1291 1193/1290 +f 351/295 2177/2401 500/296 1200/1297 +f 920/297 1193/1290 1196/1293 1197/1294 +f 1196/1293 1192/1289 1198/1295 1197/1294 +f 1192/1289 1195/1292 1180/1277 1198/1295 +f 1197/1294 1200/1297 1199/1296 920/297 +f 351/295 1200/1297 1197/1294 1198/1295 +f 329/293 1191/1288 1195/1292 1201/1298 +f 1201/1298 1195/1292 1192/1289 1202/1299 +f 1192/1289 1196/1293 1203/1300 1202/1299 +f 1203/1300 1196/1293 1193/1290 1204/1301 +f 1204/1301 1193/1290 1194/1291 1205/1302 +f 417/769 1115/1212 1206/1303 407/795 +f 1206/1303 1115/1212 1114/1211 1207/1304 +f 1207/1304 1114/1211 421/807 1208/1305 +f 420/808 475/809 1104/1201 421/807 +f 1208/1305 421/807 1104/1201 +f 1138/1235 1209/1306 529/911 1137/1234 +f 1138/1235 1161/1258 1210/1307 1209/1306 +f 1161/1258 1139/1236 1211/1308 1210/1307 +f 154/451 135/425 366/453 378/764 +f 365/452 377/522 155/448 1212/1309 +f 167/465 181/470 1214/1311 1213/1310 +f 1215/1312 180/486 168/471 1214/1311 +f 1217/1314 204/513 990/1083 1218/1315 +f 1215/1312 211/487 204/513 1217/1314 +f 1216/1313 205/495 978/1071 1218/1315 +f 155/448 167/465 1213/1310 1212/1309 +f 1219/1316 151/444 253/445 1220/1317 +f 1220/1317 253/445 158/456 1221/1318 +f 1221/1318 158/456 159/457 1224/1321 +f 1222/1319 162/460 161/461 1223/1320 +f 1224/1321 159/457 162/460 1222/1319 +f 1225/1322 891/647 918/463 1223/1320 +f 1225/1322 259/646 1001/1094 1226/1324 +f 2575/1323 2576/1069 1004/1098 1226/1324 +f 156/446 152/449 153/447 1219/1316 +f 116/403 110/404 1228/1326 1227/1325 +f 110/404 119/384 1229/1327 1228/1326 +f 124/405 116/403 1227/1325 1230/1328 +f 1236/1334 1237/1335 1231/1329 1230/1328 +f 1237/1335 1238/1336 1232/1330 1231/1329 +f 1238/1336 1241/1339 1233/1331 1232/1330 +f 1241/1339 1242/1340 1234/1332 1233/1331 +f 1227/1325 1228/1326 1239/1337 1235/1333 +f 1228/1326 1229/1327 1240/1338 1239/1337 +f 1240/1338 1305/1415 101/375 106/383 +f 1230/1328 1227/1325 1235/1333 1236/1334 +f 123/392 133/393 1237/1335 1236/1334 +f 133/393 138/419 1238/1336 1237/1335 +f 138/419 148/429 1241/1339 1238/1336 +f 148/429 373/437 1242/1340 1241/1339 +f 373/437 149/443 1243/1341 1242/1340 +f 108/382 107/401 1245/1343 1244/1342 +f 107/401 114/394 1246/1344 1245/1343 +f 114/394 132/391 1247/1345 1246/1344 +f 132/391 140/418 1248/1346 1247/1345 +f 140/418 147/430 1249/1347 1248/1346 +f 147/430 146/441 1250/1348 1249/1347 +f 166/469 182/488 1252/1350 1251/1349 +f 1252/1350 182/488 220/531 1254/1353 +f 203/514 989/1082 1255/1354 1253/1352 +f 1254/1353 220/531 203/514 1253/1352 +f 2571/1351 2572/508 990/1083 1255/1354 +f 167/465 155/448 156/446 1251/1349 +f 373/437 148/429 1250/1348 150/442 +f 1256/1355 150/442 1250/1348 +f 117/406 118/407 1258/1357 1257/1356 +f 118/407 553/408 1259/1358 1258/1357 +f 553/408 120/385 1260/1359 1259/1358 +f 124/405 126/410 1261/1360 1257/1356 +f 126/410 127/413 1262/1361 1261/1360 +f 127/413 137/420 1263/1362 1262/1361 +f 1263/1362 137/420 371/427 1264/1363 +f 52/149 1265/1364 44/150 47/148 +f 1265/1364 52/149 821/605 1266/1365 +f 1266/1365 821/605 831/612 1267/1366 +f 1267/1366 831/612 1268/1368 +f 1268/1367 831/614 935/755 1269/1369 +f 1269/1369 935/755 857/621 1270/1370 +f 1270/1370 857/621 851/622 852/626 +f 1272/1373 886/218 363/204 1271/1372 +f 363/204 886/218 362/207 914/205 +f 1446/1371 1382/1505 1271/1374 915/202 +f 2719/1372 1382/1506 2718/1497 +f 2720/1372 2721/1497 1273/219 +f 1271/1372 1273/219 1272/1373 +f 1274/1375 18/220 841/226 1275/1376 +f 1276/1378 262/664 840/665 1277/1379 +f 1277/1379 840/665 22/675 1275/1377 +f 263/672 1854/2006 845/659 1276/1378 +f 23/216 886/206 1278/1380 1274/1375 +f 31/181 1279/1381 29/191 24/190 +f 24/190 29/191 1280/1383 +f 29/191 1279/1381 33/196 914/205 +f 1280/1382 29/191 914/205 +f 19/209 24/190 1280/1384 1281/1385 +f 1280/1384 914/208 362/207 1281/1385 +f 19/209 1281/1385 20/214 1282/1386 +f 1282/1386 20/214 832/222 1283/1387 +f 1285/1391 1283/1388 832/676 840/665 +f 1283/1387 1284/1389 829/213 1282/1386 +f 1284/1390 1283/1388 1285/1391 +f 829/213 1284/1389 833/223 1286/1392 +f 1286/1392 830/210 1288/1395 887/188 +f 1287/1394 887/188 1288/1395 +f 1288/1395 830/210 1289/1396 +f 830/210 838/224 1290/1397 1289/1396 +f 838/224 835/603 1291/1398 1290/1397 +f 1291/1398 835/603 1292/1399 +f 835/603 936/225 837/602 1292/1399 +f 837/602 936/225 836/363 569/356 +f 910/350 909/349 933/600 911/351 +f 830/210 1286/1392 833/223 1294/1402 +f 1294/1403 833/677 1297/1406 1295/1404 +f 1295/1404 1297/1406 1298/1407 1296/1405 +f 1296/1405 1298/1407 845/659 +f 1297/1406 840/665 262/664 1298/1407 +f 262/664 1276/1378 845/659 1298/1407 +f 106/383 101/375 1299/1408 1244/1342 +f 101/375 100/371 1300/1409 1299/1408 +f 1300/1409 100/371 572/370 96/369 +f 577/374 572/370 1301/1410 1302/1411 +f 570/682 584/669 1303/1413 1302/1412 +f 584/669 580/661 1304/1414 1303/1413 +f 1312/1422 1313/1423 98/372 1310/1420 +f 1229/1327 1307/1417 1305/1415 1240/1338 +f 1307/1417 1308/1418 1306/1416 1305/1415 +f 1306/1416 1308/1418 1301/1410 +f 119/384 99/373 1307/1417 1229/1327 +f 99/373 98/372 1308/1418 1307/1417 +f 1308/1418 98/372 1313/1423 1301/1410 +f 120/385 565/357 1309/1419 1260/1359 +f 565/357 97/359 1310/1420 1309/1419 +f 97/359 571/360 1311/1421 1310/1420 +f 1312/1422 1310/1420 1311/1421 +f 1311/1421 571/360 1312/1422 +f 571/360 1301/1410 1313/1423 1312/1422 +f 104/365 102/366 94/367 1314/1424 +f 1314/1424 94/367 92/379 1315/1425 +f 1315/1425 92/379 91/389 1316/1426 +f 1319/1429 1596/398 1318/1428 +f 143/434 105/397 1317/1427 977/1070 +f 1317/1427 105/397 1316/1426 1318/1428 +f 1318/1428 1316/1426 91/389 1319/1429 +f 91/389 93/378 1320/1430 1319/1429 +f 93/378 576/377 1321/1431 1320/1430 +f 1321/1432 576/685 1322/1433 +f 1323/1434 315/279 316/287 1324/1435 +f 1325/1436 323/258 315/279 1323/1434 +f 1324/1435 316/287 1173/1270 1338/1449 +f 1336/1447 408/790 400/788 1337/1448 +f 406/792 1356/1469 1365/1478 1327/1438 +f 973/1064 412/779 1329/1440 1333/1444 +f 1328/1439 407/795 419/796 1330/1441 +f 1330/1441 419/796 418/801 1331/1442 +f 418/801 428/811 1332/1443 1331/1442 +f 422/813 425/812 1332/1443 1334/1445 +f 1188/1285 973/1064 1333/1444 1339/1450 +f 412/779 1092/1189 1335/1446 1329/1440 +f 1328/1439 415/797 408/790 1336/1447 +f 405/794 1098/1195 1337/1448 1327/1438 +f 1326/1437 411/767 1174/1271 1338/1449 +f 1326/1437 397/777 1188/1285 1339/1450 +f 1048/1143 694/248 323/258 1325/1436 +f 974/1065 1347/1458 1354/1467 1183/1280 +f 1343/1454 1345/1452 970/782 1342/1453 +f 921/786 410/785 1349/1460 1350/1461 +f 410/785 2643/1508 1348/1459 1349/1460 +f 1340/1451 1190/1287 1343/1454 1342/1453 +f 1190/1287 1364/1477 1366/1479 1343/1454 +f 1366/1479 1367/1480 1345/1457 1343/1454 +f 970/782 1352/1465 1351/1463 1350/1462 +f 974/1065 413/793 403/778 1347/1458 +f 403/778 1340/1451 1348/1459 1347/1458 +f 1340/1451 1342/1453 1349/1460 1348/1459 +f 1342/1453 970/782 1350/1461 1349/1460 +f 1345/1464 1351/1482 1352/1465 970/782 +f 1383/1507 2026/1498 411/767 1183/1280 +f 1354/1467 1383/1507 1183/1280 +f 1088/1185 1093/1190 1357/1470 1360/1473 +f 1361/1474 1090/1187 1091/1188 1356/1469 +f 1365/1478 1335/1446 1092/1189 1362/1475 +f 1150/1247 498/933 1358/1471 1363/1476 +f 498/933 550/936 1359/1472 1358/1471 +f 394/771 414/772 1355/1468 1360/1473 +f 1355/1468 414/772 405/794 1362/1475 +f 1093/1190 1150/1247 1363/1476 1357/1470 +f 1361/1474 404/784 1341/783 1364/1477 +f 1356/1469 1091/1188 1335/1446 1365/1478 +f 1364/1477 1341/783 1344/1455 1366/1479 +f 1344/1455 1346/1456 1367/1480 1366/1479 +f 1346/1456 2646/3002 1353/1466 1367/1480 +f 1345/1464 1367/1481 1353/806 1351/1482 +f 1376/1491 1059/1154 1061/1156 1378/1493 +f 1380/1495 1063/1158 1060/1155 1377/1492 +f 1369/1484 387/245 1046/1141 1373/1488 +f 1370/1485 385/244 969/1061 1371/1486 +f 1378/1493 1061/1156 1062/1157 1379/1494 +f 1372/1487 707/253 387/245 1369/1484 +f 1370/1485 704/242 1047/1142 1373/1488 +f 1374/1489 309/548 1164/1261 1381/1496 +f 1375/1490 225/546 227/299 1368/1483 +f 1376/1491 307/554 309/548 1374/1489 +f 1065/1160 391/563 1379/1494 1380/1495 +f 1371/1486 969/1061 384/7 1377/1492 +f 1375/1490 1057/1152 1170/1267 1381/1496 +f 1354/1467 1347/1458 1348/1459 2643/1508 +f 2026/1509 1354/1467 2643/1508 +f 2552/1502 458/854 1081/1177 2142/1503 +f 1383/1507 1354/1467 2026/1509 +f 1387/1513 2669/3042 2668/3041 1384/1510 +f 1385/1511 1389/1515 2670/3043 2668/3041 +f 1390/1516 1392/1518 1388/1514 1391/1517 +f 1391/1517 1394/1520 1393/1519 1390/1516 +f 2/1521 1395/1523 1393/1519 8/1522 +f 3/1525 4/1524 1397/1527 1396/1526 +f 1399/1529 2672/3045 2671/3044 1398/1528 +f 1400/1530 1403/1533 1402/1532 1401/1531 +f 1404/1534 1406/1536 1402/1532 1405/1535 +f 1405/1535 1407/1537 1396/1526 1404/1534 +f 1409/1539 1408/1538 1410/1540 1407/1537 +f 1400/1530 1413/1543 1412/1542 1411/1541 +f 1411/1541 1414/1544 1403/1533 1400/1530 +f 1415/1545 1417/1547 1409/1539 1416/1546 +f 1418/1548 1417/1547 1420/1550 1419/1549 +f 1422/1552 1421/1551 1424/1554 1423/1553 +f 1423/1553 1424/1554 1426/1556 1425/1555 +f 1427/1557 1428/1560 18/1559 2649/1558 +f 1431/1563 1430/1562 1429/1561 1432/1564 +f 1433/1565 1436/1568 1435/1567 1434/1566 +f 1437/1569 1434/1566 1435/1567 1438/1570 +f 1432/1564 1429/1561 1440/1572 1439/1571 +f 1441/1573 1431/1563 1432/1564 +f 1431/1563 1441/1573 1442/1574 1428/1560 +f 1444/1576 1443/1575 1434/1566 1437/1569 +f 1445/1577 1448/1580 1447/1579 1446/1578 +f 1448/1580 1445/1577 1449/1581 1450/1582 +f 1450/1582 1449/1581 1451/1583 1425/1555 +f 1425/1555 1426/1556 1452/1584 1450/1582 +f 1426/1556 1455/1587 1454/1586 1453/1585 +f 1426/1556 1453/1585 1452/1584 +f 1452/1584 1453/1585 1456/1588 1457/1589 +f 1458/1590 1456/1588 1453/1585 1459/1591 +f 1460/1592 1461/1593 1456/1588 1458/1590 +f 1462/1594 1460/1592 1458/1590 1463/1595 +f 1443/1575 1444/1576 1462/1594 1464/1596 +f 1465/1597 1443/1575 1464/1596 1466/1598 +f 1467/1599 1465/1597 1466/1598 1468/1600 +f 1457/1589 1456/1588 1461/1593 1469/1601 +f 1469/1601 1461/1593 1470/1602 1471/1603 +f 1450/1582 1452/1584 1457/1589 1448/1580 +f 1448/1580 1457/1589 1469/1601 1447/1579 +f 1471/1603 1472/1604 1447/1579 1469/1601 +f 1474/1606 1473/1605 1466/1598 1464/1596 +f 1463/1595 1474/1606 1464/1596 1462/1594 +f 1463/1595 1458/1590 1459/1591 1475/1607 +f 1477/1609 1476/1608 1459/1591 1453/1585 +f 1454/1586 1477/1609 1453/1585 +f 1476/1608 1477/1609 1479/1611 1478/1610 +f 1480/1612 1476/1608 1478/1610 1481/1613 +f 1480/1612 1481/1613 1483/1615 1482/1614 +f 1484/1616 1482/1614 1483/1615 +f 1482/1614 1484/1616 1485/1617 1486/1618 +f 1476/1608 1480/1612 1475/1607 1459/1591 +f 1486/1618 1475/1607 1480/1612 1482/1614 +f 1486/1618 1485/1617 1473/1605 1474/1606 +f 1475/1607 1486/1618 1474/1606 1463/1595 +f 1468/1600 1466/1598 1473/1605 1487/1619 +f 1487/1619 1473/1605 1485/1617 1488/1620 +f 1490/1622 1489/1621 1484/1616 1483/1615 +f 1491/1623 1490/1622 1483/1615 1492/1624 +f 1421/1551 1493/1625 1479/1611 1424/1554 +f 1481/1613 1478/1610 1494/1626 1495/1627 +f 1483/1615 1481/1613 1495/1627 1492/1624 +f 1491/1623 1492/1624 1496/1628 1497/1629 +f 1497/1629 1496/1628 1498/1630 1499/1631 +f 1499/1631 1498/1630 1500/1632 1501/1633 +f 1501/1633 1500/1632 1502/1634 1503/1635 +f 1504/1636 1502/1634 1500/1632 1505/1637 +f 1506/1638 1502/1634 1504/1636 1412/1542 +f 1507/1639 1501/1633 1503/1635 1508/1640 +f 1503/1635 1502/1634 1506/1638 1509/1641 +f 1415/1545 1414/1544 1511/1643 1510/1642 +f 1512/1644 1504/1636 1505/1637 1513/1645 +f 1505/1637 1500/1632 1498/1630 1514/1646 +f 1514/1646 1498/1630 1496/1628 1515/1647 +f 1515/1647 1496/1628 1492/1624 1495/1627 +f 1516/1648 1515/1647 1495/1627 1494/1626 +f 1493/1625 1421/1551 1518/1650 1517/1649 +f 1422/1552 1519/1651 1521/1653 1520/1652 +f 1419/1549 1420/1550 1523/1655 1522/1654 +f 1510/1642 1511/1643 1525/1657 1524/1656 +f 1513/1645 1505/1637 1514/1646 1526/1658 +f 1526/1658 1514/1646 1515/1647 1516/1648 +f 1517/1649 1518/1650 1528/1660 1527/1659 +f 1520/1652 1521/1653 1530/1662 1529/1661 +f 1522/1654 1523/1655 1529/1661 1530/1662 +f 1524/1656 1525/1657 1527/1659 1528/1660 +f 1532/1665 1531/1664 890/1663 81/1666 +f 1532/1665 81/1666 83/1667 1533/1668 +f 1533/1668 83/1667 78/1669 1534/1670 +f 1533/1668 1536/1672 1535/1671 1532/1665 +f 1535/1671 1537/1673 1539/1675 1538/1674 +f 1539/1675 1541/1677 1540/1676 1538/1674 +f 890/1663 1531/1664 1542/1678 85/1679 +f 889/1682 84/1681 1543/1680 1544/1683 +f 1543/1680 84/1681 897/1685 1545/1684 +f 1547/1687 1973/2140 1546/1686 1548/1688 +f 1546/2132 1970/2134 1549/2133 1548/3018 +f 1550/2137 1546/2132 1552/2138 1551/3019 +f 1553/1693 1550/1690 1551/1691 1554/1694 +f 1555/1695 1558/1698 1557/1697 1556/1696 +f 1561/1701 1560/1700 1559/1699 1562/1702 +f 1563/1703 1561/1701 1562/1702 1564/1704 +f 1556/1696 1557/1697 1565/1706 1596/1705 +f 1560/1700 1567/1708 1566/1707 +f 1568/1709 1567/1708 1560/1700 1561/1701 +f 1561/1701 1569/1710 1568/1709 +f 1561/1701 1563/1703 1570/1711 1569/1710 +f 1571/1712 1563/1703 1573/1714 1572/1713 +f 1576/1717 1575/1716 1574/1715 1577/1718 +f 1579/1720 1578/1719 1581/1722 1580/1721 +f 1571/1712 1572/1713 1583/1724 1582/1723 +f 1570/1711 1584/1725 1586/1727 1585/1726 +f 1569/1710 1570/1711 1585/1726 1587/1728 +f 1587/1728 1590/1731 1589/1730 1588/1729 +f 1589/1730 1592/1733 1591/1732 1588/1729 +f 1592/1733 1594/1735 1593/1734 1591/1732 +f 1595/1736 1597/1738 1596/1737 +f 1585/1726 1586/1727 1599/1740 1598/1739 +f 1587/1728 1585/1726 1598/1739 1590/1731 +f 1600/1741 1602/1743 1599/1740 1601/1742 +f 1590/1731 1598/1739 1603/1744 1604/1745 +f 1605/1746 1606/1747 1602/1743 1600/1741 +f 1600/1741 1608/1749 1607/1748 1605/1746 +f 1601/1742 1609/1750 1608/1749 1600/1741 +f 1592/1733 1589/1730 1611/1752 1610/1751 +f 1611/1752 1589/1730 1590/1731 1604/1745 +f 1604/1745 1603/1744 1612/1753 1613/1754 +f 1614/1755 1615/1756 1606/1747 1605/1746 +f 1605/1746 1607/1748 1616/1757 1614/1755 +f 1617/1758 1620/1761 1619/1760 1618/1759 +f 1621/1762 1622/1763 1620/1761 1617/1758 +f 1623/1764 1624/1765 1622/1763 1621/1762 +f 1580/1721 1581/1722 1624/1765 1623/1764 +f 1627/1768 1626/1767 1625/1766 1628/1769 +f 1594/1735 1592/1733 1610/1751 1629/1770 +f 1611/1752 1604/1745 1613/1754 1630/1771 +f 1613/1754 1612/1753 1631/1772 1632/1773 +f 1633/1774 1634/1775 1615/1756 1614/1755 +f 1635/1776 1618/1759 1637/1778 1636/1777 +f 1619/1760 1638/1779 1640/1781 1639/1780 +f 1640/1781 1641/1782 1642/1783 1639/1780 +f 1641/1782 1643/1784 1644/1785 1642/1783 +f 1645/1786 1646/1787 1636/1777 1637/1778 +f 1610/1751 1611/1752 1630/1771 1647/1788 +f 1630/1771 1613/1754 1632/1773 1648/1789 +f 1632/1773 1631/1772 1649/1790 1650/1791 +f 1651/1792 1652/1793 1634/1775 1633/1774 +f 1653/1794 1654/1795 1646/1787 1645/1786 +f 1655/1796 1658/1799 1644/1785 1657/1798 +f 1644/1785 1643/1784 1657/1798 +f 1655/1796 1657/1798 1656/1797 +f 1657/1798 1659/1800 1656/1797 +f 1659/1800 1699/1841 1660/1801 1656/1797 +f 1661/1802 1656/1797 1660/1801 1662/1803 +f 1655/1796 1656/1797 1661/1802 1663/1804 +f 1663/1804 1665/1806 1664/1805 1658/1799 +f 1655/1796 1663/1804 1658/1799 +f 1664/1805 1666/1807 1654/1795 1653/1794 +f 1667/1808 1668/1809 1652/1793 1651/1792 +f 1650/1791 1649/1790 1669/1810 1670/1811 +f 1648/1789 1632/1773 1650/1791 1671/1812 +f 1647/1788 1630/1771 1648/1789 1672/1813 +f 1629/1770 1610/1751 1647/1788 1673/1814 +f 1596/1737 1597/1738 1674/1816 144/1815 +f 1675/1817 1666/1807 1664/1805 1665/1806 +f 1671/1812 1650/1791 1670/1811 1676/1818 +f 1670/1811 1669/1810 1677/1819 1678/1820 +f 1677/1819 1668/1809 1680/1822 1679/1821 +f 1684/1826 1680/1822 1683/1825 1681/1823 +f 1681/1823 1683/1825 1682/1824 +f 1685/1827 1688/1830 1687/1829 1686/1828 +f 1684/1826 1681/1823 1689/1831 1686/1828 +f 1690/1832 1685/1827 1692/1834 1691/1833 +f 1693/1835 1692/1834 1689/1831 1694/1836 +f 1695/1837 1698/1840 1697/1839 1696/1838 +f 1695/1837 1660/1801 1699/1841 1700/1842 +f 1698/1840 1695/1837 1700/1842 1701/1843 +f 1688/1830 1685/1827 1703/1845 1702/1844 +f 1688/1830 1704/1846 1705/1847 1687/1829 +f 1704/1846 1707/1849 1706/1848 1705/1847 +f 1708/1850 1678/1820 1710/1852 1709/1851 +f 1711/1853 1708/1850 1709/1851 1712/1854 +f 1713/1855 1711/1853 1712/1854 1714/1856 +f 1715/1857 1718/1860 1717/1859 1716/1858 +f 1719/1861 1699/1841 1659/1800 +f 1720/1862 1722/1864 1703/1845 1721/1863 +f 1701/1843 1700/1842 1724/1866 1723/1865 +f 1724/1866 1700/1842 1699/1841 1725/1867 +f 1726/1868 1725/1867 1699/1841 1719/1861 +f 1727/1869 1726/1868 1719/1861 1728/1870 +f 1727/1869 1728/1870 1729/1871 1730/1872 +f 1733/1875 1732/1874 1731/1873 1734/1876 +f 1732/1874 1733/1875 1735/1877 1730/1872 +f 1736/1878 1732/1874 1730/1872 1729/1871 +f 1737/1879 1727/1869 1730/1872 1735/1877 +f 1726/1868 1727/1869 1737/1879 1738/1880 +f 1725/1867 1726/1868 1738/1880 1739/1881 +f 1725/1867 1739/1881 1740/1882 1724/1866 +f 1741/1883 1720/1862 1723/1865 1742/1884 +f 1720/1862 1741/1883 1743/1885 1722/1864 +f 1745/1887 1702/1844 1744/1886 1746/1888 +f 1747/1889 1737/1879 1735/1877 1748/1890 +f 1748/1890 1735/1877 1733/1875 1749/1891 +f 1750/1892 1753/1895 1752/1894 1751/1893 +f 1754/1896 1755/1897 1753/1895 1750/1892 +f 1754/1896 1747/1889 1756/1898 1755/1897 +f 1747/1889 1748/1890 1757/1899 1756/1898 +f 1748/1890 1749/1891 1758/1900 1757/1899 +f 1749/1891 1760/1902 1759/1901 1758/1900 +f 1760/1902 1749/1891 1733/1875 1734/1876 +f 1734/1876 1731/1873 1761/1903 1762/1904 +f 1763/1905 1761/1903 1731/1873 1764/1906 +f 1761/1903 1763/1905 1765/1907 1766/1908 +f 1767/1909 1765/1907 1763/1905 1768/1910 +f 1760/1902 1769/1911 1770/1912 1759/1901 +f 1769/1911 1760/1902 1734/1876 1762/1904 +f 1718/1860 1715/1857 1771/1913 1772/1914 +f 1772/1914 1771/1913 1774/1916 1773/1915 +f 1775/1917 1773/1915 1774/1916 1776/1918 +f 1777/1919 1780/1922 1779/1921 1778/1920 +f 1775/1917 1781/1923 1782/1924 1778/1920 +f 1781/1923 1783/1925 1784/1926 1782/1924 +f 1783/1925 1785/1927 1786/1928 1784/1926 +f 1785/1927 1787/1929 1788/1930 1786/1928 +f 1789/1931 1792/1934 1791/1933 1790/1932 +f 1751/1893 1752/1894 1794/1936 1793/1935 +f 1775/1917 1776/1918 1781/1923 +f 1781/1923 1776/1918 1795/1937 1783/1925 +f 1783/1925 1795/1937 1796/1938 1785/1927 +f 1785/1927 1796/1938 1797/1939 1787/1929 +f 1741/1883 1789/1931 1790/1932 1743/1885 +f 1740/1882 1751/1893 1793/1935 1742/1884 +f 1751/1893 1740/1882 1739/1881 1750/1892 +f 1750/1892 1739/1881 1738/1880 1754/1896 +f 1754/1896 1738/1880 1737/1879 1747/1889 +f 1795/1937 1776/1918 1774/1916 1798/1940 +f 1688/1830 1702/1844 1745/1887 1704/1846 +f 1707/1849 1704/1846 1745/1887 1799/1941 +f 1707/1849 1715/1857 1716/1858 1706/1848 +f 1799/1941 1771/1913 1715/1857 1707/1849 +f 1774/1916 1771/1913 1799/1941 1798/1940 +f 1796/1938 1795/1937 1798/1940 1746/1888 +f 1797/1939 1796/1938 1746/1888 1744/1886 +f 1799/1941 1745/1887 1746/1888 1798/1940 +f 86/1942 1801/1945 1800/1944 227/1943 +f 1802/1946 1805/1949 1804/1948 1803/1947 +f 1800/1944 1801/1945 1807/1951 1806/1950 +f 1534/1670 78/1669 1058/1953 1808/1952 +f 1809/1954 1536/1672 1805/1949 1802/1946 +f 1762/1904 1761/1903 1766/1908 1810/1955 +f 1766/1908 1765/1907 1811/1956 1812/1957 +f 1812/1957 1811/1956 1813/1958 1814/1959 +f 1815/1960 1812/1957 1814/1959 1816/1961 +f 1817/1962 1815/1960 1816/1961 1818/1963 +f 1819/1965 356/1964 236/1967 1820/1966 +f 1815/1960 1817/1962 1821/1968 1810/1955 +f 235/1969 1822/1970 1820/1966 236/1967 +f 237/1971 1770/1912 1822/1970 235/1969 +f 1810/1955 1821/1968 1769/1911 1762/1904 +f 1812/1957 1815/1960 1810/1955 1766/1908 +f 144/1815 1674/1816 1823/1973 247/1972 +f 1673/1814 1647/1788 1672/1813 1824/1974 +f 1672/1813 1648/1789 1671/1812 1825/1975 +f 247/1972 1823/1973 1827/1977 1826/1976 +f 1824/1974 1672/1813 1825/1975 1828/1978 +f 1825/1975 1671/1812 1676/1818 1829/1979 +f 1676/1818 1670/1811 1678/1820 1708/1850 +f 1678/1820 1677/1819 1679/1821 1710/1852 +f 1826/1976 1827/1977 1831/1981 1830/1980 +f 1828/1978 1825/1975 1829/1979 1832/1982 +f 1829/1979 1676/1818 1708/1850 1711/1853 +f 1832/1982 1829/1979 1711/1853 1713/1855 +f 1832/1982 1833/1983 1831/1981 1828/1978 +f 1834/1984 1837/1987 1836/1986 1835/1985 +f 1838/1988 1837/1987 1839/1989 1832/1982 +f 1840/1990 1842/1992 1836/1986 1841/1991 +f 1840/1990 1844/1994 1717/1859 1843/1993 +f 1845/1995 1847/1997 1846/1996 1843/1993 +f 1780/1922 1848/1998 1849/1999 1779/1921 +f 1850/2000 1849/1999 1847/2001 1845/1995 +f 1850/2000 1845/1995 1718/1860 1772/1914 +f 1851/2003 2256/2513 845/2002 1852/2004 +f 263/2008 264/2007 1855/2009 1854/2006 +f 1558/2012 1555/2011 1856/2010 1857/2013 +f 1858/2014 1767/1909 1768/1910 1859/2015 +f 1860/2016 1768/1910 1763/1905 1764/1906 +f 1859/2015 1768/1910 1860/2016 1861/2017 +f 1862/2018 1859/2015 1861/2017 1863/2019 +f 1862/2018 1863/2019 1864/2020 1865/2021 +f 1866/2022 1864/2020 1863/2019 1867/2023 +f 1864/2020 1866/2022 1868/2024 1869/2025 +f 1870/2026 1868/2024 1866/2022 1871/2027 +f 1508/1640 1868/2024 1870/2026 1507/1639 +f 1508/1640 1503/1635 1509/1641 1872/2028 +f 1509/1641 1506/1638 1873/2029 1874/2030 +f 1401/1531 1875/2031 1413/1543 1400/1530 +f 1871/2027 1866/2022 1867/2023 1876/2032 +f 1877/2033 1867/2023 1863/2019 1861/2017 +f 1878/2034 1877/2033 1861/2017 1860/2016 +f 1876/2032 1867/2023 1877/2033 1879/2035 +f 1879/2035 1877/2033 1878/2034 1880/2036 +f 1865/2021 1864/2020 1869/2025 1881/2037 +f 1872/2028 1869/2025 1868/2024 1508/1640 +f 1872/2028 1509/1641 1874/2030 1882/2038 +f 1869/2025 1872/2028 1882/2038 1881/2037 +f 1661/1802 1884/2040 1883/2039 1663/1804 +f 1885/2041 1888/2044 1887/2043 1886/2042 +f 1889/2045 1886/2042 1887/2043 1890/2046 +f 1892/2048 2686/3060 2685/3059 1891/2047 +f 1894/2050 2687/3061 2685/3059 1889/2045 +f 1894/2050 1889/2045 1890/2046 1895/2051 +f 1890/2046 1887/2043 1896/2052 1897/2053 +f 1896/2052 1887/2043 1888/2044 1898/2054 +f 1899/2056 896/2055 357/2058 1900/2057 +f 356/1964 1819/1965 1900/2057 357/2058 +f 1896/2052 1898/2054 1818/1963 1816/1961 +f 1897/2053 1896/2052 1816/1961 1814/1959 +f 1893/2049 2674/3047 2673/3046 1891/2047 +f 1903/2061 2675/3048 2674/3047 1893/2049 +f 1894/2050 1905/2063 2688/3062 2687/3061 +f 1905/2063 1907/2065 2689/3063 2688/3062 +f 1910/2068 2677/3050 2676/3049 1908/2066 +f 1904/2062 2675/3048 2677/3050 1910/2068 +f 1911/2069 1902/2060 1904/2062 1912/2070 +f 1901/2059 1902/2060 1911/2069 1913/2071 +f 1913/2071 1911/2069 1914/2072 1915/2073 +f 1915/2073 1914/2072 1916/2074 1917/2075 +f 1918/2076 1802/1946 1803/1947 1919/2077 +f 1802/1946 1918/2076 1920/2078 1809/1954 +f 1809/1954 1920/2078 1921/2079 1537/1673 +f 1916/2074 1924/2082 1923/2081 1922/2080 +f 1918/2076 1926/2084 1925/2083 1920/2078 +f 1920/2078 1925/2083 1927/2085 1921/2079 +f 1921/2079 1927/2085 1928/2086 1929/2087 +f 1930/2088 1928/2086 1927/2085 1931/2089 +f 1928/2086 1930/2088 1932/2090 1933/2091 +f 1543/1680 1545/1684 1935/2093 1934/2092 +f 1929/2087 1928/2086 1933/2091 1936/2094 +f 1937/2095 1925/2083 1926/2084 1938/2096 +f 1925/2083 1937/2095 1931/2089 1927/2085 +f 1931/2089 1939/2097 1930/2088 +f 1544/1683 1543/1680 1934/2092 1940/2098 +f 1939/2097 1931/2089 1937/2095 1941/2099 +f 1537/1673 1921/2079 1929/2087 1539/1675 +f 1539/1675 1929/2087 1936/2094 1541/1677 +f 1942/2100 1542/1678 1944/2102 1943/2101 +f 329/2103 1942/2100 1943/2101 1945/2104 +f 1946/2107 351/2106 917/2105 1947/2108 +f 1949/2110 1948/2109 1387/1513 1384/1510 +f 1950/2111 1387/1513 1948/2109 1951/2112 +f 1952/2113 1950/2111 1951/2112 1953/2114 +f 1954/2115 1952/2113 1953/2114 1955/2116 +f 1908/2066 1954/2115 1955/2116 1956/2117 +f 1910/2068 1908/2066 1956/2117 1957/2118 +f 1904/2062 1910/2068 1957/2118 1912/2070 +f 1911/2069 1912/2070 1958/2119 1914/2072 +f 1949/2110 1392/1518 1960/2121 1959/2120 +f 1949/2110 1959/2120 1961/2122 1948/2109 +f 1948/2109 1961/2122 1962/2123 1951/2112 +f 1951/2112 1962/2123 1963/2124 1953/2114 +f 1955/2116 1953/2114 1963/2124 1964/2125 +f 1956/2117 1966/2127 1965/2126 1957/2118 +f 1957/2118 1965/2126 1958/2119 1912/2070 +f 1387/1513 1950/2111 2678/3051 2669/3042 +f 1950/2111 1952/2113 2679/3052 2678/3051 +f 1952/2113 1954/2115 2680/3053 2679/3052 +f 1954/2115 1908/2066 2676/3049 2680/3053 +f 1465/1597 1433/1565 1434/1566 1443/1575 +f 1546/2132 1550/2137 1971/2135 1970/2134 +f 1553/2136 1970/2134 1971/2135 1550/2137 +f 1547/1687 1548/1688 1972/2139 1973/2140 +f 1973/2140 1551/1691 1552/1692 1546/1686 +f 1551/1691 1973/2140 1972/2139 1554/1694 +f 1691/1833 1975/2142 1974/2141 1697/1839 +f 1976/2143 1662/1803 1696/1838 1977/2144 +f 1662/1803 1976/2143 1884/2040 1661/1802 +f 1665/1806 1663/1804 1883/2039 1978/2145 +f 1681/1823 1979/2146 1694/1836 1689/1831 +f 1980/2147 1982/2149 1979/2146 1981/2148 +f 1979/2146 1681/1823 1981/2148 +f 1983/2150 1982/2149 1980/2147 1675/1817 +f 1983/2150 1675/1817 1665/1806 1978/2145 +f 1980/2147 1981/2148 1984/2151 1675/1817 +f 1984/2151 1666/1807 1675/1817 +f 1974/2141 1977/2144 1696/1838 1697/1839 +f 1693/1835 1975/2142 1691/1833 1692/1834 +f 1986/2153 1985/2152 1988/2155 1987/2154 +f 1990/2157 1989/2156 1992/2159 1991/2158 +f 1993/2160 1996/2163 1995/2162 1994/2161 +f 1998/2165 1997/2164 2000/2167 1999/2166 +f 2001/2168 2003/2170 1960/2121 2002/2169 +f 1963/2124 1962/2123 1985/2152 1986/2153 +f 1986/2153 1966/2127 1964/2125 +f 2004/2171 1965/2126 1966/2127 1986/2153 +f 1965/2126 2004/2171 1924/2082 1958/2119 +f 1914/2072 1958/2119 1924/2082 1916/2074 +f 2005/2172 2185/2415 2007/2174 2006/2173 +f 2008/2175 2011/2178 2010/2177 2009/2176 +f 2013/2180 2012/2179 2015/2182 2014/2181 +f 2017/2184 2016/2183 2019/2186 2018/2185 +f 2020/2187 1936/2094 1933/2091 2021/2188 +f 2021/2188 1933/2091 1932/2090 2022/2189 +f 1545/1684 2024/2191 2023/2190 1935/2093 +f 2025/2192 2024/2191 1175/2194 2026/2193 +f 2027/2195 2028/2196 2014/2181 2015/2182 +f 2027/2195 2015/2182 2030/2198 2029/2197 +f 2032/2200 2031/2199 2008/2175 2009/2176 +f 2033/2201 2036/2204 2035/2203 2034/2202 +f 404/2207 401/2206 2037/2205 2038/2208 +f 402/2210 2039/2209 2037/2205 401/2206 +f 2040/2211 2043/2214 2042/2213 2041/2212 +f 404/2207 2038/2208 2045/2216 2044/2215 +f 2047/2218 2046/2217 2049/2220 2048/2219 +f 409/2222 2050/2221 2039/2209 402/2210 +f 2052/2224 2051/2223 2054/2226 2053/2225 +f 924/2228 1351/2227 2055/2230 921/2229 +f 2056/2231 2059/2234 2058/2233 2057/2232 +f 2060/2235 2006/2173 2010/2177 2047/2218 +f 2060/2235 2595/2922 2062/2237 2061/2236 +f 2050/2221 2065/2240 2064/2239 2063/2238 +f 2065/2240 2050/2221 409/2222 893/2241 +f 2061/2236 2062/2237 2067/2243 2066/2242 +f 2065/2240 2069/2245 2068/2244 2064/2239 +f 893/2241 892/2246 2069/2245 2065/2240 +f 892/2246 473/2248 2070/2247 2069/2245 +f 476/2251 2072/2250 2071/2249 420/2252 +f 475/2253 2075/2257 2074/2256 427/2254 +f 2074/2256 2073/2255 427/2254 +f 2074/2256 2066/2242 2067/2243 2073/2255 +f 2076/2258 2078/2260 2077/2259 +f 2068/2244 2069/2245 2070/2247 2079/2261 +f 2080/2262 2070/2247 473/2248 424/2263 +f 2080/2262 424/2263 423/2264 2081/2265 +f 2078/2260 2079/2261 2083/2267 2082/2266 +f 2078/2260 2084/2269 478/2268 +f 2077/2259 2078/2260 478/2268 +f 899/2271 429/2270 2082/2266 2081/2265 +f 2081/2265 2082/2266 2083/2267 2080/2262 +f 2086/2274 430/2273 2085/2272 2087/2275 +f 431/2276 430/2273 2086/2274 2088/2277 +f 2089/2278 2088/2277 2086/2274 2090/2279 +f 1915/2073 1807/1951 2089/2278 1913/2071 +f 86/1942 431/2276 2088/2277 1801/1945 +f 2090/2279 2681/3054 2673/3046 1901/2059 +f 2087/2275 2090/2279 2086/2274 +f 2092/2281 2683/3057 2682/3055 2091/2280 +f 2093/2282 2096/2285 2095/2284 2094/2283 +f 2096/2285 2093/2282 1885/2041 2690/3064 +f 2092/2281 2096/2285 2690/3064 +f 434/2286 2098/2288 2097/2287 +f 1888/2044 1885/2041 2098/2288 1899/2056 +f 2092/2281 2690/3064 2686/3060 1892/2048 +f 2087/2275 2683/3057 2681/3054 2090/2279 +f 2099/2289 2085/2292 470/2291 460/2290 +f 2682/3056 2684/3058 2100/2294 2091/2293 +f 2101/2295 2091/2293 2100/2294 2102/2296 +f 2103/2297 2101/2295 2102/2296 2104/2298 +f 2106/2300 2105/2299 2108/2302 2107/2301 +f 2101/2295 2108/2302 2095/2303 2091/2293 +f 2093/2304 2094/2307 2109/2306 2097/2305 +f 2094/2307 2105/2299 2110/2308 2109/2306 +f 454/2309 448/2311 2110/2308 2111/2310 +f 2103/2297 2113/2313 2112/2312 2107/2301 +f 2115/2315 2114/2314 2117/2317 2116/2316 +f 2119/2319 2118/2318 2121/2321 2120/2320 +f 2122/2322 2120/2320 2124/2324 2123/2323 +f 2123/2323 2126/2326 2125/2325 2122/2322 +f 2118/2318 2119/2319 2128/2328 2127/2327 +f 471/2329 946/2331 2129/2330 2127/2327 +f 2131/2333 2130/2332 2133/2335 2132/2334 +f 2134/2336 2137/2339 2136/2338 2135/2337 +f 2139/2343 2140/2344 2125/2325 2126/2326 +f 2723/2348 2128/2328 2722/2347 +f 2724/2348 2725/2347 2650/2346 +f 2141/2345 2726/2348 2727/2346 +f 538/2352 966/2351 2145/2353 2144/2350 +f 2146/2355 2099/2289 549/2354 469/2356 +f 2146/2355 469/2356 468/2357 2147/2358 +f 2103/2297 2104/2298 2148/2359 2113/2313 +f 535/2362 534/2863 2150/2361 2149/2360 +f 464/2363 465/2364 2134/2336 2135/2337 +f 2151/2365 536/2366 535/2362 2149/2360 +f 2151/2365 2147/2358 468/2357 536/2366 +f 2152/2367 2153/2370 900/2369 506/2368 +f 2154/2371 2152/2367 506/2368 505/2372 +f 2155/2373 2152/2367 2154/2371 2156/2374 +f 2157/2375 2160/2378 2159/2377 2158/2376 +f 2162/2380 2161/2379 2016/2183 2017/2184 +f 2161/2379 2163/2381 2020/2187 2016/2183 +f 2163/2381 2161/2379 2165/2383 2164/2382 +f 2166/2384 2167/2385 1943/2101 1944/2102 +f 2169/2387 2168/2386 2171/2389 2170/2388 +f 2172/2390 2168/2386 2174/2392 2173/2391 +f 2171/2389 2168/2386 2172/2390 503/2393 +f 505/2372 1103/2395 2175/2394 2154/2371 +f 504/2396 1359/2397 2160/2378 2157/2375 +f 2172/2390 2176/2399 550/2398 503/2393 +f 502/2402 1205/2404 2178/2403 2171/2389 +f 508/2405 1107/2408 2180/2407 2179/2406 +f 2181/2411 486/2410 509/2409 2182/2412 +f 2182/2412 509/2409 900/2369 2153/2370 +f 2152/2367 2155/2373 2183/2413 2153/2370 +f 2184/2414 2007/2174 2185/2415 +f 2071/2249 2072/2250 2187/2417 2186/2416 +f 2185/2415 2189/2419 2188/2418 2184/2414 +f 2191/2421 2190/2420 2192/2422 2183/2413 +f 2190/2420 2193/2423 2194/2424 2192/2422 +f 2195/2425 2196/2426 2188/2418 2189/2419 +f 2198/2428 2197/2427 481/2430 482/2429 +f 516/2432 480/2431 2200/2434 2199/2433 +f 551/2435 517/2438 2202/2437 2201/2436 +f 520/2439 1110/2441 2203/2440 2193/2423 +f 520/2439 2193/2423 2196/2426 479/2442 +f 479/2442 2196/2426 2195/2425 477/2443 +f 2201/2436 2205/2445 2204/2444 2203/2440 +f 2207/2447 2206/2446 2209/2449 2208/2448 +f 483/2450 2210/2451 2198/2428 482/2429 +f 2212/2454 2211/2453 528/2452 1132/2455 +f 532/2459 1211/2461 2214/2460 +f 2215/2464 484/2463 487/2462 1131/2465 +f 2126/2326 2216/2467 2139/2343 +f 542/2340 2138/2341 2217/2469 968/2468 +f 539/2470 968/2468 2217/2469 2218/2471 +f 2218/2471 2134/2336 540/2466 539/2470 +f 2137/2339 2219/2472 2123/2323 2124/2324 +f 2123/2323 2219/2472 2216/2467 2126/2326 +f 2222/2475 2221/2474 2220/2473 2223/2476 +f 2225/2478 2224/2477 2226/2479 1728/1870 +f 2227/2480 2224/2477 2225/2478 2228/2481 +f 1626/1767 1627/1768 2229/2482 2230/2483 +f 1638/1779 2230/2483 2229/2482 2231/2484 +f 1640/1781 1638/1779 2231/2484 2232/2485 +f 1641/1782 1640/1781 2232/2485 2233/2486 +f 1643/1784 1641/1782 2233/2486 2234/2487 +f 1657/1798 1643/1784 2234/2487 2228/2481 +f 1659/1800 1657/1798 2228/2481 2225/2478 +f 1719/1861 1659/1800 2225/2478 1728/1870 +f 1729/1871 1728/1870 2226/2479 1880/2036 +f 2236/2489 2229/2482 1627/1768 2235/2488 +f 2235/2488 1627/1768 1628/1769 +f 2235/2488 2239/2492 2238/2491 2237/2490 +f 1628/1769 1625/1766 1575/1716 1576/1717 +f 2235/2488 1628/1769 1576/1717 +f 2239/2492 2235/2488 1576/1717 1577/1718 +f 2238/2491 2239/2492 2241/2494 2240/2493 +f 2242/2495 2241/2494 2239/2492 1577/1718 +f 2241/2494 2242/2495 2243/2496 2244/2497 +f 2245/2498 2243/2496 2242/2495 2246/2499 +f 2246/2499 1573/1714 2247/2500 2245/2498 +f 1577/1718 1574/1715 2246/2499 2242/2495 +f 1857/2013 1856/2010 2248/2503 1559/2501 +f 1559/2501 2248/2503 1562/2502 +f 2248/2503 1564/2504 1562/2502 +f 2247/2505 1564/2504 2248/2503 2249/2506 +f 2250/2507 2251/2508 2249/2506 2248/2503 +f 845/2002 2252/2509 2251/2508 2250/2507 +f 845/2002 2256/2513 2253/2510 2252/2509 +f 2252/2509 2253/2510 2254/2511 2255/2512 +f 2255/2512 2254/2511 2243/2514 2245/2515 +f 2259/2518 2258/2517 2257/2516 2260/2519 +f 2257/2516 2258/2517 2261/2520 2262/2521 +f 2265/2524 2264/2523 2263/2522 2266/2525 +f 2266/2525 2263/2522 2267/2526 2268/2527 +f 2268/2527 2267/2526 2269/2528 2270/2529 +f 2273/2532 2272/2531 2271/2530 2274/2533 +f 2273/2532 2274/2533 2275/2534 2276/2535 +f 2276/2535 2275/2534 2277/2536 2278/2537 +f 2279/2538 2276/2535 2278/2537 2280/2539 +f 2279/2538 2280/2539 2281/2540 2282/2541 +f 2282/2541 2281/2540 2283/2542 2284/2543 +f 2284/2543 2283/2542 2264/2523 2265/2524 +f 2270/2529 2288/2547 2287/2546 2268/2527 +f 2266/2525 2268/2527 2287/2546 2286/2545 +f 2265/2524 2266/2525 2286/2545 2284/2543 +f 2284/2543 2286/2545 2285/2544 2282/2541 +f 2290/2549 2289/2548 2271/2530 2272/2531 +f 2290/2549 2272/2531 2292/2551 2291/2550 +f 2292/2551 2272/2531 2273/2532 2293/2552 +f 2293/2552 2273/2532 2276/2535 2279/2538 +f 2293/2552 2279/2538 2282/2541 2285/2544 +f 2294/2553 2285/2544 2286/2545 2295/2554 +f 2295/2554 2286/2545 2287/2546 2296/2555 +f 2296/2555 2287/2546 2288/2547 2297/2556 +f 2297/2556 2288/2547 2298/2557 2299/2558 +f 2285/2544 2294/2553 2292/2551 2293/2552 +f 2302/2561 2301/2560 2300/2559 2303/2562 +f 2304/2563 2260/2519 2296/2555 2303/2562 +f 2296/2555 2297/2556 2303/2562 +f 2304/2563 2303/2562 2300/2559 +f 2257/2516 2305/2564 2295/2554 2296/2555 +f 2257/2516 2296/2555 2260/2519 +f 2295/2554 2305/2564 2306/2565 +f 2295/2554 2306/2565 2308/2567 2294/2553 +f 2308/2567 2307/2566 2294/2553 +f 2292/2551 2294/2553 2307/2566 2291/2550 +f 2289/2548 2290/2549 2310/2569 2309/2568 +f 2305/2564 2257/2516 2262/2521 +f 2313/2572 2324/2584 2312/2571 2311/2570 +f 2312/2571 2325/2585 2314/2573 2311/2570 +f 2311/2570 2314/2573 2302/2561 2299/2558 +f 2299/2558 2302/2561 2303/2562 2297/2556 +f 2269/2528 2316/2575 2315/2574 2270/2529 +f 2315/2574 2316/2575 2321/2581 2319/2579 +f 2321/2581 2320/2580 2319/2579 +f 2322/2582 2315/2574 2319/2579 2317/2577 +f 2319/2579 2318/2578 2317/2577 +f 2313/2576 2322/2582 2317/2577 +f 2323/2583 2313/2572 2317/2577 2318/2578 +f 2323/2583 2333/2594 2324/2584 2313/2572 +f 2324/2584 2332/2593 2325/2585 2312/2571 +f 2314/2573 2325/2585 2301/2560 2302/2561 +f 2299/2558 2298/2557 2326/2586 2311/2570 +f 2326/2586 2322/2582 2313/2576 2311/2570 +f 2315/2574 2322/2582 2326/2586 2298/2557 +f 2270/2529 2315/2574 2298/2557 2288/2547 +f 2329/2589 2328/2588 2327/2587 2330/2590 +f 2328/2588 2331/2591 2327/2587 +f 2325/2585 2332/2593 2331/2592 +f 2324/2584 2333/2594 2332/2593 +f 2323/2583 2318/2578 2319/2579 2333/2594 +f 2334/2595 2321/2581 2316/2575 2335/2596 +f 2327/2587 2338/2599 2334/2595 2335/2596 +f 2335/2596 2346/2608 2330/2590 2327/2587 +f 2329/2589 2330/2590 2336/2597 2337/2598 +f 2333/2600 2319/2579 2334/2595 2338/2599 +f 2320/2580 2321/2581 2334/2595 2319/2579 +f 2280/2539 2278/2537 2339/2601 2340/2602 +f 2281/2540 2280/2539 2340/2602 2341/2603 +f 2283/2542 2281/2540 2341/2603 2342/2604 +f 2264/2523 2283/2542 2342/2604 2343/2605 +f 2263/2522 2264/2523 2343/2605 2344/2606 +f 2267/2526 2263/2522 2344/2606 2345/2607 +f 2345/2607 2344/2606 2336/2597 +f 2346/2608 2345/2607 2336/2597 2330/2590 +f 2346/2608 2335/2596 2316/2575 2269/2528 +f 2345/2607 2346/2608 2269/2528 2267/2526 +f 2348/2610 2341/2603 2340/2602 2347/2609 +f 2347/2609 2340/2602 2339/2601 +f 2342/2604 2341/2603 2348/2610 2349/2611 +f 2349/2611 2343/2605 2342/2604 +f 2349/2611 2336/2597 2344/2606 2343/2605 +f 2336/2597 2258/2613 2259/2612 2337/2598 +f 2336/2597 2349/2611 2261/2614 2258/2613 +f 2349/2611 2351/2616 2350/2615 2261/2614 +f 2349/2611 2352/2617 2351/2616 +f 2353/2618 2352/2617 2349/2611 2348/2610 +f 2348/2610 2354/2619 2353/2618 +f 2355/2620 2354/2619 2348/2610 2347/2609 +f 2356/2621 2355/2620 2347/2609 2357/2622 +f 2357/2622 2347/2609 2339/2601 2358/2623 +f 2358/2623 2339/2601 2278/2537 2277/2536 +f 2361/2626 2360/2625 2359/2624 2362/2627 +f 2359/2624 2360/2625 2363/2628 +f 1999/2629 2363/2628 2360/2625 1992/2630 +f 1992/2630 2360/2625 2361/2626 1991/2631 +f 2221/2632 1991/2631 2361/2626 2364/2633 +f 2364/2633 2366/2635 2365/2634 2221/2632 +f 1549/2133 2374/2643 2365/2652 2366/3020 +f 1549/1689 2366/2635 1548/1688 +f 2361/2626 2362/2627 2367/2636 2364/2633 +f 2366/2635 2364/2633 2367/2636 2368/2637 +f 1548/1688 2366/2635 2368/2637 1972/2139 +f 1972/2139 2368/2637 2369/2638 1554/1694 +f 2370/2639 2369/2638 2368/2637 2367/2636 +f 2367/2636 2362/2627 2371/2640 2370/2639 +f 2362/2627 2359/2624 2371/2640 +f 2374/2643 2373/2642 2372/2641 2375/2644 +f 2375/2644 2372/2641 2376/2645 2377/2646 +f 2378/2647 2359/2624 2363/2628 2379/2648 +f 2379/2648 2363/2628 1999/2629 2000/2649 +f 2379/2648 2000/2649 2380/2650 2377/2646 +f 2377/2646 2380/2650 2221/2651 2375/2644 +f 2375/2644 2221/2651 2365/2652 2374/2643 +f 2374/2643 1549/2133 1970/2134 +f 2373/2642 2374/2643 1970/2134 1553/2136 +f 2378/2654 2376/2653 2371/2640 2359/2624 +f 2376/2653 2372/2655 2370/2639 2371/2640 +f 2369/2638 2370/2639 2372/2655 2373/2656 +f 1554/1694 2369/2638 2373/2656 1553/1693 +f 1941/2099 2222/2475 2223/2476 1939/2097 +f 2223/2476 2220/2473 2382/2658 2381/2657 +f 1924/2082 2004/2171 2383/2659 1923/2081 +f 1941/2099 1937/2095 1938/2096 2384/2660 +f 1940/2098 2381/2657 2385/2661 1544/1683 +f 889/1682 1544/1683 2385/2661 352/2662 +f 703/2663 352/2662 2385/2661 2386/2664 +f 2387/2665 2388/2666 2382/2658 2220/2473 +f 2387/2665 2220/2473 2221/2474 2380/2667 +f 2387/2665 2380/2667 2000/2167 1997/2164 +f 703/2663 2386/2664 2389/2668 901/2669 +f 1997/2164 1996/2163 2388/2666 2387/2665 +f 901/2669 2389/2668 1993/2160 942/2670 +f 942/2671 1993/2160 1994/2161 1372/2672 +f 4/1524 5/2674 2390/2673 1397/1527 +f 2391/2675 2392/2676 1406/1536 1404/1534 +f 2393/2677 2394/2678 1875/2031 1401/1531 +f 2717/3092 7/2681 2691/3065 +f 1399/1529 2692/3066 2691/3065 7/2681 +f 2398/2684 2400/2686 2399/2685 2397/2683 +f 2399/2685 2400/2686 2401/2687 2392/2676 +f 2393/2677 2401/2687 2402/2688 2394/2678 +f 2405/2691 2404/2690 2403/2689 2406/2692 +f 2406/2692 2403/2689 2407/2693 2408/2694 +f 2409/2695 2407/2693 2403/2689 2410/2696 +f 2407/2693 2409/2695 2411/2697 2412/2698 +f 2411/2697 2409/2695 2413/2699 2414/2700 +f 2415/2701 2426/2712 2414/2700 2413/2699 +f 2408/2694 2407/2693 2412/2698 2416/2702 +f 2417/2703 2413/2699 2409/2695 2410/2696 +f 2410/2696 2403/2689 2404/2690 2418/2704 +f 2402/2688 2401/2687 2400/2686 2419/2705 +f 2419/2705 2400/2686 2398/2684 2420/2706 +f 1398/1528 1389/1515 2694/3068 2693/3067 +f 1386/1512 2696/3070 2695/3069 1385/1511 +f 1967/2129 2697/3071 2696/3070 1386/1512 +f 1967/2129 1968/2130 2698/3072 2697/3071 +f 2699/3073 2698/3072 1968/2130 1969/2131 +f 2425/2711 2421/2707 2422/2708 2417/2703 +f 2417/2703 2410/2696 2418/2704 2425/2711 +f 2413/2699 2417/2703 2422/2708 2415/2701 +f 2426/2712 2415/2701 2423/2709 +f 2426/2712 2423/2709 2424/2710 2427/2713 +f 2700/3074 2699/3073 1969/2131 1909/2067 +f 1909/2067 1906/2064 2689/3063 2700/3074 +f 1895/2051 2430/2716 2429/2715 2431/2717 +f 1897/2053 2430/2716 1895/2051 1890/2046 +f 1905/2063 1894/2050 1895/2051 2431/2717 +f 1907/2065 1905/2063 2431/2717 2432/2718 +f 2428/2714 1907/2065 2432/2718 2433/2719 +f 2424/2710 2428/2714 2433/2719 2427/2713 +f 2427/2713 2449/2735 2434/2720 2426/2712 +f 2435/2721 2426/2712 2434/2720 2436/2722 +f 2437/2723 2414/2700 2426/2712 2435/2721 +f 2414/2700 2437/2723 2438/2724 2411/2697 +f 2431/2717 2429/2715 2439/2725 2432/2718 +f 2432/2718 2439/2725 2440/2726 2433/2719 +f 2433/2719 2440/2726 2441/2727 2427/2713 +f 2430/2716 1897/2053 1814/1959 1813/1958 +f 2441/2727 2440/2726 2442/2728 2443/2729 +f 2444/2730 2442/2728 2440/2726 2439/2725 +f 2445/2731 2444/2730 2439/2725 2429/2715 +f 2442/2728 2444/2730 2446/2732 2447/2733 +f 2448/2734 2446/2732 2444/2730 2445/2731 +f 2436/2722 2434/2720 2449/2735 2450/2736 +f 2451/2737 2449/2735 2427/2713 2441/2727 +f 2451/2737 2441/2727 2443/2729 2452/2738 +f 2443/2729 2442/2728 2447/2733 2453/2739 +f 2447/2733 2446/2732 1858/2014 2454/2740 +f 1767/1909 1858/2014 2446/2732 2448/2734 +f 1765/1907 1767/1909 2448/2734 1811/1956 +f 1811/1956 2448/2734 2445/2731 1813/1958 +f 1813/1958 2445/2731 2429/2715 2430/2716 +f 2289/2741 2436/2722 2450/2736 2271/2742 +f 2436/2722 2289/2741 2309/2743 2435/2721 +f 2455/2744 1865/2021 1881/2037 2456/2745 +f 1865/2021 2455/2744 2454/2740 1862/2018 +f 1859/2015 1862/2018 2454/2740 1858/2014 +f 2447/2733 2454/2740 2455/2744 2453/2739 +f 2453/2739 2455/2744 2456/2745 2457/2746 +f 2453/2739 2457/2746 2452/2738 2443/2729 +f 2411/2697 2438/2724 2458/2747 2412/2698 +f 2412/2698 2458/2747 2459/2748 2416/2702 +f 2460/2749 2416/2702 2459/2748 2461/2750 +f 2460/2749 2408/2694 2416/2702 +f 2408/2694 2460/2749 1881/2037 1882/2038 +f 1881/2037 2460/2749 2461/2750 2456/2745 +f 2456/2745 2461/2750 2462/2751 2457/2746 +f 2457/2746 2462/2751 2463/2752 2452/2738 +f 2452/2738 2463/2752 2464/2753 2451/2737 +f 2451/2737 2464/2753 2450/2736 2449/2735 +f 2271/2742 2450/2736 2464/2753 2274/2754 +f 2274/2754 2464/2753 2463/2752 2275/2755 +f 2275/2755 2463/2752 2462/2751 2277/2756 +f 2277/2756 2462/2751 2461/2750 2459/2748 +f 2435/2721 2309/2743 2356/2757 2437/2723 +f 2437/2723 2356/2757 2357/2758 2438/2724 +f 2438/2724 2357/2758 2358/2759 2458/2747 +f 2458/2747 2358/2759 2277/2756 2459/2748 +f 1736/1878 1729/1871 1880/2036 1878/2034 +f 1764/1906 1736/1878 1878/2034 1860/2016 +f 1764/1906 1731/1873 1732/1874 1736/1878 +f 1990/2157 1991/2158 2221/2474 2222/2475 +f 2384/2660 1990/2157 2222/2475 1941/2099 +f 2384/2660 1938/2096 2466/2761 2465/2760 +f 2355/2763 2356/2762 2309/2568 2310/2569 +f 2354/2764 2355/2763 2310/2569 2291/2550 +f 2353/2765 2354/2764 2291/2550 2307/2566 +f 2352/2766 2353/2765 2307/2566 2308/2567 +f 2351/2767 2352/2766 2308/2567 2306/2565 +f 2350/2768 2351/2767 2306/2565 2305/2564 +f 2350/2768 2305/2564 2262/2521 2261/2520 +f 2467/2570 2469/2576 2468/2577 +f 2470/2599 2472/2769 2471/2600 +f 2301/2560 2325/2585 2331/2592 2328/2770 +f 2300/2559 2301/2560 2328/2770 2329/2771 +f 2300/2559 2329/2771 2337/2772 2304/2563 +f 2260/2519 2304/2563 2337/2772 2259/2518 +f 2473/2591 2475/2599 2474/2587 +f 1874/2030 1873/2029 2405/2691 2406/2692 +f 1882/2038 1874/2030 2406/2692 2408/2694 +f 1487/1619 2477/2774 2476/2773 1468/1600 +f 2480/2777 2479/2776 2478/2775 2481/2778 +f 2478/2775 2482/2779 2483/2780 2481/2778 +f 2484/2781 2477/2774 2486/2783 2485/2782 +f 2477/2774 2484/2781 2487/2784 2476/2773 +f 2476/2773 2487/2784 2488/2785 2489/2786 +f 1468/1600 2476/2773 2489/2786 1467/1599 +f 2489/2787 2492/2791 2491/2790 2490/2789 +f 2489/2787 2490/2789 1467/2788 +f 2494/1599 2493/2789 1433/1565 1465/1597 +f 2490/2789 2491/2790 2495/2792 +f 2497/2794 2496/2793 2499/2796 2498/2795 +f 2500/2823 2511/2809 2497/2821 2498/3021 +f 2484/2781 2485/2798 2501/2797 2487/2784 +f 2502/2799 1441/1573 1432/1564 1439/1571 +f 2488/2800 2503/2801 2492/2791 2489/2787 +f 2504/2802 2505/2803 2503/2801 2488/2800 +f 2505/2803 2504/2802 2506/2804 2507/2805 +f 2506/2804 2238/2491 2240/2493 2507/2805 +f 2508/2802 2509/2806 2506/2804 +f 2256/2513 1851/2003 2511/2809 2512/2810 +f 2511/2809 1851/2003 1852/2004 2513/2811 +f 264/2007 841/2812 1442/2813 1855/2009 +f 1441/2814 2502/2816 2514/2815 +f 2514/2815 2518/2820 2517/2819 2516/2818 +f 2514/2815 2516/2818 2515/2817 +f 2513/2811 2496/2822 2497/2821 2511/2809 +f 2512/2810 2511/2809 2500/2823 2510/2824 +f 2253/2510 2256/2513 2512/2810 2254/2511 +f 2510/2824 2244/2825 2254/2511 2512/2810 +f 2244/2825 2243/2514 2254/2511 +f 846/2826 2250/2507 2248/2503 1856/2010 +f 2521/2829 2237/2490 2520/2828 2519/2827 +f 2485/2798 2519/2827 2520/2828 2501/2797 +f 2504/2830 2488/2785 2487/2784 2501/2797 +f 2501/2797 2509/2806 2504/2830 +f 2509/2806 2501/2797 2520/2828 2237/2490 +f 2235/2488 2237/2490 2521/2829 2236/2489 +f 2236/2489 2521/2829 2519/2831 2522/2832 +f 2522/2832 2519/2831 2523/2833 2524/2834 +f 2527/2837 2526/2836 2525/2835 2528/2838 +f 2527/2837 2528/2838 2234/2487 2233/2486 +f 2228/2481 2234/2487 2528/2838 2227/2480 +f 2231/2484 2229/2482 2236/2489 2522/2832 +f 2232/2485 2231/2484 2522/2832 2524/2834 +f 2233/2486 2232/2485 2524/2834 2527/2837 +f 2528/2838 2525/2835 2529/2839 2227/2480 +f 2530/2840 2529/2839 2525/2835 2531/2841 +f 2526/2836 2532/2842 2531/2841 2525/2835 +f 2519/2831 2485/2827 2533/2843 2523/2833 +f 2531/2841 2532/2842 2535/2845 2534/2844 +f 2530/2840 2531/2841 2534/2844 2536/2846 +f 2227/2480 2529/2839 2537/2847 2224/2477 +f 2538/2848 2537/2847 2529/2839 2530/2840 +f 2539/2849 2538/2848 2530/2840 2536/2846 +f 2540/2850 2539/2849 2536/2846 2479/2776 +f 2478/2775 2479/2776 2536/2846 2534/2844 +f 2482/2779 2478/2775 2534/2844 2535/2851 +f 2541/2852 1876/2032 1879/2035 2542/2853 +f 2542/2853 1879/2035 1880/2036 2226/2479 +f 2542/2853 2226/2479 2224/2477 2537/2847 +f 2541/2852 2542/2853 2537/2847 2538/2848 +f 2543/2854 2541/2852 2538/2848 2539/2849 +f 2544/2855 2543/2854 2539/2849 2540/2850 +f 2545/2856 2544/2855 2540/2850 2546/2857 +f 2546/2857 2540/2850 2479/2776 2480/2777 +f 2477/2774 1487/1619 1488/1620 2486/2783 +f 1490/1622 2481/2778 2483/2780 1489/1621 +f 2481/2778 1490/1622 1491/1623 2480/2777 +f 2480/2777 1491/1623 1497/1629 2546/2857 +f 2546/2857 1497/1629 1499/1631 2545/2856 +f 2545/2856 1499/1631 1501/1633 1507/1639 +f 2544/2855 2545/2856 1507/1639 1870/2026 +f 2544/2855 1870/2026 1871/2027 2543/2854 +f 2543/2854 1871/2027 1876/2032 2541/2852 +f 2396/2682 2547/2858 2390/2673 2395/2680 +f 2106/2300 2548/2859 2549/2860 2111/2310 +f 2149/2360 2133/2335 2148/2359 2151/2365 +f 2113/2313 2130/2332 2117/2317 2112/2312 +f 2548/2859 2114/2314 2550/2861 2549/2860 +f 2118/2318 2115/2315 2116/2316 2121/2321 +f 2114/2314 2115/2315 2129/2330 2550/2861 +f 2551/2862 2131/2333 2132/2334 2136/2338 +f 464/2363 2135/2337 2150/2361 534/2863 +f 2091/2280 2095/2284 2096/2285 2092/2281 +f 2107/2301 2108/2302 2101/2295 2103/2297 +f 2095/2303 2108/2302 2105/2299 2094/2307 +f 2107/2301 2112/2312 2548/2859 2106/2300 +f 2116/2316 2117/2317 2130/2332 2131/2333 +f 2120/2320 2121/2321 2551/2862 2124/2324 +f 2112/2312 2117/2317 2114/2314 2548/2859 +f 2121/2321 2116/2316 2131/2333 2551/2862 +f 2102/2296 2100/2294 2684/3058 2099/2289 +f 2102/2296 2099/2289 2146/2355 +f 2147/2358 2104/2298 2102/2296 2146/2355 +f 2150/2361 2132/2334 2133/2335 2149/2360 +f 2136/2338 2137/2339 2124/2324 2551/2862 +f 2151/2365 2148/2359 2104/2298 2147/2358 +f 2113/2313 2148/2359 2133/2335 2130/2332 +f 2135/2337 2136/2338 2132/2334 2150/2361 +f 2553/2865 2552/2864 2119/2319 2122/2322 +f 2120/2320 2122/2322 2119/2319 +f 2218/2471 2217/2469 2216/2467 2219/2472 +f 2219/2472 2137/2339 2134/2336 2218/2471 +f 2555/2867 2554/2866 2553/2865 2122/2322 +f 2125/2325 2555/2867 2122/2322 +f 2554/2866 2555/2867 2145/2353 2556/2868 +f 2139/2343 2216/2467 2217/2469 2138/2341 +f 1961/2122 1959/2120 2557/2869 2558/2870 +f 2558/2870 1985/2152 1962/2123 1961/2122 +f 2012/2179 2559/2871 2030/2198 2015/2182 +f 2029/2197 2030/2198 2018/2185 2560/2872 +f 2057/2232 2058/2233 2562/2874 2561/2873 +f 2564/2876 2563/2875 2559/2871 2012/2179 +f 2162/2380 2563/2875 2174/2392 2565/2877 +f 2376/2645 2378/2647 2379/2648 2377/2646 +f 205/2878 1752/1894 1753/1895 193/2879 +f 193/2879 1753/1895 1755/1897 184/2880 +f 184/2880 1755/1897 1756/1898 185/2881 +f 1756/1898 1757/1899 187/2882 185/2881 +f 187/2882 1757/1899 1758/1900 194/2883 +f 194/2883 1758/1900 1759/1901 195/2884 +f 195/2884 1759/1901 1770/1912 237/1971 +f 1778/1920 1779/1921 2566/2885 1775/1917 +f 1778/1920 1782/1924 2567/2886 1777/1919 +f 1782/1924 1784/1926 2568/2887 2567/2886 +f 1784/1926 1786/1928 2569/2888 2568/2887 +f 2569/2888 1786/1928 1788/1930 2570/2889 +f 2570/2889 1788/1930 1791/1933 2571/2890 +f 2572/2891 1792/1934 1794/1936 1216/2892 +f 1818/1963 1819/1965 1820/1966 1817/1962 +f 1817/1962 1820/1966 1822/1970 1821/1968 +f 1821/1968 1822/1970 1770/1912 1769/1911 +f 1673/1814 1823/1973 1674/1816 1629/1770 +f 1824/1974 1827/1977 1823/1973 1673/1814 +f 1828/1978 1831/1981 1827/1977 1824/1974 +f 1831/1981 1833/1983 1830/1980 +f 1841/1991 1836/1986 1837/1987 1838/1988 +f 2573/2893 1839/1989 1837/1987 1834/1984 +f 1835/1985 1836/1986 1842/1992 2574/2894 +f 2574/2894 1842/1992 1846/1996 2575/2895 +f 1779/1921 1849/1999 1850/2000 2566/2885 +f 1847/2001 1849/1999 1848/1998 2576/2896 +f 1888/2044 1899/2056 1900/2057 1898/2054 +f 1898/2054 1900/2057 1819/1965 1818/1963 +f 1899/2056 2098/2288 434/2286 896/2055 +f 1772/1914 1773/1915 2566/2885 1850/2000 +f 1773/1915 1775/1917 2566/2885 +f 1404/1534 1396/1526 1397/1527 2391/2675 +f 3/1525 1396/1526 1407/1537 1410/1540 +f 1416/1546 1409/1539 1407/1537 1405/1535 +f 1408/1538 1409/1539 1417/1547 1418/1548 +f 1510/1642 1420/1550 1417/1547 1415/1545 +f 1519/1651 1422/1552 1423/1553 2577/2897 +f 1421/1551 1422/1552 1520/1652 1518/1650 +f 1524/1656 1523/1655 1420/1550 1510/1642 +f 1518/1650 1520/1652 1529/1661 1528/1660 +f 1528/1660 1529/1661 1523/1655 1524/1656 +f 1397/1527 2390/2673 2547/2858 2391/2675 +f 2395/2680 2390/2673 5/2674 6/2679 +f 2577/2897 1423/1553 1425/1555 1451/1583 +f 8/1522 1393/1519 1394/1520 10/2898 +f 1390/1516 1393/1519 1395/1523 2002/2169 +f 1394/1520 2672/3045 2652/3024 10/2898 +f 1405/1535 1402/1532 1403/1533 1416/1546 +f 1401/1531 1402/1532 1406/1536 2393/2677 +f 1416/1546 1403/1533 1414/1544 1415/1545 +f 1478/1610 1479/1611 1493/1625 1494/1626 +f 1512/1644 1511/1643 1414/1544 1411/1541 +f 1494/1626 1493/1625 1517/1649 1516/1648 +f 1513/1645 1525/1657 1511/1643 1512/1644 +f 1516/1648 1517/1649 1527/1659 1526/1658 +f 1526/1658 1527/1659 1525/1657 1513/1645 +f 2002/2169 1395/1523 707/2128 2001/2168 +f 2393/2677 1406/1536 2392/2676 2401/2687 +f 2397/2683 2692/3066 2693/3067 2398/2684 +f 2397/2683 2399/2685 2547/2858 2396/2682 +f 2547/2858 2399/2685 2392/2676 2391/2675 +f 1479/1611 1477/1609 1455/1587 1426/1556 +f 1479/1611 1426/1556 1424/1554 +f 1477/1609 1454/1586 1455/1587 +f 2670/3043 2671/3044 1391/1517 1388/1514 +f 1384/1510 1388/1514 1392/1518 1949/2110 +f 1506/1638 1412/1542 1413/1543 1873/2029 +f 1873/2029 1413/1543 1875/2031 2405/2691 +f 2002/2169 1960/2121 1392/1518 1390/1516 +f 2557/2869 2003/2170 1995/2162 1998/2165 +f 1959/2120 1960/2121 2003/2170 2557/2869 +f 2381/2657 2382/2658 2386/2664 2385/2661 +f 2386/2664 2382/2658 2388/2666 2389/2668 +f 2389/2668 2388/2666 1996/2163 1993/2160 +f 2405/2691 1875/2031 2394/2678 2404/2690 +f 2404/2690 2394/2678 2402/2688 2418/2704 +f 2418/2704 2402/2688 2419/2705 2425/2711 +f 2425/2711 2419/2705 2420/2706 2421/2707 +f 2694/3068 2695/3069 2421/2707 2420/2706 +f 1411/1541 1412/1542 1504/1636 1512/1644 +f 1803/1947 1804/1948 2579/2900 2578/2899 +f 1808/1952 1058/1953 1368/2902 2580/2901 +f 1919/2077 1803/1947 2578/2899 1922/2080 +f 1919/2077 2581/2903 1926/2084 1918/2076 +f 2465/2760 1989/2156 1990/2157 2384/2660 +f 2581/2903 2466/2761 1938/2096 1926/2084 +f 1987/2154 2465/2760 2466/2761 2383/2659 +f 1999/2166 1992/2159 1989/2156 1988/2155 +f 1955/2116 1964/2125 1966/2127 1956/2117 +f 2310/2569 2290/2549 2291/2550 +f 1709/1851 1710/1852 2583/2905 2582/2904 +f 1712/1854 1709/1851 2582/2904 2584/2906 +f 1710/1852 1679/1821 2585/2907 2583/2905 +f 1679/1821 1680/1822 1684/1826 2585/2907 +f 1844/1994 1714/1856 1712/1854 2584/2906 +f 1830/1980 1833/1983 1839/1989 2573/2893 +f 1833/1983 1832/1982 1839/1989 +f 1832/1982 1713/1855 1838/1988 +f 1838/1988 1713/1855 1714/1856 1841/1991 +f 1841/1991 1714/1856 1844/1994 1840/1990 +f 2125/2325 2140/2344 2143/2349 2555/2867 +f 898/2342 2144/2350 2143/2349 2140/2344 +f 898/2342 2140/2344 2139/2343 2138/2341 +f 2093/2282 2097/2287 2098/2288 1885/2041 +f 2097/2305 2109/2306 472/2909 434/2908 +f 2109/2306 2110/2308 448/2311 472/2909 +f 2111/2310 2110/2308 2105/2299 2106/2300 +f 2127/2327 2128/2328 533/2348 471/2329 +f 2127/2327 2129/2330 2115/2315 2118/2318 +f 2144/2350 2145/2353 2555/2867 2143/2349 +f 2111/2310 2549/2860 937/2910 454/2309 +f 2549/2860 2550/2861 940/2911 937/2910 +f 2550/2861 2129/2330 946/2331 940/2911 +f 2145/2353 966/2351 2141/2345 2556/2868 +f 2650/2346 2556/2868 2141/2345 +f 2082/2266 429/2270 474/2912 2078/2260 +f 2035/2203 2013/2180 2014/2181 2586/2913 +f 2014/2181 2028/2196 2054/2226 2586/2913 +f 2012/2179 2013/2180 2587/2914 2564/2876 +f 2041/2212 2588/2915 2056/2231 2040/2211 +f 2588/2915 2589/2916 2059/2234 2056/2231 +f 2564/2876 2587/2914 2590/2917 2173/2391 +f 2009/2176 2010/2177 2006/2173 2007/2174 +f 2591/2918 2032/2200 2009/2176 2007/2174 +f 2046/2217 2047/2218 2010/2177 2011/2178 +f 2032/2200 2156/2374 2592/2919 2031/2199 +f 2060/2235 2047/2218 2048/2219 2063/2238 +f 2037/2205 2049/2220 2052/2224 2038/2208 +f 2051/2223 2046/2217 2011/2178 2593/2920 +f 2011/2178 2008/2175 2034/2202 2593/2920 +f 2008/2175 2031/2199 2033/2201 2034/2202 +f 2031/2199 2592/2919 2158/2376 2033/2201 +f 2157/2375 2175/2394 1103/2395 504/2396 +f 2006/2173 2594/2921 2005/2172 +f 2594/2921 2186/2416 2187/2417 2005/2172 +f 2591/2918 2007/2174 2184/2414 2191/2421 +f 2191/2421 2184/2414 2188/2418 2190/2420 +f 2190/2420 2188/2418 2196/2426 2193/2423 +f 2181/2411 2180/2407 1107/2408 486/2410 +f 2203/2440 2204/2444 2194/2424 2193/2423 +f 2203/2440 1110/2441 551/2435 2201/2436 +f 477/2443 2195/2425 2072/2250 476/2251 +f 2195/2425 2189/2419 2187/2417 2072/2250 +f 2189/2419 2185/2415 2005/2172 2187/2417 +f 427/2254 2073/2255 2077/2259 478/2268 +f 2077/2259 2073/2255 2067/2243 2076/2258 +f 2067/2243 2062/2237 2595/2922 2076/2258 +f 2202/2437 2596/2923 2205/2445 2201/2436 +f 2179/2406 2597/2924 1121/2925 508/2405 +f 2206/2446 2207/2447 1122/2927 1125/2926 +f 516/2432 2199/2433 2202/2437 517/2438 +f 2202/2437 2199/2433 2209/2449 2596/2923 +f 2729/2926 485/2928 2728/2925 +f 2730/2926 2731/2925 2597/2924 +f 2206/2446 1125/2926 2597/2924 +f 2200/2434 480/2431 481/2430 2197/2427 +f 2200/2434 2197/2427 2598/2929 2208/2448 +f 2207/2447 2599/2930 1128/2931 1122/2927 +f 2197/2427 2198/2428 2600/2932 2598/2929 +f 2599/2930 2601/2933 507/2934 1128/2931 +f 2210/2451 2602/2935 2198/2428 +f 2211/2453 2604/2937 2603/2936 2602/2935 +f 2605/2938 2215/2464 1131/2465 1133/2939 +f 2211/2453 2212/2454 2606/2940 2604/2937 +f 2602/2935 2603/2936 2600/2932 2198/2428 +f 2601/2933 2605/2938 1133/2939 507/2934 +f 528/2452 2211/2453 2602/2935 2210/2451 +f 1132/2455 1137/2941 2607/2942 2212/2454 +f 2212/2454 2607/2942 2608/2943 2606/2940 +f 2591/2918 2155/2373 2156/2374 2032/2200 +f 2158/2376 2159/2377 2036/2204 2033/2201 +f 1540/1676 2164/2382 1944/2102 1542/1678 +f 2173/2391 2174/2392 2563/2875 2564/2876 +f 2191/2421 2183/2413 2155/2373 2591/2918 +f 2153/2370 2183/2413 2192/2422 2182/2412 +f 2182/2412 2192/2422 2194/2424 2181/2411 +f 2180/2407 2204/2444 2205/2445 2179/2406 +f 2208/2448 2209/2449 2199/2433 2200/2434 +f 2214/2460 2213/2456 532/2457 +f 2165/2383 2565/2877 2169/2387 2166/2384 +f 2173/2391 2590/2917 2176/2399 2172/2390 +f 2175/2394 2592/2919 2156/2374 2154/2371 +f 2157/2375 2158/2376 2592/2919 2175/2394 +f 2181/2411 2194/2424 2204/2444 2180/2407 +f 2179/2406 2205/2445 2596/2923 2597/2924 +f 2596/2923 2209/2449 2206/2446 2597/2924 +f 2208/2448 2598/2929 2599/2930 2207/2447 +f 2598/2929 2600/2932 2601/2933 2599/2930 +f 2603/2936 2604/2937 2215/2464 2605/2938 +f 2604/2937 2606/2940 484/2463 2215/2464 +f 2600/2932 2603/2936 2605/2938 2601/2933 +f 2606/2940 2608/2943 1139/2944 484/2463 +f 1537/1673 1535/1671 1536/1672 1809/1954 +f 1532/1665 1535/1671 1538/1674 1531/1664 +f 1538/1674 1540/1676 1542/1678 1531/1664 +f 1808/1952 1804/1948 1805/1949 1534/1670 +f 1917/2075 1806/1950 1807/1951 1915/2073 +f 1534/1670 1805/1949 1536/1672 1533/1668 +f 2088/2277 2089/2278 1807/1951 1801/1945 +f 1800/1944 1806/1950 2579/2900 2580/2901 +f 2089/2278 2090/2279 1901/2059 1913/2071 +f 2016/2183 2020/2187 2021/2188 2019/2186 +f 2019/2186 2021/2188 2022/2189 2609/2945 +f 2609/2945 2022/2189 2023/2190 2610/2946 +f 897/1685 1175/2194 2024/2191 1545/1684 +f 1936/2094 2020/2187 2163/2381 1541/1677 +f 1541/1677 2163/2381 2164/2382 1540/1676 +f 2166/2384 1944/2102 2164/2382 2165/2383 +f 1542/1678 1942/2100 85/1679 +f 2559/2871 2017/2184 2018/2185 2030/2198 +f 2563/2875 2162/2380 2017/2184 2559/2871 +f 2166/2384 2169/2387 2170/2388 2167/2385 +f 2560/2872 2018/2185 2019/2186 2609/2945 +f 2561/2873 2562/2874 2610/2946 2025/2192 +f 2161/2379 2162/2380 2565/2877 2165/2383 +f 2168/2386 2169/2387 2565/2877 2174/2392 +f 2167/2385 2170/2388 2612/2948 2611/2947 +f 2041/2212 2042/2213 2613/2949 2044/2215 +f 1947/2108 917/2105 1191/2950 2614/2951 +f 2611/2947 1945/2104 1943/2101 2167/2385 +f 2178/2403 2612/2948 2170/2388 2171/2389 +f 920/2953 2617/2956 2616/2955 2615/2952 +f 2616/2955 2617/2956 1946/2107 2618/2957 +f 2618/2957 1946/2107 1947/2108 2614/2951 +f 2617/2956 920/2953 1199/2400 2177/2401 +f 351/2106 1946/2107 2617/2956 2177/2401 +f 329/2103 1945/2104 2614/2951 1191/2950 +f 1945/2104 2611/2947 2618/2957 2614/2951 +f 2618/2957 2611/2947 2612/2948 2616/2955 +f 2612/2948 2178/2403 2615/2952 2616/2955 +f 2178/2403 1205/2404 1194/2954 2615/2952 +f 2006/2173 2060/2235 2061/2236 2594/2921 +f 2061/2236 2066/2242 2186/2416 2594/2921 +f 2066/2242 2074/2256 2071/2249 2186/2416 +f 2075/2257 475/2253 420/2252 2071/2249 +f 2074/2256 2075/2257 2071/2249 +f 2607/2942 1137/2941 529/2458 2213/2456 +f 2607/2942 2213/2456 2214/2460 2608/2943 +f 2608/2943 2214/2460 1211/2461 1139/2944 +f 1695/1837 1696/1838 1662/1803 1660/1801 +f 1697/1839 1698/1840 1690/1832 1691/1833 +f 1721/1863 1701/1843 1723/1865 1720/1862 +f 1742/1884 1723/1865 1724/1866 1740/1882 +f 1793/1935 1794/1936 1792/1934 1789/1931 +f 1742/1884 1793/1935 1789/1931 1741/1883 +f 1216/2892 1794/1936 1752/1894 205/2878 +f 1690/1832 1698/1840 1701/1843 1721/1863 +f 1686/1828 1687/1829 2585/2907 1684/1826 +f 1687/1829 1705/1847 2583/2905 2585/2907 +f 1705/1847 1706/1848 2582/2904 2583/2905 +f 1716/1858 1717/1859 1844/1994 2584/2906 +f 1706/1848 1716/1858 2584/2906 2582/2904 +f 1843/1993 1717/1859 1718/1860 1845/1995 +f 1843/1993 1846/1996 1842/1992 1840/1990 +f 2575/2895 1846/1996 1847/1997 2576/2958 +f 1685/1827 1686/1828 1689/1831 1692/1834 +f 1617/1758 2619/2959 2620/2960 1621/1762 +f 1621/1762 2620/2960 2621/2961 1623/1764 +f 1618/1759 1635/1776 2619/2959 1617/1758 +f 1616/1757 1635/1776 1636/1777 2622/2962 +f 2622/2962 1636/1777 1646/1787 2623/2963 +f 2623/2963 1646/1787 1654/1795 2624/2964 +f 2624/2964 1654/1795 1666/1807 1984/2151 +f 2619/2959 1607/1748 1608/1749 2620/2960 +f 2620/2960 1608/1749 1609/1750 2621/2961 +f 1609/1750 1601/1742 1582/1723 1583/1724 +f 1635/1776 1616/1757 1607/1748 2619/2959 +f 1614/1755 1616/1757 2622/2962 1633/1774 +f 1633/1774 2622/2962 2623/2963 1651/1792 +f 1651/1792 2623/2963 2624/2964 1667/1808 +f 1667/1808 2624/2964 1984/2151 1682/1824 +f 1682/1824 1984/2151 1981/2148 1681/1823 +f 1598/1739 1599/1740 1602/1743 1603/1744 +f 1603/1744 1602/1743 1606/1747 1612/1753 +f 1612/1753 1606/1747 1615/1756 1631/1772 +f 1631/1772 1615/1756 1634/1775 1649/1790 +f 1649/1790 1634/1775 1652/1793 1669/1810 +f 1669/1810 1652/1793 1668/1809 1677/1819 +f 1702/1844 1703/1845 1722/1864 1744/1886 +f 1722/1864 1743/1885 1797/1939 1744/1886 +f 1787/1929 1790/1932 1791/1933 1788/1930 +f 1743/1885 1790/1932 1787/1929 1797/1939 +f 2571/2890 1791/1933 1792/1934 2572/2891 +f 1721/1863 1703/1845 1685/1827 1690/1832 +f 1668/1809 1667/1808 1682/1824 1683/1825 +f 1680/1822 1668/1809 1683/1825 +f 1638/1779 1619/1760 1620/1761 2230/2483 +f 2230/2483 1620/1761 1622/1763 1626/1767 +f 1626/1767 1622/1763 1624/1765 1625/1766 +f 1618/1759 1619/1760 1639/1780 1637/1778 +f 1637/1778 1639/1780 1642/1783 1645/1786 +f 1645/1786 1642/1783 1644/1785 1653/1794 +f 1644/1785 1658/1799 1664/1805 1653/1794 +f 1488/1620 1485/1617 1484/1616 1489/1621 +f 1489/1621 2483/2780 2486/2783 1488/1620 +f 2483/2780 2482/2779 2485/2782 2486/2783 +f 2482/2779 2535/2851 2485/2782 +f 2535/2845 2532/2842 2533/2843 2485/2965 +f 2532/2842 2526/2836 2523/2833 2533/2843 +f 2526/2836 2527/2837 2524/2834 2523/2833 +f 2625/2966 1472/1604 1471/1603 1430/2967 +f 1471/1603 1470/1602 1429/1561 1430/2967 +f 1446/1578 1447/1579 1472/2969 2626/2968 +f 1472/1604 2625/2966 1273/2972 +f 2733/1604 1273/2972 2732/2971 +f 2734/1604 2735/2971 2626/2970 +f 1428/1560 1442/1574 841/2973 18/1559 +f 1854/2006 1855/2009 2514/2815 1853/2005 +f 1855/2009 1442/2813 1441/2814 2514/2815 +f 1431/1563 1428/1560 1427/1557 1430/1562 +f 1444/1576 2628/2975 2627/2974 1462/1594 +f 2627/2974 1460/1592 1462/1594 +f 1461/1593 1460/1592 2627/2974 1470/1602 +f 2628/2976 1470/1602 2627/2974 +f 1437/1569 1440/1572 2628/2977 1444/1576 +f 2628/2977 1440/1572 1429/1561 1470/2978 +f 1437/1569 1438/1570 1439/1571 1440/1572 +f 1438/1570 2629/2979 2502/2799 1439/1571 +f 2518/2820 2514/2815 2502/2816 2629/2980 +f 2629/2979 1438/1570 1435/1567 2517/2981 +f 2517/2819 2518/2820 2629/2980 +f 1435/1567 1436/1568 2516/2982 2517/2981 +f 2491/2790 2499/2796 1436/1568 1433/1565 +f 2495/2792 2491/2790 1433/1565 +f 2491/2790 2492/2791 2499/2796 +f 2499/2796 2492/2791 2503/2801 2498/2795 +f 2498/2795 2503/2801 2505/2803 2500/2808 +f 2505/2803 2507/2805 2500/2808 +f 2240/2493 2510/2807 2500/2808 2507/2805 +f 2240/2493 2241/2494 2244/2497 2510/2807 +f 2509/2806 2237/2490 2238/2491 2506/2804 +f 2499/2796 2496/2793 2516/2982 1436/1568 +f 2496/2822 2513/2811 2515/2817 2516/2818 +f 2513/2811 1852/2004 2630/2983 2515/2817 +f 1852/2004 845/2002 2630/2983 +f 2515/2817 2630/2983 1853/2005 2514/2815 +f 845/2002 1854/2006 1853/2005 2630/2983 +f 1601/1742 1599/1740 1586/1727 1582/1723 +f 1582/1723 1586/1727 1584/1725 1571/1712 +f 1563/1703 1571/1712 1584/1725 1570/1711 +f 1564/1704 2247/2500 1573/1714 1563/1703 +f 2245/2515 2247/2505 2249/2506 2255/2512 +f 2255/2512 2249/2506 2251/2508 2252/2509 +f 2631/2984 1578/1719 1579/1720 2632/2985 +f 2621/2961 1609/1750 1583/1724 2633/2986 +f 2633/2986 1583/1724 1572/1713 2634/2987 +f 1572/1713 1573/1714 2634/2987 +f 1623/1764 2621/2961 2633/2986 1580/1721 +f 1580/1721 2633/2986 2634/2987 1579/1720 +f 2634/2987 1573/1714 2632/2985 1579/1720 +f 1625/1766 1624/1765 1581/1722 1575/1716 +f 1575/1716 1581/1722 1578/1719 1574/1715 +f 2635/2988 2246/2499 1574/1715 1578/1719 +f 2631/2984 2635/2988 1578/1719 +f 2635/2988 2631/2984 2246/2499 +f 2246/2499 2631/2984 2632/2985 1573/1714 +f 1587/1728 1588/1729 1568/1709 1569/1710 +f 1588/1729 1591/1732 1567/1708 1568/1709 +f 1591/1732 1593/1734 1566/1707 1567/1708 +f 1565/1706 1595/1736 1596/1705 +f 1629/1770 1674/1816 1597/1738 1594/1735 +f 1597/1738 1595/1736 1593/1734 1594/1735 +f 1595/1736 1565/1706 1566/1707 1593/1734 +f 1566/1707 1565/1706 1557/1697 1560/1700 +f 1560/1700 1557/1697 1558/1698 1559/1699 +f 1558/2012 1857/2013 1559/2501 +f 1934/2092 1935/2093 1932/2090 1930/2088 +f 1940/2098 1934/2092 1930/2088 1939/2097 +f 1935/2093 2023/2190 2022/2189 1932/2090 +f 2048/2219 2049/2220 2037/2205 2039/2209 +f 2038/2208 2052/2224 2053/2225 2045/2216 +f 2029/2197 2058/2233 2059/2234 2027/2195 +f 2063/2238 2064/2239 2595/2922 2060/2235 +f 2064/2239 2068/2244 2076/2258 2595/2922 +f 2076/2258 2068/2244 2079/2261 2078/2260 +f 2080/2262 2083/2267 2079/2261 2070/2247 +f 2560/2872 2562/2874 2058/2233 2029/2197 +f 2027/2195 2059/2234 2589/2916 2028/2196 +f 2063/2238 2048/2219 2039/2209 2050/2221 +f 2051/2223 2052/2224 2049/2220 2046/2217 +f 2610/2946 2023/2190 2024/2191 2025/2192 +f 2610/2946 2562/2874 2560/2872 2609/2945 +f 2381/2657 1940/2098 1939/2097 2223/2476 +f 2057/2232 2561/2873 2637/2990 2636/2989 +f 2638/2991 2641/2994 2640/2993 2639/2992 +f 921/2996 2055/2995 2642/2998 410/2997 +f 410/2997 2642/2998 2644/3000 2643/2999 +f 2043/2214 2641/2994 2638/2991 2042/2213 +f 2042/2213 2638/2991 2645/3001 2613/2949 +f 2645/3001 2638/2991 2639/3003 2646/3002 +f 2640/2993 2055/2230 1351/2227 2647/3004 +f 2057/2232 2636/2989 2040/2211 2056/2231 +f 2040/2211 2636/2989 2644/3000 2043/2214 +f 2043/2214 2644/3000 2642/2998 2641/2994 +f 2641/2994 2642/2998 2055/2995 2640/2993 +f 2639/3005 2640/2993 2647/3004 1351/3006 +f 2025/2192 2026/2193 2648/3007 2561/2873 +f 2637/2990 2561/2873 2648/3007 +f 2013/2180 2035/2203 2036/2204 2587/2914 +f 2044/2215 2045/2216 2588/2915 2041/2212 +f 2053/2225 2054/2226 2028/2196 2589/2916 +f 2590/2917 2159/2377 2160/2378 2176/2399 +f 2176/2399 2160/2378 1359/2397 550/2398 +f 2034/2202 2035/2203 2586/2913 2593/2920 +f 2586/2913 2054/2226 2051/2223 2593/2920 +f 2587/2914 2036/2204 2159/2377 2590/2917 +f 2044/2215 2613/2949 1341/3008 404/2207 +f 2045/2216 2053/2225 2589/2916 2588/2915 +f 2613/2949 2645/3001 1344/3009 1341/3008 +f 1344/3009 2645/3001 2646/3002 1346/3010 +f 2639/3005 1351/3006 1353/3012 2646/3011 +f 1922/2080 1923/2081 2581/2903 1919/2077 +f 1987/2154 1988/2155 1989/2156 2465/2760 +f 1994/2161 1995/2162 2003/2170 2001/2168 +f 1998/2165 1999/2166 2558/2870 2557/2869 +f 1923/2081 2383/2659 2466/2761 2581/2903 +f 1372/2672 1994/2161 2001/2168 707/2128 +f 1998/2165 1995/2162 1996/2163 1997/2164 +f 2578/2899 2579/2900 1806/1950 1917/2075 +f 2580/2901 1368/2902 227/1943 1800/1944 +f 1922/2080 2578/2899 1917/2075 1916/2074 +f 1986/2153 1987/2154 2383/2659 2004/2171 +f 1999/2166 1988/2155 1985/2152 2558/2870 +f 2580/2901 2579/2900 1804/1948 1808/1952 +f 2644/3000 2636/2989 2637/2990 2643/2999 +f 2026/3013 2643/2999 2637/2990 +f 474/2912 428/811 2084/2269 2078/2260 +f 2552/2864 2142/2347 2128/2328 2119/2319 +f 2648/3007 2026/3013 2637/2990 +f 2651/3022 726/102 345/46 2659/3031 +f 1/45 1040/1135 2667/3040 2651/3022 +f 9/113 1022/1116 2666/3039 2653/3025 +f 299/552 300/558 2655/3027 2654/3026 +f 300/558 303/560 2658/3030 2655/3027 +f 2656/3028 349/26 734/14 2657/3029 +f 2657/3029 734/14 305/15 2658/3030 +f 2659/3031 345/46 729/48 2660/3032 +f 2660/3032 729/48 346/50 2661/3033 +f 2661/3033 346/50 348/41 2662/3034 +f 2662/3034 348/41 349/26 2656/3028 +f 291/559 435/827 2663/3035 2654/3026 +f 437/823 442/832 2665/3038 2664/3036 +f 435/827 438/828 2665/3038 2663/3035 +f 7/125 1023/1117 2666/3039 2652/3023 +f 2653/3025 11/117 1041/1136 2667/3040 +f 1386/1512 1385/1511 2668/3041 2669/3042 +f 2670/3043 1388/1514 1384/1510 2668/3041 +f 2672/3045 1394/1520 1391/1517 2671/3044 +f 2674/3047 1902/2060 1901/2059 2673/3046 +f 2675/3048 1904/2062 1902/2060 2674/3047 +f 1906/2064 1909/2067 2676/3049 2677/3050 +f 1903/2061 1906/2064 2677/3050 2675/3048 +f 1967/2129 1386/1512 2669/3042 2678/3051 +f 1968/2130 1967/2129 2678/3051 2679/3052 +f 1969/2131 1968/2130 2679/3052 2680/3053 +f 1909/2067 1969/2131 2680/3053 2676/3049 +f 2681/3054 1892/2048 1891/2047 2673/3046 +f 2683/3057 2087/2275 2085/2272 2682/3055 +f 2683/3057 2092/2281 1892/2048 2681/3054 +f 2672/3045 1399/1529 7/2681 2652/3024 +f 1389/1515 1398/1528 2671/3044 2670/3043 +f 2664/3037 447/840 956/1048 +f 2085/2292 2099/2289 2684/3058 2682/3056 +f 1964/2125 1963/2124 1986/2153 +f 1064/1159 389/9 1065/1160 +f 2686/3060 1886/2042 1889/2045 2685/3059 +f 2687/3061 1893/2049 1891/2047 2685/3059 +f 1903/2061 1893/2049 2687/3061 2688/3062 +f 1906/2064 1903/2061 2688/3062 2689/3063 +f 1885/2041 1886/2042 2686/3060 2690/3064 +f 2692/3066 2397/2683 2396/2682 2691/3065 +f 2420/2706 2398/2684 2693/3067 2694/3068 +f 2696/3070 2422/2708 2421/2707 2695/3069 +f 2697/3071 2415/2701 2422/2708 2696/3070 +f 2423/2709 2415/2701 2697/3071 2698/3072 +f 2699/3073 2424/2710 2423/2709 2698/3072 +f 2428/2714 2424/2710 2699/3073 2700/3074 +f 2689/3063 1907/2065 2428/2714 2700/3074 +f 2692/3066 1399/1529 1398/1528 2693/3067 +f 1389/1515 1385/1511 2695/3069 2694/3068 +f 292/567 441/566 2704/3078 2701/3075 +f 291/559 301/568 2702/3076 2701/3075 +f 2702/3076 301/568 305/15 2703/3077 +f 2703/3077 305/15 734/14 2714/3088 +f 441/566 439/829 2705/3079 2704/3078 +f 884/122 1035/1130 2715/3089 2706/3080 +f 2707/3081 725/118 1055/1150 2716/3090 +f 724/103 727/73 2709/3083 2708/3082 +f 727/73 728/49 2710/3084 2709/3083 +f 2710/3084 728/49 733/51 2711/3085 +f 733/51 742/40 2712/3086 2711/3085 +f 2712/3086 742/40 740/33 2713/3087 +f 740/33 739/27 2714/3088 2713/3087 +f 11/117 1023/1117 2715/3089 2707/3081 +f 2708/3082 726/102 1041/1136 2716/3090 +f 439/829 440/830 947/1038 2705/3079 +f 2691/3065 2396/2682 2395/2680 6/2679 +f 2691/3065 6/2679 2717/3092 +f 2717/3091 6/124 1019/1113 884/122 +f 2717/3091 884/122 2706/3080 +# 2563 polygons - 220 triangles + +# +# object Teath +# + +v 0.646992 1.098272 7.686674 +v -0.498168 1.207523 7.338418 +v -0.489018 1.262315 7.263352 +v -0.553878 1.109966 7.296640 +v -0.590838 1.162658 7.233572 +v -0.524208 1.172942 7.281527 +v 0.777672 1.162354 7.419515 +v 0.770112 1.149199 7.452587 +v 0.813642 1.158140 7.410550 +v 0.177732 1.058604 7.638671 +v 0.176562 1.153134 7.662511 +v 0.099462 1.030707 7.641737 +v 0.661992 1.161874 7.302512 +v 0.649722 1.181476 7.368491 +v 0.651252 1.257355 7.356377 +v 0.724002 1.196665 7.296505 +v 0.792612 1.233307 7.134400 +v 0.780852 1.299274 7.113332 +v 0.812562 1.145015 7.074571 +v 0.206592 0.950712 7.713820 +v 0.124272 0.928458 7.680900 +v 0.427602 0.986510 7.584771 +v 0.288102 0.949718 7.650836 +v 0.364392 0.980897 7.638793 +v 0.535002 1.002248 7.482755 +v 0.920712 1.179859 7.101523 +v 1.004352 1.275145 6.840358 +v 0.953142 1.235299 6.870449 +v 0.954432 1.167158 6.846569 +v -0.429738 0.981402 7.581848 +v -0.443508 1.023920 7.524744 +v -0.368538 0.997260 7.548769 +v -0.406578 1.005824 7.464804 +v -0.267468 1.006419 7.653768 +v -0.327528 1.116846 7.479644 +v -0.787758 1.128415 7.200575 +v -0.815508 1.213278 7.176456 +v -0.765528 1.141506 7.134546 +v -0.733788 1.085058 7.101675 +v -0.700008 1.294404 7.065364 +v -0.670218 1.283618 7.077376 +v -0.684768 1.196010 7.074491 +v -0.762498 1.259642 6.900349 +v -0.809088 1.177961 6.846553 +v -0.773658 1.232553 6.840425 +v -0.679728 1.145573 7.431536 +v -0.644958 1.135392 7.440613 +v -0.614118 1.066061 7.425707 +v -0.652368 1.147625 7.404524 +v -0.617808 1.071350 7.353646 +v -0.666558 1.061349 7.287652 +v -0.816288 1.157085 6.924590 +v -0.836118 1.208889 6.864449 +v 0.019692 1.144578 7.752522 +v -0.064638 1.080914 7.716641 +v -0.706728 1.062978 7.179709 +v -0.756438 1.106262 7.233658 +v -0.773478 1.104153 7.032615 +v 0.008022 0.991494 7.704788 +v 0.006642 0.973935 7.788859 +v 0.520482 1.221701 7.578448 +v 0.541722 1.312328 7.593322 +v 0.538122 1.306025 7.596353 +v 0.438342 1.084475 7.497642 +v 0.445002 1.123804 7.518634 +v 0.499182 1.106000 7.446610 +v 0.569472 1.162369 7.428578 +v 0.590772 1.164226 7.467577 +v 0.510852 1.163962 7.488542 +v 0.531912 1.237252 7.548395 +v 0.497202 1.152064 7.557592 +v 0.454062 1.129891 7.569620 +v 0.475362 1.128356 7.551588 +v 0.801132 1.020566 7.296781 +v 0.750882 1.001459 7.359799 +v 0.781962 1.028513 7.395736 +v 0.805122 1.158493 7.446529 +v 0.737112 1.081382 7.437676 +v 0.797562 1.231714 7.461427 +v 0.801492 1.237717 7.458397 +v 0.804732 1.233211 7.452454 +v -0.661998 1.125912 7.137589 +v -0.162978 1.011480 7.626751 +v -0.287148 1.117898 7.575590 +v -0.310968 1.049189 7.569748 +v -0.239778 1.077195 7.635713 +v -0.225708 1.204031 7.593492 +v -0.199248 1.211570 7.620489 +v -0.170028 1.279626 7.590353 +v -0.168288 1.113183 7.626594 +v -0.241488 1.029156 7.608779 +v -0.748038 1.213956 7.038482 +v -0.771018 1.151559 7.035561 +v -0.688038 1.131342 7.155616 +v -0.673248 1.195527 7.146451 +v -0.680208 1.221006 7.134418 +v -0.645738 1.355618 7.080193 +v -0.690378 1.306742 7.095284 +v -0.645768 1.360416 7.074232 +v -0.733998 1.234086 7.053466 +v -0.744378 1.191277 7.113501 +v -0.738258 1.142358 7.101583 +v 0.546162 1.308419 7.590308 +v 0.569112 1.236949 7.545373 +v 0.555072 1.234907 7.578427 +v 0.580182 1.178074 7.497493 +v 0.552972 1.106116 7.521593 +v 0.610542 1.178602 7.455470 +v 0.588012 1.105361 7.425648 +v 0.530832 1.078151 7.479706 +v -0.337368 1.133420 7.527594 +v 0.754812 1.104221 7.266623 +v 0.717582 1.140952 7.353539 +v 0.705852 1.091414 7.332650 +v 0.680742 1.276837 7.344353 +v 0.645252 1.345207 7.323281 +v 0.635772 1.153594 7.380527 +v 0.640182 1.080994 7.380641 +v 0.754362 1.186099 7.257521 +v -0.595878 1.202300 7.254473 +v -0.634158 1.142024 7.269585 +v -0.576768 1.189523 7.338449 +v -0.572448 1.222706 7.263415 +v -0.500448 1.294433 7.281338 +v -0.521058 1.279397 7.254353 +v -0.455028 1.333673 7.236232 +v -0.447858 1.332176 7.245298 +v -0.477528 1.270772 7.299414 +v -0.584058 1.134615 7.332583 +v 0.264582 0.986331 7.659842 +v 0.184692 0.980364 7.677796 +v 0.186042 1.026306 7.710775 +v 0.254562 1.058340 7.668702 +v 0.179292 1.236239 7.668426 +v 0.179622 1.166990 7.698561 +v 0.173892 1.241343 7.668417 +v 0.169122 1.235945 7.671446 +v 0.102342 0.980358 7.674866 +v 0.108312 1.052661 7.680704 +v -0.148788 1.012932 7.596811 +v -0.299268 1.051232 7.536695 +v -0.179838 0.948486 7.629872 +v -0.381948 0.971220 7.590837 +v 0.097362 0.986601 7.641807 +v 0.081792 1.059864 7.683712 +v -0.485658 0.987759 7.422810 +v -0.538428 1.019949 7.479796 +v 0.338772 1.040822 7.590724 +v 0.407652 1.063856 7.551689 +v 0.292482 1.221747 7.608479 +v 0.319062 1.215713 7.584410 +v -0.659658 1.022613 7.266748 +v 0.261672 1.290107 7.581365 +v 0.258972 1.283816 7.584301 +v 0.263262 1.199244 7.605494 +v 0.260712 1.021052 7.608794 +v 0.336072 1.087973 7.620683 +v 0.382332 1.131678 7.560555 +v 0.568482 1.125124 7.404561 +v 1.005222 1.164479 6.861495 +v 1.007862 1.257709 6.813375 +v 1.026792 1.210711 6.882482 +v 0.987762 1.338811 6.879259 +v 0.954342 1.408171 6.921175 +v 0.991722 1.343365 6.915233 +v 0.951612 1.405186 6.930151 +v 0.971172 1.320292 6.936326 +v 0.976062 1.243195 6.936445 +v 0.042492 0.920682 7.692904 +v 0.433212 0.931874 7.560865 +v 0.444012 0.967976 7.623799 +v 0.292422 0.934496 7.701855 +v 0.289722 0.893885 7.629955 +v 0.972102 1.141795 6.933583 +v 1.015752 1.190759 6.783452 +v 1.011492 1.272970 6.789367 +v 0.388512 0.906512 7.647974 +v 0.376002 0.996962 7.746799 +v 0.460002 1.065611 7.518724 +v 0.415152 1.067841 7.794662 +v 0.833802 1.057888 7.182740 +v 0.853482 1.125757 7.230607 +v 0.430482 1.011017 7.719769 +v 0.866052 1.052507 7.194742 +v 0.909552 1.070090 7.125682 +v 0.412512 1.000278 7.752747 +v 0.931692 1.093079 7.050663 +v 0.904602 1.251376 7.176394 +v -0.609138 1.211258 7.230474 +v 0.365742 0.902531 7.596985 +v 0.207432 0.926955 7.677877 +v 0.231942 0.937884 7.758886 +v 0.208662 0.895185 7.692944 +v 0.868722 1.322779 7.179305 +v 0.868422 1.316479 7.182334 +v 0.879852 1.230404 7.194463 +v 0.641832 1.017287 7.506808 +v 0.878172 1.153603 7.194583 +v 0.526422 0.981415 7.590817 +v 0.932172 1.115126 7.149598 +v 0.555162 0.994340 7.599770 +v 0.601572 1.037303 7.644749 +v -0.519528 1.118799 7.383603 +v -0.007668 1.011198 7.635818 +v 0.686532 0.997340 7.410800 +v 0.694782 1.064018 7.458672 +v 0.074052 1.006116 7.650749 +v 0.850632 1.154956 7.101562 +v 0.071022 1.046645 7.668718 +v 0.856782 1.203577 7.113481 +v 0.846372 1.246381 7.056376 +v 0.802752 1.319044 7.095264 +v 0.812382 1.307002 7.065346 +v -0.110508 1.071291 7.695689 +v -0.086658 1.055319 7.653691 +v -0.007758 1.073349 7.671699 +v -0.084888 1.061385 7.698724 +v 0.758112 1.368217 7.080173 +v -0.008838 1.153236 7.728520 +v 0.785622 1.208131 7.149454 +v 0.061302 1.053615 7.713663 +v -0.093288 0.996833 7.665775 +v -0.016158 1.017636 7.728734 +v 0.869652 1.235824 7.017392 +v 0.883392 1.163848 7.035538 +v -0.041898 1.148159 7.746562 +v 0.780432 1.041536 7.278712 +v 0.834882 1.092299 7.320655 +v 0.800442 1.143643 7.155595 +v -0.012558 1.153299 7.767520 +v -0.013398 1.228299 7.764476 +v -0.008088 1.233396 7.767395 +v -0.003228 1.227695 7.767407 +v 0.986262 1.210585 6.801456 +v 0.949842 1.245509 6.879405 +v 0.944142 1.261888 6.801376 +v 0.872892 1.324627 6.825264 +v 0.040422 1.075230 7.725712 +v 0.806172 1.367827 6.831241 +v 0.068862 0.988161 7.680807 +v 0.087672 1.060521 7.716671 +v 0.846672 1.310902 6.873261 +v 0.860472 1.335466 6.855278 +v -0.013518 0.985764 7.683831 +v 0.879882 1.254535 6.900358 +v -0.822048 1.114761 6.915589 +v -0.838488 1.141943 6.837544 +v 0.881922 1.229359 6.915411 +v 0.917202 1.174480 6.927491 +v -0.866898 1.173636 6.765536 +v 0.959742 1.196890 6.870508 +v -0.894528 1.251660 6.786380 +v 0.964242 1.196161 6.783444 +v 0.949272 1.272052 6.780395 +v -0.859188 1.213259 6.783420 +v -0.890958 1.234894 6.807460 +v 0.489102 0.946844 7.539877 +v 0.557532 0.955769 7.494821 +v 0.617142 0.986594 7.446797 +v 0.590232 0.955244 7.539865 +v 0.638382 1.039403 7.641722 +v 0.652422 1.103072 7.689596 +v -0.841278 1.298940 6.900288 +v -0.357648 0.948009 7.515890 +v -0.425118 0.956637 7.470832 +v -0.858408 1.213489 6.930451 +v -0.399678 0.972390 7.569866 +v -0.518058 1.013877 7.623727 +v -0.481308 1.014777 7.626746 +v -0.840618 1.180851 6.966482 +v -0.899958 1.169750 6.777535 +v -0.541518 1.067943 7.668685 +v -0.886998 1.250847 6.837374 +v -0.909978 1.184601 6.876479 +v -0.869238 1.312116 6.879302 +v -0.515088 1.008564 7.488784 +v -0.512688 1.007409 7.518817 +v -0.459048 0.947397 7.512868 +v -0.831048 1.381488 6.930189 +v -0.834588 1.378482 6.924242 +v -0.469038 1.182983 7.371510 +v -0.831828 1.374891 6.933220 +v -0.872868 1.314564 6.915277 +v -0.852468 1.290301 6.936374 +v -0.479388 1.140032 7.341548 +v -0.492558 1.181460 7.356496 +v -0.855828 1.112082 6.921638 +v -0.851208 1.182903 6.939469 +v -0.889188 1.139267 6.852562 +v -0.448158 1.336367 7.239252 +v -0.596478 1.011894 7.320782 +v -0.572178 1.048094 7.446701 +v -0.543108 0.999096 7.383790 +v -0.712278 1.076384 7.308690 +v -0.614658 1.127277 7.242599 +v -0.498108 1.103463 7.359642 +v -0.688518 1.144021 7.395556 +v 0.816102 1.080626 7.335689 +v -0.673698 1.224797 7.443404 +v 0.712782 1.059476 7.437714 +v -0.590448 1.043565 7.425744 +v -0.555078 1.038726 7.398743 +v -0.680838 1.003146 7.287745 +v -0.660798 1.013508 7.386788 +v -0.688398 1.080948 7.350705 +v 0.740562 1.088765 7.365613 +v 0.811392 1.096564 7.362670 +v 0.788592 1.079369 7.299710 +v -0.677088 1.220280 7.437461 +v 0.717252 1.031110 7.329724 +v -0.669918 1.218789 7.443412 +v 0.677142 1.056734 7.410707 +v 0.663882 1.017716 7.392735 +v -0.566238 0.979932 7.401856 +v -0.630768 0.984348 7.350853 +v -0.693768 1.064404 7.323721 +v 0.128622 1.077870 7.686707 +v -0.776658 1.164560 6.912490 +v -0.753078 1.196059 6.906491 +v 0.147792 1.152576 7.686590 +v -0.846858 1.200957 6.783436 +v -0.820218 1.231256 6.780460 +v -0.831888 1.277160 6.780388 +v 0.209412 1.154957 7.680545 +v 0.233742 1.081752 7.674706 +v 0.280062 1.067337 7.662643 +v 0.257202 1.036680 7.626712 +v 0.262302 0.992881 7.626782 +v 0.179232 0.987780 7.626788 +v 0.223302 1.093673 7.620671 +v -0.731208 1.310853 6.840301 +v -0.729288 1.315995 6.873253 +v 0.249882 1.093053 7.611610 +v 0.263772 1.122453 7.611563 +v -0.842358 1.201998 6.870502 +v -0.826788 1.266984 6.801373 +v -0.807258 1.282913 6.816359 +v -0.832458 1.250612 6.879397 +v -0.755508 1.329723 6.825260 +v 0.268182 1.286501 7.581371 +v -0.688788 1.372936 6.831233 +v -0.743088 1.340277 6.855271 +v 0.284412 1.204895 7.575455 +v -0.684468 1.370849 6.837187 +v -0.682818 1.374735 6.834160 +v 0.358992 1.150295 7.575539 +v -0.799818 1.179588 6.927483 +v -0.747498 1.233294 6.933442 +v -0.764538 1.234466 6.915403 +v 0.402912 1.146059 7.551560 +v 0.395802 1.066820 7.521657 +v 0.380622 1.108210 7.521589 +v -0.868878 1.215690 6.801448 +v 0.303162 1.111556 7.551613 +v -0.700188 1.132415 7.074589 +v 0.319392 1.042543 7.542748 +v -0.650928 1.356807 7.071218 +v 0.237732 1.066599 7.578691 +v 0.246402 1.023102 7.578762 +v 0.614262 1.157509 7.395535 +v 0.609222 1.125658 7.356585 +v -0.668478 1.286973 7.113349 +v -0.731118 1.183625 7.014544 +v 0.643602 1.339510 7.326221 +v 0.650772 1.341001 7.320265 +v -0.746358 1.146420 7.014602 +v -0.757248 1.223226 7.017409 +v 0.658932 1.258198 7.317373 +v 0.694782 1.265983 7.311412 +v 0.739092 1.174732 7.278502 +v -0.650448 1.164003 7.134509 +v -0.655848 1.198553 7.164485 +v 0.731232 1.105682 7.242631 +v -0.723078 1.101402 7.191644 +v 0.668772 1.091053 7.293650 +v 0.720672 1.148281 7.245587 +v 0.614682 1.081849 7.356653 +v -0.786918 1.141079 7.053611 +v -0.825438 1.141417 7.077599 +v -0.830298 1.154670 7.107515 +v 0.762822 1.176602 7.134489 +v -0.848418 1.287126 7.212320 +v 0.758142 1.372717 7.074214 +v 0.782592 1.296217 7.077354 +v 0.763332 1.369405 7.071199 +v 0.797142 1.208608 7.074471 +v -0.776388 1.055974 7.113713 +v -0.800328 1.083762 7.041616 +v 0.860412 1.226257 7.038464 +v -0.817308 1.082418 7.140680 +v -0.846078 1.212640 7.155491 +v -0.849888 1.283226 7.206374 +v 0.843492 1.196224 7.014523 +v 0.858732 1.158722 7.014583 +v -0.845778 1.280838 7.215350 +v -0.850848 1.209699 7.191476 +v 0.774372 1.138216 7.140590 +v 0.768222 1.211152 7.164463 +v -0.821148 1.197126 7.209440 +v 0.870462 1.191250 6.906499 +v 0.864882 1.228199 6.933447 +v -0.734688 1.043186 7.185691 +v -0.766248 1.104722 7.206654 +v -0.836658 1.156089 7.056519 +v 0.801852 1.365742 6.837196 +v -0.072198 0.996567 7.683813 +v 0.800202 1.369642 6.834167 +v 0.848592 1.305745 6.840310 +v -0.153798 0.989643 7.668808 +v 0.924642 1.277812 6.819388 +v 0.891042 1.227445 6.840434 +v -0.159768 1.000212 7.710814 +v 0.937602 1.226156 6.783397 +v -0.109308 1.007016 7.845753 +v -0.132408 1.021848 7.926754 +v 0.926472 1.172857 6.846559 +v 0.894042 1.159457 6.912498 +v -0.087888 1.004478 7.752739 +v -0.090798 1.015089 7.635808 +v -0.004998 1.001763 7.743773 +v -0.152808 0.955155 7.671884 +v 0.187092 0.938529 7.782872 +v 0.205602 0.930681 7.755877 +v 0.148002 1.035324 7.908698 +v -0.140688 0.986622 7.845785 +v -0.146118 0.968505 7.770833 +v 0.143142 1.038921 7.911713 +v 0.141252 0.972258 7.866867 +v 0.137832 1.034718 7.908698 +v -0.114018 0.975858 7.869788 +v -0.122448 1.021848 7.926754 +v -0.128508 1.024560 7.932795 +v 0.059352 0.925005 7.770898 +v -0.042978 0.969444 7.794817 +v -0.080238 0.987240 7.860800 +v -0.017268 0.969414 7.773850 +v -0.084498 0.926754 7.740869 +v 0.128352 0.881106 7.704958 +v 0.006372 0.956709 7.707862 +v -0.073128 0.944379 7.689845 +v 0.046422 0.889200 7.707967 +v 0.133812 0.882081 7.758974 +v -0.160728 0.967863 7.740802 +v -0.187908 0.971757 7.743817 +v 0.033642 0.930420 7.779862 +v -0.380868 1.086444 7.410662 +v -0.321648 1.074533 7.470646 +v 0.081942 0.934638 7.791852 +v -0.448848 1.098366 7.365599 +v -0.490248 1.162034 7.404500 +v -0.471138 1.150052 7.419537 +v -0.449178 1.139796 7.380548 +v -0.460668 1.168995 7.443491 +v -0.411648 1.236260 7.485410 +v 0.129492 0.959466 7.743838 +v -0.424578 1.314599 7.509274 +v 0.169932 0.978222 7.845798 +v -0.416748 1.313108 7.515316 +v -0.401238 1.227305 7.518474 +v 0.137262 0.993807 7.836802 +v -0.391638 1.151585 7.440589 +v 0.108312 0.976125 7.851844 +v 0.048852 0.944742 7.731868 +v -0.469308 1.083711 7.389701 +v 0.314682 0.934172 7.683911 +v -0.448758 1.236251 7.479457 +v 0.340692 0.948593 7.698903 +v -0.420138 1.319399 7.512287 +v 0.410112 1.062441 7.794672 +v 0.394212 1.019423 7.722778 +v -0.435438 1.240508 7.515431 +v -0.379578 1.153799 7.509523 +v 0.419082 1.064834 7.788716 +v 0.433662 0.973115 7.653821 +v -0.344208 1.060466 7.491728 +v -0.358368 1.128899 7.512584 +v -0.435978 1.102749 7.482595 +v -0.413898 1.066392 7.446674 +v 0.467772 0.980567 7.617829 +v 0.421092 0.961850 7.548827 +v -0.222288 1.029674 7.560713 +v 0.344922 0.946904 7.578877 +v -0.127188 1.085595 7.635701 +v 0.275202 0.923564 7.617918 +v 0.494262 1.000583 7.566803 +v -0.308058 1.131383 7.563575 +v -0.284988 1.092935 7.536629 +v -0.207588 1.099286 7.566647 +v -0.264198 1.137417 7.587554 +v 0.615522 1.061573 7.620721 +v 0.655002 1.100666 7.680628 +v -0.176448 1.275719 7.587337 +v 0.650202 1.052546 7.608743 +v 0.638112 1.020041 7.539763 +v -0.167178 1.273325 7.593383 +v 0.567642 1.030547 7.539746 +v -0.169518 1.189662 7.617500 +v -0.190878 1.193516 7.587467 +v 0.618732 1.039442 7.476746 +v 0.664452 1.029875 7.497725 +v -0.153738 1.084080 7.626637 +v 0.604002 1.018088 7.440796 +v -0.141108 1.056426 7.593721 +v 0.473862 0.977435 7.533789 +v -0.250638 0.973332 7.593851 +v 0.507972 0.981152 7.611784 +v 0.831282 1.101397 7.188622 +v 0.866892 1.124518 7.206623 +v -0.332538 1.013847 7.602761 +v -0.327648 0.989781 7.566817 +v -0.371568 1.007889 7.635820 +v 0.873492 1.237246 7.158379 +v -0.330108 1.036248 7.737768 +v 0.872532 1.318867 7.173268 +v 0.904782 1.245916 7.140421 +v -0.293628 1.044354 7.740684 +v 0.863082 1.145393 7.125565 +v 0.926082 1.161211 7.077565 +v 0.895122 1.140779 7.050590 +v -0.306438 1.086165 7.809649 +v 0.933702 1.175584 7.053555 +v 0.900522 1.099052 7.035640 +v -0.191148 0.974331 7.662790 +v -0.193848 0.958512 7.710882 +v 0.861312 1.076665 7.107637 +v -0.339708 0.959505 7.578859 +v 0.933162 1.187389 6.933511 +v 0.958152 1.212958 6.972476 +v 0.968532 1.213220 6.948486 +v -0.347718 0.995001 7.641794 +v -0.336198 0.999249 7.671814 +v -0.311358 1.091571 7.812662 +v -0.315528 1.088859 7.806623 +v -0.311148 1.024599 7.767722 +v -0.241968 0.973206 7.710856 +v -0.274878 1.020996 7.761778 +v 0.950892 1.411489 6.927117 +v -0.216648 0.958488 7.695866 +v -0.292128 0.932331 7.662857 +v 0.959802 1.327138 6.900244 +v -0.194298 0.919098 7.638890 +v -0.271278 0.928659 7.611866 +v 0.975612 1.235170 6.789423 +v -0.345108 0.980405 7.515839 +v 0.982662 1.194338 6.774476 +v -0.475248 1.020762 7.422758 +v -0.493038 1.036119 7.458714 +v 0.938292 1.144483 6.924606 +v -0.496578 1.040550 7.605740 +v -0.533478 1.065252 7.674734 +v -0.529938 1.029723 7.590744 +v -0.539388 1.069752 7.677656 +v -0.919117 1.431730 7.467472 +v -0.906543 1.405713 7.335268 +v -0.873513 1.336839 7.358689 +v -0.089526 1.194600 8.128790 +v -0.071677 1.274502 8.195261 +v -0.058806 1.167306 8.128510 +v -0.030696 1.193316 8.140776 +v 0.112943 1.408308 8.235277 +v 0.244254 1.195270 8.119732 +v -0.552606 1.283311 7.898312 +v 0.936238 1.231223 7.399996 +v 0.926098 1.304213 7.430527 +v 0.925828 1.302404 7.430515 +v 0.917035 1.230797 7.457033 +v 0.925975 1.303607 7.430523 +v 0.921264 1.276142 7.493323 +v 0.841794 1.223213 7.630932 +v 0.827996 1.294412 7.658430 +v 0.828237 1.296209 7.658442 +v 0.700645 1.283681 7.850350 +v 0.474145 1.178008 8.020643 +v 0.503214 1.285270 8.081350 +v 0.427344 1.249945 8.069115 +v -0.902195 1.289539 7.184410 +v -0.902135 1.288933 7.184404 +v -0.902105 1.287742 7.184399 +v -0.907802 1.216711 7.213847 +v -0.292716 1.249901 8.075151 +v 1.046997 1.329786 7.097627 +v 1.029356 1.268100 7.121190 +v 1.016127 1.221087 7.150896 +v 1.005686 1.291362 7.181411 +v 1.005776 1.293468 7.181427 +v 1.005716 1.292862 7.181419 +v -0.802293 1.204621 7.426809 +v -0.734166 1.438555 7.800502 +v -0.715356 1.395991 7.794260 +v -0.867486 1.311865 7.448514 +v -0.849184 1.446568 7.569565 +v -0.817084 1.335589 7.526687 +v -0.698948 1.268134 7.721233 +v -0.978095 1.441281 7.071467 +v -0.925774 1.264513 7.121155 +v -0.912542 1.217158 7.153880 +v -0.725167 1.223209 7.630924 +v -0.766808 1.303813 7.685497 +v -0.753127 1.268977 7.607252 +v -0.962105 1.303605 7.187438 +v -0.915905 1.263573 7.247221 +v -1.003982 1.428378 7.191408 +v -0.836555 1.440136 7.587555 +v -0.815945 1.423645 7.707379 +v -0.554976 1.426246 8.043406 +v -0.943866 1.395117 7.308187 +v -0.648936 1.411243 7.962367 +v -0.537306 1.383715 8.034142 +v -0.189577 1.411928 8.193369 +v -0.188017 1.369478 8.172020 +v -0.152736 1.300322 8.153503 +v -0.531215 1.255880 7.958183 +v -0.536466 1.210535 7.921888 +v 0.020063 1.297332 8.192486 +v -0.081337 1.393809 8.250191 +v 0.047303 1.365204 8.222984 +v 0.220673 1.426185 8.172413 +v 0.344333 1.412599 8.184315 +v -0.603606 1.291474 7.931421 +v 0.307494 1.300960 8.147470 +v 0.213564 1.267519 8.126272 +v -0.671046 1.385215 7.833187 +v 0.278604 1.241095 8.129110 +v -0.270007 1.419971 8.160374 +v -0.259777 1.377512 8.142132 +v -0.278586 1.309055 8.108519 +v 0.213564 1.267219 8.126268 +v -0.368616 1.285193 8.090408 +v -0.315666 1.204505 8.047831 +v 0.213534 1.265721 8.126261 +v 0.213534 1.167976 8.119453 +v -0.484596 1.420712 8.061405 +v -0.477996 1.378274 8.040147 +v -0.391657 1.404509 8.142319 +v -0.058836 1.266861 8.135237 +v 0.107423 1.365870 8.214018 +v -0.058806 1.266552 8.135237 +v -0.123846 1.240437 8.138077 +v 0.236063 1.394467 8.241226 +v 0.134663 1.298001 8.183430 +v -0.058806 1.265052 8.135225 +v 0.226403 1.275184 8.186293 +v 0.156174 1.239102 8.156013 +v 0.185424 1.194261 8.134739 +v -0.001446 1.238445 8.165073 +v 0.342773 1.370161 8.163054 +v -0.065947 1.425516 8.181471 +v 0.041813 1.407672 8.241314 +v 1.047475 1.399026 7.308224 +v 1.008386 1.193562 7.180737 +v 1.034666 1.456029 7.185658 +v -0.342696 1.277498 8.036338 +v -0.339515 1.177964 8.026588 +v -0.370235 1.204682 8.023842 +v -0.342576 1.275689 8.036325 +v -0.342666 1.277201 8.036338 +v -0.406236 1.250276 8.024157 +v -0.438816 1.309619 8.033538 +v -0.361896 1.436195 8.076528 +v -0.931085 1.452429 7.185625 +v -0.959433 1.439520 7.308492 +v -0.929465 1.324554 7.274650 +v -0.904805 1.189636 7.183721 +v -0.943411 1.325877 7.097592 +v -0.962854 1.396899 7.068234 +v 0.496524 1.436239 8.070492 +v 0.394404 1.377556 8.136095 +v 0.477264 1.277266 8.027279 +v 0.450295 1.204582 8.038862 +v 0.477204 1.275754 8.027267 +v 0.477324 1.277563 8.027279 +v 0.573444 1.309682 8.024574 +v 0.404633 1.420036 8.151403 +v 0.413214 1.309132 8.099552 +v 0.504865 1.204759 8.014785 +v 0.540865 1.250350 8.015099 +v 0.526283 1.404574 8.133261 +v 0.619194 1.420775 8.052437 +v 0.612624 1.378319 8.034111 +v 0.703014 1.426604 7.995440 +v 0.685344 1.384073 7.986175 +v 0.738475 1.443089 7.875525 +v 0.679255 1.256534 7.910130 +v 0.700525 1.282481 7.850340 +v 0.717923 1.211567 7.825864 +v 0.781286 1.316783 7.796559 +v 0.700735 1.284287 7.850353 +v 0.683095 1.315667 7.946610 +v 0.684506 1.211201 7.873837 +v 0.751645 1.292129 7.883458 +v 0.694466 1.184702 7.846644 +v 0.748826 1.257296 7.808143 +v 0.796975 1.411613 7.914311 +v 0.834505 1.428074 7.797418 +v 0.819086 1.385573 7.785132 +v 0.869156 1.455074 7.677667 +v 0.815576 1.268138 7.721241 +v 0.828147 1.295615 7.658441 +v 0.815756 1.222805 7.684947 +v 0.900597 1.328777 7.595681 +v 0.936147 1.397630 7.575188 +v 0.850795 1.438559 7.800511 +v 0.831985 1.395995 7.794268 +v 0.824096 1.327589 7.754701 +v 0.821424 1.196633 7.654735 +v 0.869757 1.268981 7.607261 +v 0.883436 1.303805 7.685506 +v 0.932576 1.423637 7.707388 +v 0.953183 1.440141 7.587565 +v 0.965814 1.446573 7.569574 +v 0.969087 1.463088 7.446640 +v 0.990148 1.336845 7.358699 +v 0.961228 1.277007 7.376324 +v 1.041355 1.448250 7.344544 +v 1.023175 1.405719 7.335278 +v 0.946344 1.404020 7.563240 +v 1.035747 1.431735 7.467482 +v 0.933714 1.335593 7.526696 +v 0.984118 1.311870 7.448524 +v 0.918925 1.204625 7.426818 +v 1.063015 1.443438 7.305508 +v 1.107596 1.432287 7.191446 +v 1.033076 1.328463 7.274687 +v 1.019486 1.267161 7.247254 +v 1.011386 1.220637 7.210952 +v 1.065686 1.307514 7.187473 +v 1.081676 1.445178 7.071506 +v 1.066437 1.400808 7.068272 +v -0.535056 1.315331 7.991556 +v -0.552696 1.283921 7.898318 +v -0.546396 1.184366 7.891679 +v -0.552456 1.282112 7.898306 +v -0.569886 1.210921 7.870805 +v -0.600786 1.256662 7.853174 +v -0.633245 1.316425 7.844615 +v -0.590435 1.442731 7.923582 +v -0.686436 1.427716 7.845471 +v -0.752525 1.455070 7.677659 +v -0.707465 1.327585 7.754693 +v -0.699125 1.222813 7.684939 +v -0.711518 1.295611 7.658432 +v -0.704794 1.196629 7.654726 +v -0.711365 1.294408 7.658422 +v -0.711608 1.296205 7.658434 +v -0.783934 1.328773 7.595672 +v -0.819517 1.397626 7.575179 +v -0.829714 1.404025 7.563230 +v -0.852454 1.463083 7.446630 +v -0.804637 1.276138 7.493314 +v -0.800406 1.230805 7.457024 +v -0.819603 1.231219 7.399987 +v -0.809193 1.302400 7.430506 +v -0.844593 1.277002 7.376315 +v -0.809346 1.303603 7.430514 +v -0.809466 1.304209 7.430518 +v -0.924726 1.448245 7.344533 +# 756 vertices + +vt 0.852877 -1.220611 0.000000 +vt 0.852878 -1.314086 0.000000 +vt 0.738006 -1.280950 0.000000 +vt 0.967750 -1.280949 0.000000 +vt 0.776321 -1.339274 0.000000 +vt 0.852879 -1.438286 0.000000 +vt 0.808006 -1.437567 0.000000 +vt 0.712129 -1.519191 0.000000 +vt 0.563034 -1.742663 0.000000 +vt 0.712129 -1.885656 0.000000 +vt 0.624738 -1.551237 0.000000 +vt 0.861225 -1.742663 0.000000 +vt 0.799520 -1.551237 0.000000 +vt 0.712129 -1.321987 0.000000 +vt 0.697711 -1.335944 0.000000 +vt 0.929435 -1.339273 0.000000 +vt 0.897752 -1.437567 0.000000 +vt 0.504728 -1.805069 0.000000 +vt 0.478209 -1.970150 0.000000 +vt 0.430925 -1.783690 0.000000 +vt 0.482055 -1.991309 0.000000 +vt 0.946050 -1.970150 0.000000 +vt 0.942204 -1.991309 0.000000 +vt 0.993334 -1.783690 0.000000 +vt 0.972990 -1.222464 0.000000 +vt 0.997270 -1.318206 0.000000 +vt 0.732764 -1.222465 0.000000 +vt 0.708486 -1.318208 0.000000 +vt 0.746382 -1.307231 0.000000 +vt 0.845477 -1.548115 0.000000 +vt 0.852880 -1.555281 0.000000 +vt 0.860283 -1.548115 0.000000 +vt 0.959374 -1.307229 0.000000 +vt 0.712129 -2.000510 0.000000 +vt 0.726547 -1.335944 0.000000 +vt 0.919531 -1.805069 0.000000 +vt 0.381943 -1.005024 0.000000 +vt 0.763386 -1.148766 0.000000 +vt 0.662045 -1.373517 0.000000 +vt 0.477302 -1.717692 0.000000 +vt 0.381943 -1.412606 0.000000 +vt 0.580355 -1.569322 0.000000 +vt 0.381943 -1.803237 0.000000 +vt 0.286584 -1.717692 0.000000 +vt 0.183531 -1.569322 0.000000 +vt 0.000499 -1.148766 0.000000 +vt 0.101841 -1.373517 0.000000 +vt 0.006911 -1.003335 0.000000 +vt 0.280035 -1.724298 0.000000 +vt 0.185014 -1.751085 0.000000 +vt 0.185014 -1.751864 0.000000 +vt 0.319158 -1.818071 0.000000 +vt 0.230681 -1.653243 0.000000 +vt 0.185014 -1.749257 0.000000 +vt 0.089991 -1.724300 0.000000 +vt 0.139345 -1.653244 0.000000 +vt 0.050870 -1.818073 0.000000 +vt 0.185015 -1.994714 0.000000 +vt 0.756974 -1.003335 0.000000 +vt 0.005409 -1.995356 0.000000 +vt 0.002338 -1.925709 0.000000 +vt 0.185013 -1.612275 0.000000 +vt 0.367692 -1.925706 0.000000 +vt 0.364621 -1.995354 0.000000 +vt 0.876568 -1.457038 0.000000 +vt 0.452774 -1.866606 0.000000 +vt 0.972274 -1.863591 0.000000 +vt 0.453325 -1.868898 0.000000 +vt 0.972151 -1.863956 0.000000 +vt 0.479686 -1.868182 0.000000 +vt 0.876025 -1.457774 0.000000 +vt 0.451276 -1.860724 0.000000 +vt 0.972277 -1.863576 0.000000 +vt 0.944247 -1.867623 0.000000 +vt 0.828884 -1.457134 0.000000 +vt 0.972069 -1.864459 0.000000 +vt 0.477639 -1.867702 0.000000 +vt 0.877212 -1.457549 0.000000 +vt 0.829157 -1.456704 0.000000 +vt 0.451852 -1.863192 0.000000 +vt 0.949354 -1.868694 0.000000 +vt 0.831205 -1.456800 0.000000 +vt 0.876293 -1.457682 0.000000 +vt 0.949906 -1.868694 0.000000 +vt 0.473767 -1.868634 0.000000 +vt 0.875387 -1.457669 0.000000 +vt 0.828770 -1.457858 0.000000 +vt 0.828628 -1.458084 0.000000 +vt 0.972724 -1.861599 0.000000 +vt 0.876879 -1.457280 0.000000 +vt 0.469951 -1.869397 0.000000 +vt 0.948142 -1.868755 0.000000 +vt 0.829543 -1.457311 0.000000 +vt 0.875525 -1.457883 0.000000 +vt 0.972246 -1.863524 0.000000 +vt 0.452091 -1.864086 0.000000 +vt 0.828780 -1.456825 0.000000 +vt 0.876632 -1.457644 0.000000 +vt 0.487185 -1.869714 0.000000 +vt 0.972161 -1.863907 0.000000 +vt 0.972160 -1.863962 0.000000 +vt 0.452102 -1.863599 0.000000 +vt 0.971248 -1.867505 0.000000 +vt 0.829384 -1.457744 0.000000 +vt 0.972345 -1.863358 0.000000 +vt 0.875706 -1.457610 0.000000 +vt 0.483553 -1.868973 0.000000 +vt 0.452019 -1.863561 0.000000 +vt 0.451940 -1.863264 0.000000 +vt 0.828306 -1.457759 0.000000 +vt 0.875839 -1.457175 0.000000 +vt 0.451209 -1.860488 0.000000 +vt 0.972173 -1.863853 0.000000 +vt 0.948088 -1.870427 0.000000 +vt 0.451880 -1.863108 0.000000 +vt 0.481867 -1.869676 0.000000 +vt 0.479093 -1.870937 0.000000 +vt 0.877378 -1.458749 0.000000 +vt 0.452405 -1.865097 0.000000 +vt 0.829847 -1.459929 0.000000 +vt 0.971057 -1.868906 0.000000 +vt 0.828728 -1.456783 0.000000 +vt 0.971727 -1.865673 0.000000 +vt 0.452211 -1.864402 0.000000 +vt 0.876786 -1.457847 0.000000 +vt 0.451956 -1.863566 0.000000 +vt 0.475944 -1.866089 0.000000 +vt 0.481453 -1.870048 0.000000 +vt 0.451758 -1.862800 0.000000 +vt 0.451367 -1.861115 0.000000 +vt 0.452023 -1.863780 0.000000 +vt 0.972305 -1.863569 0.000000 +vt 0.828884 -1.457464 0.000000 +vt 0.951541 -1.868004 0.000000 +vt 0.875292 -1.457469 0.000000 +vt 0.828177 -1.456968 0.000000 +vt 0.877146 -1.457614 0.000000 +vt 0.465539 -1.870165 0.000000 +vt 0.475376 -1.871410 0.000000 +vt 0.971891 -1.865238 0.000000 +vt 0.451984 -1.863602 0.000000 +vt 0.451081 -1.859882 0.000000 +vt 0.829591 -1.458419 0.000000 +vt 0.877151 -1.457435 0.000000 +vt 0.472016 -1.869328 0.000000 +vt 0.947146 -1.869243 0.000000 +vt 0.828694 -1.457016 0.000000 +vt 0.829919 -1.456851 0.000000 +vt 0.947182 -1.870234 0.000000 +vt 0.874654 -1.456733 0.000000 +vt 0.877418 -1.458245 0.000000 +vt 0.830298 -1.458251 0.000000 +vt 0.944782 -1.869317 0.000000 +vt 0.829314 -1.457618 0.000000 +vt 0.875823 -1.456924 0.000000 +vt 0.479366 -1.867708 0.000000 +vt 0.948278 -1.868539 0.000000 +vt 0.829792 -1.458097 0.000000 +vt 0.877097 -1.457110 0.000000 +vt 0.471723 -1.869990 0.000000 +vt 0.947234 -1.868533 0.000000 +vt 0.828686 -1.457152 0.000000 +vt 0.876568 -1.457265 0.000000 +vt 0.483485 -1.870629 0.000000 +vt 0.944827 -1.866485 0.000000 +vt 0.828933 -1.458644 0.000000 +vt 0.876984 -1.457996 0.000000 +vt 0.946429 -1.872049 0.000000 +vt 0.480111 -1.872686 0.000000 +vt 0.829753 -1.455776 0.000000 +vt 0.875659 -1.455884 0.000000 +vt 0.478854 -1.868377 0.000000 +vt 0.946724 -1.869313 0.000000 +vt 0.831090 -1.457178 0.000000 +vt 0.877402 -1.457505 0.000000 +vt 0.948777 -1.869040 0.000000 +vt 0.829947 -1.456792 0.000000 +vt 0.876298 -1.456800 0.000000 +# 178 texture coords + +g Teath +usemtl _Sharkgreatwhiteshark_teet +f 2802/3095 2894/3119 2801/3093 2804/3094 +f 2801/3093 2799/3117 2800/3096 2804/3094 +f 2805/3098 2839/3099 2841/3097 2804/3094 +f 2848/3102 2751/3104 2850/3100 2749/3101 +f 2850/3100 2750/3103 2749/3101 +f 2870/3100 3060/3104 3059/3105 +f 2870/3100 3052/3101 2867/3102 3060/3104 +f 2996/3100 3226/3127 2997/3106 2736/3107 +f 2736/3124 3225/3098 2937/3109 2996/3157 +f 2738/3098 2863/3109 2737/3108 2741/3094 +f 2738/3098 2741/3094 2858/3097 2860/3099 +f 3020/3096 3031/3117 2739/3093 2741/3094 +f 2739/3093 3030/3119 2740/3095 2741/3094 +f 2813/3108 2743/3109 2742/3098 3041/3094 +f 3042/3097 3041/3094 2742/3098 2744/3099 +f 3052/3108 3055/3109 2746/3098 2745/3094 +f 3060/3097 2745/3094 2746/3098 3059/3099 +f 3062/3095 3063/3119 3064/3093 2745/3094 +f 3064/3093 2879/3117 2747/3096 2745/3094 +f 2749/3108 2750/3109 3103/3098 2748/3094 +f 2751/3097 2748/3094 3103/3098 3104/3099 +f 2752/3108 2753/3109 3119/3098 3121/3094 +f 3128/3095 3129/3119 2754/3093 3121/3094 +f 2754/3093 3132/3117 3116/3096 3121/3094 +f 2980/3108 2977/3109 3143/3098 3146/3094 +f 2755/3095 2926/3119 2756/3093 3190/3094 +f 2756/3093 2904/3117 3198/3096 3190/3094 +f 2757/3095 3215/3119 3217/3093 2759/3094 +f 3217/3093 3219/3117 2758/3096 2759/3094 +f 2936/3108 2937/3109 3225/3098 3231/3094 +f 3234/3095 3237/3119 2760/3093 3231/3094 +f 2760/3093 3239/3117 3220/3096 3231/3094 +f 2761/3097 3252/3094 3247/3098 3250/3099 +f 3254/3095 3257/3119 3260/3093 3252/3094 +f 3260/3093 2916/3117 3242/3096 3252/3094 +f 2762/3097 2763/3094 3275/3098 2898/3099 +f 3278/3095 3280/3119 2764/3093 2763/3094 +f 2764/3093 3283/3117 3262/3096 2763/3094 +f 3284/3098 3004/3109 2765/3108 2766/3094 +f 2767/3096 3279/3117 2768/3093 2766/3094 +f 2768/3093 3281/3119 3282/3095 2766/3094 +f 3251/3098 3271/3109 3270/3108 2769/3094 +f 3258/3096 2877/3117 3240/3093 2769/3094 +f 3240/3093 3245/3119 3244/3095 2769/3094 +f 3238/3096 2875/3117 3216/3093 3223/3094 +f 3216/3093 2876/3119 3222/3095 3223/3094 +f 2770/3096 3182/3117 3181/3093 3196/3094 +f 3181/3093 3184/3119 3187/3095 3196/3094 +f 3149/3098 3153/3094 3161/3097 3160/3099 +f 3155/3096 2794/3117 3141/3093 3153/3094 +f 3141/3093 3144/3119 3147/3095 3153/3094 +f 2772/3098 3134/3109 2771/3108 2773/3094 +f 2772/3098 2773/3094 3115/3097 3126/3099 +f 3109/3096 2791/3117 2774/3093 2773/3094 +f 2774/3093 2793/3119 3113/3095 2773/3094 +f 3106/3096 2817/3117 3090/3093 2777/3094 +f 3090/3093 3101/3119 3098/3095 2777/3094 +f 2776/3098 2777/3094 2835/3097 2775/3099 +f 2776/3098 3097/3109 2831/3108 2777/3094 +f 3066/3098 3067/3109 2778/3108 2780/3094 +f 3054/3096 3053/3117 2779/3093 2780/3094 +f 2779/3093 3056/3119 3057/3095 2780/3094 +f 2781/3100 2783/3101 2782/3103 +f 2781/3100 3040/3104 3039/3102 2783/3101 +f 3036/3110 2783/3101 3039/3102 +f 2784/3098 2782/3109 2783/3108 2785/3094 +f 2784/3098 2785/3094 3040/3097 3032/3099 +f 3037/3096 3028/3117 3026/3093 2785/3094 +f 3026/3093 2887/3119 2786/3095 2785/3094 +f 3018/3100 3001/3101 3019/3103 +f 3018/3100 3008/3104 3009/3102 3001/3101 +f 3023/3110 3001/3101 3009/3102 +f 2787/3096 2981/3117 2982/3093 2788/3094 +f 2982/3093 2985/3119 2990/3095 2788/3094 +f 2954/3098 2789/3109 2973/3108 2951/3094 +f 2954/3098 2951/3094 2790/3097 2961/3099 +f 2791/3111 3109/3158 2792/3112 3137/3113 +f 3139/3116 3113/3159 2793/3114 3123/3115 +f 2794/3111 3155/3160 2795/3112 3174/3113 +f 3179/3116 3147/3161 3144/3114 3156/3115 +f 2808/3110 2800/3162 2807/3112 2914/3113 +f 2914/3113 2845/3126 2842/3102 2808/3110 +f 2808/3110 2842/3102 2806/3101 +f 2842/3102 2841/3104 2840/3100 2806/3101 +f 2840/3100 2796/3103 2806/3101 +f 2798/3124 2805/3098 2796/3109 2840/3163 +f 2840/3100 2838/3127 2797/3106 2798/3107 +f 2799/3111 2914/3113 2807/3112 2800/3164 +f 2843/3116 2844/3115 2894/3114 2802/3165 +f 2803/3128 2844/3115 2843/3116 2802/3166 +f 2804/3094 2841/3097 2803/3121 2802/3095 +f 2838/3122 2840/3167 2839/3099 2805/3098 +f 2805/3098 2798/3124 2797/3123 2838/3122 +f 2805/3098 2804/3094 2806/3108 2796/3109 +f 2804/3094 2800/3096 2808/3125 2806/3108 +f 3102/3116 3098/3168 3101/3114 2828/3115 +f 2809/3115 3033/3128 2811/3102 2810/3126 +f 2811/3102 3035/3110 2940/3113 2810/3126 +f 3035/3110 3047/3169 2941/3112 2940/3113 +f 2811/3102 3042/3104 2812/3100 2813/3101 +f 3035/3110 2811/3102 2813/3101 +f 2812/3100 2743/3103 2813/3101 +f 2814/3124 2742/3098 2743/3109 2812/3170 +f 2812/3100 2816/3127 2815/3106 2814/3107 +f 2744/3099 2742/3098 2816/3122 2812/3171 +f 2812/3100 3042/3104 2744/3105 +f 3033/3128 3042/3104 2811/3102 +f 2809/3115 2962/3114 2963/3116 3033/3128 +f 2817/3111 3106/3172 3107/3112 2829/3113 +f 2818/3113 2875/3111 3218/3112 3236/3110 +f 2821/3102 2819/3128 2820/3115 2826/3126 +f 2819/3128 3222/3173 3221/3116 2820/3115 +f 2819/3128 2821/3102 3224/3104 +f 2821/3102 2825/3101 2823/3100 3224/3104 +f 2823/3100 2822/3105 3224/3104 +f 3227/3122 3233/3098 2822/3099 2823/3174 +f 2823/3100 3230/3107 2824/3106 3227/3127 +f 3232/3109 3233/3098 3230/3124 2823/3175 +f 2823/3100 2825/3101 3232/3103 +f 3236/3110 2825/3101 2821/3102 +f 2821/3102 2826/3126 2818/3113 3236/3110 +f 2827/3128 3098/3176 3102/3116 2828/3115 +f 2829/3113 2830/3110 2836/3102 2837/3126 +f 3107/3112 3106/3177 2830/3110 2829/3113 +f 2830/3110 2831/3101 2836/3102 +f 2833/3100 2835/3104 2836/3102 2831/3101 +f 2833/3100 2831/3101 3097/3103 +f 3097/3109 2776/3098 2832/3124 2833/3178 +f 2834/3106 3092/3127 2833/3100 2832/3107 +f 3092/3122 2776/3098 2775/3099 2833/3179 +f 2833/3100 2775/3105 2835/3104 +f 2827/3128 2836/3102 2835/3104 +f 2828/3115 2837/3126 2836/3102 2827/3128 +f 2840/3100 2841/3104 2839/3105 +f 2803/3128 2841/3104 2842/3102 +f 2842/3102 2845/3126 2844/3115 2803/3128 +f 2846/3112 3211/3110 3210/3113 3182/3111 +f 2847/3115 3105/3128 2848/3102 2849/3126 +f 3105/3128 2751/3104 2848/3102 +f 2850/3100 2751/3104 3104/3105 +f 3104/3099 3103/3098 3100/3122 2850/3180 +f 3058/3116 3057/3181 3056/3114 3088/3115 +f 2851/3106 3099/3107 2850/3100 3100/3127 +f 3099/3124 3103/3098 2750/3109 2850/3182 +f 2852/3110 2848/3102 2749/3101 +f 2853/3113 2849/3126 2848/3102 2852/3110 +f 2852/3110 3096/3183 3095/3112 2853/3113 +f 2847/3115 3108/3114 2854/3116 3105/3128 +f 2855/3128 2740/3184 2924/3116 2856/3115 +f 2856/3115 2864/3126 2857/3102 2855/3128 +f 2855/3128 2857/3102 2858/3104 +f 2857/3102 2737/3101 2859/3100 2858/3104 +f 2859/3100 2860/3105 2858/3104 +f 2861/3122 2738/3098 2860/3099 2859/3185 +f 2859/3100 2862/3107 3025/3106 2861/3127 +f 2863/3109 2738/3098 2862/3124 2859/3186 +f 3021/3110 2737/3101 2857/3102 +f 2859/3100 2737/3101 2863/3103 +f 2857/3102 2864/3126 2938/3113 3021/3110 +f 2938/3113 3031/3111 3016/3112 3021/3110 +f 3185/3116 3187/3187 3184/3114 3199/3115 +f 2865/3115 2868/3128 2867/3102 2866/3126 +f 3053/3111 3054/3188 3083/3112 3082/3113 +f 2868/3128 3060/3104 2867/3102 +f 3059/3099 2746/3098 2869/3122 2870/3189 +f 2871/3106 2872/3107 2870/3100 2869/3127 +f 2872/3124 2746/3098 3055/3109 2870/3190 +f 2870/3100 3055/3103 3052/3101 +f 2874/3110 2867/3102 3052/3101 +f 2873/3113 2866/3126 2867/3102 2874/3110 +f 2874/3110 2747/3191 2880/3112 2873/3113 +f 2865/3115 3063/3114 3061/3116 2868/3128 +f 3221/3116 3222/3192 2876/3114 2820/3115 +f 3259/3112 3273/3110 3276/3113 2877/3111 +f 3246/3116 3244/3193 3245/3114 3261/3115 +f 2878/3112 3002/3110 2999/3113 3279/3111 +f 2880/3112 2747/3194 2879/3111 2873/3113 +f 2882/3116 3282/3195 3281/3114 2881/3115 +f 2884/3115 2893/3128 2892/3102 2883/3126 +f 2885/3100 3069/3101 2892/3102 3081/3104 +f 2893/3128 3081/3104 2892/3102 +f 2885/3100 3081/3104 2886/3105 +f 2886/3099 3078/3098 3075/3122 2885/3196 +f 3029/3116 2786/3197 2887/3114 3038/3115 +f 2888/3106 2889/3107 2885/3100 3075/3127 +f 2889/3124 3078/3098 2890/3109 2885/3198 +f 2885/3100 2890/3103 3069/3101 +f 3068/3110 2892/3102 3069/3101 +f 2891/3113 2883/3126 2892/3102 3068/3110 +f 3068/3110 3093/3199 3065/3112 2891/3113 +f 2884/3115 3086/3114 3085/3116 2893/3128 +f 3065/3112 3093/3200 3094/3111 2891/3113 +f 3263/3112 3262/3201 3283/3111 2909/3113 +f 2897/3102 3264/3110 2909/3113 2895/3126 +f 2910/3115 2896/3128 2897/3102 2895/3126 +f 2900/3100 2903/3101 2897/3102 2762/3104 +f 2896/3128 2762/3104 2897/3102 +f 2900/3100 2762/3104 2898/3105 +f 2898/3099 3275/3098 2899/3122 2900/3202 +f 3272/3106 2901/3107 2900/3100 2899/3127 +f 2901/3124 3275/3098 2902/3109 2900/3203 +f 2900/3100 2902/3103 2903/3101 +f 3180/3112 3198/3204 2904/3111 3176/3113 +f 3264/3110 2897/3102 2903/3101 +f 3215/3114 2757/3205 3214/3116 2905/3115 +f 3214/3116 2757/3206 2906/3128 2905/3115 +f 3028/3111 3037/3207 3027/3112 3049/3113 +f 3200/3110 2758/3208 2907/3112 2908/3113 +f 3264/3110 3262/3209 3263/3112 2909/3113 +f 2908/3113 2925/3126 2912/3102 3200/3110 +f 2910/3115 3280/3114 2911/3116 2896/3128 +f 3200/3110 2912/3102 3202/3101 +f 2912/3102 3209/3104 2921/3100 3202/3101 +f 2921/3100 2913/3103 3202/3101 +f 3204/3124 3205/3098 2913/3109 2921/3210 +f 2921/3100 3208/3127 2915/3106 3204/3107 +f 2917/3112 3242/3211 2916/3111 2919/3113 +f 2918/3099 3205/3098 3208/3122 2921/3212 +f 2935/3102 3243/3110 2919/3113 2920/3126 +f 2921/3100 3209/3104 2918/3105 +f 2922/3115 3253/3128 2935/3102 2920/3126 +f 2906/3128 3209/3104 2912/3102 +f 2923/3100 2933/3101 2935/3102 2761/3104 +f 3253/3128 2761/3104 2935/3102 +f 2923/3100 2761/3104 3250/3105 +f 2912/3102 2925/3126 2905/3115 2906/3128 +f 2924/3116 2740/3213 3030/3114 2856/3115 +f 3250/3099 3247/3098 3249/3122 2923/3214 +f 2929/3106 2930/3107 2923/3100 3249/3127 +f 2926/3114 2755/3215 2927/3116 2928/3115 +f 2907/3112 2758/3216 3219/3111 2908/3113 +f 2930/3124 3247/3098 2931/3109 2923/3217 +f 3136/3112 3135/3218 3152/3111 2984/3113 +f 2923/3100 2931/3103 2933/3101 +f 3235/3116 2932/3128 2994/3115 3237/3114 +f 3243/3110 2935/3102 2933/3101 +f 2934/3110 3220/3219 3241/3112 2992/3113 +f 2992/3113 2993/3126 2995/3102 2934/3110 +f 3243/3110 3242/3220 2917/3112 2919/3113 +f 2934/3110 2995/3102 2936/3101 +f 2922/3115 3257/3114 3256/3116 3253/3128 +f 2995/3102 3229/3104 2996/3100 2936/3101 +f 2996/3100 2937/3103 2936/3101 +f 3095/3112 3096/3221 3112/3111 2853/3113 +f 2939/3093 3154/3119 2950/3095 2951/3094 +f 2944/3096 2942/3117 2939/3093 2951/3094 +f 2941/3112 3047/3222 3048/3111 2940/3113 +f 2960/3115 3124/3128 2945/3102 2943/3126 +f 2976/3112 2975/3113 2942/3111 2944/3223 +f 2947/3100 2752/3101 2945/3102 2946/3104 +f 3124/3128 2946/3104 2945/3102 +f 2947/3100 2946/3104 2948/3105 +f 3154/3114 2957/3115 2949/3116 2950/3224 +f 2948/3099 3119/3098 3120/3122 2947/3225 +f 2949/3116 2957/3115 2952/3128 2950/3226 +f 3118/3106 2953/3107 2947/3100 3120/3127 +f 2952/3121 2790/3097 2951/3094 2950/3095 +f 2953/3124 3119/3098 2753/3109 2947/3227 +f 2961/3099 2965/3228 2966/3122 2954/3098 +f 2947/3100 2753/3103 2752/3101 +f 2967/3123 2968/3124 2954/3098 2966/3122 +f 2955/3110 2945/3102 2752/3101 +f 2968/3124 2965/3229 2789/3109 2954/3098 +f 2964/3113 2943/3126 2945/3102 2955/3110 +f 2956/3125 2944/3096 2951/3094 2973/3108 +f 2955/3110 3116/3230 3133/3112 2964/3113 +f 2956/3110 2975/3113 2976/3112 2944/3231 +f 2987/3116 2990/3232 2985/3114 3006/3115 +f 2958/3102 2952/3128 2957/3115 2979/3126 +f 2960/3115 3129/3114 2959/3116 3124/3128 +f 2952/3128 2958/3102 2790/3104 +f 2958/3102 2973/3101 2965/3100 2790/3104 +f 2965/3100 2961/3105 2790/3104 +f 3133/3112 3116/3233 3132/3111 2964/3113 +f 2965/3100 2968/3107 2967/3106 2966/3127 +f 3241/3112 3220/3234 3239/3111 2992/3113 +f 2969/3115 2971/3128 2970/3102 2986/3126 +f 2965/3100 2973/3101 2789/3103 +f 2978/3100 2980/3101 2970/3102 3145/3104 +f 2971/3128 3145/3104 2970/3102 +f 2978/3100 3145/3104 2972/3105 +f 2972/3099 3143/3098 2974/3122 2978/3235 +f 2956/3110 2973/3101 2958/3102 +f 3142/3106 3140/3107 2978/3100 2974/3127 +f 2958/3102 2979/3126 2975/3113 2956/3110 +f 3140/3124 3143/3098 2977/3109 2978/3236 +f 2978/3100 2977/3103 2980/3101 +f 3005/3112 3023/3110 3022/3113 2981/3111 +f 2983/3110 2970/3102 2980/3101 +f 2984/3113 2986/3126 2970/3102 2983/3110 +f 2787/3096 3023/3125 3005/3118 2981/3117 +f 2983/3110 3135/3237 3136/3112 2984/3113 +f 2969/3115 2988/3114 2989/3116 2971/3128 +f 2987/3116 3006/3115 2991/3128 2990/3238 +f 2991/3121 3008/3097 2788/3094 2990/3095 +f 2994/3115 2932/3128 2995/3102 2993/3126 +f 3008/3097 3010/3099 2998/3098 2788/3094 +f 2932/3128 3229/3104 2995/3102 +f 2996/3100 3229/3104 3228/3105 +f 3010/3099 3018/3239 3015/3122 2998/3098 +f 3228/3099 3225/3098 3226/3122 2996/3240 +f 3014/3123 3017/3124 2998/3098 3015/3122 +f 3011/3128 3282/3241 2882/3116 2881/3115 +f 3017/3124 3018/3242 3019/3109 2998/3098 +f 2999/3113 3002/3110 3013/3102 3000/3126 +f 3001/3108 2788/3094 2998/3098 3019/3109 +f 3023/3125 2787/3096 2788/3094 3001/3108 +f 3003/3100 3012/3104 3013/3102 2765/3101 +f 3002/3110 2765/3101 3013/3102 +f 3003/3100 2765/3101 3004/3103 +f 3004/3109 3284/3098 3285/3124 3003/3243 +f 3287/3106 3007/3127 3003/3100 3285/3107 +f 3009/3102 2991/3128 3006/3115 3024/3126 +f 3007/3122 3284/3098 3286/3099 3003/3244 +f 2991/3128 3009/3102 3008/3104 +f 3018/3100 3010/3105 3008/3104 +f 3003/3100 3286/3105 3012/3104 +f 3011/3128 3013/3102 3012/3104 +f 2881/3115 3000/3126 3013/3102 3011/3128 +f 3018/3100 3017/3107 3014/3106 3015/3127 +f 3016/3118 3031/3117 3020/3096 3021/3125 +f 2741/3094 2737/3108 3021/3125 3020/3096 +f 3009/3102 3024/3126 3022/3113 3023/3110 +f 2738/3098 2861/3122 3025/3123 2862/3124 +f 2741/3094 2740/3095 2855/3121 2858/3097 +f 3029/3116 3038/3115 3051/3128 2786/3245 +f 3051/3121 3040/3097 2785/3094 2786/3095 +f 3032/3099 2781/3246 3044/3122 2784/3098 +f 3034/3123 3046/3124 2784/3098 3044/3122 +f 2963/3120 2962/3119 3043/3095 3033/3121 +f 3046/3124 2781/3247 2782/3109 2784/3098 +f 3035/3125 2813/3108 3041/3094 3047/3096 +f 3036/3125 3037/3096 2785/3094 2783/3108 +f 3036/3110 3049/3113 3027/3112 3037/3248 +f 2815/3123 2816/3122 2742/3098 2814/3124 +f 3039/3102 3051/3128 3038/3115 3050/3126 +f 3051/3128 3039/3102 3040/3104 +f 3033/3121 3043/3095 3041/3094 3042/3097 +f 2781/3100 3032/3105 3040/3104 +f 3043/3095 2962/3119 3045/3093 3041/3094 +f 2781/3100 3046/3107 3034/3106 3044/3127 +f 3045/3093 3048/3117 3047/3096 3041/3094 +f 3039/3102 3050/3126 3049/3113 3036/3110 +f 2874/3125 3052/3108 2745/3094 2747/3096 +f 2871/3123 2869/3122 2746/3098 2872/3124 +f 3058/3116 3088/3115 3071/3128 3057/3249 +f 2868/3121 3062/3095 2745/3094 3060/3097 +f 3071/3121 3072/3097 2780/3094 3057/3095 +f 3061/3120 3063/3119 3062/3095 2868/3121 +f 3072/3097 3074/3099 3066/3098 2780/3094 +f 3074/3099 3077/3250 3076/3122 3066/3098 +f 3080/3123 3079/3124 3066/3098 3076/3122 +f 3079/3124 3077/3251 3067/3109 3066/3098 +f 3068/3125 3069/3108 3089/3094 3093/3096 +f 3084/3125 3054/3096 2780/3094 2778/3108 +f 3069/3108 2890/3109 3078/3098 3089/3094 +f 3084/3110 3082/3113 3083/3112 3054/3252 +f 3073/3102 3071/3128 3088/3115 3070/3126 +f 2888/3123 3075/3122 3078/3098 2889/3124 +f 3071/3128 3073/3102 3072/3104 +f 3073/3102 2778/3101 3077/3100 3072/3104 +f 3077/3100 3074/3105 3072/3104 +f 3077/3100 3079/3107 3080/3106 3076/3127 +f 3081/3097 3089/3094 3078/3098 2886/3099 +f 2893/3121 3087/3095 3089/3094 3081/3097 +f 3077/3100 2778/3101 3067/3103 +f 3084/3110 2778/3101 3073/3102 +f 3073/3102 3070/3126 3082/3113 3084/3110 +f 3085/3120 3086/3119 3087/3095 2893/3121 +f 3091/3093 3089/3094 3087/3095 3086/3119 +f 3091/3093 3094/3117 3093/3096 3089/3094 +f 2834/3123 2832/3124 2776/3098 3092/3122 +f 2852/3125 2749/3108 2748/3094 3096/3096 +f 2777/3094 3098/3095 2827/3121 2835/3097 +f 2851/3123 3100/3122 3103/3098 3099/3124 +f 3105/3121 3111/3095 2748/3094 2751/3097 +f 2777/3094 2831/3108 2830/3125 3106/3096 +f 2854/3120 3108/3119 3111/3095 3105/3121 +f 3110/3093 2748/3094 3111/3095 3108/3119 +f 3110/3093 3112/3117 3096/3096 2748/3094 +f 3139/3116 3123/3115 3114/3128 3113/3253 +f 3114/3121 3115/3097 2773/3094 3113/3095 +f 2955/3125 2752/3108 3121/3094 3116/3096 +f 3126/3099 3131/3254 3127/3122 2772/3098 +f 3117/3123 3130/3124 2772/3098 3127/3122 +f 3118/3123 3120/3122 3119/3098 2953/3124 +f 3130/3124 3131/3255 3134/3109 2772/3098 +f 3138/3125 3109/3096 2773/3094 2771/3108 +f 2946/3097 3121/3094 3119/3098 2948/3099 +f 3138/3110 3137/3113 2792/3112 3109/3256 +f 3125/3102 3114/3128 3123/3115 3122/3126 +f 3124/3121 3128/3095 3121/3094 2946/3097 +f 3114/3128 3125/3102 3115/3104 +f 3125/3102 2771/3101 3131/3100 3115/3104 +f 3131/3100 3126/3105 3115/3104 +f 2959/3120 3129/3119 3128/3095 3124/3121 +f 3131/3100 3130/3107 3117/3106 3127/3127 +f 3131/3100 2771/3101 3134/3103 +f 3138/3110 2771/3101 3125/3102 +f 3125/3102 3122/3126 3137/3113 3138/3110 +f 2983/3125 2980/3108 3146/3094 3135/3096 +f 3142/3123 2974/3122 3143/3098 3140/3124 +f 3145/3097 3146/3094 3143/3098 2972/3099 +f 3179/3116 3156/3115 3178/3128 3147/3257 +f 2971/3121 3148/3095 3146/3094 3145/3097 +f 3178/3121 3161/3097 3153/3094 3147/3095 +f 2989/3120 2988/3119 3148/3095 2971/3121 +f 3160/3099 3165/3258 3150/3122 3149/3098 +f 3167/3123 3166/3124 3149/3098 3150/3122 +f 3151/3093 3146/3094 3148/3095 2988/3119 +f 3166/3124 3165/3259 3170/3109 3149/3098 +f 3151/3093 3152/3117 3135/3096 3146/3094 +f 3169/3108 3153/3094 3149/3098 3170/3109 +f 3171/3125 3155/3096 3153/3094 3169/3108 +f 2927/3116 2755/3260 3158/3128 2928/3115 +f 3171/3110 3174/3113 2795/3112 3155/3261 +f 3177/3102 3173/3126 2928/3115 3158/3128 +f 3172/3102 3178/3128 3156/3115 3175/3126 +f 3163/3100 3183/3101 3177/3102 3157/3104 +f 3158/3128 3157/3104 3177/3102 +f 3163/3100 3157/3104 3192/3105 +f 3192/3099 3195/3098 3159/3122 3163/3262 +f 3178/3128 3172/3102 3161/3104 +f 3172/3102 3169/3101 3165/3100 3161/3104 +f 3165/3100 3160/3105 3161/3104 +f 3162/3106 3164/3107 3163/3100 3159/3127 +f 3165/3100 3166/3107 3167/3106 3150/3127 +f 3164/3124 3195/3098 3197/3109 3163/3263 +f 3163/3100 3197/3103 3183/3101 +f 3168/3110 3177/3102 3183/3101 +f 3165/3100 3169/3101 3170/3103 +f 3171/3110 3169/3101 3172/3102 +f 3172/3102 3175/3126 3174/3113 3171/3110 +f 3177/3102 3168/3110 3176/3113 3173/3126 +f 3168/3110 3198/3264 3180/3112 3176/3113 +f 2770/3096 3211/3125 2846/3118 3182/3117 +f 3190/3094 3198/3096 3168/3125 3183/3108 +f 3183/3108 3197/3109 3195/3098 3190/3094 +f 3185/3116 3199/3115 3186/3128 3187/3265 +f 3186/3121 3188/3097 3196/3094 3187/3095 +f 3188/3097 3201/3099 3189/3098 3196/3094 +f 3190/3094 3157/3097 3158/3121 2755/3095 +f 3201/3099 3206/3266 3191/3122 3189/3098 +f 3203/3123 3193/3124 3189/3098 3191/3122 +f 3195/3098 3192/3099 3157/3097 3190/3094 +f 3193/3124 3206/3267 3194/3109 3189/3098 +f 3207/3108 3196/3094 3189/3098 3194/3109 +f 3195/3098 3164/3124 3162/3123 3159/3122 +f 3211/3125 2770/3096 3196/3094 3207/3108 +f 3212/3102 3186/3128 3199/3115 3213/3126 +f 3186/3128 3212/3102 3188/3104 +f 3200/3125 3202/3108 2759/3094 2758/3096 +f 3212/3102 3207/3101 3206/3100 3188/3104 +f 3206/3100 3201/3105 3188/3104 +f 3202/3108 2913/3109 3205/3098 2759/3094 +f 3206/3100 3193/3107 3203/3106 3191/3127 +f 2915/3123 3208/3122 3205/3098 3204/3124 +f 3206/3100 3207/3101 3194/3103 +f 3209/3097 2759/3094 3205/3098 2918/3099 +f 3211/3110 3207/3101 3212/3102 +f 3212/3102 3213/3126 3210/3113 3211/3110 +f 2906/3121 2757/3095 2759/3094 3209/3097 +f 3238/3096 3236/3125 3218/3118 2875/3117 +f 2934/3125 2936/3108 3231/3094 3220/3096 +f 2819/3121 3224/3097 3223/3094 3222/3095 +f 3224/3097 2822/3099 3233/3098 3223/3094 +f 2997/3123 3226/3122 3225/3098 2736/3124 +f 2824/3123 3230/3124 3233/3098 3227/3122 +f 3229/3097 3231/3094 3225/3098 3228/3099 +f 2932/3121 3234/3095 3231/3094 3229/3097 +f 2825/3108 3223/3094 3233/3098 3232/3109 +f 3235/3120 3237/3119 3234/3095 2932/3121 +f 3236/3125 3238/3096 3223/3094 2825/3108 +f 3258/3096 3273/3125 3259/3118 2877/3117 +f 3243/3125 2933/3108 3252/3094 3242/3096 +f 3246/3116 3261/3115 3265/3128 3244/3268 +f 2933/3108 2931/3109 3247/3098 3252/3094 +f 3265/3121 3266/3097 2769/3094 3244/3095 +f 3266/3097 3248/3099 3251/3098 2769/3094 +f 2929/3123 3249/3122 3247/3098 2930/3124 +f 3248/3099 3269/3269 3268/3122 3251/3098 +f 3267/3123 3255/3124 3251/3098 3268/3122 +f 3253/3121 3254/3095 3252/3094 2761/3097 +f 3255/3124 3269/3270 3271/3109 3251/3098 +f 3256/3120 3257/3119 3254/3095 3253/3121 +f 3273/3125 3258/3096 2769/3094 3270/3108 +f 3274/3102 3265/3128 3261/3115 3277/3126 +f 3265/3128 3274/3102 3266/3104 +f 3274/3102 3270/3101 3269/3100 3266/3104 +f 3269/3100 3248/3105 3266/3104 +f 3264/3125 2903/3108 2763/3094 3262/3096 +f 3269/3100 3255/3107 3267/3106 3268/3127 +f 2903/3108 2902/3109 3275/3098 2763/3094 +f 3269/3100 3270/3101 3271/3103 +f 3272/3123 2899/3122 3275/3098 2901/3124 +f 3273/3110 3270/3101 3274/3102 +f 3274/3102 3277/3126 3276/3113 3273/3110 +f 2896/3121 3278/3095 2763/3094 2762/3097 +f 2911/3120 3280/3119 3278/3095 2896/3121 +f 2767/3096 3002/3125 2878/3118 3279/3117 +f 3011/3121 3012/3097 2766/3094 3282/3095 +f 2766/3094 2765/3108 3002/3125 2767/3096 +f 3012/3097 3286/3099 3284/3098 2766/3094 +f 3284/3098 3007/3122 3287/3123 3285/3124 +f 3290/3131 3325/3133 3288/3129 3289/3130 +f 3292/3133 3346/3131 3373/3134 3291/3132 +f 3293/3135 3294/3136 3292/3133 3291/3132 +f 3380/3137 3349/3139 3292/3133 3294/3136 +f 3375/3139 3377/3133 3374/3129 3371/3138 +f 3295/3140 3371/3138 3374/3129 +f 3377/3133 3379/3136 3366/3135 3296/3132 +f 3358/3134 3355/3131 3377/3133 3296/3132 +f 3488/3134 3486/3132 3325/3133 3290/3131 +f 3490/3143 3327/3144 3484/3141 3489/3142 +f 3465/3143 3464/3144 3347/3141 3297/3142 +f 3348/3145 3467/3146 3297/3142 3347/3141 +f 3298/3148 3300/3146 3302/3142 3448/3147 +f 3299/3143 3447/3149 3448/3147 3302/3142 +f 3301/3145 3303/3141 3302/3142 3300/3146 +f 3303/3141 3453/3144 3299/3143 3302/3142 +f 3304/3148 3305/3146 3433/3142 3441/3147 +f 3306/3143 3435/3149 3441/3147 3433/3142 +f 3322/3135 3485/3136 3325/3133 3486/3132 +f 3420/3148 3419/3146 3307/3142 3427/3147 +f 3422/3143 3421/3149 3427/3147 3307/3142 +f 3308/3135 3410/3132 3309/3133 3404/3136 +f 3309/3133 3409/3139 3310/3137 3404/3136 +f 3311/3143 3312/3142 3330/3147 3399/3149 +f 3312/3142 3313/3146 3331/3148 3330/3147 +f 3312/3142 3336/3141 3314/3145 3313/3146 +f 3311/3143 3397/3144 3336/3141 3312/3142 +f 3387/3143 3393/3149 3394/3150 3361/3144 +f 3315/3141 3391/3142 3387/3143 3361/3144 +f 3317/3147 3321/3142 3320/3143 3316/3149 +f 3318/3148 3319/3146 3321/3142 3317/3147 +f 3460/3145 3459/3141 3321/3142 3319/3146 +f 3459/3141 3458/3144 3320/3143 3321/3142 +f 3291/3148 3373/3147 3372/3142 3376/3146 +f 3372/3142 3380/3141 3294/3145 3376/3146 +f 3289/3130 3288/3129 3491/3151 +f 3323/3140 3339/3129 3324/3138 +f 3484/3137 3327/3139 3325/3133 3485/3136 +f 3339/3129 3333/3133 3474/3139 3324/3138 +f 3327/3139 3482/3138 3288/3129 3325/3133 +f 3326/3140 3288/3129 3482/3138 +f 3333/3133 3475/3136 3328/3137 3474/3139 +f 3329/3151 3400/3130 3337/3129 +f 3337/3129 3400/3130 3399/3131 3335/3133 +f 3330/3134 3331/3132 3335/3133 3399/3131 +f 3333/3133 3332/3132 3477/3135 3475/3136 +f 3398/3135 3314/3136 3335/3133 3331/3132 +f 3333/3133 3480/3131 3334/3134 3332/3132 +f 3336/3137 3397/3139 3335/3133 3314/3136 +f 3339/3129 3481/3130 3480/3131 3333/3133 +f 3397/3139 3341/3138 3337/3129 3335/3133 +f 3338/3151 3481/3130 3339/3129 +f 3340/3140 3342/3129 3343/3138 +f 3396/3140 3337/3129 3341/3138 +f 3342/3129 3354/3133 3464/3139 3343/3138 +f 3344/3151 3345/3130 3350/3129 +f 3346/3131 3292/3133 3350/3129 3345/3130 +f 3354/3133 3348/3136 3347/3137 3464/3139 +f 3354/3133 3468/3132 3466/3135 3348/3136 +f 3349/3139 3351/3138 3350/3129 3292/3133 +f 3383/3140 3350/3129 3351/3138 +f 3354/3133 3470/3131 3469/3134 3468/3132 +f 3381/3153 3355/3149 3352/3150 3353/3152 +f 3342/3129 3357/3130 3470/3131 3354/3133 +f 3356/3143 3375/3144 3352/3150 3355/3149 +f 3358/3147 3362/3142 3356/3143 3355/3149 +f 3472/3151 3357/3130 3342/3129 +f 3359/3140 3369/3129 3360/3138 +f 3369/3129 3363/3133 3361/3139 3360/3138 +f 3296/3148 3365/3146 3362/3142 3358/3147 +f 3363/3133 3364/3136 3315/3137 3361/3139 +f 3363/3133 3389/3132 3388/3135 3364/3136 +f 3366/3154 3379/3145 3365/3146 3296/3148 +f 3363/3133 3393/3131 3392/3134 3389/3132 +f 3379/3145 3378/3141 3362/3142 3365/3146 +f 3369/3129 3368/3130 3393/3131 3363/3133 +f 3367/3151 3368/3130 3369/3129 +f 3382/3150 3346/3149 3345/3153 3344/3152 +f 3378/3141 3375/3144 3356/3143 3362/3142 +f 3382/3150 3349/3144 3370/3143 3346/3149 +f 3352/3150 3375/3144 3371/3155 3295/3156 +f 3370/3143 3372/3142 3373/3147 3346/3149 +f 3376/3146 3294/3145 3293/3154 3291/3148 +f 3378/3137 3379/3136 3377/3133 3375/3139 +f 3370/3143 3349/3144 3380/3141 3372/3142 +f 3353/3151 3374/3129 3381/3130 +f 3374/3129 3377/3133 3355/3131 3381/3130 +f 3382/3150 3383/3156 3351/3155 3349/3144 +f 3386/3150 3458/3144 3384/3155 3456/3156 +f 3386/3150 3316/3149 3320/3143 3458/3144 +f 3319/3146 3318/3148 3385/3154 3460/3145 +f 3386/3150 3462/3152 3463/3153 3316/3149 +f 3360/3155 3361/3144 3394/3150 3359/3156 +f 3364/3145 3390/3146 3391/3142 3315/3141 +f 3388/3154 3389/3148 3390/3146 3364/3145 +f 3389/3148 3392/3147 3391/3142 3390/3146 +f 3392/3147 3393/3149 3387/3143 3391/3142 +f 3368/3153 3367/3152 3394/3150 3393/3149 +f 3341/3155 3397/3144 3395/3150 3396/3156 +f 3311/3143 3399/3149 3395/3150 3397/3144 +f 3398/3154 3331/3148 3313/3146 3314/3145 +f 3400/3153 3329/3152 3395/3150 3399/3149 +f 3401/3150 3409/3144 3402/3155 3408/3156 +f 3401/3150 3407/3149 3406/3143 3409/3144 +f 3406/3143 3403/3142 3310/3141 3409/3144 +f 3403/3142 3405/3146 3404/3145 3310/3141 +f 3405/3146 3410/3148 3308/3154 3404/3145 +f 3403/3142 3411/3147 3410/3148 3405/3146 +f 3406/3143 3407/3149 3411/3147 3403/3142 +f 3401/3150 3413/3152 3414/3153 3407/3149 +f 3408/3140 3402/3138 3412/3129 +f 3409/3139 3309/3133 3412/3129 3402/3138 +f 3411/3134 3407/3131 3309/3133 3410/3132 +f 3407/3131 3414/3130 3412/3129 3309/3133 +f 3413/3151 3412/3129 3414/3130 +f 3417/3150 3423/3144 3416/3155 3415/3156 +f 3417/3150 3421/3149 3422/3143 3423/3144 +f 3422/3143 3307/3142 3418/3141 3423/3144 +f 3307/3142 3419/3146 3424/3145 3418/3141 +f 3419/3146 3420/3148 3426/3154 3424/3145 +f 3417/3150 3429/3152 3430/3153 3421/3149 +f 3415/3140 3416/3138 3428/3129 +f 3428/3129 3416/3138 3423/3139 3425/3133 +f 3418/3137 3424/3136 3425/3133 3423/3139 +f 3426/3135 3420/3132 3425/3133 3424/3136 +f 3427/3134 3421/3131 3425/3133 3420/3132 +f 3421/3131 3430/3130 3428/3129 3425/3133 +f 3429/3151 3428/3129 3430/3130 +f 3431/3150 3439/3144 3438/3155 3437/3156 +f 3431/3150 3435/3149 3306/3143 3439/3144 +f 3306/3143 3433/3142 3432/3141 3439/3144 +f 3434/3145 3432/3141 3433/3142 3305/3146 +f 3305/3146 3304/3148 3440/3154 3434/3145 +f 3431/3150 3444/3152 3436/3153 3435/3149 +f 3437/3140 3438/3138 3443/3129 +f 3439/3139 3442/3133 3443/3129 3438/3138 +f 3432/3137 3434/3136 3442/3133 3439/3139 +f 3440/3135 3304/3132 3442/3133 3434/3136 +f 3441/3134 3435/3131 3442/3133 3304/3132 +f 3435/3131 3436/3130 3443/3129 3442/3133 +f 3444/3151 3443/3129 3436/3130 +f 3446/3150 3453/3144 3451/3155 3445/3156 +f 3446/3150 3447/3149 3299/3143 3453/3144 +f 3300/3146 3298/3148 3455/3154 3301/3145 +f 3446/3150 3449/3152 3450/3153 3447/3149 +f 3445/3140 3451/3138 3452/3129 +f 3453/3139 3454/3133 3452/3129 3451/3138 +f 3303/3137 3301/3136 3454/3133 3453/3139 +f 3455/3135 3298/3132 3454/3133 3301/3136 +f 3448/3134 3447/3131 3454/3133 3298/3132 +f 3447/3131 3450/3130 3452/3129 3454/3133 +f 3449/3151 3452/3129 3450/3130 +f 3456/3140 3384/3138 3457/3129 +f 3457/3129 3384/3138 3458/3139 3461/3133 +f 3459/3137 3460/3136 3461/3133 3458/3139 +f 3385/3135 3318/3132 3461/3133 3460/3136 +f 3317/3134 3316/3131 3461/3133 3318/3132 +f 3316/3131 3463/3130 3457/3129 3461/3133 +f 3462/3151 3457/3129 3463/3130 +f 3343/3155 3464/3144 3471/3150 3340/3156 +f 3465/3143 3470/3149 3471/3150 3464/3144 +f 3466/3154 3468/3148 3467/3146 3348/3145 +f 3468/3148 3469/3147 3297/3142 3467/3146 +f 3469/3147 3470/3149 3465/3143 3297/3142 +f 3357/3153 3472/3152 3471/3150 3470/3149 +f 3324/3155 3474/3144 3473/3150 3323/3156 +f 3479/3143 3480/3149 3473/3150 3474/3144 +f 3328/3141 3476/3142 3479/3143 3474/3144 +f 3476/3142 3328/3141 3475/3145 3478/3146 +f 3477/3154 3332/3148 3478/3146 3475/3145 +f 3334/3147 3480/3149 3479/3143 3476/3142 +f 3476/3142 3478/3146 3332/3148 3334/3147 +f 3481/3153 3338/3152 3473/3150 3480/3149 +f 3482/3155 3327/3144 3483/3150 3326/3156 +f 3490/3143 3290/3149 3483/3150 3327/3144 +f 3485/3145 3487/3146 3489/3142 3484/3141 +f 3322/3154 3486/3148 3487/3146 3485/3145 +f 3486/3148 3488/3147 3489/3142 3487/3146 +f 3488/3147 3290/3149 3490/3143 3489/3142 +f 3289/3153 3491/3152 3483/3150 3290/3149 +# 564 polygons - 120 triangles + +# +# object eyes +# + +v -1.193957 2.214023 7.605473 +v -1.280243 2.291366 7.737893 +v -1.255382 2.291366 7.795282 +v -1.246853 2.249702 7.625843 +v -1.224419 2.214023 7.639673 +v -1.238627 2.214023 7.727993 +v -1.264265 2.249702 7.734083 +v -1.267589 2.249702 7.678042 +v 1.209488 2.422336 7.583922 +v 1.224386 2.458018 7.639663 +v -1.066865 2.456882 7.793932 +v -1.050239 2.421533 7.815474 +v -1.104296 2.421533 7.837072 +v -1.100132 2.380259 7.852973 +v -1.150505 2.380673 7.860023 +v -1.211678 2.336021 7.841783 +v -1.241960 2.249702 7.785593 +v -1.200056 2.422337 7.822913 +v -1.143650 2.458019 7.817392 +v -1.186232 2.458019 7.800473 +v -1.208672 2.380673 7.836893 +v -1.260065 2.336021 7.798674 +v 1.260803 2.291365 7.617224 +v 1.283918 2.291365 7.675393 +v 1.267556 2.249701 7.678032 +v 1.285790 2.336020 7.739202 +v 1.255352 2.380672 7.795273 +v 1.163111 2.336020 7.540062 +v 1.161788 2.291365 7.545644 +v 1.099307 2.291365 7.541953 +v 1.053683 2.291779 7.564423 +v 1.101938 2.249701 7.558302 +v 1.157990 2.249701 7.561633 +v 1.106162 2.214022 7.584554 +v 1.246820 2.249701 7.625832 +v 1.193924 2.214022 7.605463 +v 1.209488 2.249701 7.583922 +v 1.219190 2.291365 7.570513 +v 1.050209 2.421532 7.815463 +v 1.110947 2.456881 7.811563 +v 1.241930 2.422336 7.785583 +v 1.200026 2.422336 7.822903 +v 1.211648 2.336020 7.841772 +v 1.066838 2.456881 7.793921 +v 1.011284 2.421532 7.774242 +v 1.104266 2.421532 7.837062 +v 1.100102 2.380258 7.852962 +v 1.147844 2.422336 7.843634 +v 1.208642 2.380672 7.836883 +v 1.208642 2.291365 7.836883 +v 1.200026 2.249701 7.822903 +v 1.147844 2.249701 7.843634 +v 1.084970 2.193808 7.770433 +v 1.150475 2.380672 7.860013 +v 1.110947 2.215156 7.811563 +v 1.050209 2.250505 7.815463 +v 1.039844 2.291779 7.828873 +v 1.011284 2.250505 7.774242 +v 1.004021 2.291779 7.606213 +v 0.994034 2.250505 7.667023 +v 0.989960 2.250505 7.722672 +v 0.977228 2.291779 7.663423 +v 0.996458 2.291779 7.782943 +v 1.036229 2.336020 7.833552 +v 1.100102 2.291779 7.852962 +v 1.039844 2.380258 7.828873 +v 0.991283 2.336020 7.785973 +v 0.996458 2.380258 7.782943 +v 0.989960 2.421532 7.722672 +v 1.017674 2.456881 7.718233 +v 1.020998 2.456881 7.672812 +v 1.101938 2.422336 7.558302 +v 1.157990 2.422336 7.561633 +v 1.193924 2.458018 7.605463 +v 1.050563 2.336020 7.559623 +v 0.972686 2.291779 7.725462 +v 0.966659 2.336020 7.726423 +v 0.971363 2.336020 7.662163 +v 0.972686 2.380258 7.725462 +v 0.977228 2.380258 7.663423 +v 0.994034 2.421532 7.667023 +v 1.040612 2.456881 7.630934 +v 0.999119 2.336020 7.602882 +v 1.053683 2.380258 7.564423 +v 1.004021 2.380258 7.606213 +v 1.018070 2.421532 7.615693 +v -1.163141 2.336021 7.540072 +v -1.098419 2.336021 7.536263 +v -1.161821 2.291366 7.545652 +v -1.101971 2.249702 7.558311 +v -0.999149 2.336021 7.602892 +v -1.062653 2.250506 7.578233 +v -1.004051 2.291780 7.606223 +v -1.053713 2.291780 7.564434 +v -1.050593 2.336021 7.559633 +v -1.004051 2.380259 7.606223 +v -1.018100 2.421533 7.615703 +v -0.994064 2.421533 7.667033 +v -0.977258 2.380259 7.663434 +v -0.971393 2.336021 7.662172 +v -0.994064 2.250506 7.667033 +v -1.018100 2.250506 7.615703 +v -1.040642 2.215157 7.630943 +v -0.996488 2.380259 7.782953 +v -1.011314 2.421533 7.774252 +v -0.989990 2.421533 7.722682 +v -0.991313 2.336021 7.785983 +v -0.966689 2.336021 7.726432 +v -0.972716 2.380259 7.725472 +v -1.021028 2.456882 7.672822 +v -1.040642 2.456882 7.630942 +v -1.062653 2.421533 7.578233 +v -1.053713 2.380259 7.564434 +v -1.099337 2.380673 7.541963 +v -1.209518 2.422337 7.583933 +v -1.224416 2.458019 7.639673 +v -1.246850 2.422337 7.625843 +v -1.260833 2.380673 7.617232 +v -1.158020 2.422337 7.561644 +v -1.101968 2.422337 7.558311 +v -1.193954 2.458019 7.605473 +v -1.151930 2.458019 7.587293 +v -1.283948 2.380673 7.675403 +v -1.267586 2.422337 7.678042 +v -1.264262 2.422337 7.734083 +v -1.238624 2.458019 7.727993 +v -1.241336 2.458019 7.682242 +v -1.289654 2.336021 7.674472 +v -1.283951 2.291366 7.675403 +v -1.285820 2.336021 7.739213 +v -1.280243 2.380673 7.737893 +v -1.255382 2.380673 7.795282 +v -1.241960 2.422337 7.785593 +v -1.220426 2.458019 7.770022 +v -1.265714 2.336021 7.614233 +v -0.977258 2.291780 7.663434 +v -0.989990 2.250506 7.722682 +v -0.996488 2.291780 7.782953 +v -1.017704 2.215157 7.718244 +v -1.066865 2.215157 7.793933 +v -1.011314 2.250506 7.774252 +v -1.050239 2.250506 7.815474 +v -1.104296 2.250506 7.837072 +v -1.150505 2.291366 7.860023 +v -1.208672 2.291366 7.836893 +v -1.100132 2.291780 7.852973 +v -1.147874 2.249702 7.843643 +v -1.200056 2.249702 7.822913 +v 1.260035 2.336020 7.798663 +v 1.264232 2.249701 7.734073 +v 1.280213 2.291365 7.737883 +v 1.255352 2.291365 7.795273 +v 1.241930 2.249701 7.785583 +v 1.238594 2.214022 7.727982 +v 1.246820 2.422336 7.625832 +v 1.280213 2.380672 7.737883 +v 1.289624 2.336020 7.674463 +v 1.265681 2.336020 7.614223 +v 1.260803 2.380672 7.617224 +v 1.283918 2.380672 7.675393 +v 1.264232 2.422336 7.734073 +v 1.267556 2.422336 7.678032 +v 1.066838 2.215156 7.793922 +v 1.035074 2.215156 7.760293 +v 1.020998 2.215156 7.672813 +v 1.076966 2.215156 7.600334 +v 1.040612 2.215156 7.630934 +v 1.018070 2.250505 7.615693 +v 1.099307 2.380672 7.541953 +v 1.161788 2.380672 7.545644 +v 1.098389 2.336020 7.536252 +v 1.219190 2.380672 7.570513 +v 1.222577 2.336020 7.565833 +v 1.104266 2.250505 7.837062 +v 1.098650 2.336020 7.858512 +v 1.151393 2.336020 7.865713 +v 1.150475 2.291365 7.860013 +v 1.062623 2.421532 7.578224 +v -1.151933 2.214023 7.587293 +v -1.099337 2.291366 7.541963 +v -1.158023 2.249702 7.561644 +v -1.161818 2.380673 7.545652 +v -1.222610 2.336021 7.565843 +v -1.219220 2.380673 7.570523 +v -1.151423 2.336021 7.865724 +v -1.098680 2.336021 7.858522 +v -1.039874 2.380259 7.828883 +v -1.036259 2.336021 7.833563 +v -1.039874 2.291780 7.828883 +v -0.972716 2.291780 7.725472 +v -1.209521 2.249702 7.583933 +v -1.219223 2.291366 7.570523 +v -1.260836 2.291366 7.617232 +v -1.158929 2.179406 7.653923 +v -1.124924 2.168171 7.700993 +v -1.167830 2.172956 7.694093 +v -1.118021 2.172956 7.658063 +v -1.176980 2.192474 7.628963 +v -1.053572 2.188796 7.712454 +v -1.095311 2.174477 7.705733 +v -1.241339 2.214023 7.682243 +v -1.207364 2.187410 7.687733 +v -1.085000 2.193809 7.770442 +v -1.220426 2.214023 7.770023 +v -1.138184 2.187410 7.783433 +v -1.110977 2.215157 7.811573 +v -1.143650 2.214023 7.817393 +v -1.186232 2.214023 7.800473 +v -1.131824 2.172956 7.743893 +v 1.124891 2.168170 7.700983 +v -1.104284 2.180867 7.745483 +v -1.131824 2.499083 7.743893 +v 1.131794 2.499082 7.743883 +v -1.196942 2.192474 7.753043 +v 1.196909 2.479567 7.753034 +v -1.171970 2.179406 7.734983 +v 1.171937 2.492632 7.734972 +v 1.167797 2.499082 7.694084 +v 1.158896 2.492632 7.653913 +v -1.035104 2.215157 7.760303 +v 1.176947 2.479567 7.628953 +v 1.111628 2.484628 7.618543 +v 1.151900 2.458018 7.587284 +v 1.207331 2.484628 7.687723 +v -1.111661 2.187410 7.618554 +v -1.065224 2.193809 7.647533 +v -1.091369 2.180867 7.665203 +v 1.117988 2.499082 7.658052 +v -1.106195 2.214023 7.584563 +v -1.076999 2.215157 7.600343 +v -1.021028 2.215157 7.672823 +v -1.167827 2.499083 7.694093 +v 1.104254 2.491171 7.745472 +v -1.196939 2.479568 7.753043 +v 1.084970 2.478229 7.770432 +v 1.035074 2.456881 7.760293 +v -1.158926 2.492633 7.653923 +v -1.124921 2.503868 7.700993 +v -1.053572 2.483246 7.712453 +v -1.095311 2.497565 7.705732 +v -1.138184 2.484629 7.783432 +v -1.091366 2.491172 7.665203 +v -1.171967 2.492633 7.734982 +v -1.118018 2.499083 7.658062 +v -1.104284 2.491172 7.745482 +v -1.110977 2.456882 7.811573 +v -1.085000 2.478230 7.770442 +v -1.207361 2.484629 7.687733 +v -1.147874 2.422337 7.843643 +v 1.131794 2.172955 7.743883 +v -1.076996 2.456882 7.600343 +v -1.065224 2.478230 7.647532 +v -1.111658 2.484629 7.618554 +v -1.106192 2.458019 7.584563 +v 1.196909 2.192473 7.753034 +v 1.224386 2.214022 7.639663 +v 1.241306 2.214022 7.682233 +v -1.176977 2.479568 7.628963 +v 1.207331 2.187409 7.687723 +v 1.167797 2.172955 7.694084 +v 1.158896 2.179408 7.653913 +v 1.220396 2.458018 7.770014 +v -1.035104 2.456882 7.760303 +v -1.017704 2.456882 7.718244 +v 1.238594 2.458018 7.727982 +v 1.241306 2.458018 7.682232 +v 1.062623 2.250505 7.578224 +v 1.106162 2.458018 7.584554 +v 1.017674 2.215156 7.718233 +v 1.065194 2.478229 7.647522 +v 1.076966 2.456881 7.600334 +v 1.091336 2.491171 7.665193 +v 1.151900 2.214022 7.587284 +v 1.111628 2.187409 7.618543 +v 1.065194 2.193808 7.647523 +v 1.053542 2.483245 7.712442 +v 1.095281 2.497564 7.705724 +v 1.117988 2.172955 7.658053 +v 1.104254 2.180866 7.745473 +v 1.053542 2.188795 7.712443 +v 1.143620 2.214022 7.817383 +v 1.091336 2.180866 7.665193 +v 1.143620 2.458018 7.817383 +v 1.138154 2.484628 7.783422 +v 1.186202 2.458018 7.800463 +v 1.176947 2.192473 7.628953 +v 1.095281 2.174476 7.705724 +v 1.220396 2.214022 7.770014 +v 1.124891 2.503867 7.700983 +v 1.186202 2.214022 7.800463 +v 1.171937 2.179408 7.734973 +v 1.138154 2.187409 7.783423 +# 292 vertices + +vt 0.269887 -1.845210 0.000000 +vt 0.249101 -1.780560 0.000000 +vt 0.311165 -1.782002 0.000000 +vt 0.062886 -1.501080 0.000000 +vt 0.062886 -1.596038 0.000000 +vt 0.003238 -1.595291 0.000000 +vt 0.003238 -1.501080 0.000000 +vt 0.187038 -1.689922 0.000000 +vt 0.249101 -1.688648 0.000000 +vt 0.187038 -1.782002 0.000000 +vt 0.062886 -1.689922 0.000000 +vt 0.003238 -1.688648 0.000000 +vt 0.124962 -1.688556 0.000000 +vt 0.124962 -1.780455 0.000000 +vt 0.062433 -1.782002 0.000000 +vt 0.003238 -1.780560 0.000000 +vt 0.187038 -1.312237 0.000000 +vt 0.249101 -1.313511 0.000000 +vt 0.249101 -1.221600 0.000000 +vt 0.187038 -1.220157 0.000000 +vt 0.683594 -1.312237 0.000000 +vt 0.683594 -1.220157 0.000000 +vt 0.745657 -1.221600 0.000000 +vt 0.745657 -1.313511 0.000000 +vt 0.745657 -1.406868 0.000000 +vt 0.807721 -1.312237 0.000000 +vt 0.807721 -1.406121 0.000000 +vt 0.869796 -1.313603 0.000000 +vt 0.869796 -1.406922 0.000000 +vt 0.869796 -1.501080 0.000000 +vt 0.931872 -1.406121 0.000000 +vt 0.931872 -1.501080 0.000000 +vt 0.931872 -1.689922 0.000000 +vt 0.931872 -1.596038 0.000000 +vt 0.996351 -1.595291 0.000000 +vt 0.996351 -1.688648 0.000000 +vt 0.996351 -1.780560 0.000000 +vt 0.931872 -1.782002 0.000000 +vt 0.996351 -1.221600 0.000000 +vt 0.996351 -1.313511 0.000000 +vt 0.931872 -1.312237 0.000000 +vt 0.931872 -1.220157 0.000000 +vt 0.869796 -1.221704 0.000000 +vt 0.996351 -1.406868 0.000000 +vt 0.996351 -1.501080 0.000000 +vt 0.807721 -1.220157 0.000000 +vt 0.187038 -1.596038 0.000000 +vt 0.124962 -1.595238 0.000000 +vt 0.124962 -1.501080 0.000000 +vt 0.003238 -1.406868 0.000000 +vt 0.062886 -1.406121 0.000000 +vt 0.062886 -1.312237 0.000000 +vt 0.003238 -1.313511 0.000000 +vt 0.003238 -1.221600 0.000000 +vt 0.062433 -1.220157 0.000000 +vt 0.249101 -1.406868 0.000000 +vt 0.187038 -1.406121 0.000000 +vt 0.187038 -1.501080 0.000000 +vt 0.249101 -1.501080 0.000000 +vt 0.311165 -1.501080 0.000000 +vt 0.249101 -1.595291 0.000000 +vt 0.311165 -1.596038 0.000000 +vt 0.373240 -1.501080 0.000000 +vt 0.373240 -1.595238 0.000000 +vt 0.435316 -1.596038 0.000000 +vt 0.373240 -1.688556 0.000000 +vt 0.435316 -1.689922 0.000000 +vt 0.311165 -1.689922 0.000000 +vt 0.373240 -1.780455 0.000000 +vt 0.869796 -1.688556 0.000000 +vt 0.869796 -1.780455 0.000000 +vt 0.725273 -1.845092 0.000000 +vt 0.807721 -1.782002 0.000000 +vt 0.745657 -1.780560 0.000000 +vt 0.839119 -1.857477 0.000000 +vt 0.807721 -1.501080 0.000000 +vt 0.807721 -1.689922 0.000000 +vt 0.807721 -1.596038 0.000000 +vt 0.745657 -1.595291 0.000000 +vt 0.745657 -1.688648 0.000000 +vt 0.683594 -1.689922 0.000000 +vt 0.683594 -1.596038 0.000000 +vt 0.621518 -1.688556 0.000000 +vt 0.621518 -1.595238 0.000000 +vt 0.497379 -1.595291 0.000000 +vt 0.497379 -1.688648 0.000000 +vt 0.559443 -1.689922 0.000000 +vt 0.559443 -1.596038 0.000000 +vt 0.621518 -1.501080 0.000000 +vt 0.683594 -1.501080 0.000000 +vt 0.745657 -1.501080 0.000000 +vt 0.683594 -1.406121 0.000000 +vt 0.621518 -1.313603 0.000000 +vt 0.621518 -1.221704 0.000000 +vt 0.621518 -1.406922 0.000000 +vt 0.559443 -1.406121 0.000000 +vt 0.559443 -1.312237 0.000000 +vt 0.559443 -1.220157 0.000000 +vt 0.373240 -1.313603 0.000000 +vt 0.373240 -1.221704 0.000000 +vt 0.311165 -1.220157 0.000000 +vt 0.311165 -1.312237 0.000000 +vt 0.497379 -1.406868 0.000000 +vt 0.435316 -1.406121 0.000000 +vt 0.435316 -1.501080 0.000000 +vt 0.497379 -1.501080 0.000000 +vt 0.559443 -1.501080 0.000000 +vt 0.497379 -1.221600 0.000000 +vt 0.497379 -1.313511 0.000000 +vt 0.435316 -1.312237 0.000000 +vt 0.435316 -1.220157 0.000000 +vt 0.497379 -1.780560 0.000000 +vt 0.435316 -1.782002 0.000000 +vt 0.373240 -1.406922 0.000000 +vt 0.311165 -1.406121 0.000000 +vt 0.124962 -1.313603 0.000000 +vt 0.124962 -1.406922 0.000000 +vt 0.124962 -1.221704 0.000000 +vt 0.559443 -1.782002 0.000000 +vt 0.621518 -1.780455 0.000000 +vt 0.683594 -1.782002 0.000000 +vt 0.869796 -1.595238 0.000000 +vt 0.383733 -1.857477 0.000000 +vt 0.484898 -1.998854 0.000000 +vt 0.598390 -1.926414 0.000000 +vt 0.698942 -1.901678 0.000000 +vt 0.296734 -1.902025 0.000000 +vt 0.397286 -1.928533 0.000000 +vt 0.196183 -1.927629 0.000000 +vt 0.156040 -1.857477 0.000000 +vt 0.497838 -1.901678 0.000000 +vt 0.611426 -1.857086 0.000000 +vt 0.044408 -1.845210 0.000000 +vt 0.097587 -1.902025 0.000000 +vt 0.097587 -1.928533 0.000000 +vt 0.799494 -1.928533 0.000000 +vt 0.902003 -1.100134 0.000000 +vt 0.799494 -1.073626 0.000000 +vt 0.501223 -1.003304 0.000000 +vt 0.955181 -1.845210 0.000000 +vt 0.156040 -1.144682 0.000000 +vt 0.097587 -1.100134 0.000000 +vt 0.044408 -1.156949 0.000000 +vt 0.902003 -1.902025 0.000000 +vt 0.196183 -1.074530 0.000000 +vt 0.296734 -1.100134 0.000000 +vt 0.397286 -1.073626 0.000000 +vt 0.269887 -1.156949 0.000000 +vt 0.383733 -1.144682 0.000000 +vt 0.497580 -1.845092 0.000000 +vt 0.497838 -1.100482 0.000000 +vt 0.598390 -1.075745 0.000000 +vt 0.698942 -1.100482 0.000000 +vt 0.611426 -1.145073 0.000000 +vt 0.725273 -1.157067 0.000000 +vt 0.902003 -1.074530 0.000000 +vt 0.955181 -1.156949 0.000000 +vt 0.839119 -1.144682 0.000000 +vt 0.497580 -1.157067 0.000000 +vt -0.036167 -1.195114 0.000000 +vt -0.036161 -1.807049 0.000000 +vt -0.036161 -1.195111 0.000000 +# 162 texture coords + +g eyes +usemtl _Sharkgreatwhiteshark_eye +f 3689/3271 3496/3280 3492/3272 3670/3273 +f 3494/3276 3513/3277 3621/3274 3493/3275 +f 3492/3272 3496/3280 3495/3278 3682/3279 +f 3498/3281 3508/3282 3494/3276 3493/3275 +f 3496/3280 3692/3284 3499/3283 3495/3278 +f 3497/3285 3498/3281 3499/3283 3692/3284 +f 3695/3286 3508/3282 3498/3281 3497/3285 +f 3565/3289 3501/3290 3646/3287 3500/3288 +f 3502/3293 3503/3294 3596/3291 3754/3292 +f 3504/3296 3505/3297 3678/3295 3503/3294 +f 3740/3298 3506/3299 3505/3297 3504/3296 +f 3512/3301 3507/3302 3676/3300 3506/3299 +f 3494/3305 3508/3306 3639/3303 3636/3304 +f 3695/3307 3699/3308 3639/3303 3508/3306 +f 3509/3311 3511/3312 3625/3309 3624/3310 +f 3511/3312 3509/3311 3740/3298 3510/3313 +f 3740/3298 3509/3311 3512/3301 3506/3299 +f 3623/3314 3512/3301 3509/3311 3624/3310 +f 3623/3314 3513/3315 3507/3302 3512/3301 +f 3507/3302 3513/3315 3494/3305 3636/3304 +f 3502/3293 3737/3316 3504/3296 3503/3294 +f 3514/3317 3515/3318 3516/3283 3526/3278 +f 3516/3283 3515/3318 3642/3275 3641/3281 +f 3648/3319 3517/3274 3642/3275 3515/3318 +f 3652/3322 3532/3323 3518/3320 3647/3321 +f 3652/3322 3756/3325 3753/3324 3532/3323 +f 3646/3287 3650/3327 3663/3326 3500/3288 +f 3649/3328 3664/3329 3663/3326 3650/3327 +f 3529/3331 3520/3332 3519/3330 3664/3329 +f 3520/3332 3521/3334 3662/3333 3519/3330 +f 3523/3336 3758/3337 3522/3335 3521/3334 +f 3520/3332 3524/3338 3523/3336 3521/3334 +f 3764/3273 3525/3339 3523/3336 3524/3338 +f 3747/3280 3526/3278 3516/3283 3748/3284 +f 3527/3272 3528/3279 3526/3278 3747/3280 +f 3524/3338 3528/3279 3527/3272 3764/3273 +f 3529/3331 3528/3279 3524/3338 3520/3332 +f 3529/3331 3514/3317 3526/3278 3528/3279 +f 3533/3311 3532/3310 3753/3309 3776/3312 +f 3537/3296 3531/3316 3535/3293 3530/3294 +f 3539/3298 3533/3311 3776/3312 3774/3313 +f 3533/3311 3540/3301 3518/3314 3532/3310 +f 3534/3302 3640/3315 3518/3314 3540/3301 +f 3536/3291 3530/3294 3535/3293 3727/3292 +f 3557/3295 3538/3297 3537/3296 3530/3294 +f 3538/3297 3545/3299 3539/3298 3537/3296 +f 3539/3298 3545/3299 3540/3301 3533/3311 +f 3667/3300 3534/3302 3540/3301 3545/3299 +f 3534/3302 3541/3304 3643/3305 3640/3315 +f 3542/3303 3644/3306 3643/3305 3541/3304 +f 3542/3303 3781/3308 3779/3307 3644/3306 +f 3543/3340 3772/3341 3781/3308 3542/3303 +f 3544/3342 3783/3345 3546/3343 3654/3344 +f 3538/3297 3666/3346 3667/3300 3545/3299 +f 3548/3349 3547/3350 3665/3347 3556/3348 +f 3665/3347 3547/3350 3654/3344 3546/3343 +f 3548/3349 3554/3352 3549/3351 3547/3350 +f 3554/3352 3567/3354 3552/3353 3549/3351 +f 3551/3357 3553/3358 3550/3355 3659/3356 +f 3552/3353 3567/3354 3553/3358 3551/3357 +f 3554/3352 3558/3360 3568/3359 3567/3354 +f 3548/3349 3555/3361 3558/3360 3554/3352 +f 3666/3346 3555/3361 3548/3349 3556/3348 +f 3666/3346 3538/3297 3557/3295 3555/3361 +f 3536/3291 3559/3362 3557/3295 3530/3294 +f 3727/3292 3561/3364 3560/3363 3536/3291 +f 3560/3363 3570/3365 3559/3362 3536/3291 +f 3557/3295 3559/3362 3558/3360 3555/3361 +f 3559/3362 3570/3365 3568/3359 3558/3360 +f 3560/3363 3572/3367 3571/3366 3570/3365 +f 3562/3368 3572/3367 3560/3363 3561/3364 +f 3714/3371 3564/3372 3563/3369 3759/3370 +f 3565/3289 3500/3288 3564/3372 3714/3371 +f 3566/3375 3574/3376 3576/3373 3575/3374 +f 3550/3355 3553/3358 3569/3377 3574/3376 +f 3568/3359 3569/3377 3553/3358 3567/3354 +f 3571/3366 3569/3377 3568/3359 3570/3365 +f 3573/3378 3577/3379 3572/3367 3562/3368 +f 3569/3377 3571/3366 3576/3373 3574/3376 +f 3572/3367 3577/3379 3576/3373 3571/3366 +f 3576/3373 3577/3379 3669/3380 3575/3374 +f 3573/3378 3762/3381 3669/3380 3577/3379 +f 3579/3333 3671/3334 3580/3332 3578/3330 +f 3585/3335 3583/3337 3581/3336 3671/3334 +f 3586/3375 3582/3376 3584/3355 3585/3335 +f 3584/3355 3593/3356 3583/3337 3585/3335 +f 3579/3333 3586/3375 3585/3335 3671/3334 +f 3586/3375 3604/3374 3587/3373 3582/3376 +f 3603/3380 3588/3379 3587/3373 3604/3374 +f 3589/3367 3590/3366 3587/3373 3588/3379 +f 3587/3373 3590/3366 3591/3377 3582/3376 +f 3591/3377 3627/3358 3584/3355 3582/3376 +f 3592/3357 3593/3356 3584/3355 3627/3358 +f 3594/3382 3721/3383 3583/3337 3593/3356 +f 3598/3360 3595/3362 3678/3295 3679/3361 +f 3678/3295 3595/3362 3596/3291 3503/3294 +f 3597/3363 3755/3364 3754/3292 3596/3291 +f 3599/3359 3600/3365 3595/3362 3598/3360 +f 3590/3366 3600/3365 3599/3359 3591/3377 +f 3590/3366 3589/3367 3597/3363 3600/3365 +f 3602/3378 3601/3368 3589/3367 3588/3379 +f 3595/3362 3600/3365 3597/3363 3596/3291 +f 3601/3368 3755/3364 3597/3363 3589/3367 +f 3675/3326 3609/3327 3608/3287 3606/3288 +f 3603/3380 3742/3381 3602/3378 3588/3379 +f 3604/3374 3605/3384 3611/3369 3603/3380 +f 3579/3333 3605/3384 3604/3374 3586/3375 +f 3579/3333 3578/3330 3673/3385 3605/3384 +f 3675/3326 3606/3288 3610/3372 3673/3385 +f 3608/3287 3607/3290 3612/3289 3606/3288 +f 3609/3327 3614/3387 3615/3386 3608/3287 +f 3673/3385 3610/3372 3611/3369 3605/3384 +f 3612/3289 3613/3371 3610/3372 3606/3288 +f 3613/3371 3745/3370 3611/3369 3610/3372 +f 3622/3321 3616/3322 3615/3386 3614/3387 +f 3617/3325 3618/3388 3615/3386 3616/3322 +f 3615/3386 3618/3388 3607/3290 3608/3287 +f 3495/3278 3684/3317 3683/3331 3682/3279 +f 3499/3283 3620/3318 3684/3317 3495/3278 +f 3493/3275 3620/3318 3499/3283 3498/3281 +f 3493/3275 3621/3274 3619/3319 3620/3318 +f 3619/3319 3621/3274 3622/3321 3614/3387 +f 3623/3320 3622/3321 3621/3274 3513/3277 +f 3623/3320 3624/3323 3616/3322 3622/3321 +f 3625/3324 3617/3325 3616/3322 3624/3323 +f 3684/3317 3620/3318 3619/3319 3626/3328 +f 3592/3357 3722/3389 3594/3382 3593/3356 +f 3599/3359 3681/3354 3627/3358 3591/3377 +f 3627/3358 3681/3354 3628/3353 3592/3357 +f 3629/3352 3632/3351 3628/3353 3681/3354 +f 3680/3349 3633/3350 3632/3351 3629/3352 +f 3628/3353 3630/3390 3722/3389 3592/3357 +f 3628/3353 3632/3351 3711/3391 3630/3390 +f 3632/3351 3633/3350 3631/3344 3711/3391 +f 3680/3349 3637/3348 3634/3347 3633/3350 +f 3676/3300 3635/3392 3637/3348 3677/3346 +f 3636/3304 3635/3392 3676/3300 3507/3302 +f 3636/3304 3639/3303 3638/3340 3635/3392 +f 3638/3340 3634/3347 3637/3348 3635/3392 +f 3634/3347 3697/3343 3631/3344 3633/3350 +f 3699/3308 3698/3341 3638/3340 3639/3303 +f 3518/3320 3640/3277 3517/3274 3647/3321 +f 3643/3276 3642/3275 3517/3274 3640/3277 +f 3643/3276 3644/3282 3641/3281 3642/3275 +f 3779/3286 3645/3285 3641/3281 3644/3282 +f 3645/3285 3748/3284 3516/3283 3641/3281 +f 3653/3386 3646/3287 3501/3290 3757/3388 +f 3648/3319 3651/3387 3647/3321 3517/3274 +f 3649/3328 3514/3317 3529/3331 3664/3329 +f 3514/3317 3649/3328 3648/3319 3515/3318 +f 3650/3327 3651/3387 3648/3319 3649/3328 +f 3653/3386 3651/3387 3650/3327 3646/3287 +f 3653/3386 3652/3322 3647/3321 3651/3387 +f 3653/3386 3757/3388 3756/3325 3652/3322 +f 3549/3351 3655/3391 3654/3344 3547/3350 +f 3552/3353 3760/3390 3655/3391 3549/3351 +f 3552/3353 3551/3357 3656/3389 3760/3390 +f 3551/3357 3659/3356 3658/3382 3656/3389 +f 3658/3382 3659/3356 3758/3337 3657/3383 +f 3550/3355 3522/3335 3758/3337 3659/3356 +f 3566/3375 3522/3335 3550/3355 3574/3376 +f 3522/3335 3566/3375 3662/3333 3521/3334 +f 3575/3374 3660/3384 3662/3333 3566/3375 +f 3563/3369 3564/3372 3661/3385 3660/3384 +f 3663/3326 3661/3385 3564/3372 3500/3288 +f 3661/3385 3519/3330 3662/3333 3660/3384 +f 3519/3330 3661/3385 3663/3326 3664/3329 +f 3543/3340 3668/3392 3556/3348 3665/3347 +f 3556/3348 3668/3392 3667/3300 3666/3346 +f 3667/3300 3668/3392 3541/3304 3534/3302 +f 3541/3304 3668/3392 3543/3340 3542/3303 +f 3575/3374 3669/3380 3563/3369 3660/3384 +f 3670/3273 3672/3338 3581/3336 3720/3339 +f 3581/3336 3672/3338 3580/3332 3671/3334 +f 3683/3331 3580/3332 3672/3338 3682/3279 +f 3683/3331 3674/3329 3578/3330 3580/3332 +f 3578/3330 3674/3329 3675/3326 3673/3385 +f 3626/3328 3609/3327 3675/3326 3674/3329 +f 3609/3327 3626/3328 3619/3319 3614/3387 +f 3676/3300 3677/3346 3505/3297 3506/3299 +f 3677/3346 3679/3361 3678/3295 3505/3297 +f 3680/3349 3679/3361 3677/3346 3637/3348 +f 3680/3349 3629/3352 3598/3360 3679/3361 +f 3599/3359 3598/3360 3629/3352 3681/3354 +f 3672/3338 3670/3273 3492/3272 3682/3279 +f 3626/3328 3674/3329 3683/3331 3684/3317 +f 3716/3393 3685/3397 3689/3271 3670/3273 +f 3702/3396 3700/3406 3686/3394 3691/3395 +f 3716/3393 3688/3398 3685/3397 +f 3685/3397 3688/3398 3686/3394 3687/3399 +f 3693/3400 3685/3397 3687/3399 +f 3718/3401 3691/3395 3686/3394 3688/3398 +f 3693/3400 3496/3280 3689/3271 3685/3397 +f 3718/3401 3717/3420 3690/3402 3691/3395 +f 3693/3400 3497/3285 3692/3284 3496/3280 +f 3690/3402 3702/3396 3691/3395 +f 3690/3402 3711/3391 3694/3342 3702/3396 +f 3705/3403 3695/3286 3497/3285 3693/3400 +f 3694/3342 3697/3343 3696/3345 3702/3396 +f 3694/3342 3711/3391 3631/3344 3697/3343 +f 3698/3341 3699/3308 3696/3345 3697/3343 +f 3707/3404 3705/3403 3693/3400 3687/3399 +f 3697/3343 3634/3347 3638/3340 3698/3341 +f 3707/3404 3687/3399 3686/3394 3700/3405 +f 3696/3345 3707/3414 3700/3406 3702/3396 +f 3782/3404 3741/3405 3701/3394 3751/3399 +f 3729/3409 3723/3426 3734/3407 3703/3408 +f 3705/3410 3699/3308 3695/3307 +f 3708/3407 3709/3426 3780/3409 3704/3408 +f 3705/3410 3707/3414 3696/3345 3699/3308 +f 3706/3413 3756/3325 3715/3411 3708/3412 +f 3715/3411 3710/3416 3709/3415 3708/3412 +f 3690/3402 3722/3389 3630/3390 3711/3391 +f 3710/3416 3719/3417 3780/3409 3709/3415 +f 3712/3418 3501/3290 3565/3289 3714/3371 +f 3713/3419 3710/3416 3712/3418 3714/3371 +f 3717/3420 3594/3382 3722/3389 3690/3402 +f 3712/3418 3710/3416 3715/3411 3501/3290 +f 3718/3401 3688/3398 3716/3393 3717/3420 +f 3713/3419 3763/3421 3719/3417 3710/3416 +f 3720/3339 3721/3383 3716/3393 3670/3273 +f 3763/3421 3768/3422 3780/3409 3719/3417 +f 3721/3383 3594/3382 3717/3420 3716/3393 +f 3723/3415 3728/3416 3739/3411 3734/3412 +f 3724/3423 3704/3408 3780/3409 3768/3422 +f 3739/3411 3617/3325 3725/3413 3734/3412 +f 3768/3422 3763/3421 3767/3424 3724/3423 +f 3767/3424 3727/3292 3726/3425 3724/3423 +f 3625/3324 3511/3430 3725/3413 3617/3325 +f 3739/3411 3607/3290 3618/3388 3617/3325 +f 3726/3425 3727/3292 3535/3293 +f 3728/3416 3723/3415 3729/3409 3735/3417 +f 3730/3424 3736/3423 3738/3425 3754/3292 +f 3738/3425 3502/3293 3754/3292 +f 3730/3424 3733/3421 3731/3422 3736/3423 +f 3736/3423 3731/3422 3729/3409 3703/3408 +f 3733/3421 3735/3417 3729/3409 3731/3422 +f 3732/3428 3734/3407 3725/3427 3511/3312 +f 3733/3421 3743/3429 3744/3419 3735/3417 +f 3732/3428 3703/3408 3734/3407 +f 3744/3419 3728/3416 3735/3417 +f 3732/3428 3738/3425 3736/3423 3703/3408 +f 3744/3419 3613/3371 3749/3418 3728/3416 +f 3749/3418 3607/3290 3739/3411 3728/3416 +f 3737/3316 3502/3293 3738/3425 3732/3428 +f 3732/3428 3511/3312 3510/3313 3737/3316 +f 3737/3316 3510/3313 3740/3298 3504/3296 +f 3744/3419 3742/3381 3745/3370 3613/3371 +f 3751/3399 3752/3397 3750/3400 3782/3404 +f 3730/3424 3601/3368 3743/3429 3733/3421 +f 3750/3400 3645/3285 3746/3403 3782/3404 +f 3779/3286 3781/3431 3746/3403 3645/3285 +f 3743/3429 3602/3378 3742/3381 3744/3419 +f 3742/3381 3603/3380 3611/3369 3745/3370 +f 3750/3400 3747/3280 3748/3284 3645/3285 +f 3612/3289 3607/3290 3749/3418 3613/3371 +f 3750/3400 3752/3397 3777/3271 3747/3280 +f 3743/3429 3601/3368 3602/3378 +f 3701/3394 3769/3398 3752/3397 3751/3399 +f 3730/3424 3754/3292 3755/3364 3601/3368 +f 3706/3413 3776/3432 3753/3324 3756/3325 +f 3721/3383 3720/3339 3581/3336 3583/3337 +f 3757/3388 3501/3290 3715/3411 3756/3325 +f 3762/3381 3759/3370 3563/3369 3669/3380 +f 3523/3336 3525/3339 3657/3383 3758/3337 +f 3766/3420 3656/3389 3658/3382 +f 3759/3370 3762/3381 3713/3419 3714/3371 +f 3766/3420 3773/3401 3771/3402 3656/3389 +f 3771/3402 3655/3391 3760/3390 3656/3389 +f 3761/3429 3763/3421 3713/3419 3762/3381 +f 3573/3378 3562/3368 3761/3429 3762/3381 +f 3761/3429 3562/3368 3767/3424 3763/3421 +f 3765/3393 3657/3383 3525/3339 3764/3273 +f 3561/3364 3727/3292 3767/3424 3562/3368 +f 3766/3420 3658/3382 3657/3383 3765/3393 +f 3765/3393 3769/3398 3773/3401 3766/3420 +f 3777/3271 3764/3273 3527/3272 3747/3280 +f 3546/3343 3772/3341 3543/3340 3665/3347 +f 3544/3342 3654/3344 3655/3391 +f 3783/3345 3781/3308 3772/3341 3546/3343 +f 3771/3402 3770/3396 3544/3342 3655/3391 +f 3770/3396 3741/3406 3783/3345 3544/3342 +f 3771/3402 3773/3401 3778/3395 3770/3396 +f 3539/3298 3774/3313 3531/3316 3537/3296 +f 3773/3401 3769/3398 3701/3394 3778/3395 +f 3775/3428 3531/3316 3774/3313 3776/3312 +f 3726/3425 3535/3293 3531/3316 3775/3428 +f 3775/3428 3704/3408 3724/3423 3726/3425 +f 3765/3393 3752/3397 3769/3398 +f 3765/3393 3764/3273 3777/3271 3752/3397 +f 3706/3427 3708/3407 3775/3428 3776/3312 +f 3775/3428 3708/3407 3704/3408 +f 3701/3394 3741/3406 3770/3396 3778/3395 +f 3783/3345 3782/3414 3746/3410 3781/3308 +f 3783/3345 3741/3406 3782/3414 +# 281 polygons - 14 triangles + diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj.meta new file mode 100644 index 000000000..d065a02ba --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj.meta @@ -0,0 +1,105 @@ +fileFormatVersion: 2 +guid: 92fe50136a7db4cc7bf5dceedcfc586e +ModelImporter: + serializedVersion: 21202 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset index f8a726184..9dea6b172 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5b9c84cdb747944209b1c8753933c5db, type: 3} m_Name: SnakeBamboo m_EditorClassIdentifier: - dynamicFriction: 0.3 + dynamicFriction: 0.2 staticFriction: 0 stickiness: 0 stickDistance: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset index c4995c1b7..0411fa0fb 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset @@ -12,9 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5b9c84cdb747944209b1c8753933c5db, type: 3} m_Name: SnakeBody m_EditorClassIdentifier: - dynamicFriction: 0.1 + dynamicFriction: 0.2 staticFriction: 0 - stickiness: 0.02 + stickiness: 0.01 stickDistance: 0.01 frictionCombine: 3 stickinessCombine: 3 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset index 1853cb1e2..7f15628a6 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5b9c84cdb747944209b1c8753933c5db, type: 3} m_Name: SnakeFloor m_EditorClassIdentifier: - dynamicFriction: 0.7 + dynamicFriction: 1.2 staticFriction: 0 stickiness: 0 stickDistance: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab new file mode 100644 index 000000000..8a755d9e6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab @@ -0,0 +1,228 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3512526509595786538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3512526509595786583} + - component: {fileID: 2838414990970241973} + - component: {fileID: 8733900141329501594} + - component: {fileID: 348212794980533237} + - component: {fileID: 9130168360642288785} + - component: {fileID: 4552180186810924025} + m_Layer: 0 + m_Name: TanglePeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3512526509595786583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4367317764625006663} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &2838414990970241973 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + serializedVersion: 5 + m_Mass: 5 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 112 + m_CollisionDetection: 0 +--- !u!114 &8733900141329501594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: beb10e70cc06a4b019ecf88348a5f7fa, type: 3} + m_Name: + m_EditorClassIdentifier: + currentSlot: {fileID: 0} + floorCollider: {fileID: 0} + attachedRope: {fileID: 0} + stiffness: 200 + damping: 20 + maxAccel: 50 + minDistance: 0.05 +--- !u!136 &348212794980533237 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.4 + m_Height: 1.1 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!114 &9130168360642288785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65534 + m_SourceCollider: {fileID: 348212794980533237} + m_DistanceField: {fileID: 0} +--- !u!114 &4552180186810924025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!1 &3782235798457470433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4367317764625006663} + - component: {fileID: 8070882573767540436} + - component: {fileID: 7140162020897419162} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4367317764625006663 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3782235798457470433} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.2, z: 0} + m_LocalScale: {x: 0.8, y: 0.2, z: 0.8} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3512526509595786583} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8070882573767540436 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3782235798457470433} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7140162020897419162 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3782235798457470433} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: bcdcc68772c3b42ca94abeffddf3eb19, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Cholesky.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta similarity index 63% rename from Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Cholesky.meta rename to Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta index 33b1bae31..2b57782d2 100644 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/Cholesky.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 2a2fdf61f12ab4260b11302bbb7341a0 -DefaultImporter: +guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab new file mode 100644 index 000000000..1c8a8d2e7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab @@ -0,0 +1,106 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3512526509595786538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3512526509595786583} + - component: {fileID: 3512526509595786582} + - component: {fileID: 3512526509595786581} + - component: {fileID: 8518691974497511176} + m_Layer: 0 + m_Name: TanglePegSlot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3512526509595786583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.05, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3512526509595786582 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3512526509595786581 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d402dacd6333443e5926c03c59b7b0ad, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &8518691974497511176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3512526509595786538} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: + currentPeg: {fileID: 0} + tintColor: {r: 1, g: 0.8207643, b: 0.18396229, a: 1} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta new file mode 100644 index 000000000..ca1021a20 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aa6b142bbb2bb4887bebe33010c84c6c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab index 7869e4aff..4f3b12f3a 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab @@ -28,12 +28,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3512526509595786538} + serializedVersion: 2 m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: -2.5221415, y: 3.5687833, z: -0.5} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!33 &3512526509595786582 MeshFilter: @@ -60,10 +61,15 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: d402dacd6333443e5926c03c59b7b0ad, type: 2} + - {fileID: 2100000, guid: 03019be2b7a654429bf322c3ca0c7a0e, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -81,6 +87,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -93,8 +100,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3512526509595786538} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.5000001 m_Height: 2 m_Direction: 1 @@ -112,6 +128,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 3512526509595786580} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs new file mode 100644 index 000000000..ea7f8e54c --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi.Samples +{ + public class CableCarController : MonoBehaviour + { + public ObiPinhole pinhole; + public float carSpeed = 1; + + // Update is called once per frame + void Update() + { + float speed = 0; + if (Input.GetKey(KeyCode.W)) + { + speed = carSpeed; + } + + if (Input.GetKey(KeyCode.S)) + { + speed = -carSpeed; + } + pinhole.motorSpeed = speed; + + if (Input.GetKeyDown(KeyCode.Space)) + { + pinhole.friction = pinhole.friction > 0.5f ? 0 : 1; + } + } + } +} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs.meta new file mode 100644 index 000000000..96a021d0e --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df6783efff96747d7b949f3538d1cee7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs index 8a88a0b37..2bc1b2078 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs @@ -2,27 +2,78 @@ using System.Collections.Generic; using UnityEngine; -public class CharacterControl2D : MonoBehaviour { +namespace Obi.Samples +{ + public class CharacterControl2D : MonoBehaviour + { - public float acceleration = 10; - public float maxSpeed = 8; - public float jumpPower = 2; + public float floorRaycastDistance = 1.2f; - private Rigidbody unityRigidbody; - - public void Awake(){ - unityRigidbody = GetComponent(); - } + [Header("Grounded")] + public float acceleration = 80; + public float maxSpeed = 6; + public float damping = 0.005f; + public float jumpPower = 10; - - void FixedUpdate () { + [Header("Airborne")] + public float airAcceleration = 16; + public float airMaxSpeed = 12; + public float extraGravity = -12; - unityRigidbody.AddForce(new Vector3(Input.GetAxis("Horizontal")*acceleration,0,0)); - - unityRigidbody.linearVelocity = Vector3.ClampMagnitude(unityRigidbody.linearVelocity,maxSpeed); - - if (Input.GetButtonDown("Jump")){ - unityRigidbody.AddForce(Vector3.up * jumpPower,ForceMode.VelocityChange); - } - } -} + [Header("Auto upright")] + public Vector3 centerOfMass = new Vector3(0, -0.25f, 0); + public float P = 2; + public float D = 0.1f; + + private Rigidbody unityRigidbody; + private float axis; + private bool grounded; + private float error; + private float prevError; + + public void Awake() + { + unityRigidbody = GetComponent(); + unityRigidbody.centerOfMass = centerOfMass; + } + + private void Update() + { + axis = Input.GetAxisRaw("Horizontal"); + grounded = Physics.Raycast(new Ray(transform.position, -Vector3.up), floorRaycastDistance); + + if (Input.GetButtonDown("Jump") && grounded) + unityRigidbody.AddForce(Vector3.up * jumpPower, ForceMode.VelocityChange); + } + + private void FixedUpdate() + { + var velocity = unityRigidbody.linearVelocity; + + prevError = error; + error = Vector3.SignedAngle(unityRigidbody.transform.up, Vector3.up, Vector3.forward); + + if (grounded) + { + float accel = axis * acceleration * Time.deltaTime; + if ((velocity.x < maxSpeed && accel > 0) || (velocity.x > -maxSpeed && accel < 0)) + velocity.x += accel; + + if (Mathf.Approximately(axis, 0)) + velocity.x *= Mathf.Pow(damping, Time.deltaTime); + + unityRigidbody.AddTorque(new Vector3(0, 0, error * P + (error - prevError) / Time.deltaTime * D)); + } + else + { + float accel = axis * airAcceleration * Time.deltaTime; + if ((velocity.x < airMaxSpeed && accel > 0) || (velocity.x > -airMaxSpeed && accel < 0)) + velocity.x += accel; + + velocity.y += extraGravity * Time.deltaTime; + } + + unityRigidbody.linearVelocity = velocity; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs index 546808725..62f926e8f 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs @@ -1,36 +1,46 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -public class CraneController : MonoBehaviour { +namespace Obi.Samples +{ + public class CraneController : MonoBehaviour + { - ObiRopeCursor cursor; - ObiRope rope; + ObiRopeCursor cursor; + ObiRope rope; + public float speed = 1; - // Use this for initialization - void Start () { - cursor = GetComponentInChildren(); - rope = cursor.GetComponent(); - } - - // Update is called once per frame - void Update () { - if (Input.GetKey(KeyCode.W)){ - if (rope.restLength > 6.5f) - cursor.ChangeLength(rope.restLength - 1f * Time.deltaTime); - } + // Use this for initialization + void Start() + { + cursor = GetComponentInChildren(); + rope = cursor.GetComponent(); + } - if (Input.GetKey(KeyCode.S)){ - cursor.ChangeLength(rope.restLength + 1f * Time.deltaTime); - } + // Update is called once per frame + void Update() + { + if (Input.GetKey(KeyCode.W)) + { + if (rope.restLength > 6.5f) + cursor.ChangeLength(-speed * Time.deltaTime); + } - if (Input.GetKey(KeyCode.A)){ - transform.Rotate(0,Time.deltaTime*15f,0); - } + if (Input.GetKey(KeyCode.S)) + { + cursor.ChangeLength(speed * Time.deltaTime); + } - if (Input.GetKey(KeyCode.D)){ - transform.Rotate(0,-Time.deltaTime*15f,0); - } - } -} + if (Input.GetKey(KeyCode.A)) + { + transform.Rotate(0, Time.deltaTime * 15f, 0); + } + + if (Input.GetKey(KeyCode.D)) + { + transform.Rotate(0, -Time.deltaTime * 15f, 0); + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs index 7c6a6ba6d..f5257fff3 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs @@ -1,45 +1,53 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -[RequireComponent(typeof(ObiRope))] -public class CursorController : MonoBehaviour +namespace Obi.Samples { - - ObiRopeCursor cursor; - ObiRope rope; - public float minLength = 0.1f; - public float speed = 1; - - // Use this for initialization - void Start () + [RequireComponent(typeof(ObiRope))] + public class CursorController : MonoBehaviour { - rope = GetComponent(); - cursor = GetComponent(); - } - - // Update is called once per frame - void Update () - { - if (Input.GetKey(KeyCode.W) && cursor != null) + public float minLength = 0.1f; + public float speed = 1; + + private ObiRopeCursor cursor; + private ObiRope rope; + + void OnEnable() { - if (rope.restLength > minLength) - cursor.ChangeLength(rope.restLength - speed * Time.deltaTime); - } + rope = GetComponent(); + cursor = GetComponent(); + } - if (Input.GetKey(KeyCode.S) && cursor != null) + void Update() { - cursor.ChangeLength(rope.restLength + speed * Time.deltaTime); - } + float change = 0; - if (Input.GetKey(KeyCode.A)){ - rope.transform.Translate(Vector3.left * Time.deltaTime,Space.World); - } + if (Input.GetKey(KeyCode.W) && cursor != null) + { + change -= speed * Time.deltaTime; + } - if (Input.GetKey(KeyCode.D)){ - rope.transform.Translate(Vector3.right * Time.deltaTime,Space.World); - } + if (Input.GetKey(KeyCode.S) && cursor != null) + { + change += speed * Time.deltaTime; + } - } + if (rope.restLength + change < minLength) + change = minLength - rope.restLength; + + cursor.ChangeLength(change); + + if (Input.GetKey(KeyCode.A)) + { + rope.transform.Translate(Vector3.left * Time.deltaTime, Space.World); + } + + if (Input.GetKey(KeyCode.D)) + { + rope.transform.Translate(Vector3.right * Time.deltaTime, Space.World); + } + + } + } } diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs index 4cc82a645..8c2ade265 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs @@ -1,7 +1,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; + /** * Sample component that shows how to use Obi Rope to create a grappling hook for a 2.5D game. @@ -15,199 +15,213 @@ using Obi; * If complex interaction is required with the scene, a purely geometry-based approach (ala Worms ninja rope) can * be the right choice under certain circumstances. */ -public class ExtendableGrapplingHook : MonoBehaviour + +namespace Obi.Samples { - - public ObiSolver solver; - public ObiCollider character; - - public Material material; - public ObiRopeSection section; - - [Range(0, 1)] - public float hookResolution = 0.5f; - public float hookExtendRetractSpeed = 2; - public float hookShootSpeed = 30; - public int particlePoolSize = 100; - - private ObiRope rope; - private ObiRopeBlueprint blueprint; - private ObiRopeExtrudedRenderer ropeRenderer; - - private ObiRopeCursor cursor; - - private RaycastHit hookAttachment; - - void Awake() + public class ExtendableGrapplingHook : MonoBehaviour { - // Create both the rope and the solver: - rope = gameObject.AddComponent(); - ropeRenderer = gameObject.AddComponent(); - ropeRenderer.section = section; - ropeRenderer.uvScale = new Vector2(1, 4); - ropeRenderer.normalizeV = false; - ropeRenderer.uvAnchor = 1; - rope.GetComponent().material = material; + public ObiSolver solver; + public ObiCollider character; - // Setup a blueprint for the rope: - blueprint = ScriptableObject.CreateInstance(); - blueprint.resolution = 0.5f; - blueprint.pooledParticles = particlePoolSize; + public Material material; + public ObiRopeSection section; - // Tweak rope parameters: - rope.maxBending = 0.02f; + [Range(0, 1)] + public float hookResolution = 0.5f; + public float hookExtendRetractSpeed = 2; + public float hookShootSpeed = 30; + public int particlePoolSize = 100; - // Add a cursor to be able to change rope length: - cursor = rope.gameObject.AddComponent(); - cursor.cursorMu = 0; - cursor.direction = true; - } + private ObiRope rope; + private ObiRopeBlueprint blueprint; + private ObiRopeExtrudedRenderer ropeRenderer; - private void OnDestroy() - { - DestroyImmediate(blueprint); - } + private ObiRopeCursor cursor; - /** - * Raycast against the scene to see if we can attach the hook to something. - */ - private void LaunchHook() - { + private RaycastHit hookAttachment; - // Get the mouse position in the scene, in the same XY plane as this object: - Vector3 mouse = Input.mousePosition; - mouse.z = transform.position.z - Camera.main.transform.position.z; - Vector3 mouseInScene = Camera.main.ScreenToWorldPoint(mouse); - - // Get a ray from the character to the mouse: - Ray ray = new Ray(transform.position, mouseInScene - transform.position); - - // Raycast to see what we hit: - if (Physics.Raycast(ray, out hookAttachment)) + void Awake() { - // We actually hit something, so attach the hook! - StartCoroutine(AttachHook()); + + // Create both the rope and the solver: + rope = gameObject.AddComponent(); + ropeRenderer = gameObject.AddComponent(); + ropeRenderer.section = section; + ropeRenderer.uvScale = new Vector2(1, 4); + ropeRenderer.normalizeV = false; + ropeRenderer.uvAnchor = 1; + ropeRenderer.material = material; + + // Setup a blueprint for the rope: + blueprint = ScriptableObject.CreateInstance(); + blueprint.resolution = 0.5f; + blueprint.pooledParticles = particlePoolSize; + + // Tweak rope parameters: + rope.maxBending = 0.02f; + + // Add a cursor to be able to change rope length: + cursor = rope.gameObject.AddComponent(); + cursor.cursorMu = 0; + cursor.direction = true; } - } - - private IEnumerator AttachHook() - { - yield return null; - - // Clear pin constraints: - var pinConstraints = rope.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; - pinConstraints.Clear(); - - Vector3 localHit = rope.transform.InverseTransformPoint(hookAttachment.point); - - // Procedurally generate the rope path (just a short segment, as we will extend it over time): - int filter = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 0); - blueprint.path.Clear(); - blueprint.path.AddControlPoint(Vector3.zero, Vector3.zero, Vector3.zero, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "Hook start"); - blueprint.path.AddControlPoint(localHit.normalized * 0.5f, Vector3.zero, Vector3.zero, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "Hook end"); - blueprint.path.FlushEvents(); - - // Generate the particle representation of the rope (wait until it has finished): - yield return blueprint.Generate(); - - // Set the blueprint (this adds particles/constraints to the solver and starts simulating them). - rope.ropeBlueprint = blueprint; - - // wait one frame: - yield return null; - - rope.GetComponent().enabled = true; - - // set masses to zero, as we're going to override positions while we extend the rope: - for (int i = 0; i < rope.activeParticleCount; ++i) - solver.invMasses[rope.solverIndices[i]] = 0; - - float currentLength = 0; - - // while the last particle hasn't reached the hit, extend the rope: - while (true) + private void OnDestroy() { - // calculate rope origin in solver space: - Vector3 origin = solver.transform.InverseTransformPoint(rope.transform.position); + DestroyImmediate(blueprint); + } - // update direction and distance to hook point: - Vector3 direction = hookAttachment.point - origin; - float distance = direction.magnitude; - direction.Normalize(); + /** + * Raycast against the scene to see if we can attach the hook to something. + */ + private void LaunchHook() + { - // increase length: - currentLength += hookShootSpeed * Time.deltaTime; + // Get the mouse position in the scene, in the same XY plane as this object: + Vector3 mouse = Input.mousePosition; + mouse.z = transform.position.z - Camera.main.transform.position.z; + Vector3 mouseInScene = Camera.main.ScreenToWorldPoint(mouse); - // if we have reached the desired length, break the loop: - if (currentLength >= distance) + // Get a ray from the character to the mouse: + Ray ray = new Ray(transform.position, mouseInScene - transform.position); + + // Raycast to see what we hit: + if (Physics.Raycast(ray, out hookAttachment)) { - cursor.ChangeLength(distance); - break; + // We actually hit something, so attach the hook! + StartCoroutine(AttachHook()); } - // change rope length (clamp to distance between rope origin and hook to avoid overshoot) - cursor.ChangeLength(Mathf.Min(distance, currentLength)); + } - // iterate over all particles in sequential order, placing them in a straight line while - // respecting element length: + private void LayParticlesInStraightLine(Vector3 origin, Vector3 direction) + { + // placing all particles in a straight line, respecting rope length float length = 0; for (int i = 0; i < rope.elements.Count; ++i) { - solver.positions[rope.elements[i].particle1] = origin + direction * length; - solver.positions[rope.elements[i].particle2] = origin + direction * (length + rope.elements[i].restLength); + int p1 = rope.elements[i].particle1; + int p2 = rope.elements[i].particle2; + + solver.prevPositions[p1] = solver.positions[p1] = origin + direction * length; length += rope.elements[i].restLength; + solver.prevPositions[p2] = solver.positions[p2] = origin + direction * length; } + } - // wait one frame: + private IEnumerator AttachHook() + { yield return null; - } - // restore masses so that the simulation takes over now that the rope is in place: - for (int i = 0; i < rope.activeParticleCount; ++i) - solver.invMasses[rope.solverIndices[i]] = 10; // 1/0.1 = 10 + // Clear pin constraints: + var pinConstraints = rope.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; + pinConstraints.Clear(); - // Pin both ends of the rope (this enables two-way interaction between character and rope): - var batch = new ObiPinConstraintsBatch(); - batch.AddConstraint(rope.elements[0].particle1, character, transform.localPosition, Quaternion.identity, 0, 0, float.PositiveInfinity); - batch.AddConstraint(rope.elements[rope.elements.Count-1].particle2, hookAttachment.collider.GetComponent(), - hookAttachment.collider.transform.InverseTransformPoint(hookAttachment.point), Quaternion.identity, 0, 0, float.PositiveInfinity); - batch.activeConstraintCount = 2; - pinConstraints.AddBatch(batch); + Vector3 localHit = rope.transform.InverseTransformPoint(hookAttachment.point); - rope.SetConstraintsDirty(Oni.ConstraintType.Pin); - } + // Procedurally generate the rope path (just a short segment, as we will extend it over time): + int filter = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 0); + blueprint.path.Clear(); + blueprint.path.AddControlPoint(Vector3.zero, Vector3.zero, Vector3.zero, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "Hook start"); + blueprint.path.AddControlPoint(localHit.normalized * 0.5f, Vector3.zero, Vector3.zero, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "Hook end"); + blueprint.path.FlushEvents(); - private void DetachHook() - { - // Set the rope blueprint to null (automatically removes the previous blueprint from the solver, if any). - rope.ropeBlueprint = null; - rope.GetComponent().enabled = false; - } + // Generate the particle representation of the rope (wait until it has finished): + yield return blueprint.Generate(); + // Set the blueprint (this adds particles/constraints to the solver and starts simulating them). + rope.ropeBlueprint = blueprint; + rope.GetComponent().enabled = true; - void Update() - { + // wait for the solver to load the rope, after the next physics step: + yield return new WaitForFixedUpdate(); + yield return null; - if (Input.GetMouseButtonDown(0)) - { - if (!rope.isLoaded) - LaunchHook(); - else - DetachHook(); - } + // set masses to zero, as we're going to override positions while we extend the rope: + for (int i = 0; i < rope.activeParticleCount; ++i) + solver.invMasses[rope.solverIndices[i]] = 0; - if (rope.isLoaded) - { - if (Input.GetKey(KeyCode.W)) + // while the last particle hasn't reached the hit, extend the rope: + Vector3 origin; + Vector3 direction; + + while (true) { - cursor.ChangeLength(rope.restLength - hookExtendRetractSpeed * Time.deltaTime); + // calculate rope origin in solver space: + origin = solver.transform.InverseTransformPoint(rope.transform.position); + + // update direction and distance to hook point: + direction = solver.transform.InverseTransformPoint(hookAttachment.point) - origin; + float distance = direction.magnitude; + direction.Normalize(); + + LayParticlesInStraightLine(origin, direction); + + // increase length: + float distanceLeft = distance - cursor.ChangeLength(hookShootSpeed * Time.deltaTime); + + // if we have exceeded the desired length, correct it and break the loop: + if (distanceLeft < 0) + { + cursor.ChangeLength(distanceLeft); + break; + } + + // wait for next frame: + yield return null; } - if (Input.GetKey(KeyCode.S)) + + // wait for the last length change to take effect, and ensure the rope is straight: + yield return new WaitForFixedUpdate(); + yield return null; + LayParticlesInStraightLine(origin, direction); + + // restore masses so that the simulation takes over now that the rope is in place: + for (int i = 0; i < rope.activeParticleCount; ++i) + solver.invMasses[rope.solverIndices[i]] = 10; // 1/0.1 = 10 + + // Pin both ends of the rope (this enables two-way interaction between character and rope): + var batch = new ObiPinConstraintsBatch(); + batch.AddConstraint(rope.elements[0].particle1, character, transform.localPosition, Quaternion.identity, 0, 0); + batch.AddConstraint(rope.elements[rope.elements.Count - 1].particle2, hookAttachment.collider.GetComponent(), + hookAttachment.collider.transform.InverseTransformPoint(hookAttachment.point), Quaternion.identity, 0, 0); + batch.activeConstraintCount = 2; + pinConstraints.AddBatch(batch); + + rope.SetConstraintsDirty(Oni.ConstraintType.Pin); + } + + private void DetachHook() + { + // Set the rope blueprint to null (automatically removes the previous blueprint from the solver, if any). + rope.ropeBlueprint = null; + rope.GetComponent().enabled = false; + } + + + void Update() + { + + if (Input.GetMouseButtonDown(0)) { - cursor.ChangeLength(rope.restLength + hookExtendRetractSpeed * Time.deltaTime); + if (!rope.isLoaded) + LaunchHook(); + else + DetachHook(); + } + + if (rope.isLoaded) + { + if (Input.GetKey(KeyCode.W)) + { + cursor.ChangeLength(-hookExtendRetractSpeed * Time.deltaTime); + } + if (Input.GetKey(KeyCode.S)) + { + cursor.ChangeLength(hookExtendRetractSpeed * Time.deltaTime); + } } } } -} +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs index 0587a463f..b3448a132 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs @@ -1,7 +1,6 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; /** * Sample component that shows how to use Obi Rope to create a grappling hook for a 2.5D game. @@ -15,138 +14,142 @@ using Obi; * If complex interaction is required with the scene, a purely geometry-based approach (ala Worms ninja rope) can * be the right choice under certain circumstances. */ -public class GrapplingHook : MonoBehaviour + +namespace Obi.Samples { - - public ObiSolver solver; - public ObiCollider character; - public float hookExtendRetractSpeed = 2; - public Material material; - public ObiRopeSection section; - - private ObiRope rope; - private ObiRopeBlueprint blueprint; - private ObiRopeExtrudedRenderer ropeRenderer; - - private ObiRopeCursor cursor; - - private RaycastHit hookAttachment; - - void Awake() + public class GrapplingHook : MonoBehaviour { - // Create both the rope and the solver: - rope = gameObject.AddComponent(); - ropeRenderer = gameObject.AddComponent(); - ropeRenderer.section = section; - ropeRenderer.uvScale = new Vector2(1, 4); - ropeRenderer.normalizeV = false; - ropeRenderer.uvAnchor = 1; - rope.GetComponent().material = material; + public ObiSolver solver; + public ObiCollider character; + public float hookExtendRetractSpeed = 2; + public Material material; + public ObiRopeSection section; - // Setup a blueprint for the rope: - blueprint = ScriptableObject.CreateInstance(); - blueprint.resolution = 0.5f; + private ObiRope rope; + private ObiRopeBlueprint blueprint; + private ObiRopeExtrudedRenderer ropeRenderer; - // Tweak rope parameters: - rope.maxBending = 0.02f; + private ObiRopeCursor cursor; - // Add a cursor to be able to change rope length: - cursor = rope.gameObject.AddComponent(); - cursor.cursorMu = 0; - cursor.direction = true; - } + private RaycastHit hookAttachment; - private void OnDestroy() - { - DestroyImmediate(blueprint); - } - - /** - * Raycast against the scene to see if we can attach the hook to something. - */ - private void LaunchHook() - { - - // Get the mouse position in the scene, in the same XY plane as this object: - Vector3 mouse = Input.mousePosition; - mouse.z = transform.position.z - Camera.main.transform.position.z; - Vector3 mouseInScene = Camera.main.ScreenToWorldPoint(mouse); - - // Get a ray from the character to the mouse: - Ray ray = new Ray(transform.position, mouseInScene - transform.position); - - // Raycast to see what we hit: - if (Physics.Raycast(ray, out hookAttachment)) + void Awake() { - // We actually hit something, so attach the hook! - StartCoroutine(AttachHook()); + + // Create both the rope and the solver: + rope = gameObject.AddComponent(); + ropeRenderer = gameObject.AddComponent(); + ropeRenderer.section = section; + ropeRenderer.uvScale = new Vector2(1, 4); + ropeRenderer.normalizeV = false; + ropeRenderer.uvAnchor = 1; + rope.GetComponent().material = material; + + // Setup a blueprint for the rope: + blueprint = ScriptableObject.CreateInstance(); + blueprint.resolution = 0.5f; + + // Tweak rope parameters: + rope.maxBending = 0.02f; + + // Add a cursor to be able to change rope length: + cursor = rope.gameObject.AddComponent(); + cursor.cursorMu = 0; + cursor.direction = true; } - } - - private IEnumerator AttachHook() - { - yield return 0; - Vector3 localHit = rope.transform.InverseTransformPoint(hookAttachment.point); - - int filter = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything,0); - - // Procedurally generate the rope path (a simple straight line): - blueprint.path.Clear(); - blueprint.path.AddControlPoint(Vector3.zero, -localHit.normalized, localHit.normalized, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "Hook start"); - blueprint.path.AddControlPoint(localHit, -localHit.normalized, localHit.normalized, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "Hook end"); - blueprint.path.FlushEvents(); - - // Generate the particle representation of the rope (wait until it has finished): - yield return blueprint.Generate(); - - // Set the blueprint (this adds particles/constraints to the solver and starts simulating them). - rope.ropeBlueprint = blueprint; - rope.GetComponent().enabled = true; - - // Pin both ends of the rope (this enables two-way interaction between character and rope): - var pinConstraints = rope.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; - pinConstraints.Clear(); - var batch = new ObiPinConstraintsBatch(); - batch.AddConstraint(rope.solverIndices[0], character, transform.localPosition, Quaternion.identity, 0, 0, float.PositiveInfinity); - batch.AddConstraint(rope.solverIndices[blueprint.activeParticleCount - 1], hookAttachment.collider.GetComponent(), - hookAttachment.collider.transform.InverseTransformPoint(hookAttachment.point), Quaternion.identity, 0, 0, float.PositiveInfinity); - batch.activeConstraintCount = 2; - pinConstraints.AddBatch(batch); - - rope.SetConstraintsDirty(Oni.ConstraintType.Pin); - } - - private void DetachHook() - { - // Set the rope blueprint to null (automatically removes the previous blueprint from the solver, if any). - rope.ropeBlueprint = null; - rope.GetComponent().enabled = false; - } - - - void Update() - { - - if (Input.GetMouseButtonDown(0)) + private void OnDestroy() { - if (!rope.isLoaded) - LaunchHook(); - else - DetachHook(); + DestroyImmediate(blueprint); } - if (rope.isLoaded) + /** + * Raycast against the scene to see if we can attach the hook to something. + */ + private void LaunchHook() { - if (Input.GetKey(KeyCode.W)) + + // Get the mouse position in the scene, in the same XY plane as this object: + Vector3 mouse = Input.mousePosition; + mouse.z = transform.position.z - Camera.main.transform.position.z; + Vector3 mouseInScene = Camera.main.ScreenToWorldPoint(mouse); + + // Get a ray from the character to the mouse: + Ray ray = new Ray(transform.position, mouseInScene - transform.position); + + // Raycast to see what we hit: + if (Physics.Raycast(ray, out hookAttachment)) { - cursor.ChangeLength(rope.restLength - hookExtendRetractSpeed * Time.deltaTime); + // We actually hit something, so attach the hook! + StartCoroutine(AttachHook()); } - if (Input.GetKey(KeyCode.S)) + + } + + private IEnumerator AttachHook() + { + yield return 0; + Vector3 localHit = rope.transform.InverseTransformPoint(hookAttachment.point); + + int filter = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 0); + + // Procedurally generate the rope path (a simple straight line): + blueprint.path.Clear(); + blueprint.path.AddControlPoint(Vector3.zero, -localHit.normalized, localHit.normalized, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "Hook start"); + blueprint.path.AddControlPoint(localHit, -localHit.normalized, localHit.normalized, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "Hook end"); + blueprint.path.FlushEvents(); + + // Generate the particle representation of the rope (wait until it has finished): + yield return blueprint.Generate(); + + // Set the blueprint (this adds particles/constraints to the solver and starts simulating them). + rope.ropeBlueprint = blueprint; + rope.GetComponent().enabled = true; + + // Pin both ends of the rope (this enables two-way interaction between character and rope): + var pinConstraints = rope.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; + pinConstraints.Clear(); + var batch = new ObiPinConstraintsBatch(); + batch.AddConstraint(rope.solverIndices[0], character, transform.localPosition, Quaternion.identity, 0, 0); + batch.AddConstraint(rope.solverIndices[blueprint.activeParticleCount - 1], hookAttachment.collider.GetComponent(), + hookAttachment.collider.transform.InverseTransformPoint(hookAttachment.point), Quaternion.identity, 0, 0); + batch.activeConstraintCount = 2; + pinConstraints.AddBatch(batch); + + rope.SetConstraintsDirty(Oni.ConstraintType.Pin); + } + + private void DetachHook() + { + // Set the rope blueprint to null (automatically removes the previous blueprint from the solver, if any). + rope.ropeBlueprint = null; + rope.GetComponent().enabled = false; + } + + + void Update() + { + + if (Input.GetMouseButtonDown(0)) { - cursor.ChangeLength(rope.restLength + hookExtendRetractSpeed * Time.deltaTime); + if (!rope.isLoaded) + LaunchHook(); + else + DetachHook(); + } + + if (rope.isLoaded) + { + if (Input.GetKey(KeyCode.W)) + { + cursor.ChangeLength(rope.restLength - hookExtendRetractSpeed * Time.deltaTime); + } + if (Input.GetKey(KeyCode.S)) + { + cursor.ChangeLength(rope.restLength + hookExtendRetractSpeed * Time.deltaTime); + } } } } -} +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs new file mode 100644 index 000000000..a988cbd94 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs @@ -0,0 +1,15 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi.Samples +{ + public class HighlightCollidingRopes : MonoBehaviour + { + public void Highlight(ActorActorCollisionDetector.ActorPair pair) + { + if (pair.actorA.TryGetComponent(out ActorBlinker blinkerA)) blinkerA.Blink(pair.particleA); + if (pair.actorB.TryGetComponent(out ActorBlinker blinkerB)) blinkerB.Blink(pair.particleB); + } + } +} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs.meta new file mode 100644 index 000000000..1eb72df78 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50979842bbc734acdb11f0f01062fe92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs index 94080fc91..5f5311d80 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs @@ -1,83 +1,84 @@ using UnityEngine; -using Obi; - -[RequireComponent(typeof(ObiRope))] -public class HosePump : MonoBehaviour { - - [Header("Bulge controls")] - public float pumpSpeed = 5; - public float bulgeFrequency = 3; - public float baseThickness = 0.04f; - public float bulgeThickness = 0.06f; - public Color bulgeColor = Color.cyan; - - [Header("Flow controls")] - public ParticleSystem waterEmitter; - public float flowSpeedMin = 0.5f; - public float flowSpeedMax = 7; - public float minEmitRate = 100; - public float maxEmitRate = 1000; - - private ObiRope rope; - public ObiPathSmoother smoother; - private float time = 0; - - void OnEnable() +namespace Obi.Samples +{ + [RequireComponent(typeof(ObiRope))] + public class HosePump : MonoBehaviour { - rope = GetComponent(); - smoother = GetComponent(); - rope.OnBeginStep += Rope_OnBeginStep; - } - void OnDisable() - { - rope.OnBeginStep -= Rope_OnBeginStep; - } - private void Rope_OnBeginStep(ObiActor actor, float stepTime) - { - time += stepTime * pumpSpeed; + [Header("Bulge controls")] + public float pumpSpeed = 5; + public float bulgeFrequency = 3; + public float baseThickness = 0.04f; + public float bulgeThickness = 0.06f; + public Color bulgeColor = Color.cyan; - float distance = 0; - float sine = 0; + [Header("Flow controls")] + public ParticleSystem waterEmitter; + public float flowSpeedMin = 0.5f; + public float flowSpeedMax = 7; + public float minEmitRate = 100; + public float maxEmitRate = 1000; - // iterate over all particles, changing their radius and color based on a sine wave: - // (note this would not support resizable / cuttable ropes, to add support for that use rope.elements instead) - for (int i = 0; i < rope.solverIndices.Length; ++i) + private ObiRope rope; + public ObiPathSmoother smoother; + private float time = 0; + + void OnEnable() { - int solverIndex = rope.solverIndices[i]; + rope = GetComponent(); + smoother = GetComponent(); + rope.OnSimulationStart += Rope_OnBeginStep; + } + void OnDisable() + { + rope.OnSimulationStart -= Rope_OnBeginStep; + } - if (i > 0) + private void Rope_OnBeginStep(ObiActor actor, float stepTime, float substepTime) + { + time += stepTime * pumpSpeed; + + float distance = 0; + float sine = 0; + + // iterate over all particles, changing their radius and color based on a sine wave: + // (note this would not support resizable / cuttable ropes, to add support for that use rope.elements instead) + for (int i = 0; i < rope.solverIndices.count; ++i) { - int previousIndex = rope.solverIndices[i - 1]; - distance += Vector3.Distance(rope.solver.positions[solverIndex],rope.solver.positions[previousIndex]); + int solverIndex = rope.solverIndices[i]; + + if (i > 0) + { + int previousIndex = rope.solverIndices[i - 1]; + distance += Vector3.Distance(rope.solver.positions[solverIndex], rope.solver.positions[previousIndex]); + } + + sine = Mathf.Max(0, Mathf.Sin(distance * bulgeFrequency - time)); + + rope.solver.principalRadii[solverIndex] = Vector3.one * Mathf.Lerp(baseThickness, bulgeThickness, sine); + rope.solver.colors[solverIndex] = Color.Lerp(Color.white, bulgeColor, sine); } - sine = Mathf.Max(0, Mathf.Sin(distance * bulgeFrequency - time)); + // change particle emission rate/speed based on sine wave at the last particle: + if (waterEmitter != null) + { + var main = waterEmitter.main; + main.startSpeed = Mathf.Lerp(flowSpeedMin, flowSpeedMax, sine); - rope.solver.principalRadii[solverIndex] = Vector3.one * Mathf.Lerp(baseThickness,bulgeThickness, sine); - rope.solver.colors[solverIndex] = Color.Lerp(Color.white, bulgeColor, sine); + var emission = waterEmitter.emission; + emission.rateOverTime = Mathf.Lerp(minEmitRate, maxEmitRate, sine); + } } - // change particle emission rate/speed based on sine wave at the last particle: - if (waterEmitter != null) + public void LateUpdate() { - var main = waterEmitter.main; - main.startSpeed = Mathf.Lerp(flowSpeedMin,flowSpeedMax,sine); - - var emission = waterEmitter.emission; - emission.rateOverTime = Mathf.Lerp(minEmitRate, maxEmitRate, sine); + if (smoother != null && waterEmitter != null) + { + ObiPathFrame section = smoother.GetSectionAt(1); + waterEmitter.transform.position = rope.solver.transform.TransformPoint(section.position); + waterEmitter.transform.rotation = rope.solver.transform.rotation * (Quaternion.LookRotation(section.tangent, section.binormal)); + } } } - - public void LateUpdate() - { - if (smoother != null && waterEmitter != null) - { - ObiPathFrame section = smoother.GetSectionAt(1); - waterEmitter.transform.position = transform.TransformPoint(section.position); - waterEmitter.transform.rotation = transform.rotation * (Quaternion.LookRotation(section.tangent, section.binormal)); - } - } -} - +} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs new file mode 100644 index 000000000..57bd1d835 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs @@ -0,0 +1,50 @@ +using UnityEngine; + +namespace Obi.Samples +{ + public class PinholeRatchet : MonoBehaviour + { + public ObiPinhole pinhole; + public bool direction = false; + public float teethSeparation = 0.1f; + + public float distanceToNextTooth { get; private set; } + + void Update() + { + if (pinhole == null || pinhole.rope == null) + return; + + float restLength = (pinhole.rope as ObiRopeBase).restLength; + float normalizedTeethDistance = Mathf.Max(0.001f, teethSeparation / restLength); + var range = pinhole.range; + + if (direction) + { + distanceToNextTooth = (range.y - pinhole.position) * restLength; + while (distanceToNextTooth > teethSeparation) + { + range.y -= normalizedTeethDistance; + distanceToNextTooth -= teethSeparation; + } + } + else + { + distanceToNextTooth = (pinhole.position - range.x) * restLength; + while (distanceToNextTooth > teethSeparation) + { + range.x += normalizedTeethDistance; + distanceToNextTooth -= teethSeparation; + } + } + + pinhole.range = range; + } + + public void OnDisable() + { + if (pinhole != null) + pinhole.range = new Vector2(0, 1); + } + } +} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs.meta new file mode 100644 index 000000000..ec6fb16e1 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de82c5da5889a437bbca59463285c6a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs new file mode 100644 index 000000000..59ab5a77d --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace Obi.Samples +{ + public class RatchetController : MonoBehaviour + { + public PinholeRatchet ratchet; + + public Transform ratchetVisualizer; + public float minAngle = 0; + public float maxAngle = 25; + + void Update() + { + if (Input.GetKeyDown(KeyCode.Space)) + ratchet.enabled = !ratchet.enabled; + + float angle = ratchet.enabled ? Mathf.LerpAngle(minAngle, maxAngle, ratchet.distanceToNextTooth / ratchet.teethSeparation) : maxAngle; + ratchetVisualizer.rotation = Quaternion.AngleAxis(angle, Vector3.forward); + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs.meta new file mode 100644 index 000000000..9c4b951ee --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89f7ec50c6e36440593469d980ba7830 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs new file mode 100644 index 000000000..867d08d66 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi.Samples +{ + [RequireComponent(typeof(LineRenderer))] + public class RenderLineBetweenTransforms : MonoBehaviour + { + public Transform transformA; + public Transform transformB; + LineRenderer line; + + void Awake() + { + line = GetComponent(); + } + + void Update() + { + if (transformA != null && transformB != null) + line.SetPositions(new Vector3[] { transformA.position, transformB.position }); + } + } +} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs.meta new file mode 100644 index 000000000..fe9c79383 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 411d9eba4bb0042bf9302873985bc6e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs index c747f40ca..bd01b8f3c 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs @@ -1,63 +1,71 @@ using UnityEngine; -using Obi; -public class RopeBetweenTwoPoints : MonoBehaviour +namespace Obi.Samples { - public Transform start; - public Transform end; - public ObiSolver solver; - - void Start() + public class RopeBetweenTwoPoints : MonoBehaviour { - // Generate rope synchronously: - Generate(); - } + public Transform start; + public Transform end; + public ObiSolver solver; - void Generate() - { - if (start != null && end != null) + public bool fixedParticleCount = true; + public int numParticles = 5; + + void Start() { - // Adjust our transform: - transform.position = (start.position + end.position) / 2; - transform.rotation = Quaternion.FromToRotation(Vector3.right, end.position - start.position); + // Generate rope synchronously: + Generate(); + } - // Calculate control point positions and tangent vector: - Vector3 startPositionLS = transform.InverseTransformPoint(start.position); - Vector3 endPositionLS = transform.InverseTransformPoint(end.position); - Vector3 tangentLS = (endPositionLS - startPositionLS).normalized; + void Generate() + { + if (start != null && end != null) + { + // Adjust our transform: + transform.position = (start.position + end.position) / 2; + transform.rotation = Quaternion.FromToRotation(Vector3.right, end.position - start.position); - // Create the blueprint: - var blueprint = ScriptableObject.CreateInstance(); + // Calculate control point positions and tangent vector: + Vector3 startPositionLS = transform.InverseTransformPoint(start.position); + Vector3 endPositionLS = transform.InverseTransformPoint(end.position); + Vector3 tangentLS = (endPositionLS - startPositionLS).normalized; - // Build the rope path: - int filter = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 0); - blueprint.path.AddControlPoint(startPositionLS, -tangentLS, tangentLS, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "start"); - blueprint.path.AddControlPoint(endPositionLS, -tangentLS, tangentLS, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "end"); - blueprint.path.FlushEvents(); + // Create the blueprint: + var blueprint = ScriptableObject.CreateInstance(); - // Generate particles/constraints: - blueprint.GenerateImmediate(); + // Build the rope path: + int filter = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 0); + blueprint.path.AddControlPoint(startPositionLS, -tangentLS, tangentLS, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "start"); + blueprint.path.AddControlPoint(endPositionLS, -tangentLS, tangentLS, Vector3.up, 0.1f, 0.1f, 1, filter, Color.white, "end"); + blueprint.path.FlushEvents(); - // Add rope actor / renderer / attachment components: - var rope = gameObject.AddComponent(); - var ropeRenderer = gameObject.AddComponent(); - var attachment1 = gameObject.AddComponent(); - var attachment2 = gameObject.AddComponent(); + if (fixedParticleCount) + blueprint.resolution = numParticles / (blueprint.path.Length / blueprint.thickness); - // Load the default rope section for rendering: - ropeRenderer.section = Resources.Load("DefaultRopeSection"); + // Generate particles/constraints: + blueprint.GenerateImmediate(); - // Set the blueprint: - rope.ropeBlueprint = blueprint; + // Add rope actor / renderer / attachment components: + var rope = gameObject.AddComponent(); + var ropeRenderer = gameObject.AddComponent(); + var attachment1 = gameObject.AddComponent(); + var attachment2 = gameObject.AddComponent(); - // Attach both ends: - attachment1.target = start; - attachment2.target = end; - attachment1.particleGroup = blueprint.groups[0]; - attachment2.particleGroup = blueprint.groups[1]; + // Load the default rope section for rendering: + ropeRenderer.section = Resources.Load("DefaultRopeSection"); - // Parent the actor under a solver to start the simulation: - transform.SetParent(solver.transform); + // Set the blueprint: + rope.ropeBlueprint = blueprint; + + // Attach both ends: + attachment1.target = start; + attachment2.target = end; + attachment1.particleGroup = blueprint.groups[0]; + attachment2.particleGroup = blueprint.groups[1]; + + // Parent the actor under a solver to start the simulation: + transform.SetParent(solver.transform); + } } } } diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs index 3be681236..d3be53849 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs @@ -1,129 +1,130 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -/** - * Sample component that procedurally generates a net using rigidbodies and ropes. - */ -public class RopeNet : MonoBehaviour +namespace Obi.Samples { - public Material material; - - public Vector2Int resolution = new Vector2Int(5, 5); - public Vector2 size = new Vector2(0.5f, 0.5f); - public float nodeSize = 0.2f; - - void Awake() + /** + * Sample component that procedurally generates a net using rigidbodies and ropes. + */ + public class RopeNet : MonoBehaviour { - // create an object containing both the solver and the updater: - GameObject solverObject = new GameObject("solver", typeof(ObiSolver), typeof(ObiFixedUpdater)); - ObiSolver solver = solverObject.GetComponent(); - ObiFixedUpdater updater = solverObject.GetComponent(); - updater.substeps = 2; + public Material material; - // adjust solver settings: - solver.particleCollisionConstraintParameters.enabled = false; - solver.distanceConstraintParameters.iterations = 8; - solver.pinConstraintParameters.iterations = 4; - solver.parameters.sleepThreshold = 0.001f; - solver.PushSolverParameters(); + public Vector2Int resolution = new Vector2Int(5, 5); + public Vector2 size = new Vector2(0.5f, 0.5f); + public float nodeSize = 0.2f; - // add the solver to the updater: - updater.solvers.Add(solver); - - // create the net (ropes + rigidbodies) - CreateNet(solver); - } - - private void CreateNet(ObiSolver solver) - { - ObiCollider[,] nodes = new ObiCollider[resolution.x + 1, resolution.y + 1]; - - for (int x = 0; x <= resolution.x; ++x) + void Awake() { - for (int y = 0; y <= resolution.y; ++y) - { - GameObject rb = GameObject.CreatePrimitive(PrimitiveType.Cube); - rb.AddComponent(); - rb.transform.position = new Vector3(x, y, 0) * size; - rb.transform.localScale = new Vector3(nodeSize, nodeSize, nodeSize); + // create an object containing both the solver and the updater: + GameObject solverObject = new GameObject("solver", typeof(ObiSolver)); + ObiSolver solver = solverObject.GetComponent(); + solver.substeps = 2; - nodes[x, y] = rb.AddComponent(); - nodes[x, y].Filter = 1; - } + // adjust solver settings: + solver.particleCollisionConstraintParameters.enabled = false; + solver.distanceConstraintParameters.iterations = 8; + solver.pinConstraintParameters.iterations = 4; + solver.parameters.sleepThreshold = 0.001f; + solver.PushSolverParameters(); + + // create the net (ropes + rigidbodies) + CreateNet(solver); } - nodes[0, resolution.y].GetComponent().isKinematic = true; - nodes[resolution.x, resolution.y].GetComponent().isKinematic = true; - - for (int x = 0; x <= resolution.x; ++x) + private void CreateNet(ObiSolver solver) { - for (int y = 0; y <= resolution.y; ++y) + ObiCollider[,] nodes = new ObiCollider[resolution.x + 1, resolution.y + 1]; + + for (int x = 0; x <= resolution.x; ++x) { - Vector3 pos = new Vector3(x, y, 0) * size; - if (x < resolution.x) + for (int y = 0; y <= resolution.y; ++y) { - Vector3 offset = new Vector3(nodeSize * 0.5f, 0, 0); - var rope = CreateRope(pos + offset, pos + new Vector3(size.x, 0, 0) - offset); - rope.transform.parent = solver.transform; + GameObject rb = GameObject.CreatePrimitive(PrimitiveType.Cube); + rb.transform.position = new Vector3(x, y, 0) * size; + rb.transform.localScale = new Vector3(nodeSize, nodeSize, nodeSize); - PinRope(rope, nodes[x, y], nodes[x + 1, y], new Vector3(0.5f, 0, 0), -new Vector3(0.5f, 0, 0)); + rb.AddComponent(); + nodes[x, y] = rb.AddComponent(); + nodes[x, y].Filter = 1; } + } - if (y < resolution.y) + nodes[0, resolution.y].GetComponent().isKinematic = true; + nodes[resolution.x, resolution.y].GetComponent().isKinematic = true; + + for (int x = 0; x <= resolution.x; ++x) + { + for (int y = 0; y <= resolution.y; ++y) { - Vector3 offset = new Vector3(0, nodeSize * 0.5f, 0); - var rope = CreateRope(pos + offset, pos + new Vector3(0, size.y, 0) - offset); - rope.transform.parent = solver.transform; + Vector3 pos = new Vector3(x, y, 0) * size; + if (x < resolution.x) + { + Vector3 offset = new Vector3(nodeSize * 0.5f, 0, 0); + var rope = CreateRope(pos + offset, pos + new Vector3(size.x, 0, 0) - offset); + rope.transform.parent = solver.transform; - PinRope(rope, nodes[x, y], nodes[x, y + 1], new Vector3(0, 0.5f, 0), -new Vector3(0, 0.5f, 0)); + PinRope(rope, nodes[x, y], nodes[x + 1, y]); + } + + if (y < resolution.y) + { + Vector3 offset = new Vector3(0, nodeSize * 0.5f, 0); + var rope = CreateRope(pos + offset, pos + new Vector3(0, size.y, 0) - offset); + rope.transform.parent = solver.transform; + + PinRope(rope, nodes[x, y], nodes[x, y + 1]); + } } } } - } - private void PinRope(ObiRope rope, ObiCollider bodyA, ObiCollider bodyB, Vector3 offsetA, Vector3 offsetB) - { - // Pin both ends of the rope (this enables two-way interaction between character and rope): - var pinConstraints = rope.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; - pinConstraints.Clear(); - var batch = new ObiPinConstraintsBatch(); - batch.AddConstraint(rope.solverIndices[0], bodyA, offsetA, Quaternion.identity, 0, 999, float.PositiveInfinity); - batch.AddConstraint(rope.solverIndices[rope.activeParticleCount - 1], bodyB, offsetB, Quaternion.identity, 0, 999, float.PositiveInfinity); - batch.activeConstraintCount = 2; - pinConstraints.AddBatch(batch); - } + private void PinRope(ObiRope rope, ObiCollider bodyA, ObiCollider bodyB) + { + var A = rope.gameObject.AddComponent(); + var B = rope.gameObject.AddComponent(); - // Creates a rope between two points in world space: - private ObiRope CreateRope(Vector3 pointA, Vector3 pointB) - { - // Create a rope - var ropeObject = new GameObject("solver", typeof(ObiRope), typeof(ObiRopeLineRenderer)); - var rope = ropeObject.GetComponent(); - var ropeRenderer = ropeObject.GetComponent(); - rope.GetComponent().material = material; - rope.GetComponent().decimation = 0.1f; - ropeRenderer.uvScale = new Vector2(1, 5); + A.attachmentType = ObiParticleAttachment.AttachmentType.Dynamic; + B.attachmentType = ObiParticleAttachment.AttachmentType.Dynamic; - // Setup a blueprint for the rope: - var blueprint = ScriptableObject.CreateInstance(); - blueprint.resolution = 0.15f; - blueprint.thickness = 0.02f; - blueprint.pooledParticles = 0; + A.target = bodyA.transform; + B.target = bodyB.transform; - // convert both points to the rope's local space: - pointA = rope.transform.InverseTransformPoint(pointA); - pointB = rope.transform.InverseTransformPoint(pointB); + A.particleGroup = rope.ropeBlueprint.groups[0]; + B.particleGroup = rope.ropeBlueprint.groups[1]; + } - // Procedurally generate the rope path (a simple straight line): - Vector3 direction = (pointB - pointA) * 0.25f; - blueprint.path.Clear(); - blueprint.path.AddControlPoint(pointA, -direction, direction, Vector3.up, 0.1f, 0.1f, 1, 1, Color.white, "A"); - blueprint.path.AddControlPoint(pointB, -direction, direction, Vector3.up, 0.1f, 0.1f, 1, 1, Color.white, "B"); - blueprint.path.FlushEvents(); + // Creates a rope between two points in world space: + private ObiRope CreateRope(Vector3 pointA, Vector3 pointB) + { + // Create a rope + var ropeObject = new GameObject("solver", typeof(ObiRope), typeof(ObiRopeLineRenderer)); + var rope = ropeObject.GetComponent(); + var ropeRenderer = ropeObject.GetComponent(); + rope.GetComponent().material = material; + rope.GetComponent().decimation = 0.1f; + ropeRenderer.uvScale = new Vector2(1, 5); - rope.ropeBlueprint = blueprint; - return rope; + // Setup a blueprint for the rope: + var blueprint = ScriptableObject.CreateInstance(); + blueprint.resolution = 0.15f; + blueprint.thickness = 0.02f; + blueprint.pooledParticles = 0; + + // convert both points to the rope's local space: + pointA = rope.transform.InverseTransformPoint(pointA); + pointB = rope.transform.InverseTransformPoint(pointB); + + // Procedurally generate the rope path (a simple straight line): + Vector3 direction = (pointB - pointA) * 0.25f; + blueprint.path.Clear(); + blueprint.path.AddControlPoint(pointA, -direction, direction, Vector3.up, 0.1f, 0.1f, 1, 1, Color.white, "A"); + blueprint.path.AddControlPoint(pointB, -direction, direction, Vector3.up, 0.1f, 0.1f, 1, 1, Color.white, "B"); + blueprint.path.FlushEvents(); + + rope.ropeBlueprint = blueprint; + return rope; + } } } diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs index 80632c448..d6bdd3649 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs @@ -1,127 +1,150 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -[RequireComponent(typeof(ObiRope))] -public class RopeSweepCut : MonoBehaviour +namespace Obi.Samples { - - public Camera cam; - - ObiRope rope; - LineRenderer lineRenderer; - Vector3 cutStartPosition; - - private void Awake() + [RequireComponent(typeof(ObiRope))] + public class RopeSweepCut : MonoBehaviour { - rope = GetComponent(); - AddMouseLine(); - } + public Camera cam; - private void OnDestroy() - { - DeleteMouseLine(); - } + ObiRope rope; + LineRenderer lineRenderer; + Vector3 cutStartPosition; + Vector3 cutEndPosition; + bool cut; - private void AddMouseLine() - { - GameObject line = new GameObject("Mouse Line"); - lineRenderer = line.AddComponent(); - lineRenderer.startWidth = 0.005f; - lineRenderer.endWidth = 0.005f; - lineRenderer.numCapVertices = 2; - lineRenderer.sharedMaterial = new Material(Shader.Find("Unlit/Color")); - lineRenderer.sharedMaterial.color = Color.cyan; - lineRenderer.enabled = false; - } - - private void DeleteMouseLine() - { - if (lineRenderer != null) - Destroy(lineRenderer.gameObject); - } - - private void LateUpdate() - { - // do nothing if we don't have a camera to cut from. - if (cam == null) return; - - // process user input and cut the rope if necessary. - ProcessInput(); - } - - /** - * Very simple mouse-based input. Not ideal for multitouch screens as it only supports one finger, though. - */ - private void ProcessInput() - { - // When the user clicks the mouse, start a line cut: - if (Input.GetMouseButtonDown(0)) + private void Awake() { - cutStartPosition = Input.mousePosition; - lineRenderer.SetPosition(0, cam.ScreenToWorldPoint(new Vector3(cutStartPosition.x, cutStartPosition.y, 0.5f))); - lineRenderer.enabled = true; + rope = GetComponent(); + AddMouseLine(); } - if (lineRenderer.enabled) - lineRenderer.SetPosition(1, cam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.5f))); - - // When the user lifts the mouse, proceed to cut. - if (Input.GetMouseButtonUp(0)) + private void OnDestroy() { - ScreenSpaceCut(cutStartPosition, Input.mousePosition); + DeleteMouseLine(); + } + + private void OnEnable() + { + rope.OnSimulationStart += Rope_OnBeginSimulation; + } + + private void OnDisable() + { + rope.OnSimulationStart -= Rope_OnBeginSimulation; + } + + private void AddMouseLine() + { + GameObject line = new GameObject("Mouse Line"); + lineRenderer = line.AddComponent(); + lineRenderer.startWidth = 0.005f; + lineRenderer.endWidth = 0.005f; + lineRenderer.numCapVertices = 2; + lineRenderer.sharedMaterial = new Material(Shader.Find("Unlit/Color")); + lineRenderer.sharedMaterial.color = Color.cyan; lineRenderer.enabled = false; } - } - - /** - * Cuts the rope using a line segment, expressed in screen-space. - */ - private void ScreenSpaceCut(Vector2 lineStart, Vector2 lineEnd) - { - // keep track of whether the rope was cut or not. - bool cut = false; - - // iterate over all elements and test them for intersection with the line: - for (int i = 0; i < rope.elements.Count; ++i) + private void DeleteMouseLine() { - // project the both ends of the element to screen space. - Vector3 screenPos1 = cam.WorldToScreenPoint(rope.solver.positions[rope.elements[i].particle1]); - Vector3 screenPos2 = cam.WorldToScreenPoint(rope.solver.positions[rope.elements[i].particle2]); + if (lineRenderer != null) + Destroy(lineRenderer.gameObject); + } - // test if there's an intersection: - if (SegmentSegmentIntersection(screenPos1, screenPos2, lineStart, lineEnd, out float r, out float s)) + private void LateUpdate() + { + // do nothing if we don't have a camera to cut from. + if (cam == null) return; + + // process user input and cut the rope if necessary. + ProcessInput(); + } + + private void Rope_OnBeginSimulation(ObiActor actor, float stepTime, float substepTime) + { + if (cut) { - cut = true; - rope.Tear(rope.elements[i]); + ScreenSpaceCut(cutStartPosition, cutEndPosition); + cut = false; } } - // If the rope was cut at any point, rebuilt constraints: - if (cut) rope.RebuildConstraintsFromElements(); + /** + * Very simple mouse-based input. Not ideal for multitouch screens as it only supports one finger, though. + */ + private void ProcessInput() + { + // When the user clicks the mouse, start a line cut: + if (Input.GetMouseButtonDown(0)) + { + cutStartPosition = Input.mousePosition; + lineRenderer.SetPosition(0, cam.ScreenToWorldPoint(new Vector3(cutStartPosition.x, cutStartPosition.y, 0.5f))); + lineRenderer.enabled = true; + } + + if (lineRenderer.enabled) + lineRenderer.SetPosition(1, cam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.5f))); + + // When the user lifts the mouse, proceed to cut. + if (Input.GetMouseButtonUp(0)) + { + cutEndPosition = Input.mousePosition; + lineRenderer.enabled = false; + cut = true; + } + } + + + /** + * Cuts the rope using a line segment, expressed in screen-space. + */ + private void ScreenSpaceCut(Vector2 lineStart, Vector2 lineEnd) + { + // keep track of whether the rope was cut or not. + bool ropeCut = false; + + // iterate over all elements and test them for intersection with the line: + for (int i = 0; i < rope.elements.Count; ++i) + { + // project the both ends of the element to screen space. + Vector3 screenPos1 = cam.WorldToScreenPoint(rope.solver.positions[rope.elements[i].particle1]); + Vector3 screenPos2 = cam.WorldToScreenPoint(rope.solver.positions[rope.elements[i].particle2]); + + // test if there's an intersection: + if (SegmentSegmentIntersection(screenPos1, screenPos2, lineStart, lineEnd, out float r, out float s)) + { + ropeCut = true; + rope.Tear(rope.elements[i]); + } + } + + // If the rope was cut at any point, rebuilt constraints: + if (ropeCut) rope.RebuildConstraintsFromElements(); + } + + /** + * line segment 1 is AB = A+r(B-A) + * line segment 2 is CD = C+s(D-C) + * if they intesect, then A+r(B-A) = C+s(D-C), solving for r and s gives the formula below. + * If both r and s are in the 0,1 range, it meant the segments intersect. + */ + private bool SegmentSegmentIntersection(Vector2 A, Vector2 B, Vector2 C, Vector2 D, out float r, out float s) + { + float denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x); + float rNum = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y); + float sNum = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y); + + if (Mathf.Approximately(rNum, 0) || Mathf.Approximately(denom, 0)) + { r = -1; s = -1; return false; } + + r = rNum / denom; + s = sNum / denom; + + return (r >= 0 && r <= 1 && s >= 0 && s <= 1); + } } - - /** - * line segment 1 is AB = A+r(B-A) - * line segment 2 is CD = C+s(D-C) - * if they intesect, then A+r(B-A) = C+s(D-C), solving for r and s gives the formula below. - * If both r and s are in the 0,1 range, it meant the segments intersect. - */ - private bool SegmentSegmentIntersection(Vector2 A, Vector2 B, Vector2 C, Vector2 D, out float r, out float s) - { - float denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x); - float rNum = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y); - float sNum = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y); - - if (Mathf.Approximately(rNum, 0) || Mathf.Approximately(denom, 0)) - { r = -1; s = -1; return false; } - - r = rNum / denom; - s = sNum / denom; - - return (r >= 0 && r <=1 && s >= 0 && s <= 1); - } -} +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs index 50312f401..5e1aa2799 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs @@ -2,13 +2,16 @@ using System.Collections.Generic; using UnityEngine; -public class RopeTenser : MonoBehaviour +namespace Obi.Samples { - public float force = 10; - - // Update is called once per frame - void Update() + public class RopeTenser : MonoBehaviour { - GetComponent().AddForce(Vector3.down * force); + public float force = 10; + + // Update is called once per frame + void Update() + { + GetComponent().AddForce(Vector3.down * force); + } } } diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs index 121f021ef..23a38d675 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs @@ -1,56 +1,60 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -[RequireComponent(typeof(ObiRope))] -[RequireComponent(typeof(MeshRenderer))] -public class RopeTensionColorizer : MonoBehaviour +namespace Obi.Samples { - public float minTension = 0; - public float maxTension = 0.2f; - public Color normalColor = Color.green; - public Color tensionColor = Color.red; - - public RopeTenser tenser; - public float tenserThreshold = -5; - public float tenserMax = 0.1f; - - private ObiRope rope; - private Material localMaterial; - - void Awake() + [RequireComponent(typeof(ObiRope))] + public class RopeTensionColorizer : MonoBehaviour { - rope = GetComponent(); - localMaterial = GetComponent().material; - } + public float minTension = 0; + public float maxTension = 0.2f; + public Color normalColor = Color.green; + public Color tensionColor = Color.red; - private void OnDestroy() - { - Destroy(localMaterial); - } + public RopeTenser tenser; + public float tenserThreshold = -5; + public float tenserMax = 0.1f; - void Update() - { - if (tenser == null) - return; + private ObiRope rope; + private Material localMaterial; - // Calculate how much past the threshold the tenser is, clamp the excess to 1 - float tenserFactor = Mathf.Min((tenser.transform.position.y - tenserThreshold) / tenserMax,1); - - // Check if the tenser is above the threshold, if so then check rope tension: - if (tenserFactor > 0) + void Awake() { - // Calculate current tension as ratio between current and rest length, then subtract 1 to center it at zero. - float tension = rope.CalculateLength() / rope.restLength - 1; + rope = GetComponent(); + var rend = GetComponent(); + localMaterial = Instantiate(rend.material); + rend.material = localMaterial; - // Use tension to interpolate between colors: - float lerpFactor = (tension - minTension) / (maxTension - minTension); - localMaterial.color = Color.Lerp(normalColor, tensionColor, lerpFactor * tenserFactor); } - else + + private void OnDestroy() { - localMaterial.color = normalColor; + Destroy(localMaterial); + } + + void Update() + { + if (tenser == null) + return; + + // Calculate how much past the threshold the tenser is, clamp the excess to 1 + float tenserFactor = Mathf.Min((tenser.transform.position.y - tenserThreshold) / tenserMax, 1); + + // Check if the tenser is above the threshold, if so then check rope tension: + if (tenserFactor > 0) + { + // Calculate current tension as ratio between current and rest length, then subtract 1 to center it at zero. + float tension = rope.CalculateLength() / rope.restLength - 1; + + // Use tension to interpolate between colors: + float lerpFactor = (tension - minTension) / (maxTension - minTension); + localMaterial.color = Color.Lerp(normalColor, tensionColor, lerpFactor * tenserFactor); + } + else + { + localMaterial.color = normalColor; + } } } } diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGenerator.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGenerator.cs deleted file mode 100644 index 3eb3ba6ca..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGenerator.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections; -using UnityEngine; -using Obi; - -public class RuntimeRopeGenerator -{ - //private ObiRope rope; - //private ObiRopeCursor cursor; - private ObiSolver solver; - private int pinnedParticle = -1; - - /// - /// Creates a straight rope anchored to a transform at the top. - /// Transform may or may not move around and may or may not have a rigidbody. - /// When you call this the rope will appear in the scene and immediately interact with gravity and objects with ObiColliders. - /// Called from anywhere (main thread only) - /// - public IEnumerator MakeRope(Transform anchoredTo, Vector3 attachmentOffset, float ropeLength) - { - // create a new GameObject with the required components: a solver, a rope, and a curve. - // we also throw a cursor in to be able to change its length. - /*GameObject ropeObject = new GameObject("rope",typeof(ObiSolver), - typeof(ObiRope), - typeof(ObiCurve), - typeof (ObiRopeCursor)); - - // get references to all components: - rope = ropeObject.GetComponent(); - cursor = ropeObject.GetComponent(); - solver = ropeObject.GetComponent(); - ObiCurve path = ropeObject.GetComponent(); - - // set up component references (see ObiRopeHelper.cs) - rope.Solver = solver; - rope.ropePath = path; - //rope.section = Resources.Load("DefaultRopeSection"); - - // set path control points (duplicate end points, to set curvature as required by CatmullRom splines): - path.controlPoints.Clear(); - path.controlPoints.Add(new ObiCurve.ControlPoint(Vector3.zero,Vector3.up)); - path.controlPoints.Add(new ObiCurve.ControlPoint(Vector3.zero,Vector3.up)); - path.controlPoints.Add(new ObiCurve.ControlPoint(Vector3.down*ropeLength,Vector3.up)); - path.controlPoints.Add(new ObiCurve.ControlPoint(Vector3.down*ropeLength,Vector3.up)); - - rope.pooledParticles = 2000; - - // parent the rope to the anchor transform: - rope.transform.SetParent(anchoredTo,false); - rope.transform.localPosition = attachmentOffset; - - // generate particles/constraints and add them to the solver (see ObiRopeHelper.cs) - yield return rope.StartCoroutine(rope.GeneratePhysicRepresentationForMesh()); - rope.AddToSolver(null); - - // get the last particle in the rope at its rest state. - pinnedParticle = rope.UsedParticles-1; - - // add a tethers batch: - ObiTetherConstraintBatch tetherBatch = new ObiTetherConstraintBatch(true,false,0,1); - rope.TetherConstraints.AddBatch(tetherBatch); - //UpdateTethers(); - - // fix first particle in place (see http://obi.virtualmethodstudio.com/tutorials/scriptingparticles.html) - rope.Solver.invMasses[rope.particleIndices[0]] = rope.invMasses[0] = 0;*/ - yield return 0; - } - - /// - /// MakeRope and AddPendulum may NOT be called on the same frame. You must wait for the MakeRope coroutine to finish first, as creating a rope is an asynchronous operation. - /// Just adds a pendulum to the rope on the un-anchored end. - /// - public void AddPendulum(ObiCollider pendulum, Vector3 attachmentOffset) - { - // simply add a new pin constraint (see http://obi.virtualmethodstudio.com/tutorials/scriptingconstraints.html) - /*rope.PinConstraints.RemoveFromSolver(null); - ObiPinConstraintBatch batch = (ObiPinConstraintBatch)rope.PinConstraints.GetFirstBatch(); - batch.AddConstraint(pinnedParticle, pendulum, attachmentOffset,Quaternion.identity, 1); - rope.PinConstraints.AddToSolver(null);*/ - } - - /// - /// RemovePendulum and AddPendulum may be called on the same frame. - /// - public void RemovePendulum() - { - // simply remove all pin constraints (see http://obi.virtualmethodstudio.com/tutorials/scriptingconstraints.html) - /*rope.PinConstraints.RemoveFromSolver(null); - rope.PinConstraints.GetFirstBatch().Clear(); - rope.PinConstraints.AddToSolver(null);*/ - } - - /// - /// Like extending or retracting a winch. - /// - public void ChangeRopeLength(float changeAmount) - { - // the cursor will automatically add/remove/modify constraints and particles as needed to obtain the new length. - //cursor.ChangeLength(rope.RestLength + changeAmount); - //UpdateTethers(); - } - - private void UpdateTethers() - { - /*rope.TetherConstraints.RemoveFromSolver(null); - ObiTetherConstraintBatch batch = (ObiTetherConstraintBatch)rope.TetherConstraints.GetFirstBatch(); - batch.Clear(); - - ObiDistanceConstraintBatch dbatch = rope.DistanceConstraints.GetFirstBatch(); - for (int i = 0; i < dbatch.ConstraintCount; ++i) - batch.AddConstraint(0,dbatch.springIndices[i*2+1], rope.InterparticleDistance*i, 1, 1); - - batch.Cook(); - rope.TetherConstraints.AddToSolver(null);*/ - } -} - - diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGenerator.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGenerator.cs.meta deleted file mode 100644 index b38eacc14..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGenerator.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 0854563331ce443fa9b17a143c084806 -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGeneratorUse.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGeneratorUse.cs deleted file mode 100644 index cdb04778e..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGeneratorUse.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections; -using UnityEngine; -using Obi; - -public class RuntimeRopeGeneratorUse : MonoBehaviour -{ - public ObiCollider pendulum; - RuntimeRopeGenerator rg; - - public IEnumerator Start() - { - rg = new RuntimeRopeGenerator(); - - // Create a rope: - yield return rg.MakeRope(transform,Vector3.zero,1); - - // Add a pendulum (you should adjust the attachment point depending on your particular pendulum object) - rg.AddPendulum(pendulum,Vector3.up*0.5f); - } - - public void Update(){ - - if (Input.GetKey(KeyCode.W)){ - rg.ChangeRopeLength(- Time.deltaTime); - } - - if (Input.GetKey(KeyCode.S)){ - rg.ChangeRopeLength( Time.deltaTime); - } - - } -} - - diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGeneratorUse.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGeneratorUse.cs.meta deleted file mode 100644 index 84a66090a..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/RuntimeRopeGeneratorUse.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5e7b946ba720c495a8ee7c1d3e903063 -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs index a3c89e008..a939ce8f0 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs @@ -1,122 +1,126 @@ using UnityEngine; -using Obi; -public class SnakeController : MonoBehaviour +namespace Obi.Samples { - public Transform headReferenceFrame; - public float headSpeed = 20; - public float upSpeed = 40; - public float slitherSpeed = 10; - - private ObiRope rope; - private ObiSolver solver; - private float[] traction; - private Vector3[] surfaceNormal; - - private void Start() + public class SnakeController : MonoBehaviour { - rope = GetComponent(); - solver = rope.solver; + public Transform headReferenceFrame; + public float headSpeed = 20; + public float upSpeed = 40; + public float slitherSpeed = 10; - // initialize traction array: - traction = new float[rope.activeParticleCount]; - surfaceNormal = new Vector3[rope.activeParticleCount]; + private ObiRope rope; + private ObiSolver solver; + private float[] traction; + private Vector3[] surfaceNormal; - // subscribe to solver events (to update surface information) - solver.OnBeginStep += ResetSurfaceInfo; - solver.OnCollision += AnalyzeContacts; - solver.OnParticleCollision += AnalyzeContacts; - } - - - private void OnDestroy() - { - solver.OnBeginStep -= ResetSurfaceInfo; - solver.OnCollision -= AnalyzeContacts; - solver.OnParticleCollision -= AnalyzeContacts; - } - - private void ResetSurfaceInfo(ObiSolver s, float stepTime) - { - // reset surface info: - for (int i = 0; i < traction.Length; ++i) + private void Start() { - traction[i] = 0; - surfaceNormal[i] = Vector3.zero; + rope = GetComponent(); + solver = rope.solver; + + // subscribe to solver events (to update surface information) + rope.OnSimulationStart += ResetSurfaceInfo; + solver.OnCollision += AnalyzeContacts; + solver.OnParticleCollision += AnalyzeContacts; } - } - private void AnalyzeContacts(object sender, ObiSolver.ObiCollisionEventArgs e) - { - // iterate trough all contacts: - for (int i = 0; i < e.contacts.Count; ++i) + + private void OnDestroy() { - var contact = e.contacts.Data[i]; - if (contact.distance < 0.005f) + rope.OnSimulationStart -= ResetSurfaceInfo; + solver.OnCollision -= AnalyzeContacts; + solver.OnParticleCollision -= AnalyzeContacts; + } + + private void ResetSurfaceInfo(ObiActor a, float simulatedTime, float substepTime) + { + + if (traction == null) { - int simplexIndex = solver.simplices[contact.bodyA]; - var particleInActor = solver.particleToActor[simplexIndex]; + traction = new float[rope.activeParticleCount]; + surfaceNormal = new Vector3[rope.activeParticleCount]; + } - if (particleInActor.actor == rope) + if (Input.GetKey(KeyCode.J)) + { + for (int i = 1; i < rope.activeParticleCount; ++i) { - // using 1 here, could calculate a traction value based on the type of terrain, friction, etc. - traction[particleInActor.indexInActor] = 1; + int solverIndex = rope.solverIndices[i]; + int prevSolverIndex = rope.solverIndices[i - 1]; - // accumulate surface normal: - surfaceNormal[particleInActor.indexInActor] += (Vector3)contact.normal; + // direction from current particle to previous one, projected on the contact surface: + Vector4 dir = Vector3.ProjectOnPlane(solver.positions[prevSolverIndex] - solver.positions[solverIndex], surfaceNormal[i]).normalized; + + // move in that direction: + solver.velocities[solverIndex] += dir * traction[i] / solver.invMasses[solverIndex] * slitherSpeed * simulatedTime; + } + } + + int headIndex = rope.solverIndices[0]; + + if (headReferenceFrame != null) + { + Vector3 direction = Vector3.zero; + + // Determine movement direction: + if (Input.GetKey(KeyCode.W)) + { + direction += headReferenceFrame.forward * headSpeed; + } + if (Input.GetKey(KeyCode.A)) + { + direction += -headReferenceFrame.right * headSpeed; + } + if (Input.GetKey(KeyCode.S)) + { + direction += -headReferenceFrame.forward * headSpeed; + } + if (Input.GetKey(KeyCode.D)) + { + direction += headReferenceFrame.right * headSpeed; + } + + // flatten out the direction so that it's parallel to the ground: + direction.y = 0; + + solver.velocities[headIndex] += (Vector4)direction * simulatedTime; + } + + if (Input.GetKey(KeyCode.Space)) + solver.velocities[headIndex] += (Vector4)Vector3.up * simulatedTime * upSpeed; + + + // reset surface info: + for (int i = 0; i < traction.Length; ++i) + { + traction[i] = 0; + surfaceNormal[i] = Vector3.zero; + } + + } + + private void AnalyzeContacts(object sender, ObiNativeContactList e) + { + // iterate trough all contacts: + for (int i = 0; i < e.count; ++i) + { + var contact = e[i]; + if (contact.distance < 0.005f) + { + int simplexIndex = solver.simplices[contact.bodyA]; + var particleInActor = solver.particleToActor[simplexIndex]; + + if (particleInActor != null && particleInActor.actor == rope && traction != null) + { + // using 1 here, could calculate a traction value based on the type of terrain, friction, etc. + traction[particleInActor.indexInActor] = 1; + + // accumulate surface normal: + surfaceNormal[particleInActor.indexInActor] += (Vector3)contact.normal; + } } } } } - - public void Update() - { - if (Input.GetKey(KeyCode.J)) - { - for (int i = 1; i < rope.activeParticleCount; ++i) - { - int solverIndex = rope.solverIndices[i]; - int prevSolverIndex = rope.solverIndices[i - 1]; - - // direction from current particle to previous one, projected on the contact surface: - Vector4 dir = Vector3.ProjectOnPlane(solver.positions[prevSolverIndex] - solver.positions[solverIndex], surfaceNormal[i]).normalized; - - // move in that direction: - solver.velocities[solverIndex] += dir * traction[i] * slitherSpeed * Time.deltaTime; - } - } - - int headIndex = rope.solverIndices[0]; - - if (headReferenceFrame != null) - { - Vector3 direction = Vector3.zero; - - // Determine movement direction: - if (Input.GetKey(KeyCode.W)) - { - direction += headReferenceFrame.forward * headSpeed; - } - if (Input.GetKey(KeyCode.A)) - { - direction += -headReferenceFrame.right * headSpeed; - } - if (Input.GetKey(KeyCode.S)) - { - direction += -headReferenceFrame.forward * headSpeed; - } - if (Input.GetKey(KeyCode.D)) - { - direction += headReferenceFrame.right * headSpeed; - } - - // flatten out the direction so that it's parallel to the ground: - direction.y = 0; - - solver.velocities[headIndex] += (Vector4)direction * Time.deltaTime; - } - - if (Input.GetKey(KeyCode.Space)) - solver.velocities[headIndex] += (Vector4)Vector3.up * Time.deltaTime * upSpeed; - } -} +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs index ae350d1bd..62469a0f4 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs @@ -1,50 +1,53 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Obi; -[ExecuteInEditMode] -public class SpiralCurve : MonoBehaviour { - - public float radius = 0.25f; - public float radialStep = 0.8f; - public float heightStep = 0.04f; - public float points = 30; - - public float rotationalMass = 1; - public float thickness = 1; - - void Awake () +namespace Obi.Samples +{ + [ExecuteInEditMode] + public class SpiralCurve : MonoBehaviour { - Generate(); - } - public void Generate() - { - var rod = GetComponent(); - if (rod == null) return; + public float radius = 0.25f; + public float radialStep = 0.8f; + public float heightStep = 0.04f; + public float points = 30; - var blueprint = rod.sourceBlueprint as ObiRopeBlueprintBase; - if (blueprint == null) return; + public float rotationalMass = 1; + public float thickness = 1; - blueprint.path.Clear(); - - float ang = 0; - float height = 0; - - for (int i = 0; i < points; ++i) + void Awake() { - Vector3 point = new Vector3(Mathf.Cos(ang) * radius, height, Mathf.Sin(ang) * radius); - - // optimal handle length for circle approximation: 4/3 tan(pi/(2n)) - Vector3 tangent = new Vector3(-point.z, heightStep, point.x).normalized * (4.0f / 3.0f) * Mathf.Tan(radialStep / 4.0f) * radius; - - blueprint.path.AddControlPoint(point, -tangent, tangent, Vector3.up, 1, rotationalMass, thickness, 1, Color.white, "control point " + i); - ang += radialStep; - height += heightStep; + Generate(); } - blueprint.path.FlushEvents(); - } + public void Generate() + { + var rod = GetComponent(); + if (rod == null) return; + var blueprint = rod.sourceBlueprint as ObiRopeBlueprintBase; + if (blueprint == null) return; + + blueprint.path.Clear(); + + float ang = 0; + float height = 0; + + for (int i = 0; i < points; ++i) + { + Vector3 point = new Vector3(Mathf.Cos(ang) * radius, height, Mathf.Sin(ang) * radius); + + // optimal handle length for circle approximation: 4/3 tan(pi/(2n)) + Vector3 tangent = new Vector3(-point.z, heightStep, point.x).normalized * (4.0f / 3.0f) * Mathf.Tan(radialStep / 4.0f) * radius; + + blueprint.path.AddControlPoint(point, -tangent, tangent, Vector3.up, 1, rotationalMass, thickness, 1, Color.white, "control point " + i); + ang += radialStep; + height += heightStep; + } + + blueprint.path.FlushEvents(); + } + + } } diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs new file mode 100644 index 000000000..fc85aafaf --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs @@ -0,0 +1,88 @@ +using System.Collections; +using UnityEngine; + +namespace Obi.Samples +{ + [RequireComponent(typeof(Rigidbody))] + public class TangledPeg : MonoBehaviour + { + public TangledPegSlot currentSlot; + public Collider floorCollider; + public ObiRope attachedRope; + + [Header("Movement")] + public float stiffness = 200; + public float damping = 20; + public float maxAccel = 50; + public float minDistance = 0.05f; + + + public Rigidbody rb { get; private set; } + public ObiRigidbody orb { get; private set; } + + void Awake() + { + rb = GetComponent(); + orb = GetComponent(); + + // Ignore collisions with the floor: + Physics.IgnoreCollision(GetComponent(), floorCollider); + + // Initialize the peg's current slot, if any: + if (currentSlot != null) + { + currentSlot.currentPeg = this; + transform.position = currentSlot.transform.position; + } + } + + public float MoveTowards(Vector3 position) + { + Vector3 vector = position - transform.position; + float distance = Vector3.Magnitude(vector); + + // simple damped spring: F = -kx - vu + Vector3 accel = stiffness * vector - damping * rb.linearVelocity; + + // clamp spring acceleration: + accel = Vector3.ClampMagnitude(accel, maxAccel); + + rb.AddForce(accel, ForceMode.Acceleration); + + return distance; + } + + public void DockInSlot(TangledPegSlot slot) + { + StopAllCoroutines(); + StartCoroutine(MoveTowardsSlot(slot)); + } + + public void UndockFromCurrentSlot() + { + if (currentSlot != null) + { + currentSlot.currentPeg = null; + rb.isKinematic = false; + } + } + + private IEnumerator MoveTowardsSlot(TangledPegSlot slot) + { + float distance = float.MaxValue; + orb.kinematicForParticles = true; + + while (distance > minDistance) + { + distance = MoveTowards(slot.transform.position); + yield return 0; + } + + currentSlot = slot; + currentSlot.currentPeg = this; + transform.position = currentSlot.transform.position; + rb.isKinematic = true; + orb.kinematicForParticles = false; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs.meta new file mode 100644 index 000000000..5e3431e2c --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: beb10e70cc06a4b019ecf88348a5f7fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs new file mode 100644 index 000000000..5febdfd65 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +namespace Obi.Samples +{ + public class TangledPegSlot : MonoBehaviour + { + public TangledPeg currentPeg; + public Color tintColor; + + private Material instance; + private Color normalColor; + + public void Awake() + { + instance = GetComponent().material; + normalColor = instance.color; + } + + public void Tint() + { + instance.color = tintColor; + } + + public void ResetColor() + { + instance.color = normalColor; + } + + public void OnDestroy() + { + Destroy(instance); + } + } +} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs.meta new file mode 100644 index 000000000..b4c1bbdf3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 866212c246a9c4c5797069099ad745aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs new file mode 100644 index 000000000..8a0c5345b --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs @@ -0,0 +1,138 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace Obi.Samples +{ + [RequireComponent(typeof(ObiSolver))] + public class TangledRopesGameController : MonoBehaviour + { + public TangledPegSlot[] pegSlots; + public float pegHoverHeight = 1; + public float maxPegDistanceFromSlot = 1.5f; + public int framesWithoutContactsToWin = 30; + public UnityEvent onFinish = new UnityEvent(); + + private TangledPeg selectedPeg; + private Plane floor = new Plane(Vector3.up, 0); + private int framesSinceLastContact = 0; + + void OnEnable() + { + GetComponent().OnParticleCollision += Solver_OnParticleCollision; + } + + private void OnDisable() + { + GetComponent().OnParticleCollision -= Solver_OnParticleCollision; + } + + private TangledPegSlot FindCandidateSlot(TangledPeg peg) + { + // Go over all slots, find the closest one to the peg that's closer than + // maxPegDistanceFromSlot: + + TangledPegSlot closest = null; + float closestDistance = float.MaxValue; + + foreach (TangledPegSlot slot in pegSlots) + { + // reset slot color, to make sure it looks normal if it's not a candidate for our peg. + slot.ResetColor(); + + // ignore occupied slots: + if (slot.currentPeg != null) + continue; + + Vector3 slotOnFloor = floor.ClosestPointOnPlane(slot.transform.position); + Vector3 pegOnFloor = floor.ClosestPointOnPlane(peg.transform.position); + + float distance = Vector3.Distance(slotOnFloor, pegOnFloor); + if (distance < closestDistance && distance < maxPegDistanceFromSlot) + { + closest = slot; + closestDistance = distance; + } + } + + return closest; + } + + private void Update() + { + Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); + + // User clicks, cast a ray towards the floor, see if it hits any peg. + if (Input.GetMouseButtonDown(0)) + { + if (Physics.Raycast(ray, out RaycastHit hit)) + { + // if the ray hit a peg, store it as the selected peg and lift it off from its current slot. + if (hit.transform.TryGetComponent(out TangledPeg peg) && peg.currentSlot != null) + { + selectedPeg = peg; + selectedPeg.UndockFromCurrentSlot(); + } + } + } + + if (selectedPeg != null) + { + // Make selected peg follow the mouse cursor: + if (floor.Raycast(ray, out float enter)) + selectedPeg.MoveTowards(ray.GetPoint(enter) + Vector3.up * pegHoverHeight); + + // Try to find a suitable slot to drop the peg: + TangledPegSlot closest = FindCandidateSlot(selectedPeg); + + // If we found a candidate slot, tint it to give the player some visual feedback: + if (closest != null) + closest.Tint(); + + // Drop selected peg: + if (Input.GetMouseButtonUp(0)) + { + // If we could find a free slot nearby, connect to it: + if (closest != null) + { + selectedPeg.currentSlot = null; + selectedPeg.DockInSlot(closest); + closest.ResetColor(); + } + else // If we couldn't find one or if it's too far, return to current slot. + { + selectedPeg.DockInSlot(selectedPeg.currentSlot); + } + + selectedPeg = null; + } + } + + // If all ropes have been contact-free for a certain amount of frames, trigger finish event. + if (framesSinceLastContact >= framesWithoutContactsToWin && onFinish != null) + onFinish.Invoke(); + + } + + private void Solver_OnParticleCollision(ObiSolver s, ObiNativeContactList e) + { + // Count contacts between different ropes (that is, exclude self-contacts): + int contactsBetweenRopes = 0; + + for (int i = 0; i < e.count; ++i) + { + var ropeA = s.particleToActor[s.simplices[e[i].bodyA]].actor; + var ropeB = s.particleToActor[s.simplices[e[i].bodyB]].actor; + + if (ropeA != ropeB) + contactsBetweenRopes++; + } + + // If there's no contacts, bump the amount of frames we've been contact-free. + // Otherwise reset the amount of frames to zero. + if (contactsBetweenRopes == 0) + framesSinceLastContact++; + else + framesSinceLastContact = 0; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs.meta new file mode 100644 index 000000000..3a556d54a --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1cdc16773c1f4ebe94e32c3ae0005bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs new file mode 100644 index 000000000..6da29b457 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs @@ -0,0 +1,114 @@ + +using UnityEngine; + +namespace Obi.Samples +{ + public class VineClimbController : MonoBehaviour + { + public ObiSolver solver; + public float climbSpeed = 1.5f; + + ObiPinhole pinhole; + bool pressedSpace = false; + + void Start() + { + solver.OnCollision += Solver_OnCollision; + } + + public void Update() + { + if (pinhole != null) + { + float speed = 0; + if (Input.GetKey(KeyCode.W)) + speed = climbSpeed; + if (Input.GetKey(KeyCode.S)) + speed = -climbSpeed; + + pinhole.motorSpeed = speed; + } + + if (Input.GetKeyDown(KeyCode.Space)) + { + pressedSpace = true; + DetachFromVine(); + } + } + + private void Solver_OnCollision(ObiSolver solver, ObiNativeContactList contacts) + { + if (pressedSpace) + { + int bestParticle = -1; + float closestDistance = float.MaxValue; + Vector3 closestOffset = Vector3.zero; + foreach (var c in contacts) + { + if (c.distance < 0.001f) + { + ObiCollider collider = ObiColliderWorld.GetInstance().colliderHandles[c.bodyB].owner as ObiCollider; + if (collider.sourceCollider.isTrigger) + { + int particle = solver.simplices[c.bodyA]; + var worldPosition = solver.transform.TransformPoint(solver.positions[particle]); + Vector3 offset = worldPosition - collider.transform.position; + float distance = Vector3.Magnitude(offset); + + if (distance < closestDistance) + { + closestDistance = distance; + closestOffset = offset; + bestParticle = particle; + } + } + } + } + + if (bestParticle >= 0) + { + var actor = solver.particleToActor[bestParticle].actor; + AttachToVine(actor as ObiRope, bestParticle, closestOffset); + } + + pressedSpace = false; + } + } + + private float GetParticleMu(ObiRope rope, int solverParticleIndex) + { + for (int i = 0; i < rope.elements.Count; ++i) + { + if (rope.elements[i].particle1 == solverParticleIndex) + return i / (float)rope.elements.Count; + if (rope.elements[i].particle2 == solverParticleIndex) + return (i + 1) / (float)rope.elements.Count; + } + return 1; + } + + // Update is called once per frame + void AttachToVine(ObiRope rope, int particle, Vector3 offset) + { + if (pinhole == null && rope != null) + { + transform.position += offset; + pinhole = rope.gameObject.AddComponent(); + pinhole.position = GetParticleMu(rope, particle); + pinhole.motorForce = Mathf.Infinity; + pinhole.friction = 1; + pinhole.target = this.transform; + } + } + + void DetachFromVine() + { + if (pinhole != null) + { + GameObject.Destroy(pinhole); + pinhole = null; + pressedSpace = false; + } + } + } +} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs.meta new file mode 100644 index 000000000..12b4f345b --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50c674b3f8f0045249ac099130c6a6b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs index 3f51fcca5..aa3da3fc2 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs @@ -2,71 +2,73 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; -using Obi; -[RequireComponent(typeof(ObiSolver))] -public class WrapRopeGameController : MonoBehaviour +namespace Obi.Samples { + [RequireComponent(typeof(ObiSolver))] + public class WrapRopeGameController : MonoBehaviour + { - ObiSolver solver; + ObiSolver solver; - public Wrappable[] wrappables; - public UnityEvent onFinish = new UnityEvent(); + public Wrappable[] wrappables; + public UnityEvent onFinish = new UnityEvent(); - private void Awake() - { - solver = GetComponent(); - } + private void Awake() + { + solver = GetComponent(); + } - // Start is called before the first frame update - void OnEnable() - { - solver.OnCollision += Solver_OnCollision; - } + // Start is called before the first frame update + void OnEnable() + { + solver.OnCollision += Solver_OnCollision; + } - private void OnDisable() - { - solver.OnCollision -= Solver_OnCollision; - } + private void OnDisable() + { + solver.OnCollision -= Solver_OnCollision; + } - private void Update() - { - bool allWrapped = true; + private void Update() + { + bool allWrapped = true; - // Test our win condition: all pegs must be wrapped. - foreach (var wrappable in wrappables) - { - if (!wrappable.IsWrapped()) - { - allWrapped = false; - break; - } - } + // Test our win condition: all pegs must be wrapped. + foreach (var wrappable in wrappables) + { + if (!wrappable.IsWrapped()) + { + allWrapped = false; + break; + } + } - if (allWrapped) - onFinish.Invoke(); - } + if (allWrapped) + onFinish.Invoke(); + } - private void Solver_OnCollision(ObiSolver s, ObiSolver.ObiCollisionEventArgs e) - { - // reset to unwrapped state: - foreach (var wrappable in wrappables) - wrappable.Reset(); + private void Solver_OnCollision(ObiSolver s, ObiNativeContactList e) + { + // reset to unwrapped state: + foreach (var wrappable in wrappables) + wrappable.Reset(); - var world = ObiColliderWorld.GetInstance(); - foreach (Oni.Contact contact in e.contacts) - { - // look for actual contacts only: - if (contact.distance < 0.025f) - { - var col = world.colliderHandles[contact.bodyB].owner; - if (col != null) - { - var wrappable = col.GetComponent(); - if (wrappable != null) - wrappable.SetWrapped(); - } - } - } - } -} + var world = ObiColliderWorld.GetInstance(); + foreach (Oni.Contact contact in e) + { + // look for actual contacts only: + if (contact.distance < 0.025f) + { + var col = world.colliderHandles[contact.bodyB].owner; + if (col != null) + { + var wrappable = col.GetComponent(); + if (wrappable != null) + wrappable.SetWrapped(); + } + } + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs index 306142cfd..bd2e656c8 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs @@ -2,41 +2,44 @@ using System.Collections.Generic; using UnityEngine; -[RequireComponent(typeof(Rigidbody))] -public class WrapRopePlayerController : MonoBehaviour +namespace Obi.Samples { - public float acceleration = 50; - Rigidbody rb; - - void Awake() + [RequireComponent(typeof(Rigidbody))] + public class WrapRopePlayerController : MonoBehaviour { - rb = GetComponent(); + public float acceleration = 50; + Rigidbody rb; + + void Awake() + { + rb = GetComponent(); + } + + // Update is called once per frame + void Update() + { + Vector3 direction = Vector3.zero; + + // Determine movement direction: + if (Input.GetKey(KeyCode.W)) + { + direction += Vector3.up * acceleration; + } + if (Input.GetKey(KeyCode.A)) + { + direction += Vector3.left * acceleration; + } + if (Input.GetKey(KeyCode.S)) + { + direction += Vector3.down * acceleration; + } + if (Input.GetKey(KeyCode.D)) + { + direction += Vector3.right * acceleration; + } + + rb.AddForce(direction.normalized * acceleration, ForceMode.Acceleration); + } + } - - // Update is called once per frame - void Update() - { - Vector3 direction = Vector3.zero; - - // Determine movement direction: - if (Input.GetKey(KeyCode.W)) - { - direction += Vector3.up * acceleration; - } - if (Input.GetKey(KeyCode.A)) - { - direction += Vector3.left * acceleration; - } - if (Input.GetKey(KeyCode.S)) - { - direction += Vector3.down * acceleration; - } - if (Input.GetKey(KeyCode.D)) - { - direction += Vector3.right * acceleration; - } - - rb.AddForce(direction.normalized * acceleration, ForceMode.Acceleration); - } - } diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs index 4ed95690d..d5e7337e0 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs @@ -2,40 +2,43 @@ using System.Collections.Generic; using UnityEngine; -public class Wrappable : MonoBehaviour +namespace Obi.Samples { + public class Wrappable : MonoBehaviour + { - private bool wrapped = false; - public Color normalColor = new Color(0.2f,0.2f,0.8f); - public Color wrappedColor = new Color(0.9f, 0.9f, 0.2f); + private bool wrapped = false; + public Color normalColor = new Color(0.2f, 0.2f, 0.8f); + public Color wrappedColor = new Color(0.9f, 0.9f, 0.2f); - Material localMaterial; + Material localMaterial; - public void Awake() - { - localMaterial = GetComponent().material; - } + public void Awake() + { + localMaterial = GetComponent().material; + } - public void OnDestroy() - { - Destroy(localMaterial); - } + public void OnDestroy() + { + Destroy(localMaterial); + } - public void Reset() - { - wrapped = false; - localMaterial.color = normalColor; - } + public void Reset() + { + wrapped = false; + localMaterial.color = normalColor; + } - public void SetWrapped() - { - wrapped = true; - localMaterial.color = wrappedColor; - } + public void SetWrapped() + { + wrapped = true; + localMaterial.color = wrappedColor; + } - public bool IsWrapped() - { - return wrapped; - } + public bool IsWrapped() + { + return wrapped; + } + } } diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png new file mode 100644 index 000000000..bcb4cd987 Binary files /dev/null and b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/ReflectionProbe-0.exr.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta similarity index 70% rename from Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/ReflectionProbe-0.exr.meta rename to Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta index d3b31738d..75a808fc7 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/ElectricalWires/ReflectionProbe-0.exr.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 69a62a800fd46d74a80542f972ffbd53 +guid: 9c47de74aec0642928f43bb91a7346b7 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 13 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -20,26 +20,25 @@ TextureImporter: externalNormalMap: 0 heightScale: 0.25 normalMapFilter: 0 - flipGreenChannel: 0 isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 vTOnly: 0 - ignoreMipmapLimit: 0 + ignoreMasterTextureLimit: 0 grayScaleToAlpha: 0 generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 + cubemapConvolution: 0 + seamlessCubemap: 0 textureFormat: 1 maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 - aniso: 0 + filterMode: 1 + aniso: 1 mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 + wrapU: 0 + wrapV: 0 + wrapW: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 @@ -55,7 +54,7 @@ TextureImporter: alphaIsTransparency: 0 spriteTessellationDetail: -1 textureType: 0 - textureShape: 2 + textureShape: 1 singleChannelComponent: 0 flipbookRows: 1 flipbookColumns: 1 @@ -64,40 +63,23 @@ TextureImporter: textureFormatSet: 0 ignorePngGamma: 0 applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 platformSettings: - - serializedVersion: 4 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform maxTextureSize: 2048 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 - compressionQuality: 100 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] outline: [] - customData: physicsShape: [] bones: [] spriteID: @@ -107,11 +89,10 @@ TextureImporter: edges: [] weights: [] secondaryTextures: [] - spriteCustomMetadata: - entries: [] nameFileIdTable: {} - mipmapLimitGroupName: + spritePackingTag: pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png new file mode 100644 index 000000000..a0ba55487 Binary files /dev/null and b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png differ diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png.meta new file mode 100644 index 000000000..36079f241 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: e4a9139c969c3419a813c9513127f817 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Snake.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Snake.unity index b0a41dc8e..ee240690c 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/Snake.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/Snake.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 m_ReflectionCompression: 2 m_MixedBakeMode: 1 m_BakeBackend: 0 @@ -98,13 +94,13 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: a0c88a5418a7579499e901d95bce63ae, type: 2} + m_LightingSettings: {fileID: 258127860} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,57 +113,73 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &79931598 -GameObject: +--- !u!850595691 &258127860 +LightingSettings: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 79931600} - - component: {fileID: 79931599} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &79931599 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 79931598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: - cellSpans: - m_AlignBytes: 16 ---- !u!4 &79931600 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 79931598} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Name: Settings.lighting + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 --- !u!1 &283647873 GameObject: m_ObjectHideFlags: 0 @@ -244,7 +256,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -258,21 +272,68 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1660007474} m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!1 &329489781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 329489783} + - component: {fileID: 329489782} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &329489782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329489781} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &329489783 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329489781} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &421764872 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -308,10 +369,19 @@ PrefabInstance: value: -0 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} --- !u!1 &506459881 stripped GameObject: @@ -326,9 +396,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 506459881} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -345,6 +423,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: c73079cca10924a80871331c66b4ad4b, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -376,12 +455,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 667163001} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: -0.5, y: 1.5, z: 0} m_LocalScale: {x: 0.25, y: 1.5, z: 0.25} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 907464232} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} --- !u!136 &667163003 CapsuleCollider: @@ -391,8 +471,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 667163001} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.5000001 m_Height: 2 m_Direction: 1 @@ -414,6 +503,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -435,6 +529,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -460,6 +555,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: 4c46db05afff546f8a9f9333946e9882, type: 2} filter: -65535 m_SourceCollider: {fileID: 667163003} @@ -487,16 +583,17 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 907464231} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1195412986} - {fileID: 667163002} - {fileID: 1298991847} - {fileID: 2086948286} m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1002464891 GameObject: @@ -510,7 +607,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} - component: {fileID: 1002464894} m_Layer: 0 m_Name: Main Camera @@ -567,9 +663,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -603,33 +707,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1002464891} + serializedVersion: 2 m_LocalRotation: {x: 0.15760262, y: 0, z: 0, w: 0.98750263} m_LocalPosition: {x: 0, y: 3.84, z: -7.48} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1175446144 GameObject: m_ObjectHideFlags: 0 @@ -655,9 +740,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -707,8 +791,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1175446146 Transform: m_ObjectHideFlags: 0 @@ -716,12 +804,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} + serializedVersion: 2 m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} --- !u!1 &1195412985 GameObject: @@ -750,12 +839,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1195412985} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1.5, y: 1.425, z: 0} m_LocalScale: {x: 0.25, y: 1.5, z: 0.25} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 907464232} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!136 &1195412987 CapsuleCollider: @@ -765,8 +855,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1195412985} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.5000001 m_Height: 2 m_Direction: 1 @@ -788,6 +887,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -809,6 +913,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -834,6 +939,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: 4c46db05afff546f8a9f9333946e9882, type: 2} filter: -65535 m_SourceCollider: {fileID: 1195412987} @@ -865,12 +971,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1298991846} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 2.6, z: 0} m_LocalScale: {x: 0.25, y: 1.6327499, z: 0.25} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 907464232} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!136 &1298991848 CapsuleCollider: @@ -880,8 +987,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1298991846} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.5000001 m_Height: 2 m_Direction: 1 @@ -903,6 +1019,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -924,6 +1045,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -949,6 +1071,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: 4c46db05afff546f8a9f9333946e9882, type: 2} filter: -65535 m_SourceCollider: {fileID: 1298991848} @@ -962,8 +1085,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1346965650} - - component: {fileID: 1346965645} - - component: {fileID: 1346965644} - component: {fileID: 1346965642} - component: {fileID: 1346965646} - component: {fileID: 1346965643} @@ -987,9 +1108,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 11400000, guid: dbf5bc78c024b4724bd8b2aaca1af0c2, type: 2} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 1 restLength_: 4.1143684 elements: @@ -1123,6 +1248,9 @@ MonoBehaviour: restLength: 0.15843129 constraintForce: 0 tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RopeBlueprint: {fileID: 11400000, guid: 7cc7ef3c151f24a00a1fe338fa5f827c, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 @@ -1148,61 +1276,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: dbda366779bfb4406b2c60e70986d306, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 3} normalizeV: 1 section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} thicknessScale: 0.8 ---- !u!23 &1346965644 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: dbda366779bfb4406b2c60e70986d306, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1346965645 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1346965641} - m_Mesh: {fileID: 2092596634} --- !u!114 &1346965646 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1218,6 +1305,7 @@ MonoBehaviour: decimation: 0 smoothing: 2 twist: 0 + indexInSystem: 0 --- !u!114 &1346965647 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1233,7 +1321,7 @@ MonoBehaviour: headReferenceFrame: {fileID: 1002464896} headSpeed: 20 upSpeed: 40 - slitherSpeed: 10 + slitherSpeed: 120 --- !u!4 &1346965650 Transform: m_ObjectHideFlags: 0 @@ -1241,56 +1329,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1346965641} + serializedVersion: 2 m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} m_LocalPosition: {x: -0.9, y: 0.107, z: 0.53} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2102841797} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1660007473 GameObject: m_ObjectHideFlags: 0 @@ -1319,9 +1365,9 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 283647877} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1421,6 +1467,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1442,6 +1493,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1461,12 +1513,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1788698691} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.866, y: 0.164, z: 0.715} m_LocalScale: {x: 0.19320247, y: 0.19320247, z: 0.36036125} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2086948285 GameObject: @@ -1495,12 +1548,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2086948285} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068} m_LocalPosition: {x: -0.5, y: 2.5, z: 0} m_LocalScale: {x: 0.25, y: 1.5, z: 0.25} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 907464232} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} --- !u!114 &2086948287 MonoBehaviour: @@ -1515,6 +1569,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: 4c46db05afff546f8a9f9333946e9882, type: 2} filter: -65535 m_SourceCollider: {fileID: 2086948288} @@ -1527,8 +1582,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2086948285} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.5000001 m_Height: 2 m_Direction: 1 @@ -1550,6 +1614,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1571,6 +1640,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1583,170 +1653,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2086948285} m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!43 &2092596634 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &2102841794 GameObject: m_ObjectHideFlags: 0 @@ -1757,7 +1663,6 @@ GameObject: m_Component: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -1765,21 +1670,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 4 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1794,23 +1684,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 2 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -5, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.7 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 20 collisionMargin: 0.02 maxDepenetration: 5 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -5, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 1 @@ -1866,6 +1790,11 @@ MonoBehaviour: iterations: 10 SORFactor: 1 enabled: 0 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 5 @@ -1898,11 +1827,24 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102841794} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1346965650} m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 283647877} + - {fileID: 1788698695} + - {fileID: 907464232} + - {fileID: 329489783} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SnakeSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SnakeSettings.lighting deleted file mode 100644 index 6caa483a5..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SnakeSettings.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: SnakeSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_RealtimeEnvironmentLighting: 1 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 0 - m_LightmapMaxSize: 1024 - m_BakeResolution: 40 - m_Padding: 2 - m_TextureCompression: 1 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAO: 0 - m_MixedBakeMode: 1 - m_LightmapsBakeMode: 1 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SnakeSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SnakeSettings.lighting.meta deleted file mode 100644 index 8a40526b9..000000000 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SnakeSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a0c88a5418a7579499e901d95bce63ae -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRod.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRod.unity index a6ee99ccd..600448d91 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRod.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRod.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 1024 m_ReflectionCompression: 2 m_MixedBakeMode: 1 m_BakeBackend: 0 @@ -98,13 +94,13 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: de402aa34ab484147a85f3870154048e, type: 2} + m_LightingSettings: {fileID: 4890085278179872738, guid: 2a7dd55cd73e04316941dd907bb58462, type: 2} --- !u!196 &5 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -128,6 +124,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -175,10 +172,19 @@ PrefabInstance: value: -0 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459882} + - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + insertIndex: -1 + addedObject: {fileID: 506459883} m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} --- !u!1 &506459881 stripped GameObject: @@ -193,9 +199,17 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 506459881} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 4 + serializedVersion: 5 m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} @@ -212,6 +226,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} filter: -65535 m_SourceCollider: {fileID: 506459882} @@ -228,7 +243,6 @@ GameObject: - component: {fileID: 1002464895} - component: {fileID: 1002464893} - component: {fileID: 1002464892} - - component: {fileID: 1002464897} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -266,9 +280,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -302,33 +324,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1002464891} + serializedVersion: 2 m_LocalRotation: {x: 0.15760262, y: 0, z: 0, w: 0.98750263} m_LocalPosition: {x: 0, y: 4.7, z: -5.62} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1002464897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 62e83a599724f45a4aa337d74764e572, type: 3} - m_Name: - m_EditorClassIdentifier: - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - threadColor: {r: 0, g: 1, b: 1, a: 1} - taskColor: {r: 0, g: 1, b: 0, a: 1} - parallelTaskColor: {r: 1, g: 0.8, b: 0.2, a: 1} - renderTaskColor: {r: 0.2, g: 0.7, b: 1, a: 1} - defaultTaskColor: {r: 1, g: 0.5, b: 0.2, a: 1} - showPercentages: 0 - profileThrottle: 30 --- !u!1 &1105384629 GameObject: m_ObjectHideFlags: 0 @@ -338,8 +341,6 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1105384642} - - component: {fileID: 1105384641} - - component: {fileID: 1105384640} - component: {fileID: 1105384643} - component: {fileID: 1105384633} - component: {fileID: 1105384632} @@ -365,6 +366,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 9bc0d93bc33e445c7a765578064cdd1e, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 24} normalizeV: 1 @@ -385,6 +395,7 @@ MonoBehaviour: decimation: 0 smoothing: 1 twist: 0 + indexInSystem: 0 --- !u!114 &1105384633 MonoBehaviour: m_ObjectHideFlags: 0 @@ -397,9 +408,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8f2bc32c4faf04f039a86a6e3cea12a1, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 restLength_: 16.384266 elements: @@ -693,6 +708,9 @@ MonoBehaviour: restLength: 0.28248715 constraintForce: 0 tearResistance: 0 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 m_RodBlueprint: {fileID: 11400000, guid: b74d67cfe23804ec1b4f215ac5e3d500, type: 2} _stretchShearConstraintsEnabled: 1 _stretchCompliance: 0 @@ -723,8 +741,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: 9190015862606898100, guid: b74d67cfe23804ec1b4f215ac5e3d500, type: 2} m_AttachmentType: 0 m_ConstrainOrientation: 1 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1105384636 MonoBehaviour: m_ObjectHideFlags: 0 @@ -742,58 +761,9 @@ MonoBehaviour: m_ParticleGroup: {fileID: -4518859148014644581, guid: b74d67cfe23804ec1b4f215ac5e3d500, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 1 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity ---- !u!23 &1105384640 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105384629} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 4294967295 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 9bc0d93bc33e445c7a765578064cdd1e, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1105384641 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1105384629} - m_Mesh: {fileID: 2092596634} + breakThreshold: Infinity --- !u!4 &1105384642 Transform: m_ObjectHideFlags: 0 @@ -801,17 +771,18 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1105384629} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 2.405, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 2147243670} m_Father: {fileID: 2102841797} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &1105384643 Animator: - serializedVersion: 3 + serializedVersion: 7 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -824,10 +795,13 @@ Animator: m_UpdateMode: 1 m_ApplyRootMotion: 0 m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 1 m_WarningMessage: m_HasTransformHierarchy: 1 m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorControllerStateOnDisable: 0 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!1 &1175446144 GameObject: m_ObjectHideFlags: 0 @@ -853,9 +827,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -905,8 +878,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1175446146 Transform: m_ObjectHideFlags: 0 @@ -914,14 +891,15 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175446144} + serializedVersion: 2 m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!1 &1529730626 +--- !u!1 &1797933355 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -929,8 +907,8 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1529730628} - - component: {fileID: 1529730627} + - component: {fileID: 1797933357} + - component: {fileID: 1797933356} m_Layer: 0 m_Name: BurstCollisionWorld m_TagString: Untagged @@ -938,13 +916,13 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1529730627 +--- !u!114 &1797933356 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1529730626} + m_GameObject: {fileID: 1797933355} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} @@ -952,62 +930,20 @@ MonoBehaviour: m_EditorClassIdentifier: cellSpans: m_AlignBytes: 16 ---- !u!4 &1529730628 +--- !u!4 &1797933357 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1529730626} + m_GameObject: {fileID: 1797933355} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2086275150 GameObject: @@ -1057,6 +993,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 2086275154} @@ -1068,13 +1005,24 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2086275150} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 0.25 - m_Drag: 0 - m_AngularDrag: 0.05 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 1 m_IsKinematic: 0 - m_Interpolate: 1 + m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 --- !u!65 &2086275154 @@ -1085,9 +1033,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2086275150} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &2086275155 @@ -1107,6 +1063,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1128,6 +1089,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1147,177 +1109,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2086275150} + serializedVersion: 2 m_LocalRotation: {x: -0.045902487, y: 0.6368099, z: -0.08012669, w: 0.76547104} m_LocalPosition: {x: 0.775, y: 2.334, z: -0.394} m_LocalScale: {x: 0.79513997, y: 0.6594322, z: 0.7} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 1.8210001, y: 79.34901, z: -10.441001} ---- !u!43 &2092596634 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &2102841794 GameObject: m_ObjectHideFlags: 0 @@ -1328,7 +1127,6 @@ GameObject: m_Component: - component: {fileID: 2102841797} - component: {fileID: 2102841796} - - component: {fileID: 2102841795} m_Layer: 0 m_Name: Obi Solver m_TagString: Untagged @@ -1336,21 +1134,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &2102841795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 2102841796} - substeps: 3 --- !u!114 &2102841796 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1365,23 +1148,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 4 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 0 interpolation: 0 gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0 maxAnisotropy: 3 sleepThreshold: 0.001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.02 maxDepenetration: 5 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 8 surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 8 @@ -1434,7 +1251,12 @@ MonoBehaviour: enabled: 0 pinConstraintParameters: evaluationOrder: 0 - iterations: 10 + iterations: 5 + SORFactor: 1 + enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 SORFactor: 1 enabled: 1 stitchConstraintParameters: @@ -1449,12 +1271,12 @@ MonoBehaviour: enabled: 0 stretchShearConstraintParameters: evaluationOrder: 0 - iterations: 10 + iterations: 5 SORFactor: 1 enabled: 1 bendTwistConstraintParameters: evaluationOrder: 0 - iterations: 20 + iterations: 5 SORFactor: 1 enabled: 1 chainConstraintParameters: @@ -1469,13 +1291,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102841794} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1105384642} m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2147243669 GameObject: @@ -1503,12 +1326,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2147243669} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.166, y: 2.879, z: -0.691} m_LocalScale: {x: 0.43696082, y: 0.4369608, z: 0.4369608} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1105384642} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!136 &2147243671 CapsuleCollider: @@ -1518,8 +1342,17 @@ CapsuleCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2147243669} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 + serializedVersion: 2 m_Radius: 0.5000001 m_Height: 2 m_Direction: 1 @@ -1541,6 +1374,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1562,6 +1400,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1574,3 +1413,13 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2147243669} m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1002464896} + - {fileID: 421764872} + - {fileID: 1175446146} + - {fileID: 2102841797} + - {fileID: 2086275157} + - {fileID: 1797933357} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRod.unity.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRod.unity.meta index d25af1a9d..fa309c5d0 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRod.unity.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRod.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8fafd98b75e9b44ee8b37edf6f1adcd5 +guid: 62deeda7ebac34fb1aa15a197b4edb8e labels: - ObiRope DefaultImporter: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRodSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRodSettings.lighting index 50f109097..15d48685f 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRodSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRodSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: SpringRodSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_RealtimeEnvironmentLighting: 1 @@ -16,11 +15,13 @@ LightingSettings: m_AlbedoBoost: 1 m_IndirectOutputScale: 1 m_UsingShadowmask: 0 - m_BakeBackend: 0 + m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 0 @@ -31,23 +32,21 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 1024 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVREnvironmentSampleCount: 500 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 m_PVREnvironmentReferencePointCount: 2048 m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 0 + m_PVREnvironmentImportanceSampling: 0 m_PVRFilteringMode: 2 m_PVRDenoiserTypeDirect: 0 m_PVRDenoiserTypeIndirect: 0 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta index dec6a7147..f1b982a26 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: de402aa34ab484147a85f3870154048e +guid: 2a7dd55cd73e04316941dd907bb58462 NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/TangledRopes.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/TangledRopes.unity new file mode 100644 index 000000000..d098a97b2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/TangledRopes.unity @@ -0,0 +1,3011 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: e16f40cccc9f747d3a88842b4591f225, type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &97762687 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_Name + value: TanglePeg (2) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.x + value: -2.61 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.z + value: 5.35 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: damping + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: maxAccel + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: stiffness + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: currentSlot + value: + objectReference: {fileID: 1514826402} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: initialSlot + value: + objectReference: {fileID: 1552509777} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: minDistance + value: 0.05 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: attachedRope + value: + objectReference: {fileID: 305168495} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: floorCollider + value: + objectReference: {fileID: 1919818300} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} +--- !u!4 &97762688 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + m_PrefabInstance: {fileID: 97762687} + m_PrefabAsset: {fileID: 0} +--- !u!1 &178620544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 178620545} + - component: {fileID: 178620547} + - component: {fileID: 178620546} + m_Layer: 5 + m_Name: Instructions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &178620545 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178620544} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 876719296} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 142.57, y: 54.39} + m_SizeDelta: {x: 239.1437, y: 72.29023} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &178620546 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178620544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 20 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Click and drag the pegs to untangle all ropes. +--- !u!222 &178620547 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178620544} + m_CullTransparentMesh: 0 +--- !u!1001 &260969642 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (2) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: -2.58 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: 5.36 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1 &266503051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 266503052} + - component: {fileID: 266503054} + - component: {fileID: 266503053} + - component: {fileID: 266503055} + m_Layer: 5 + m_Name: Finish + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &266503052 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266503051} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1406884019} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 239.14368, y: 72.29022} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &266503053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266503051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.6415094, b: 0.035014484, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: DONE! +--- !u!222 &266503054 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266503051} + m_CullTransparentMesh: 0 +--- !u!114 &266503055 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266503051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} + m_EffectDistance: {x: 2, y: -2} + m_UseGraphicAlpha: 1 +--- !u!1001 &288475584 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_Name + value: TanglePeg + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.x + value: -4.23 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.z + value: 9.24 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: damping + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: maxAccel + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: stiffness + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: currentSlot + value: + objectReference: {fileID: 1659590737} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: initialSlot + value: + objectReference: {fileID: 1552509777} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: attachedRope + value: + objectReference: {fileID: 1667107467} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: floorCollider + value: + objectReference: {fileID: 1919818300} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} +--- !u!1 &305168489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 305168490} + - component: {fileID: 305168495} + - component: {fileID: 305168494} + - component: {fileID: 305168493} + - component: {fileID: 305168492} + - component: {fileID: 305168499} + - component: {fileID: 305168491} + - component: {fileID: 305168498} + - component: {fileID: 305168497} + - component: {fileID: 305168496} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &305168490 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.9894753, z: -0, w: 0.14470215} + m_LocalPosition: {x: -1.82, y: 0.53, z: 5.57} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1882120510} + m_LocalEulerAnglesHint: {x: 0, y: 163.36, z: 0} +--- !u!114 &305168491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 305168495} + m_Target: {fileID: 97762688} + m_ParticleGroup: {fileID: 870036912147276740, guid: 04076b9483b7f4ab0a01666d8b2c24cc, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &305168492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 305168495} + m_Target: {fileID: 479604551} + m_ParticleGroup: {fileID: -5578146735436999353, guid: 04076b9483b7f4ab0a01666d8b2c24cc, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &305168493 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 8} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &305168494 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 1 + twist: 0 + indexInSystem: 0 +--- !u!114 &305168495 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 11.621539 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.22932585 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.23297876 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.22030348 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.23245499 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.23273383 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.2321907 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.23624836 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.24159537 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.2384483 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.24000376 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.24007817 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.23988771 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.23976159 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.23973894 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.23977098 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.23982133 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.23985231 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.2398558 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.23984471 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.2398395 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.23985398 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.23981741 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.23945183 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.23789816 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.22202003 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + restLength: 0.22101939 + constraintForce: 0 + tearResistance: 1 + - particle1: 26 + particle2: 27 + restLength: 0.2211481 + constraintForce: 0 + tearResistance: 1 + - particle1: 27 + particle2: 28 + restLength: 0.21999277 + constraintForce: 0 + tearResistance: 1 + - particle1: 28 + particle2: 29 + restLength: 0.21492423 + constraintForce: 0 + tearResistance: 1 + - particle1: 29 + particle2: 30 + restLength: 0.21579246 + constraintForce: 0 + tearResistance: 1 + - particle1: 30 + particle2: 31 + restLength: 0.23888057 + constraintForce: 0 + tearResistance: 1 + - particle1: 31 + particle2: 32 + restLength: 0.23901443 + constraintForce: 0 + tearResistance: 1 + - particle1: 32 + particle2: 33 + restLength: 0.2317226 + constraintForce: 0 + tearResistance: 1 + - particle1: 33 + particle2: 34 + restLength: 0.23366606 + constraintForce: 0 + tearResistance: 1 + - particle1: 34 + particle2: 35 + restLength: 0.24097537 + constraintForce: 0 + tearResistance: 1 + - particle1: 35 + particle2: 36 + restLength: 0.19252713 + constraintForce: 0 + tearResistance: 1 + - particle1: 36 + particle2: 37 + restLength: 0.19266264 + constraintForce: 0 + tearResistance: 1 + - particle1: 37 + particle2: 38 + restLength: 0.19349253 + constraintForce: 0 + tearResistance: 1 + - particle1: 38 + particle2: 39 + restLength: 0.23542406 + constraintForce: 0 + tearResistance: 1 + - particle1: 39 + particle2: 40 + restLength: 0.23618267 + constraintForce: 0 + tearResistance: 1 + - particle1: 40 + particle2: 41 + restLength: 0.2358951 + constraintForce: 0 + tearResistance: 1 + - particle1: 41 + particle2: 42 + restLength: 0.2361207 + constraintForce: 0 + tearResistance: 1 + - particle1: 42 + particle2: 43 + restLength: 0.23587158 + constraintForce: 0 + tearResistance: 1 + - particle1: 43 + particle2: 44 + restLength: 0.23585697 + constraintForce: 0 + tearResistance: 1 + - particle1: 44 + particle2: 45 + restLength: 0.23552683 + constraintForce: 0 + tearResistance: 1 + - particle1: 45 + particle2: 46 + restLength: 0.20203424 + constraintForce: 0 + tearResistance: 1 + - particle1: 46 + particle2: 47 + restLength: 0.20244622 + constraintForce: 0 + tearResistance: 1 + - particle1: 47 + particle2: 48 + restLength: 0.20214584 + constraintForce: 0 + tearResistance: 1 + - particle1: 48 + particle2: 49 + restLength: 0.1943406 + constraintForce: 0 + tearResistance: 1 + - particle1: 49 + particle2: 50 + restLength: 0.2014773 + constraintForce: 0 + tearResistance: 1 + - particle1: 50 + particle2: 51 + restLength: 0.198624 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: 04076b9483b7f4ab0a01666d8b2c24cc, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.03 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &305168496 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4793f08b8350d44db99d1bc98daf625b, type: 3} + m_Name: + m_EditorClassIdentifier: + outThreshold: 0.08 + inThreshold: 0.05 + outSpeed: 6 + inSpeed: 4 + maxLength: 10 +--- !u!114 &305168497 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0.1 + m_SourceMu: 0.5 + direction: 1 +--- !u!114 &305168498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 305168495} + m_Target: {fileID: 97762688} + m_ParticleGroup: {fileID: 7266446776975833462, guid: 04076b9483b7f4ab0a01666d8b2c24cc, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &305168499 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 305168489} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 305168495} + m_Target: {fileID: 479604551} + m_ParticleGroup: {fileID: 946642936072572879, guid: 04076b9483b7f4ab0a01666d8b2c24cc, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!1001 &323187617 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_Name + value: TanglePeg (1) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.x + value: 1.78 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.z + value: 4.17 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: damping + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: maxAccel + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: stiffness + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: currentSlot + value: + objectReference: {fileID: 1214958667} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: initialSlot + value: + objectReference: {fileID: 1552509777} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: minDistance + value: 0.05 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: attachedRope + value: + objectReference: {fileID: 1667107467} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: floorCollider + value: + objectReference: {fileID: 1919818300} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} +--- !u!114 &466069046 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 688047612} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &479604550 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_Name + value: TanglePeg (3) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.x + value: 5.01 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalPosition.z + value: 7.62 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: damping + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: maxAccel + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: stiffness + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: currentSlot + value: + objectReference: {fileID: 466069046} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: initialSlot + value: + objectReference: {fileID: 1552509777} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: minDistance + value: 0.05 + objectReference: {fileID: 0} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: attachedRope + value: + objectReference: {fileID: 305168495} + - target: {fileID: 8733900141329501594, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + propertyPath: floorCollider + value: + objectReference: {fileID: 1919818300} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} +--- !u!4 &479604551 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + m_PrefabInstance: {fileID: 479604550} + m_PrefabAsset: {fileID: 0} +--- !u!1 &615688258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 615688260} + - component: {fileID: 615688259} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &615688259 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615688258} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &615688260 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615688258} + serializedVersion: 2 + m_LocalRotation: {x: 0.8158533, y: -0.114026494, z: -0.1604958, w: 0.5437118} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 58.274, y: -132.793, z: -136.708} +--- !u!1001 &688047612 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (1) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: 5.01 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: 7.62 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1001 &823195943 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (8) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 13 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: -4.82 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: -2.52 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1 &876719292 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 876719296} + - component: {fileID: 876719295} + - component: {fileID: 876719294} + - component: {fileID: 876719293} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &876719293 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 876719292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &876719294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 876719292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &876719295 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 876719292} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 1 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &876719296 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 876719292} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 178620545} + - {fileID: 1406884019} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1001 &910299761 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: -4.25 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: 9.18 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1001 &935761107 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (3) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: 1.47 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: 9.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!4 &1050440698 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + m_PrefabInstance: {fileID: 323187617} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1172523946 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 935761107} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1204416257 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 1364003720} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1214958667 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 1730283847} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1364003720 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (5) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: -5.08 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: 2.48 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1001 &1378923494 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (6) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: -1.42 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: 0.14 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!4 &1386711891 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3512526509595786583, guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a, type: 3} + m_PrefabInstance: {fileID: 288475584} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1406884018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1406884019} + m_Layer: 5 + m_Name: FinishMessage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1406884019 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1406884018} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 266503052} + m_Father: {fileID: 876719296} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 824, y: 590} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1514826402 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 260969642} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1552509777 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 910299761} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1612476492 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1612476495} + - component: {fileID: 1612476494} + - component: {fileID: 1612476493} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1612476493 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1612476492} + m_Enabled: 1 +--- !u!20 &1612476494 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1612476492} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 20 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1612476495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1612476492} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 49.48, z: 2.9} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!114 &1659590737 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 910299761} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1667107463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1667107464} + - component: {fileID: 1667107467} + - component: {fileID: 1667107466} + - component: {fileID: 1667107465} + - component: {fileID: 1667107469} + - component: {fileID: 1667107473} + - component: {fileID: 1667107468} + - component: {fileID: 1667107472} + - component: {fileID: 1667107471} + - component: {fileID: 1667107470} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1667107464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: 0.34358987, z: -0, w: 0.9391198} + m_LocalPosition: {x: 1.13, y: 0.53, z: 4.71} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1882120510} + m_LocalEulerAnglesHint: {x: 0, y: 40.191, z: 0} +--- !u!114 &1667107465 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 8} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1667107466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 1 + twist: 0 + indexInSystem: 1 +--- !u!114 &1667107467 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 8.8720665 + elements: + - particle1: 102 + particle2: 103 + restLength: 0.20002283 + constraintForce: 0 + tearResistance: 1 + - particle1: 103 + particle2: 104 + restLength: 0.19997717 + constraintForce: 0 + tearResistance: 1 + - particle1: 104 + particle2: 105 + restLength: 0.35217127 + constraintForce: 0 + tearResistance: 1 + - particle1: 105 + particle2: 106 + restLength: 0.37707853 + constraintForce: 0 + tearResistance: 1 + - particle1: 106 + particle2: 107 + restLength: 0.37768462 + constraintForce: 0 + tearResistance: 1 + - particle1: 107 + particle2: 108 + restLength: 0.3818593 + constraintForce: 0 + tearResistance: 1 + - particle1: 108 + particle2: 109 + restLength: 0.38565263 + constraintForce: 0 + tearResistance: 1 + - particle1: 109 + particle2: 110 + restLength: 0.38304582 + constraintForce: 0 + tearResistance: 1 + - particle1: 110 + particle2: 111 + restLength: 0.38444158 + constraintForce: 0 + tearResistance: 1 + - particle1: 111 + particle2: 112 + restLength: 0.3847864 + constraintForce: 0 + tearResistance: 1 + - particle1: 112 + particle2: 113 + restLength: 0.38408214 + constraintForce: 0 + tearResistance: 1 + - particle1: 113 + particle2: 114 + restLength: 0.384023 + constraintForce: 0 + tearResistance: 1 + - particle1: 114 + particle2: 115 + restLength: 0.38424167 + constraintForce: 0 + tearResistance: 1 + - particle1: 115 + particle2: 116 + restLength: 0.3842686 + constraintForce: 0 + tearResistance: 1 + - particle1: 116 + particle2: 117 + restLength: 0.38410887 + constraintForce: 0 + tearResistance: 1 + - particle1: 117 + particle2: 118 + restLength: 0.38368052 + constraintForce: 0 + tearResistance: 1 + - particle1: 118 + particle2: 119 + restLength: 0.3848515 + constraintForce: 0 + tearResistance: 1 + - particle1: 119 + particle2: 120 + restLength: 0.38470802 + constraintForce: 0 + tearResistance: 1 + - particle1: 120 + particle2: 121 + restLength: 0.38331065 + constraintForce: 0 + tearResistance: 1 + - particle1: 121 + particle2: 122 + restLength: 0.3852491 + constraintForce: 0 + tearResistance: 1 + - particle1: 122 + particle2: 123 + restLength: 0.3818891 + constraintForce: 0 + tearResistance: 1 + - particle1: 123 + particle2: 124 + restLength: 0.27774453 + constraintForce: 0 + tearResistance: 1 + - particle1: 124 + particle2: 125 + restLength: 0.27794865 + constraintForce: 0 + tearResistance: 1 + - particle1: 125 + particle2: 126 + restLength: 0.26502654 + constraintForce: 0 + tearResistance: 1 + - particle1: 126 + particle2: 127 + restLength: 0.20194809 + constraintForce: 0 + tearResistance: 1 + - particle1: 127 + particle2: 128 + restLength: 0.19826613 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: 4d31372b30ca34527b534f09a803ab15, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.03 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1667107468 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1667107467} + m_Target: {fileID: 1050440698} + m_ParticleGroup: {fileID: 870036912147276740, guid: 4d31372b30ca34527b534f09a803ab15, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1667107469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1667107467} + m_Target: {fileID: 1386711891} + m_ParticleGroup: {fileID: -5578146735436999353, guid: 4d31372b30ca34527b534f09a803ab15, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1667107470 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4793f08b8350d44db99d1bc98daf625b, type: 3} + m_Name: + m_EditorClassIdentifier: + outThreshold: 0.08 + inThreshold: 0.05 + outSpeed: 6 + inSpeed: 4 + maxLength: 10 +--- !u!114 &1667107471 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0.1 + m_SourceMu: 0.5 + direction: 1 +--- !u!114 &1667107472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1667107467} + m_Target: {fileID: 1050440698} + m_ParticleGroup: {fileID: -4709438462163914631, guid: 4d31372b30ca34527b534f09a803ab15, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &1667107473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1667107463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1667107467} + m_Target: {fileID: 1386711891} + m_ParticleGroup: {fileID: 4876123546338928666, guid: 4d31372b30ca34527b534f09a803ab15, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!1 &1693740762 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1693740764} + - component: {fileID: 1693740763} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1693740763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1693740762} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1693740764 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1693740762} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1710671967 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 1378923494} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1730283847 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (4) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: 1.8 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: 4.12 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1001 &1755147364 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (9) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: 1.07 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: -2.68 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!114 &1810868009 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 1861307011} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1861307011 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_Name + value: TanglePegSlot (7) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_RootOrder + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.x + value: 4.31 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalPosition.z + value: 1.25 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1 &1882120507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1882120510} + - component: {fileID: 1882120509} + - component: {fileID: 1882120511} + m_Layer: 0 + m_Name: Obi Solver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1882120509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882120507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + m_EditorClassIdentifier: + simulateWhenInvisible: 1 + m_Backend: 1 + substeps: 12 + maxStepsPerFrame: 1 + synchronization: 1 + parameters: + mode: 0 + interpolation: 0 + gravity: {x: 0, y: 0, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 + damping: 0.8 + maxAnisotropy: 3 + sleepThreshold: 0.005 + maxVelocity: 20 + maxAngularVelocity: 10 + collisionMargin: 0.15 + maxDepenetration: 50 + colliderCCD: 1 + particleCCD: 1 + shockPropagation: 0 + surfaceCollisionIterations: 16 + surfaceCollisionTolerance: 0.001 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 4 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + skinConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 0 + volumeConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + shapeMatchingConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + stretchShearConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 +--- !u!4 &1882120510 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882120507} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1667107464} + - {fileID: 305168490} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1882120511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882120507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c1cdc16773c1f4ebe94e32c3ae0005bf, type: 3} + m_Name: + m_EditorClassIdentifier: + pegSlots: + - {fileID: 1659590737} + - {fileID: 466069046} + - {fileID: 1514826402} + - {fileID: 1172523946} + - {fileID: 1214958667} + - {fileID: 1204416257} + - {fileID: 1710671967} + - {fileID: 1810868009} + - {fileID: 2078187095} + - {fileID: 2016144237} + pegHoverHeight: 2 + maxPegDistanceFromSlot: 1.5 + framesWithoutContactsToWin: 30 + onFinish: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1406884018} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 +--- !u!1 &1919818295 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1919818299} + - component: {fileID: 1919818298} + - component: {fileID: 1919818297} + - component: {fileID: 1919818300} + - component: {fileID: 1919818301} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1919818297 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919818295} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 359ef2e4b09204eeab112e419c308068, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1919818298 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919818295} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1919818299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919818295} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5, y: 5, z: 5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1919818300 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919818295} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 10, y: 1, z: 10} + m_Center: {x: 0, y: -0.5, z: 0} +--- !u!114 &1919818301 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919818295} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 1919818300} + m_DistanceField: {fileID: 0} +--- !u!114 &2016144237 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 1755147364} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2078187095 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8518691974497511176, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} + m_PrefabInstance: {fileID: 823195943} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 866212c246a9c4c5797069099ad745aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1612476495} + - {fileID: 288475584} + - {fileID: 323187617} + - {fileID: 97762687} + - {fileID: 479604550} + - {fileID: 910299761} + - {fileID: 688047612} + - {fileID: 260969642} + - {fileID: 935761107} + - {fileID: 1730283847} + - {fileID: 1364003720} + - {fileID: 1378923494} + - {fileID: 1861307011} + - {fileID: 823195943} + - {fileID: 1755147364} + - {fileID: 615688260} + - {fileID: 1919818299} + - {fileID: 1882120510} + - {fileID: 876719296} + - {fileID: 1693740764} diff --git a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CMakeLists.txt.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/TangledRopes.unity.meta similarity index 74% rename from Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CMakeLists.txt.meta rename to Assets/ThirdParty/Obi/Samples/RopeAndRod/TangledRopes.unity.meta index 43aacad45..2fbd30a4c 100644 --- a/Assets/ThirdParty/Obi/Plugins/libOni.bundle/Contents/Resources/CMakeLists.txt.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/TangledRopes.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ce0fb56af5e8e4115848c21d750880bd +guid: d1c0a7d11dfd3425e80480fae4b6546c DefaultImporter: externalObjects: {} userData: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/VineSwinging.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/VineSwinging.unity new file mode 100644 index 000000000..37912e229 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/VineSwinging.unity @@ -0,0 +1,2506 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 6530f45834fcb41a0b4b10b622d95c4c, type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &867634196 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 867634197} + - component: {fileID: 867634202} + - component: {fileID: 867634201} + - component: {fileID: 867634200} + - component: {fileID: 867634199} + - component: {fileID: 867634198} + m_Layer: 0 + m_Name: Obi Rope (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &867634197 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867634196} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -3.31, y: 8.44, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2108375383} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &867634198 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867634196} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 867634202} + m_Target: {fileID: 867634197} + m_ParticleGroup: {fileID: 6295150216905737680, guid: 47284b33117284d61b3df44d2620531e, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &867634199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867634196} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 867634202} + m_Target: {fileID: 867634197} + m_ParticleGroup: {fileID: -5470652867224400354, guid: 47284b33117284d61b3df44d2620531e, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &867634200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867634196} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 071b3247e825f4ba386cdc8e25c6a3e1, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 0, y: 1} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &867634201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867634196} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !u!114 &867634202 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867634196} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 7.4081273 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.19471678 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.19522926 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.19563924 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.1955207 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.19515753 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.19533375 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.1954279 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.19547167 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.19548716 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.1954874 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.19548036 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.19546823 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.19545245 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.195432 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.19540726 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.19537927 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.19535266 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.195334 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.19533606 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.19449836 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.19448991 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.19450329 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.19452573 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.19455256 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.19457635 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + restLength: 0.19459741 + constraintForce: 0 + tearResistance: 1 + - particle1: 26 + particle2: 27 + restLength: 0.19461422 + constraintForce: 0 + tearResistance: 1 + - particle1: 27 + particle2: 28 + restLength: 0.19462651 + constraintForce: 0 + tearResistance: 1 + - particle1: 28 + particle2: 29 + restLength: 0.19463308 + constraintForce: 0 + tearResistance: 1 + - particle1: 29 + particle2: 30 + restLength: 0.19463125 + constraintForce: 0 + tearResistance: 1 + - particle1: 30 + particle2: 31 + restLength: 0.19461548 + constraintForce: 0 + tearResistance: 1 + - particle1: 31 + particle2: 32 + restLength: 0.19457068 + constraintForce: 0 + tearResistance: 1 + - particle1: 32 + particle2: 33 + restLength: 0.19447827 + constraintForce: 0 + tearResistance: 1 + - particle1: 33 + particle2: 34 + restLength: 0.19430716 + constraintForce: 0 + tearResistance: 1 + - particle1: 34 + particle2: 35 + restLength: 0.19474815 + constraintForce: 0 + tearResistance: 1 + - particle1: 35 + particle2: 36 + restLength: 0.19477007 + constraintForce: 0 + tearResistance: 1 + - particle1: 36 + particle2: 37 + restLength: 0.19438897 + constraintForce: 0 + tearResistance: 1 + - particle1: 37 + particle2: 38 + restLength: 0.19388771 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: 47284b33117284d61b3df44d2620531e, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.03 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &929120241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 929120242} + - component: {fileID: 929120246} + - component: {fileID: 929120245} + - component: {fileID: 929120244} + - component: {fileID: 929120243} + m_Layer: 0 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &929120242 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929120241} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 3.45, y: 8.44, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2108375383} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &929120243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929120241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 929120246} + m_Target: {fileID: 929120242} + m_ParticleGroup: {fileID: -5470652867224400354, guid: b6dc10b6408e440aaa60cfca8e7dd7d1, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &929120244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929120241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 071b3247e825f4ba386cdc8e25c6a3e1, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 0, y: 1} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &929120245 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929120241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 1 +--- !u!114 &929120246 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929120241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 8b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 6.8625426 + elements: + - particle1: 139 + particle2: 140 + restLength: 0.19031 + constraintForce: 0 + tearResistance: 1 + - particle1: 140 + particle2: 141 + restLength: 0.19603348 + constraintForce: 0 + tearResistance: 1 + - particle1: 141 + particle2: 142 + restLength: 0.19495249 + constraintForce: 0 + tearResistance: 1 + - particle1: 142 + particle2: 143 + restLength: 0.19936419 + constraintForce: 0 + tearResistance: 1 + - particle1: 143 + particle2: 144 + restLength: 0.19567776 + constraintForce: 0 + tearResistance: 1 + - particle1: 144 + particle2: 145 + restLength: 0.19566679 + constraintForce: 0 + tearResistance: 1 + - particle1: 145 + particle2: 146 + restLength: 0.19812584 + constraintForce: 0 + tearResistance: 1 + - particle1: 146 + particle2: 147 + restLength: 0.194808 + constraintForce: 0 + tearResistance: 1 + - particle1: 147 + particle2: 148 + restLength: 0.1975255 + constraintForce: 0 + tearResistance: 1 + - particle1: 148 + particle2: 149 + restLength: 0.19576502 + constraintForce: 0 + tearResistance: 1 + - particle1: 149 + particle2: 150 + restLength: 0.19633389 + constraintForce: 0 + tearResistance: 1 + - particle1: 150 + particle2: 151 + restLength: 0.19708109 + constraintForce: 0 + tearResistance: 1 + - particle1: 151 + particle2: 152 + restLength: 0.19544911 + constraintForce: 0 + tearResistance: 1 + - particle1: 152 + particle2: 153 + restLength: 0.19775653 + constraintForce: 0 + tearResistance: 1 + - particle1: 153 + particle2: 154 + restLength: 0.19524312 + constraintForce: 0 + tearResistance: 1 + - particle1: 154 + particle2: 155 + restLength: 0.1966927 + constraintForce: 0 + tearResistance: 1 + - particle1: 155 + particle2: 156 + restLength: 0.19639277 + constraintForce: 0 + tearResistance: 1 + - particle1: 156 + particle2: 157 + restLength: 0.19618559 + constraintForce: 0 + tearResistance: 1 + - particle1: 157 + particle2: 158 + restLength: 0.19639325 + constraintForce: 0 + tearResistance: 1 + - particle1: 158 + particle2: 159 + restLength: 0.19669223 + constraintForce: 0 + tearResistance: 1 + - particle1: 159 + particle2: 160 + restLength: 0.19524348 + constraintForce: 0 + tearResistance: 1 + - particle1: 160 + particle2: 161 + restLength: 0.19775689 + constraintForce: 0 + tearResistance: 1 + - particle1: 161 + particle2: 162 + restLength: 0.1954484 + constraintForce: 0 + tearResistance: 1 + - particle1: 162 + particle2: 163 + restLength: 0.19708097 + constraintForce: 0 + tearResistance: 1 + - particle1: 163 + particle2: 164 + restLength: 0.19633389 + constraintForce: 0 + tearResistance: 1 + - particle1: 164 + particle2: 165 + restLength: 0.19576448 + constraintForce: 0 + tearResistance: 1 + - particle1: 165 + particle2: 166 + restLength: 0.19752663 + constraintForce: 0 + tearResistance: 1 + - particle1: 166 + particle2: 167 + restLength: 0.19480836 + constraintForce: 0 + tearResistance: 1 + - particle1: 167 + particle2: 168 + restLength: 0.19812632 + constraintForce: 0 + tearResistance: 1 + - particle1: 168 + particle2: 169 + restLength: 0.19566579 + constraintForce: 0 + tearResistance: 1 + - particle1: 169 + particle2: 170 + restLength: 0.19567765 + constraintForce: 0 + tearResistance: 1 + - particle1: 170 + particle2: 171 + restLength: 0.19936427 + constraintForce: 0 + tearResistance: 1 + - particle1: 171 + particle2: 172 + restLength: 0.19495267 + constraintForce: 0 + tearResistance: 1 + - particle1: 172 + particle2: 173 + restLength: 0.19603318 + constraintForce: 0 + tearResistance: 1 + - particle1: 173 + particle2: 174 + restLength: 0.1903103 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: b6dc10b6408e440aaa60cfca8e7dd7d1, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.03 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!1 &942810411 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 942810416} + - component: {fileID: 942810415} + - component: {fileID: 942810413} + - component: {fileID: 942810412} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &942810412 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942810411} + m_Enabled: 1 +--- !u!124 &942810413 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942810411} + m_Enabled: 1 +--- !u!20 &942810415 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942810411} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 71.6 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &942810416 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942810411} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 4.8, z: -13.26} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1006563103 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1006563107} + - component: {fileID: 1006563106} + - component: {fileID: 1006563105} + - component: {fileID: 1006563104} + - component: {fileID: 1006563108} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1006563104 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1006563103} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1006563105 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1006563103} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1006563106 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1006563103} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1006563107 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1006563103} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.07, z: 0} + m_LocalScale: {x: 19.468725, y: 1.1407216, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1006563108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1006563103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 1006563105} + m_DistanceField: {fileID: 0} +--- !u!1 &1201433689 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1201433690} + - component: {fileID: 1201433692} + - component: {fileID: 1201433691} + m_Layer: 0 + m_Name: Trigger + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1201433690 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201433689} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1247776992} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1201433691 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201433689} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 1201433692} + m_DistanceField: {fileID: 0} +--- !u!136 &1201433692 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201433689} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.7 + m_Height: 1.5 + m_Direction: 1 + m_Center: {x: 0, y: -0.25, z: 0} +--- !u!1 &1247776987 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1247776992} + - component: {fileID: 1247776991} + - component: {fileID: 1247776989} + - component: {fileID: 1247776988} + - component: {fileID: 1247776995} + - component: {fileID: 1247776994} + - component: {fileID: 1247776990} + - component: {fileID: 1247776993} + - component: {fileID: 1247776996} + m_Layer: 0 + m_Name: Capsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &1247776988 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + serializedVersion: 5 + m_Mass: 3 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 56 + m_CollisionDetection: 0 +--- !u!23 &1247776989 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &1247776990 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1247776991 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1247776992 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -6.82, y: 6.18, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1201433690} + m_Father: {fileID: 2108375383} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1247776993 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 82b0f164ac14247fd8a566109fbbe771, type: 3} + m_Name: + m_EditorClassIdentifier: + floorRaycastDistance: 1.2 + acceleration: 80 + maxSpeed: 6 + damping: 0.005 + jumpPower: 10 + airAcceleration: 16 + airMaxSpeed: 12 + extraGravity: -12 + centerOfMass: {x: 0, y: -0.25, z: 0} + P: 2 + D: 0.1 +--- !u!114 &1247776994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &1247776995 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0 + inverted: 0 + material: {fileID: 0} + filter: 1 + m_SourceCollider: {fileID: 1247776990} + m_DistanceField: {fileID: 0} +--- !u!114 &1247776996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247776987} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 50c674b3f8f0045249ac099130c6a6b2, type: 3} + m_Name: + m_EditorClassIdentifier: + solver: {fileID: 2108375382} + climbSpeed: 2 +--- !u!1 &1465091929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1465091930} + - component: {fileID: 1465091932} + - component: {fileID: 1465091931} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1465091930 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1465091929} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1997975594} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 291, y: 42.5} + m_SizeDelta: {x: 542, y: 66} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1465091931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1465091929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.184, g: 0.184, b: 0.184, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 200 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Use A,D to move the character. + + Space to jump, Space again to hold + on to a vine when close to it. + + When hanging from a vine, climb up and down + using W,S.' +--- !u!222 &1465091932 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1465091929} + m_CullTransparentMesh: 0 +--- !u!1 &1559710293 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1559710295} + - component: {fileID: 1559710294} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1559710294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1559710293} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1559710295 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1559710293} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1624856316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1624856317} + - component: {fileID: 1624856320} + - component: {fileID: 1624856319} + - component: {fileID: 1624856318} + - component: {fileID: 1624856321} + m_Layer: 0 + m_Name: Obi Rope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1624856317 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624856316} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -5.04, y: 8.44, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2108375383} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1624856318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624856316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 071b3247e825f4ba386cdc8e25c6a3e1, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 0, y: 1} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1624856319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624856316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 2 +--- !u!114 &1624856320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624856316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a010000 + m_AlignBytes: 16 + groupID: 3 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 1 + restLength_: 6.8625426 + elements: + - particle1: 275 + particle2: 276 + restLength: 0.19031 + constraintForce: 0 + tearResistance: 1 + - particle1: 276 + particle2: 277 + restLength: 0.19603348 + constraintForce: 0 + tearResistance: 1 + - particle1: 277 + particle2: 278 + restLength: 0.19495249 + constraintForce: 0 + tearResistance: 1 + - particle1: 278 + particle2: 279 + restLength: 0.19936419 + constraintForce: 0 + tearResistance: 1 + - particle1: 279 + particle2: 280 + restLength: 0.19567776 + constraintForce: 0 + tearResistance: 1 + - particle1: 280 + particle2: 281 + restLength: 0.19566679 + constraintForce: 0 + tearResistance: 1 + - particle1: 281 + particle2: 282 + restLength: 0.19812584 + constraintForce: 0 + tearResistance: 1 + - particle1: 282 + particle2: 283 + restLength: 0.194808 + constraintForce: 0 + tearResistance: 1 + - particle1: 283 + particle2: 284 + restLength: 0.1975255 + constraintForce: 0 + tearResistance: 1 + - particle1: 284 + particle2: 285 + restLength: 0.19576502 + constraintForce: 0 + tearResistance: 1 + - particle1: 285 + particle2: 286 + restLength: 0.19633389 + constraintForce: 0 + tearResistance: 1 + - particle1: 286 + particle2: 287 + restLength: 0.19708109 + constraintForce: 0 + tearResistance: 1 + - particle1: 287 + particle2: 288 + restLength: 0.19544911 + constraintForce: 0 + tearResistance: 1 + - particle1: 288 + particle2: 289 + restLength: 0.19775653 + constraintForce: 0 + tearResistance: 1 + - particle1: 289 + particle2: 290 + restLength: 0.19524312 + constraintForce: 0 + tearResistance: 1 + - particle1: 290 + particle2: 291 + restLength: 0.1966927 + constraintForce: 0 + tearResistance: 1 + - particle1: 291 + particle2: 292 + restLength: 0.19639277 + constraintForce: 0 + tearResistance: 1 + - particle1: 292 + particle2: 293 + restLength: 0.19618559 + constraintForce: 0 + tearResistance: 1 + - particle1: 293 + particle2: 294 + restLength: 0.19639325 + constraintForce: 0 + tearResistance: 1 + - particle1: 294 + particle2: 295 + restLength: 0.19669223 + constraintForce: 0 + tearResistance: 1 + - particle1: 295 + particle2: 296 + restLength: 0.19524348 + constraintForce: 0 + tearResistance: 1 + - particle1: 296 + particle2: 297 + restLength: 0.19775689 + constraintForce: 0 + tearResistance: 1 + - particle1: 297 + particle2: 298 + restLength: 0.1954484 + constraintForce: 0 + tearResistance: 1 + - particle1: 298 + particle2: 299 + restLength: 0.19708097 + constraintForce: 0 + tearResistance: 1 + - particle1: 299 + particle2: 300 + restLength: 0.19633389 + constraintForce: 0 + tearResistance: 1 + - particle1: 300 + particle2: 301 + restLength: 0.19576448 + constraintForce: 0 + tearResistance: 1 + - particle1: 301 + particle2: 302 + restLength: 0.19752663 + constraintForce: 0 + tearResistance: 1 + - particle1: 302 + particle2: 303 + restLength: 0.19480836 + constraintForce: 0 + tearResistance: 1 + - particle1: 303 + particle2: 304 + restLength: 0.19812632 + constraintForce: 0 + tearResistance: 1 + - particle1: 304 + particle2: 305 + restLength: 0.19566579 + constraintForce: 0 + tearResistance: 1 + - particle1: 305 + particle2: 306 + restLength: 0.19567765 + constraintForce: 0 + tearResistance: 1 + - particle1: 306 + particle2: 307 + restLength: 0.19936427 + constraintForce: 0 + tearResistance: 1 + - particle1: 307 + particle2: 308 + restLength: 0.19495267 + constraintForce: 0 + tearResistance: 1 + - particle1: 308 + particle2: 309 + restLength: 0.19603318 + constraintForce: 0 + tearResistance: 1 + - particle1: 309 + particle2: 310 + restLength: 0.1903103 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: b6dc10b6408e440aaa60cfca8e7dd7d1, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.001 + _maxBending: 0.03 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1624856321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624856316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1624856320} + m_Target: {fileID: 1624856317} + m_ParticleGroup: {fileID: -5470652867224400354, guid: b6dc10b6408e440aaa60cfca8e7dd7d1, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!1 &1694332649 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1694332650} + - component: {fileID: 1694332654} + - component: {fileID: 1694332653} + - component: {fileID: 1694332652} + - component: {fileID: 1694332651} + m_Layer: 5 + m_Name: FPSDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1694332650 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694332649} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1997975594} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 99, y: -31} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1694332651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694332649} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} + m_EffectDistance: {x: 1, y: -1} + m_UseGraphicAlpha: 1 +--- !u!114 &1694332652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694332649} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f14f49b61044e49ebb2f29511f2b3f41, type: 3} + m_Name: + m_EditorClassIdentifier: + updateInterval: 0.5 + showMedian: 0 + medianLearnrate: 0.05 +--- !u!114 &1694332653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694332649} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1694332654 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1694332649} + m_CullTransparentMesh: 0 +--- !u!1 &1735419977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1735419981} + - component: {fileID: 1735419980} + - component: {fileID: 1735419979} + - component: {fileID: 1735419978} + - component: {fileID: 1735419982} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1735419978 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735419977} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1735419979 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735419977} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1735419980 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735419977} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1735419981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735419977} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -4.89, y: 10, z: 0} + m_LocalScale: {x: 3.9395108, y: 1.1407216, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1735419982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735419977} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0.05 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 1735419979} + m_DistanceField: {fileID: 0} +--- !u!1 &1887103744 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1887103749} + - component: {fileID: 1887103748} + - component: {fileID: 1887103747} + - component: {fileID: 1887103746} + - component: {fileID: 1887103745} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1887103745 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887103744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0.05 + inverted: 0 + material: {fileID: 0} + filter: -65535 + m_SourceCollider: {fileID: 1887103747} + m_DistanceField: {fileID: 0} +--- !u!23 &1887103746 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887103744} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1887103747 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887103744} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1887103748 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887103744} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1887103749 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887103744} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.4, y: 10, z: 0} + m_LocalScale: {x: 3.9395108, y: 1.1407216, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1954069164 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1954069166} + - component: {fileID: 1954069165} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1954069165 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954069164} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1954069166 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954069164} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1997975590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1997975594} + - component: {fileID: 1997975593} + - component: {fileID: 1997975592} + - component: {fileID: 1997975591} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1997975591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1997975590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1997975592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1997975590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1997975593 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1997975590} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1997975594 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1997975590} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1465091930} + - {fileID: 1694332650} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &2108375380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2108375383} + - component: {fileID: 2108375382} + m_Layer: 0 + m_Name: Obi Solver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2108375382 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108375380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + m_EditorClassIdentifier: + simulateWhenInvisible: 1 + m_Backend: 1 + substeps: 12 + maxStepsPerFrame: 1 + synchronization: 2 + parameters: + mode: 1 + interpolation: 0 + gravity: {x: 0, y: -9.81, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 + damping: 0.5 + maxAnisotropy: 3 + sleepThreshold: 0.000001 + maxVelocity: 50 + maxAngularVelocity: 10 + collisionMargin: 0.02 + maxDepenetration: 10 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 2 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 2 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + collisionConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + skinConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + volumeConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + shapeMatchingConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + stretchShearConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 +--- !u!4 &2108375383 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108375380} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1247776992} + - {fileID: 1624856317} + - {fileID: 929120242} + - {fileID: 867634197} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 942810416} + - {fileID: 1954069166} + - {fileID: 1735419981} + - {fileID: 1006563107} + - {fileID: 2108375383} + - {fileID: 1997975594} + - {fileID: 1887103749} + - {fileID: 1559710295} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/VineSwinging.unity.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/VineSwinging.unity.meta new file mode 100644 index 000000000..dc9365402 --- /dev/null +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/VineSwinging.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 72bf5bcaef9ac46a8b1d07273f12237f +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRope.unity b/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRope.unity index a8c17d314..d4cbe1d93 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRope.unity +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRope.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -98,13 +94,13 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 4890085278179872738, guid: f5e9e1c8da0974a46a42e228c789dfdb, type: 2} + m_LightingSettings: {fileID: 4890085278179872738, guid: e16f40cccc9f747d3a88842b4591f225, type: 2} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -128,6 +124,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} @@ -179,6 +176,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} --- !u!114 &175885770 stripped MonoBehaviour: @@ -219,9 +219,9 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 876719296} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -301,9 +301,9 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1406884019} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -372,6 +372,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} @@ -423,6 +424,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} --- !u!114 &334666149 stripped MonoBehaviour: @@ -465,10 +469,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 599321983} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 1 - m_Drag: 3 - m_AngularDrag: 0 + m_LinearDamping: 3 + m_AngularDamping: 0 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 0 m_IsKinematic: 0 m_Interpolate: 0 @@ -487,6 +502,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 599321986} @@ -499,9 +515,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 599321983} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &599321987 @@ -521,6 +545,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -542,6 +571,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -561,12 +591,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 599321983} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -80, z: -0.5} m_LocalScale: {x: 3.0698, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &599321990 MonoBehaviour: @@ -619,9 +650,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 615688258} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_Range: 10 @@ -671,8 +701,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &615688260 Transform: m_ObjectHideFlags: 0 @@ -680,12 +714,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 615688258} + serializedVersion: 2 m_LocalRotation: {x: 0.17818838, y: -0.24294695, z: 0.23929165, w: 0.92301965} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 26.437002, y: -23.931002, z: 23.368002} --- !u!1 &862377248 GameObject: @@ -718,9 +753,17 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 862377248} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} --- !u!23 &862377250 @@ -740,6 +783,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -761,6 +809,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -780,12 +829,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 862377248} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -0.5, z: -0.5} m_LocalScale: {x: 1.5, y: 1.5, z: 1.5} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &862377253 MonoBehaviour: @@ -800,6 +850,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0 + inverted: 0 material: {fileID: 0} filter: -131071 m_SourceCollider: {fileID: 862377249} @@ -811,10 +862,21 @@ Rigidbody: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 862377248} - serializedVersion: 2 + serializedVersion: 5 m_Mass: 30 - m_Drag: 5 - m_AngularDrag: 0.05 + m_LinearDamping: 5 + m_AngularDamping: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 m_UseGravity: 0 m_IsKinematic: 0 m_Interpolate: 0 @@ -845,7 +907,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fdf58ad80e1cd4860aa12e8da0aa833c, type: 3} m_Name: m_EditorClassIdentifier: - acceleration: 50 + acceleration: 30 --- !u!1 &876719292 GameObject: m_ObjectHideFlags: 0 @@ -922,7 +984,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 1 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -936,11 +1000,11 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 178620545} - {fileID: 1406884019} m_Father: {fileID: 0} - m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -952,6 +1016,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} @@ -1003,6 +1068,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} --- !u!114 &1015286418 stripped MonoBehaviour: @@ -1050,6 +1118,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0.05 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1276486560} @@ -1071,6 +1140,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1092,6 +1166,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1111,12 +1186,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1276486554} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -8, z: 0} m_LocalScale: {x: 2.5, y: 2.5, z: 2.5} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1276486559 MonoBehaviour: @@ -1131,6 +1207,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: thickness: 0.05 + inverted: 0 material: {fileID: 0} filter: -65535 m_SourceCollider: {fileID: 1276486561} @@ -1143,9 +1220,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1276486554} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 10, y: 2, z: 1.0000002} m_Center: {x: -5.2, y: 0, z: 0} --- !u!65 &1276486561 @@ -1156,9 +1241,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1276486554} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 10, y: 2, z: 1.0000002} m_Center: {x: 5.2, y: 0, z: 0} --- !u!1 &1406884018 @@ -1187,10 +1280,10 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 266503052} m_Father: {fileID: 876719296} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1202,6 +1295,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} @@ -1253,6 +1347,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} --- !u!114 &1430085411 stripped MonoBehaviour: @@ -1265,54 +1362,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1583418123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1583418125} - - component: {fileID: 1583418124} - m_Layer: 0 - m_Name: OniCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1583418124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d02d25c24c8574316883c920912e4fdb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1583418125 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1583418123} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1595626174 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} @@ -1364,6 +1419,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} --- !u!114 &1595626175 stripped MonoBehaviour: @@ -1416,9 +1474,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1452,18 +1518,20 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1612476492} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 3, z: -20} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1663334039 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} @@ -1515,6 +1583,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} --- !u!114 &1663334040 stripped MonoBehaviour: @@ -1527,56 +1598,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1686434325 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1686434327} - - component: {fileID: 1686434326} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1686434326 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1686434325} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: - cellSpans: - m_AlignBytes: 16 ---- !u!4 &1686434327 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1686434325} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 15 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1717570096 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} @@ -1628,6 +1655,9 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} --- !u!114 &1717570097 stripped MonoBehaviour: @@ -1651,7 +1681,6 @@ GameObject: - component: {fileID: 1780856015} - component: {fileID: 1780856020} - component: {fileID: 1780856019} - - component: {fileID: 1780856018} - component: {fileID: 1780856017} - component: {fileID: 1780856021} - component: {fileID: 1780856022} @@ -1671,12 +1700,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1780856014} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} m_LocalPosition: {x: 0, y: -1.5, z: -0.35} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1882120510} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} --- !u!114 &1780856016 MonoBehaviour: @@ -1690,6 +1720,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 18f853588397d4a80a561203ed92fc8a, type: 3} m_Name: m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 03019be2b7a654429bf322c3ca0c7a0e, type: 2} + renderParams: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 1 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 uvAnchor: 0 uvScale: {x: 1, y: 30} normalizeV: 1 @@ -1709,14 +1748,7 @@ MonoBehaviour: decimation: 0.5 smoothing: 0 twist: 0 ---- !u!33 &1780856018 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1780856014} - m_Mesh: {fileID: 2092596634} + indexInSystem: 0 --- !u!23 &1780856019 MeshRenderer: m_ObjectHideFlags: 0 @@ -1734,6 +1766,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1755,6 +1792,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -1771,578 +1809,585 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} m_Name: m_EditorClassIdentifier: - solverIndices: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f0000007000000071000000 + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f0000007000000071000000 + m_AlignBytes: 16 + groupID: 1 m_CollisionMaterial: {fileID: 0} m_SurfaceCollisions: 0 + m_MassScale: 1 m_SelfCollisions: 0 - restLength_: 78.96037 + restLength_: 78.910034 elements: - particle1: 0 particle2: 1 - restLength: 0.657959 + restLength: 0.657547 constraintForce: 0 tearResistance: 1 - particle1: 1 particle2: 2 - restLength: 0.6274185 + restLength: 0.62701416 constraintForce: 0 tearResistance: 1 - particle1: 2 particle2: 3 - restLength: 0.80545807 + restLength: 0.80493164 constraintForce: 0 tearResistance: 1 - particle1: 3 particle2: 4 - restLength: 0.6171951 + restLength: 0.61681366 constraintForce: 0 tearResistance: 1 - particle1: 4 particle2: 5 - restLength: 0.6890564 + restLength: 0.68862915 constraintForce: 0 tearResistance: 1 - particle1: 5 particle2: 6 - restLength: 0.7583618 + restLength: 0.75785065 constraintForce: 0 tearResistance: 1 - particle1: 6 particle2: 7 - restLength: 0.6914139 + restLength: 0.690979 constraintForce: 0 tearResistance: 1 - particle1: 7 particle2: 8 - restLength: 0.6603241 + restLength: 0.65991974 constraintForce: 0 tearResistance: 1 - particle1: 8 particle2: 9 - restLength: 0.6962509 + restLength: 0.69579315 constraintForce: 0 tearResistance: 1 - particle1: 9 particle2: 10 - restLength: 0.73104095 + restLength: 0.73057556 constraintForce: 0 tearResistance: 1 - particle1: 10 particle2: 11 - restLength: 0.7430115 + restLength: 0.7425308 constraintForce: 0 tearResistance: 1 - particle1: 11 particle2: 12 - restLength: 0.65579224 + restLength: 0.65538025 constraintForce: 0 tearResistance: 1 - particle1: 12 particle2: 13 - restLength: 0.6773987 + restLength: 0.67697906 constraintForce: 0 tearResistance: 1 - particle1: 13 particle2: 14 - restLength: 0.6984024 + restLength: 0.69794464 constraintForce: 0 tearResistance: 1 - particle1: 14 particle2: 15 - restLength: 0.7187271 + restLength: 0.71826935 constraintForce: 0 tearResistance: 1 - particle1: 15 particle2: 16 - restLength: 0.7384491 + restLength: 0.7379761 constraintForce: 0 tearResistance: 1 - particle1: 16 particle2: 17 - restLength: 0.68582153 + restLength: 0.6853943 constraintForce: 0 tearResistance: 1 - particle1: 17 particle2: 18 - restLength: 0.6740875 + restLength: 0.67365265 constraintForce: 0 tearResistance: 1 - particle1: 18 particle2: 19 - restLength: 0.6877136 + restLength: 0.68727875 constraintForce: 0 tearResistance: 1 - particle1: 19 particle2: 20 - restLength: 0.70095825 + restLength: 0.7005005 constraintForce: 0 tearResistance: 1 - particle1: 20 particle2: 21 - restLength: 0.7137718 + restLength: 0.71331406 constraintForce: 0 tearResistance: 1 - particle1: 21 particle2: 22 - restLength: 0.7261467 + restLength: 0.72569656 constraintForce: 0 tearResistance: 1 - particle1: 22 particle2: 23 - restLength: 0.70257187 + restLength: 0.70212173 constraintForce: 0 tearResistance: 1 - particle1: 23 particle2: 24 - restLength: 0.6775856 + restLength: 0.6771431 constraintForce: 0 tearResistance: 1 - particle1: 24 particle2: 25 - restLength: 0.6867447 + restLength: 0.6863136 constraintForce: 0 tearResistance: 1 - particle1: 25 particle2: 26 - restLength: 0.6955986 + restLength: 0.6951637 constraintForce: 0 tearResistance: 1 - particle1: 26 particle2: 27 - restLength: 0.70415497 + restLength: 0.7036934 constraintForce: 0 tearResistance: 1 - particle1: 27 particle2: 28 - restLength: 0.71237564 + restLength: 0.7119217 constraintForce: 0 tearResistance: 1 - particle1: 28 particle2: 29 - restLength: 0.72029877 + restLength: 0.7198372 constraintForce: 0 tearResistance: 1 - particle1: 29 particle2: 30 - restLength: 0.69654083 + restLength: 0.6960983 constraintForce: 0 tearResistance: 1 - particle1: 30 particle2: 31 - restLength: 0.6841812 + restLength: 0.6837578 constraintForce: 0 tearResistance: 1 - particle1: 31 particle2: 32 - restLength: 0.69026566 + restLength: 0.68982315 constraintForce: 0 tearResistance: 1 - particle1: 32 particle2: 33 - restLength: 0.6961212 + restLength: 0.6956711 constraintForce: 0 tearResistance: 1 - particle1: 33 particle2: 34 - restLength: 0.7017021 + restLength: 0.7012558 constraintForce: 0 tearResistance: 1 - particle1: 34 particle2: 35 - restLength: 0.70703506 + restLength: 0.7065773 constraintForce: 0 tearResistance: 1 - particle1: 35 particle2: 36 - restLength: 0.7121277 + restLength: 0.7116852 constraintForce: 0 tearResistance: 1 - particle1: 36 particle2: 37 - restLength: 0.70897675 + restLength: 0.7085228 constraintForce: 0 tearResistance: 1 - particle1: 37 particle2: 38 - restLength: 0.68764114 + restLength: 0.68719864 constraintForce: 0 tearResistance: 1 - particle1: 38 particle2: 39 - restLength: 0.69158936 + restLength: 0.69114685 constraintForce: 0 tearResistance: 1 - particle1: 39 particle2: 40 - restLength: 0.6953201 + restLength: 0.6948738 constraintForce: 0 tearResistance: 1 - particle1: 40 particle2: 41 - restLength: 0.6988373 + restLength: 0.69838715 constraintForce: 0 tearResistance: 1 - particle1: 41 particle2: 42 - restLength: 0.7021179 + restLength: 0.7016792 constraintForce: 0 tearResistance: 1 - particle1: 42 particle2: 43 - restLength: 0.70521927 + restLength: 0.70476913 constraintForce: 0 tearResistance: 1 - particle1: 43 particle2: 44 - restLength: 0.7080574 + restLength: 0.70760345 constraintForce: 0 tearResistance: 1 - particle1: 44 particle2: 45 - restLength: 0.70124435 + restLength: 0.7007942 constraintForce: 0 tearResistance: 1 - particle1: 45 particle2: 46 - restLength: 0.6936035 + restLength: 0.6931572 constraintForce: 0 tearResistance: 1 - particle1: 46 particle2: 47 - restLength: 0.6956978 + restLength: 0.6952629 constraintForce: 0 tearResistance: 1 - particle1: 47 particle2: 48 - restLength: 0.6975975 + restLength: 0.6971512 constraintForce: 0 tearResistance: 1 - particle1: 48 particle2: 49 - restLength: 0.6992912 + restLength: 0.69885254 constraintForce: 0 tearResistance: 1 - particle1: 49 particle2: 50 - restLength: 0.7007866 + restLength: 0.70033646 constraintForce: 0 tearResistance: 1 - particle1: 50 particle2: 51 - restLength: 0.7020836 + restLength: 0.70163345 constraintForce: 0 tearResistance: 1 - particle1: 51 particle2: 52 - restLength: 0.7031746 + restLength: 0.70272446 constraintForce: 0 tearResistance: 1 - particle1: 52 particle2: 53 - restLength: 0.70077133 + restLength: 0.7003212 constraintForce: 0 tearResistance: 1 - particle1: 53 particle2: 54 - restLength: 0.6984062 + restLength: 0.6979599 constraintForce: 0 tearResistance: 1 - particle1: 54 particle2: 55 - restLength: 0.6988945 + restLength: 0.6984482 constraintForce: 0 tearResistance: 1 - particle1: 55 particle2: 56 - restLength: 0.6991768 + restLength: 0.6987381 constraintForce: 0 tearResistance: 1 - particle1: 56 particle2: 57 - restLength: 0.6992874 + restLength: 0.69882965 constraintForce: 0 tearResistance: 1 - particle1: 57 particle2: 58 - restLength: 0.6991844 + restLength: 0.6987381 constraintForce: 0 tearResistance: 1 - particle1: 58 particle2: 59 - restLength: 0.6988869 + restLength: 0.6984482 constraintForce: 0 tearResistance: 1 - particle1: 59 particle2: 60 - restLength: 0.6983986 + restLength: 0.6979599 constraintForce: 0 tearResistance: 1 - particle1: 60 particle2: 61 - restLength: 0.70077133 + restLength: 0.7003212 constraintForce: 0 tearResistance: 1 - particle1: 61 particle2: 62 - restLength: 0.7031784 + restLength: 0.70272446 constraintForce: 0 tearResistance: 1 - particle1: 62 particle2: 63 - restLength: 0.7020798 + restLength: 0.7016411 constraintForce: 0 tearResistance: 1 - particle1: 63 particle2: 64 - restLength: 0.7007942 + restLength: 0.7003403 constraintForce: 0 tearResistance: 1 - particle1: 64 particle2: 65 - restLength: 0.6992912 + restLength: 0.6988411 constraintForce: 0 tearResistance: 1 - particle1: 65 particle2: 66 - restLength: 0.6975956 + restLength: 0.6971493 constraintForce: 0 tearResistance: 1 - particle1: 66 particle2: 67 - restLength: 0.6956997 + restLength: 0.6952553 constraintForce: 0 tearResistance: 1 - particle1: 67 particle2: 68 - restLength: 0.6936035 + restLength: 0.6931648 constraintForce: 0 tearResistance: 1 - particle1: 68 particle2: 69 - restLength: 0.70124245 + restLength: 0.7007866 constraintForce: 0 tearResistance: 1 - particle1: 69 particle2: 70 - restLength: 0.7080612 + restLength: 0.7076149 constraintForce: 0 tearResistance: 1 - particle1: 70 particle2: 71 - restLength: 0.7052078 + restLength: 0.7047634 constraintForce: 0 tearResistance: 1 - particle1: 71 particle2: 72 - restLength: 0.70212936 + restLength: 0.70168114 constraintForce: 0 tearResistance: 1 - particle1: 72 particle2: 73 - restLength: 0.69883347 + restLength: 0.69838715 constraintForce: 0 tearResistance: 1 - particle1: 73 particle2: 74 - restLength: 0.6953201 + restLength: 0.6948738 constraintForce: 0 tearResistance: 1 - particle1: 74 particle2: 75 - restLength: 0.69158363 + restLength: 0.69114685 constraintForce: 0 tearResistance: 1 - particle1: 75 particle2: 76 - restLength: 0.68763924 + restLength: 0.68720055 constraintForce: 0 tearResistance: 1 - particle1: 76 particle2: 77 - restLength: 0.7089863 + restLength: 0.70853233 constraintForce: 0 tearResistance: 1 - particle1: 77 particle2: 78 - restLength: 0.71212196 + restLength: 0.7116718 constraintForce: 0 tearResistance: 1 - particle1: 78 particle2: 79 - restLength: 0.7070408 + restLength: 0.7065811 constraintForce: 0 tearResistance: 1 - particle1: 79 particle2: 80 - restLength: 0.7016964 + restLength: 0.7012558 constraintForce: 0 tearResistance: 1 - particle1: 80 particle2: 81 - restLength: 0.6961155 + restLength: 0.6956692 constraintForce: 0 tearResistance: 1 - particle1: 81 particle2: 82 - restLength: 0.6902695 + restLength: 0.6898327 constraintForce: 0 tearResistance: 1 - particle1: 82 particle2: 83 - restLength: 0.6841831 + restLength: 0.6837406 constraintForce: 0 tearResistance: 1 - particle1: 83 particle2: 84 - restLength: 0.6965389 + restLength: 0.69610405 constraintForce: 0 tearResistance: 1 - particle1: 84 particle2: 85 - restLength: 0.7203064 + restLength: 0.719841 constraintForce: 0 tearResistance: 1 - particle1: 85 particle2: 86 - restLength: 0.71237946 + restLength: 0.7119274 constraintForce: 0 tearResistance: 1 - particle1: 86 particle2: 87 - restLength: 0.70414543 + restLength: 0.7036953 constraintForce: 0 tearResistance: 1 - particle1: 87 particle2: 88 - restLength: 0.6955986 + restLength: 0.6951542 constraintForce: 0 tearResistance: 1 - particle1: 88 particle2: 89 - restLength: 0.6867504 + restLength: 0.6863098 constraintForce: 0 tearResistance: 1 - particle1: 89 particle2: 90 - restLength: 0.67757607 + restLength: 0.67714214 constraintForce: 0 tearResistance: 1 - particle1: 90 particle2: 91 - restLength: 0.7025757 + restLength: 0.702137 constraintForce: 0 tearResistance: 1 - particle1: 91 particle2: 92 - restLength: 0.72615623 + restLength: 0.7256918 constraintForce: 0 tearResistance: 1 - particle1: 92 particle2: 93 - restLength: 0.7137613 + restLength: 0.7133045 constraintForce: 0 tearResistance: 1 - particle1: 93 particle2: 94 - restLength: 0.70095825 + restLength: 0.7005091 constraintForce: 0 tearResistance: 1 - particle1: 94 particle2: 95 - restLength: 0.6877241 + restLength: 0.6872835 constraintForce: 0 tearResistance: 1 - particle1: 95 particle2: 96 - restLength: 0.67408085 + restLength: 0.67364407 constraintForce: 0 tearResistance: 1 - particle1: 96 particle2: 97 - restLength: 0.68582535 + restLength: 0.6853914 constraintForce: 0 tearResistance: 1 - particle1: 97 particle2: 98 - restLength: 0.73844147 + restLength: 0.7379751 constraintForce: 0 tearResistance: 1 - particle1: 98 particle2: 99 - restLength: 0.71873474 + restLength: 0.7182741 constraintForce: 0 tearResistance: 1 - particle1: 99 particle2: 100 - restLength: 0.69838905 + restLength: 0.6979418 constraintForce: 0 tearResistance: 1 - particle1: 100 particle2: 101 - restLength: 0.6774101 + restLength: 0.6769719 constraintForce: 0 tearResistance: 1 - particle1: 101 particle2: 102 - restLength: 0.65579367 + restLength: 0.65537786 constraintForce: 0 tearResistance: 1 - particle1: 102 particle2: 103 - restLength: 0.74301386 + restLength: 0.74254274 constraintForce: 0 tearResistance: 1 - particle1: 103 particle2: 104 - restLength: 0.73103285 + restLength: 0.7305646 constraintForce: 0 tearResistance: 1 - particle1: 104 particle2: 105 - restLength: 0.69625187 + restLength: 0.6958027 constraintForce: 0 tearResistance: 1 - particle1: 105 particle2: 106 - restLength: 0.6603303 + restLength: 0.65991473 constraintForce: 0 tearResistance: 1 - particle1: 106 particle2: 107 - restLength: 0.6914048 + restLength: 0.69097257 constraintForce: 0 tearResistance: 1 - particle1: 107 particle2: 108 - restLength: 0.7583585 + restLength: 0.75786567 constraintForce: 0 tearResistance: 1 - particle1: 108 particle2: 109 - restLength: 0.68906343 + restLength: 0.68862224 constraintForce: 0 tearResistance: 1 - particle1: 109 particle2: 110 - restLength: 0.61720514 + restLength: 0.6168027 constraintForce: 0 tearResistance: 1 - particle1: 110 particle2: 111 - restLength: 0.80545086 + restLength: 0.8049487 constraintForce: 0 tearResistance: 1 - particle1: 111 particle2: 112 - restLength: 0.6274201 + restLength: 0.6270089 constraintForce: 0 tearResistance: 1 - particle1: 112 particle2: 113 - restLength: 0.657958 + restLength: 0.6575437 constraintForce: 0 tearResistance: 1 - m_RopeBlueprint: {fileID: 11400000, guid: 4d31372b30ca34527b534f09a803ab15, type: 2} + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: 7e05f85bfaeb24a649317f63f656b6bb, type: 2} tearingEnabled: 0 tearResistanceMultiplier: 1000 tearRate: 1 @@ -2369,11 +2414,12 @@ MonoBehaviour: m_EditorClassIdentifier: m_Actor: {fileID: 1780856020} m_Target: {fileID: 862377252} - m_ParticleGroup: {fileID: 870036912147276740, guid: 4d31372b30ca34527b534f09a803ab15, type: 2} + m_ParticleGroup: {fileID: 870036912147276740, guid: 7e05f85bfaeb24a649317f63f656b6bb, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1780856022 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2388,11 +2434,12 @@ MonoBehaviour: m_EditorClassIdentifier: m_Actor: {fileID: 1780856020} m_Target: {fileID: 599321989} - m_ParticleGroup: {fileID: -5578146735436999353, guid: 4d31372b30ca34527b534f09a803ab15, type: 2} + m_ParticleGroup: {fileID: -5578146735436999353, guid: 7e05f85bfaeb24a649317f63f656b6bb, type: 2} m_AttachmentType: 1 m_ConstrainOrientation: 0 + m_Projection: 0 m_Compliance: 0 - m_BreakThreshold: Infinity + breakThreshold: Infinity --- !u!114 &1780856023 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2422,7 +2469,6 @@ GameObject: m_Component: - component: {fileID: 1882120510} - component: {fileID: 1882120509} - - component: {fileID: 1882120508} - component: {fileID: 1882120511} m_Layer: 0 m_Name: Obi Solver @@ -2431,21 +2477,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1882120508 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1882120507} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1d9704d540ac448439a425526f6b2986, type: 3} - m_Name: - m_EditorClassIdentifier: - solvers: - - {fileID: 1882120509} - substeps: 6 --- !u!114 &1882120509 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2460,23 +2491,57 @@ MonoBehaviour: m_EditorClassIdentifier: simulateWhenInvisible: 1 m_Backend: 1 + substeps: 12 + maxStepsPerFrame: 1 + synchronization: 0 parameters: mode: 1 interpolation: 0 gravity: {x: 0, y: 0, z: 0} + ambientWind: {x: 0, y: 0, z: 0} + foamGravityScale: 1 damping: 0.1 maxAnisotropy: 3 sleepThreshold: 0.0001 + maxVelocity: 50 + maxAngularVelocity: 10 collisionMargin: 0.05 maxDepenetration: 50 - continuousCollisionDetection: 1 + colliderCCD: 1 + particleCCD: 0 shockPropagation: 0 surfaceCollisionIterations: 16 surfaceCollisionTolerance: 0.001 + diffusionMask: {x: 1, y: 1, z: 1, w: 1} + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 4 + useLimits: 0 + killOffLimitsParticles: 0 + boundaryLimits: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 5, y: 5, z: 5} gravity: {x: 0, y: -9.81, z: 0} gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + foamMinNeighbors: 3 + foamCollisions: 0 + maxFoamVelocityStretch: 0.3 + foamRadiusScale: 1 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + foamVolumeDensity: 0.1 + foamAmbientDensity: 0.02 + foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} + foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} worldLinearInertiaScale: 0 worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 distanceConstraintParameters: evaluationOrder: 0 iterations: 4 @@ -2532,6 +2597,11 @@ MonoBehaviour: iterations: 2 SORFactor: 1 enabled: 1 + pinholeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 stitchConstraintParameters: evaluationOrder: 1 iterations: 2 @@ -2564,13 +2634,14 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1882120507} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1780856015} m_Father: {fileID: 0} - m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1882120511 MonoBehaviour: @@ -2607,6 +2678,52 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 1 m_CallState: 2 +--- !u!1 &1903223953 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1903223955} + - component: {fileID: 1903223954} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1903223954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1903223953} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1903223955 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1903223953} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1919818295 GameObject: m_ObjectHideFlags: 0 @@ -2642,6 +2759,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2663,6 +2785,7 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 @@ -2682,174 +2805,31 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1919818295} + serializedVersion: 2 m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 5, y: 5, z: 5} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} ---- !u!43 &2092596634 -Mesh: +--- !u!1660057539 &9223372036854775807 +SceneRoots: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: extrudedMesh - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 0 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 0 - localAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: - m_VertexData: - serializedVersion: 3 - m_VertexCount: 0 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 0 - _typelessdata: - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: + m_Roots: + - {fileID: 1612476495} + - {fileID: 615688260} + - {fileID: 1919818299} + - {fileID: 1015286417} + - {fileID: 1595626174} + - {fileID: 1663334039} + - {fileID: 175885769} + - {fileID: 1430085410} + - {fileID: 334666148} + - {fileID: 1717570096} + - {fileID: 862377252} + - {fileID: 1276486558} + - {fileID: 1882120510} + - {fileID: 599321989} + - {fileID: 876719296} + - {fileID: 1903223955} diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting b/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting index 565c7d327..61d4f8b6f 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting @@ -7,8 +7,7 @@ LightingSettings: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: WrapTheRopeSettings - serializedVersion: 3 - m_GIWorkflowMode: 0 + serializedVersion: 9 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_RealtimeEnvironmentLighting: 1 @@ -18,9 +17,11 @@ LightingSettings: m_UsingShadowmask: 1 m_BakeBackend: 1 m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 m_BakeResolution: 40 m_Padding: 2 - m_TextureCompression: 1 + m_LightmapCompression: 3 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 1 @@ -31,13 +32,11 @@ LightingSettings: m_FilterMode: 1 m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 m_TrainingDataDestination: TrainingData m_RealtimeResolution: 2 m_ForceWhiteAlbedo: 0 m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 m_PVRCulling: 1 m_PVRSampling: 1 m_PVRDirectSampleCount: 32 @@ -47,7 +46,7 @@ LightingSettings: m_LightProbeSampleCountMultiplier: 4 m_PVRBounces: 2 m_PVRMinBounces: 2 - m_PVREnvironmentMIS: 1 + m_PVREnvironmentImportanceSampling: 1 m_PVRFilteringMode: 1 m_PVRDenoiserTypeDirect: 1 m_PVRDenoiserTypeIndirect: 1 @@ -61,3 +60,4 @@ LightingSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta b/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta index 18670432f..b753eec11 100644 --- a/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta +++ b/Assets/ThirdParty/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f5e9e1c8da0974a46a42e228c789dfdb +guid: e16f40cccc9f747d3a88842b4591f225 NativeFormatImporter: externalObjects: {} mainObjectFileID: 4890085278179872738 diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Actors/IObiParticleCollection.cs b/Assets/ThirdParty/Obi/Scripts/Common/Actors/IObiParticleCollection.cs index 59bb0dd8a..691131ff6 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Actors/IObiParticleCollection.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Actors/IObiParticleCollection.cs @@ -11,8 +11,13 @@ namespace Obi bool usesOrientedParticles { get; } int GetParticleRuntimeIndex(int index); // returns solver or blueprint index, depending on implementation. + Vector3 GetParticlePosition(int index); Quaternion GetParticleOrientation(int index); + + Vector3 GetParticleRestPosition(int index); + Quaternion GetParticleRestOrientation(int index); + void GetParticleAnisotropy(int index, ref Vector4 b1, ref Vector4 b2, ref Vector4 b3); float GetParticleMaxRadius(int index); Color GetParticleColor(int index); diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Actors/ObiActor.cs b/Assets/ThirdParty/Obi/Scripts/Common/Actors/ObiActor.cs index 9a508276a..35f1a344a 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Actors/ObiActor.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Actors/ObiActor.cs @@ -6,16 +6,17 @@ using System.Collections.Generic; namespace Obi { + /** * Represents a group of related particles. ObiActor does not make - * any assumptions about the relationship between these particles, except that they get allocated + * any assumptions about the relationship between these particles, except that they get allocated * and released together. */ [ExecuteInEditMode] [DisallowMultipleComponent] public abstract class ObiActor : MonoBehaviour, IObiParticleCollection { - public class ObiActorSolverArgs : EventArgs + public class ObiActorSolverArgs : System.EventArgs { public ObiSolver solver { get; } @@ -25,10 +26,35 @@ namespace Obi } } + private struct BufferedForces + { + public bool dirty; + + public Vector4 force; + public Vector4 acceleration; + public Vector4 impulse; + public Vector4 velChange; + + public Vector4 angularForce; + public Vector4 angularAcceleration; + public Vector4 angularImpulse; + public Vector4 angularVelChange; + + public void Clear() + { + force = Vector4.zero; + acceleration = Vector4.zero; + impulse = Vector4.zero; + velChange = Vector4.zero; + angularForce = Vector4.zero; + angularAcceleration = Vector4.zero; + angularImpulse = Vector4.zero; + angularVelChange = Vector4.zero; + } + } + public delegate void ActorCallback(ObiActor actor); - - public delegate void ActorStepCallback(ObiActor actor, float stepTime); - + public delegate void ActorStepCallback(ObiActor actor, float simulatedTime, float substepTime); public delegate void ActorBlueprintCallback(ObiActor actor, ObiActorBlueprint blueprint); /// @@ -42,60 +68,72 @@ namespace Obi public event ActorBlueprintCallback OnBlueprintUnloaded; /// - /// Called at the start of the solver's FixedUpdate (for Fixed and LateFixed updaters) or the solver's Update (for Late updaters) + /// Called when the blueprint currently in use has been re-generated. This will always be preceded by a call to + /// OnBlueprintUnloaded and OnBlueprintLoaded. /// - public event ActorCallback OnPrepareFrame; + public event ActorBlueprintCallback OnBlueprintRegenerated; /// - /// Called at the beginning of a time step, before dirty constraints and active particles have been updated. + /// Called before simulation starts. /// - public event ActorStepCallback OnPrepareStep; + public event ActorStepCallback OnSimulationStart; /// - /// Called at the beginning of a time step, after dirty constraints and active particles have been updated. + /// Called after CPU->GPU data transfers, before collision detection starts. /// - public event ActorStepCallback OnBeginStep; + public event ActorStepCallback OnCollisionDetectionStart; /// - /// Called at the beginning of each substep. + /// Called before performing substepping. /// - public event ActorStepCallback OnSubstep; + public event ActorStepCallback OnSubstepsStart; /// - /// Called at the end of a timestep, after external forces have been reset and collision callbacks called. + /// Called after simulation ends. /// - public event ActorStepCallback OnEndStep; + public event ActorStepCallback OnSimulationEnd; /// - /// Called at the end of each frame. + /// You can use this callback to issue GPU->CPU readbacks. /// - public event ActorCallback OnInterpolate; + public event ActorCallback OnRequestReadback; - [HideInInspector] protected int m_ActiveParticleCount = 0; + /// + /// Called at the end of each frame, after interpolation but before rendering. + /// + public event ActorStepCallback OnInterpolate; + + [HideInInspector] protected ObiNativeIntList m_ActiveParticleCount; /// /// Index of each one of the actor's particles in the solver. /// - [HideInInspector] public int[] solverIndices; + [HideInInspector] public ObiNativeIntList solverIndices; /// /// For each of the actor's constraint types, offset of every batch in the solver. /// [HideInInspector] public List[] solverBatchOffsets; + public int deformableEdgesOffset { protected set; get; } /**< index of the first deformable edge in the solver that belongs to this rope.*/ + protected ObiSolver m_Solver; protected bool m_Loaded = false; + public int groupID = 0; - private ObiActorBlueprint state; + private ObiActorBlueprint m_State; private ObiActorBlueprint m_BlueprintInstance; private ObiPinConstraintsData m_PinConstraints; + private ObiPinholeConstraintsData m_PinholeConstraints; + private BufferedForces bufferedForces = new BufferedForces(); [SerializeField] [HideInInspector] protected ObiCollisionMaterial m_CollisionMaterial; [SerializeField] [HideInInspector] protected bool m_SurfaceCollisions = false; + [SerializeField] [HideInInspector] [Min(ObiUtils.epsilon)] protected float m_MassScale = 1; /// /// The solver in charge of simulating this actor. /// - /// This is the first ObiSlver component found up the actor's hierarchy. + /// This is the first ObiSolver component found up the actor's hierarchy. public ObiSolver solver { get { return m_Solver; } @@ -107,7 +145,7 @@ namespace Obi /// public bool isLoaded { - get { return m_Loaded; } + get { return m_Solver != null && m_Loaded; } } /// @@ -115,7 +153,10 @@ namespace Obi /// public ObiCollisionMaterial collisionMaterial { - get { return m_CollisionMaterial; } + get + { + return m_CollisionMaterial; + } set { if (m_CollisionMaterial != value) @@ -131,24 +172,48 @@ namespace Obi /// public virtual bool surfaceCollisions { - get { return m_SurfaceCollisions; } + get + { + return m_SurfaceCollisions; + } set { if (value != m_SurfaceCollisions) { m_SurfaceCollisions = value; if (m_Solver != null) - m_Solver.dirtySimplices = true; + { + m_Solver.dirtySimplices |= simplexTypes; + } } } } + /// + /// Scale applied to this actor's particle masses. + /// + public float massScale + { + get + { + return m_MassScale; + } + set + { + if (Mathf.Abs(m_MassScale - value) > ObiUtils.epsilon) + SetMassScale(value); + } + } + /// /// Amount of particles allocated by this actor. /// public int particleCount { - get { return sourceBlueprint != null ? sourceBlueprint.particleCount : 0; } + get + { + return sourceBlueprint != null ? sourceBlueprint.particleCount : 0; + } } /// @@ -157,7 +222,23 @@ namespace Obi /// This will always be equal to or smaller than . public int activeParticleCount { - get { return m_ActiveParticleCount; } + get + { + return m_ActiveParticleCount != null ? m_ActiveParticleCount[0]:0; + } + } + + /// + /// Buffer of size 1 that contains the amount of active particles in use by this actor. + /// Useful to modify the amount of active particles from a compute shader. + /// + /// This will always be equal to or smaller than . + public ObiNativeIntList activeParticleCountBuffer + { + get + { + return m_ActiveParticleCount; + } } /// @@ -179,16 +260,18 @@ namespace Obi /// public virtual bool usesAnisotropicParticles { - get { return false; } + get + { + return false; + } } - /// - /// If true, it means external forces aren't applied to the particles directly. - /// - /// For instance, cloth uses aerodynamic constraints to do so, and fluid uses drag. - public virtual bool usesCustomExternalForces + public Oni.SimplexType simplexTypes { - get { return false; } + get + { + return (sourceBlueprint != null) ? sourceBlueprint.simplexTypes : Oni.SimplexType.Point; + } } /// @@ -225,7 +308,10 @@ namespace Obi /// /// Reference to the blueprint asset used by this actor. /// - public abstract ObiActorBlueprint sourceBlueprint { get; } + public abstract ObiActorBlueprint sourceBlueprint + { + get; + } /// /// Reference to the blueprint in use by this actor. @@ -261,6 +347,9 @@ namespace Obi protected virtual void Awake() { + m_ActiveParticleCount = new ObiNativeIntList(); + m_ActiveParticleCount.Add(0); + #if UNITY_EDITOR // Check if this script's GameObject is in a PrefabStage @@ -276,9 +365,7 @@ namespace Obi if (GetComponentInParent() == null) { // Add our own environment root and move it to the PrefabStage scene - var newParent = new GameObject("ObiSolver (Environment)", typeof(ObiSolver), - typeof(ObiLateFixedUpdater)); - newParent.GetComponent().solvers.Add(newParent.GetComponent()); + var newParent = new GameObject("ObiSolver (Environment)", typeof(ObiSolver)); UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(newParent, gameObject.scene); transform.root.parent = newParent.transform; } @@ -288,6 +375,9 @@ namespace Obi protected virtual void OnDestroy() { + m_ActiveParticleCount.Dispose(); + m_ActiveParticleCount = null; + if (m_BlueprintInstance != null) DestroyImmediate(m_BlueprintInstance); } @@ -299,6 +389,7 @@ namespace Obi solverBatchOffsets[i] = new List(); m_PinConstraints = new ObiPinConstraintsData(); + m_PinholeConstraints = new ObiPinholeConstraintsData(); // when an actor is enabled, grabs the first solver up its hierarchy, // initializes it (if not initialized) and gets added to it. @@ -314,6 +405,7 @@ namespace Obi protected virtual void OnValidate() { + UpdateCollisionMaterials(); } private void OnTransformParentChanged() @@ -329,10 +421,10 @@ namespace Obi { if (m_Solver != null) { - if (!m_Solver.AddActor(this)) - m_Solver = null; - else if (sourceBlueprint != null) + if (sourceBlueprint != null) sourceBlueprint.OnBlueprintGenerate += OnBlueprintRegenerate; + + m_Solver.AddActor(this); } } @@ -343,14 +435,15 @@ namespace Obi { if (m_Solver != null) { - m_Solver.RemoveActor(this); if (sourceBlueprint != null) sourceBlueprint.OnBlueprintGenerate -= OnBlueprintRegenerate; + + m_Solver.RemoveActor(this); } } /// - /// Forcibly changed the solver in charge of this actor + /// Forcibly changes the solver in charge of this actor /// /// The solver we want to put in charge of this actor. /// First it removes the actor from its current solver, then changes the actor's current solver and then readds it to this new solver. @@ -367,23 +460,75 @@ namespace Obi } } + /// + /// Sets the mass of all particles in the actor to their blueprint values, multiplied by a scale factor. + /// + /// new mass scale. + protected void SetMassScale(float scale) + { + if (Application.isPlaying && isLoaded && particleCount > 0) + { + scale = Mathf.Max(ObiUtils.epsilon, scale); + + for (int i = 0; i < particleCount; ++i) + { + int solverIndex = solverIndices[i]; + + if (m_Solver.invMasses[solverIndex] > 0) + m_Solver.invMasses[solverIndex] = sharedBlueprint.invMasses[i] / scale; + + if (m_Solver.invRotationalMasses[solverIndex] > 0 && sharedBlueprint.invRotationalMasses != null && i < sharedBlueprint.invRotationalMasses.Length) + m_Solver.invRotationalMasses[solverIndex] = sharedBlueprint.invRotationalMasses[i] / scale; + } + + UpdateParticleProperties(); + } + } + protected virtual void OnBlueprintRegenerate(ObiActorBlueprint blueprint) { - // Reload: + // Reload by removing the current blueprint from the solver, + // destroying the current blueprint instance if any, + // then adding the shared blueprint again. + RemoveFromSolver(); + + if (m_BlueprintInstance != null) + DestroyImmediate(m_BlueprintInstance); + AddToSolver(); + + OnBlueprintRegenerated?.Invoke(this, blueprint); } protected void UpdateCollisionMaterials() { - if (m_Solver != null && solverIndices != null) + if (isLoaded) { int index = m_CollisionMaterial != null ? m_CollisionMaterial.handle.index : -1; - for (int i = 0; i < solverIndices.Length; i++) - solver.collisionMaterials[solverIndices[i]] = index; + for (int i = 0; i < solverIndices.count; i++) + { + if (solverIndices[i] < solver.collisionMaterials.count) + solver.collisionMaterials[solverIndices[i]] = index; + } } } + public virtual void ProvideDeformableTriangles(ObiNativeIntList deformableTriangles, ObiNativeVector2List deformableUVs) + { + + } + + public virtual void ProvideDeformableEdges(ObiNativeIntList deformableEdges) + { + + } + + public virtual int GetDeformableEdgeCount() + { + return 0; + } + /// /// Copies all data (position, velocity, phase, etc) from one particle to another one. /// @@ -396,8 +541,8 @@ namespace Obi public virtual bool CopyParticle(int actorSourceIndex, int actorDestIndex) { if (!isLoaded || - actorSourceIndex < 0 || actorSourceIndex >= solverIndices.Length || - actorDestIndex < 0 || actorDestIndex >= solverIndices.Length) + actorSourceIndex < 0 || actorSourceIndex >= solverIndices.count || + actorDestIndex < 0 || actorDestIndex >= solverIndices.count) return false; int sourceIndex = solverIndices[actorSourceIndex]; @@ -405,14 +550,15 @@ namespace Obi // Copy solver data: m_Solver.prevPositions[destIndex] = m_Solver.prevPositions[sourceIndex]; - m_Solver.renderablePositions[destIndex] = m_Solver.renderablePositions[sourceIndex]; - m_Solver.startPositions[destIndex] = m_Solver.positions[destIndex] = m_Solver.positions[sourceIndex]; - m_Solver.startOrientations[destIndex] = - m_Solver.orientations[destIndex] = m_Solver.orientations[sourceIndex]; m_Solver.restPositions[destIndex] = m_Solver.restPositions[sourceIndex]; + m_Solver.endPositions[destIndex] = m_Solver.startPositions[destIndex] = m_Solver.positions[destIndex] = m_Solver.positions[sourceIndex]; + + m_Solver.prevOrientations[destIndex] = m_Solver.prevOrientations[sourceIndex]; m_Solver.restOrientations[destIndex] = m_Solver.restOrientations[sourceIndex]; + m_Solver.endOrientations[destIndex] = m_Solver.startOrientations[destIndex] = m_Solver.orientations[destIndex] = m_Solver.orientations[sourceIndex]; + m_Solver.velocities[destIndex] = m_Solver.velocities[sourceIndex]; - m_Solver.angularVelocities[destIndex] = m_Solver.velocities[sourceIndex]; + m_Solver.angularVelocities[destIndex] = m_Solver.angularVelocities[sourceIndex]; m_Solver.invMasses[destIndex] = m_Solver.invMasses[sourceIndex]; m_Solver.invRotationalMasses[destIndex] = m_Solver.invRotationalMasses[sourceIndex]; m_Solver.principalRadii[destIndex] = m_Solver.principalRadii[sourceIndex]; @@ -430,7 +576,7 @@ namespace Obi /// Position to teleport the particle to, expressed in solver space. public void TeleportParticle(int actorIndex, Vector3 position) { - if (!isLoaded || actorIndex < 0 || actorIndex >= solverIndices.Length) + if (!isLoaded || actorIndex < 0 || actorIndex >= solverIndices.count) return; int solverIndex = solverIndices[actorIndex]; @@ -438,7 +584,7 @@ namespace Obi Vector4 delta = (Vector4)position - m_Solver.positions[solverIndex]; m_Solver.positions[solverIndex] += delta; m_Solver.prevPositions[solverIndex] += delta; - m_Solver.renderablePositions[solverIndex] += delta; + m_Solver.endPositions[solverIndex] += delta; m_Solver.startPositions[solverIndex] += delta; } @@ -447,10 +593,10 @@ namespace Obi /// /// World space position to teleport the actor to. /// World space rotation to teleport the actor to. - public virtual void Teleport(Vector3 position, Quaternion rotation) + public virtual Matrix4x4 Teleport(Vector3 position, Quaternion rotation) { if (!isLoaded) - return; + return Matrix4x4.identity; // Subtract current transform position/rotation, then add new world space position/rotation. // Lastly, set the transform to the new position/rotation. @@ -463,20 +609,19 @@ namespace Obi Quaternion rotOffset = offset.rotation; - for (int i = 0; i < solverIndices.Length; i++) + for (int i = 0; i < solverIndices.count; i++) { int solverIndex = solverIndices[i]; m_Solver.positions[solverIndex] = - m_Solver.prevPositions[solverIndex] = - m_Solver.renderablePositions[solverIndex] = - m_Solver.startPositions[solverIndex] = - offset.MultiplyPoint3x4(m_Solver.positions[solverIndex]); + m_Solver.prevPositions[solverIndex] = + m_Solver.endPositions[solverIndex] = + m_Solver.startPositions[solverIndex] = offset.MultiplyPoint3x4(m_Solver.positions[solverIndex]); m_Solver.orientations[solverIndex] = - m_Solver.prevOrientations[solverIndex] = - m_Solver.renderableOrientations[solverIndex] = - m_Solver.startOrientations[solverIndex] = rotOffset * m_Solver.orientations[solverIndex]; + m_Solver.prevOrientations[solverIndex] = + m_Solver.endOrientations[solverIndex] = + m_Solver.startOrientations[solverIndex] = rotOffset * m_Solver.orientations[solverIndex]; m_Solver.velocities[solverIndex] = Vector4.zero; m_Solver.angularVelocities[solverIndex] = Vector4.zero; @@ -484,33 +629,38 @@ namespace Obi transform.position = position; transform.rotation = rotation; + + return offset; } protected virtual void SwapWithFirstInactiveParticle(int actorIndex) { // update solver indices: - m_Solver.particleToActor[solverIndices[actorIndex]].indexInActor = m_ActiveParticleCount; - m_Solver.particleToActor[solverIndices[m_ActiveParticleCount]].indexInActor = actorIndex; - - solverIndices.Swap(actorIndex, m_ActiveParticleCount); + m_Solver.particleToActor[solverIndices[actorIndex]].indexInActor = activeParticleCount; + m_Solver.particleToActor[solverIndices[activeParticleCount]].indexInActor = actorIndex; + solverIndices.Swap(actorIndex, activeParticleCount); } /// /// Activates one particle. /// - /// Index in the actor arrays of the particle we will activate. /// - /// True if the particle was inactive. False if the particle was already active. + /// True if a particle could be activated. False if there are no particles to activate. /// /// This operation preserves the relative order of all particles. - public bool ActivateParticle(int actorIndex) + public virtual bool ActivateParticle() { - if (IsParticleActive(actorIndex)) + if (activeParticleCount >= particleCount) return false; - SwapWithFirstInactiveParticle(actorIndex); - m_ActiveParticleCount++; + // set active particle radius W to 1. + var radii = m_Solver.principalRadii[solverIndices[activeParticleCount]]; + radii.w = 1; + m_Solver.principalRadii[solverIndices[activeParticleCount]] = radii; + + m_ActiveParticleCount[0]++; m_Solver.dirtyActiveParticles = true; + m_Solver.dirtySimplices |= simplexTypes; return true; } @@ -524,14 +674,21 @@ namespace Obi /// /// This operation does not preserve the relative order of other particles, because the last active particle will /// swap positions with the particle being deactivated. - public bool DeactivateParticle(int actorIndex) + public virtual bool DeactivateParticle(int actorIndex) { if (!IsParticleActive(actorIndex)) return false; - m_ActiveParticleCount--; + m_ActiveParticleCount[0]--; + + // set inactive particle W to zero, this allows renderers to ignore it. + var radii = m_Solver.principalRadii[solverIndices[actorIndex]]; + radii.w = 0; + m_Solver.principalRadii[solverIndices[actorIndex]] = radii; + SwapWithFirstInactiveParticle(actorIndex); m_Solver.dirtyActiveParticles = true; + m_Solver.dirtySimplices |= simplexTypes; return true; } @@ -543,9 +700,9 @@ namespace Obi /// /// True if the particle is active. False if the particle is inactive. /// - public bool IsParticleActive(int actorIndex) + public virtual bool IsParticleActive(int actorIndex) { - return actorIndex < m_ActiveParticleCount; + return actorIndex < activeParticleCount; } /// @@ -565,6 +722,27 @@ namespace Obi } } + /// + /// Updates particle phases in the solver at runtime, including or removing the self-collision flag. + /// + public virtual void SetDirectionalCollisions(bool dfCollisions) + { + if (m_Solver != null && Application.isPlaying && isLoaded) + { + for (int i = 0; i < particleCount; i++) + { + var norm = m_Solver.normals[solverIndices[i]]; + + if (dfCollisions) + norm.w = sharedBlueprint.restNormals[i].w; + else + norm.w = 0; + + m_Solver.normals[solverIndices[i]] = norm; + } + } + } + /// /// Updates particle phases in the solver at runtime, including or removing the one-sided flag. /// @@ -588,7 +766,7 @@ namespace Obi public void SetSimplicesDirty() { if (m_Solver != null) - m_Solver.dirtySimplices = true; + m_Solver.dirtySimplices |= simplexTypes; } /// @@ -601,7 +779,16 @@ namespace Obi public void SetConstraintsDirty(Oni.ConstraintType constraintType) { if (m_Solver != null) - m_Solver.dirtyConstraints |= (1 << (int)constraintType); + m_Solver.dirtyConstraints |= 1 << (int)constraintType; + } + + /// + /// Marks rendering dirty. + /// + public void SetRenderingDirty(Oni.RenderingSystemType rendererType) + { + if (m_Solver != null) + m_Solver.dirtyRendering |= (int)rendererType; } /// @@ -617,6 +804,8 @@ namespace Obi // pin constraints are a special case, because they're not stored in a blueprint. They are created at runtime at stored in the actor itself. if (type == Oni.ConstraintType.Pin) return m_PinConstraints; + if (type == Oni.ConstraintType.Pinhole) + return m_PinholeConstraints; if (sharedBlueprint != null) return sharedBlueprint.GetConstraintsByType(type); @@ -625,6 +814,7 @@ namespace Obi } + /// /// Call when some particle properties have been modified and need updating. /// @@ -680,9 +870,35 @@ namespace Obi return Quaternion.identity; } - /** - * - */ + + /// + /// Given a solver particle index, returns the rest position of that particle. + /// + /// Index of the particle in the solver arrays. + /// + /// The position of a given particle in world space. + /// + public Vector3 GetParticleRestPosition(int solverIndex) + { + if (isLoaded) + return m_Solver.restPositions[solverIndex]; + return Vector3.zero; + } + + /// + /// Given a solver particle index, returns the rest orientation of that particle. + /// + /// Index of the particle in the solver arrays. + /// + /// The orientation of a given particle in world space. + /// + public Quaternion GetParticleRestOrientation(int solverIndex) + { + if (isLoaded) + return m_Solver.restOrientations[solverIndex]; + return Quaternion.identity; + } + /// /// Given a solver particle index, returns the anisotropic frame of that particle in world space. /// @@ -694,19 +910,17 @@ namespace Obi { if (isLoaded && usesAnisotropicParticles) { - int baseIndex = solverIndex * 3; + b1 = m_Solver.transform.TransformDirection(m_Solver.renderableOrientations[solverIndex] * Vector3.right); + b2 = m_Solver.transform.TransformDirection(m_Solver.renderableOrientations[solverIndex] * Vector3.up); + b3 = m_Solver.transform.TransformDirection(m_Solver.renderableOrientations[solverIndex] * Vector3.forward); - b1 = m_Solver.transform.TransformDirection(m_Solver.anisotropies[baseIndex]); - b2 = m_Solver.transform.TransformDirection(m_Solver.anisotropies[baseIndex + 1]); - b3 = m_Solver.transform.TransformDirection(m_Solver.anisotropies[baseIndex + 2]); - - b1[3] = m_Solver.maxScale * m_Solver.anisotropies[baseIndex][3]; - b2[3] = m_Solver.maxScale * m_Solver.anisotropies[baseIndex + 1][3]; - b3[3] = m_Solver.maxScale * m_Solver.anisotropies[baseIndex + 2][3]; + b1[3] = m_Solver.maxScale * m_Solver.renderableRadii[solverIndex][0]; + b2[3] = m_Solver.maxScale * m_Solver.renderableRadii[solverIndex][1]; + b3[3] = m_Solver.maxScale * m_Solver.renderableRadii[solverIndex][2]; } else { - b1[3] = b2[3] = b3[3] = m_Solver.maxScale * m_Solver.principalRadii[solverIndex][0]; + b1[3] = b2[3] = b3[3] = m_Solver.maxScale * m_Solver.renderableRadii[solverIndex][0]; } } @@ -787,6 +1001,8 @@ namespace Obi m_Solver.invMasses[solverIndex] = invMass; m_Solver.invRotationalMasses[solverIndex] = invMass; } + + UpdateParticleProperties(); } } @@ -797,6 +1013,7 @@ namespace Obi /// Particles with infinite mass (invMass = 0) are ignored. public float GetMass(out Vector3 com) { + float actorMass = 0; com = Vector3.zero; @@ -829,92 +1046,22 @@ namespace Obi /// Type of "force" applied. public void AddForce(Vector3 force, ForceMode forceMode) { - Vector3 com; - float mass = GetMass(out com); + if (force.sqrMagnitude > Mathf.Epsilon) + bufferedForces.dirty = true; - if (!float.IsInfinity(mass)) - { - Vector4 bodyForce = force; - - switch (forceMode) - { - case ForceMode.Force: - { - bodyForce /= mass; - - for (int i = 0; i < solverIndices.Length; ++i) - m_Solver.externalForces[solverIndices[i]] += - bodyForce / m_Solver.invMasses[solverIndices[i]]; - } - break; - case ForceMode.Acceleration: - { - for (int i = 0; i < solverIndices.Length; ++i) - m_Solver.externalForces[solverIndices[i]] += - bodyForce / m_Solver.invMasses[solverIndices[i]]; - } - break; - case ForceMode.Impulse: - { - bodyForce /= mass; - - for (int i = 0; i < solverIndices.Length; ++i) - m_Solver.externalForces[solverIndices[i]] += - bodyForce / m_Solver.invMasses[solverIndices[i]] / Time.fixedDeltaTime; - } - break; - case ForceMode.VelocityChange: - { - for (int i = 0; i < solverIndices.Length; ++i) - m_Solver.externalForces[solverIndices[i]] += - bodyForce / m_Solver.invMasses[solverIndices[i]] / Time.fixedDeltaTime; - } - break; - } - } - } - - /// - /// change by bob - /// - /// - /// - /// - public void AddForceParticle(int index, Vector3 force, ForceMode forceMode) - { - float mass = GetMass(out Vector3 _); - if (float.IsInfinity(mass)) - return; - Vector4 vector4_1 = force; switch (forceMode) { case ForceMode.Force: - Vector4 vector4_2 = vector4_1 / mass; - ObiNativeVector4List externalForces1 = m_Solver.externalForces; - int solverIndex1 = solverIndices[index]; - externalForces1[solverIndex1] = externalForces1[solverIndex1] + - vector4_2 / m_Solver.invMasses[solverIndices[index]]; - break; - case ForceMode.Impulse: - Vector4 vector4_3 = vector4_1 / mass; - ObiNativeVector4List externalForces2 = m_Solver.externalForces; - int solverIndex2 = solverIndices[index]; - externalForces2[solverIndex2] = externalForces2[solverIndex2] + - vector4_3 / m_Solver.invMasses[solverIndices[index]] / - Time.fixedDeltaTime; - break; - case ForceMode.VelocityChange: - ObiNativeVector4List externalForces3 = m_Solver.externalForces; - int solverIndex3 = solverIndices[index]; - externalForces3[solverIndex3] = externalForces3[solverIndex3] + - vector4_1 / m_Solver.invMasses[solverIndices[index]] / - Time.fixedDeltaTime; + bufferedForces.force += (Vector4)force; break; case ForceMode.Acceleration: - ObiNativeVector4List externalForces4 = m_Solver.externalForces; - int solverIndex4 = solverIndices[index]; - externalForces4[solverIndex4] = externalForces4[solverIndex4] + - vector4_1 / m_Solver.invMasses[solverIndices[index]]; + bufferedForces.acceleration += (Vector4)force; + break; + case ForceMode.Impulse: + bufferedForces.impulse += (Vector4)force; + break; + case ForceMode.VelocityChange: + bufferedForces.velChange += (Vector4)force; break; } } @@ -926,90 +1073,55 @@ namespace Obi /// Type of "torque" applied. public void AddTorque(Vector3 force, ForceMode forceMode) { - Vector3 com; - float mass = GetMass(out com); + if (force.sqrMagnitude > Mathf.Epsilon) + bufferedForces.dirty = true; - if (!float.IsInfinity(mass)) + switch (forceMode) { - Vector3 bodyForce = force; - - switch (forceMode) - { - case ForceMode.Force: - { - bodyForce /= mass; - - for (int i = 0; i < solverIndices.Length; ++i) - { - Vector3 v = Vector3.Cross(bodyForce / m_Solver.invMasses[solverIndices[i]], - (Vector3)m_Solver.positions[solverIndices[i]] - com); - m_Solver.externalForces[solverIndices[i]] += new Vector4(v.x, v.y, v.z, 0); - } - } - break; - case ForceMode.Acceleration: - { - for (int i = 0; i < solverIndices.Length; ++i) - { - Vector3 v = Vector3.Cross(bodyForce / m_Solver.invMasses[solverIndices[i]], - (Vector3)m_Solver.positions[solverIndices[i]] - com); - m_Solver.externalForces[solverIndices[i]] += new Vector4(v.x, v.y, v.z, 0); - } - } - break; - case ForceMode.Impulse: - { - bodyForce /= mass; - - for (int i = 0; i < solverIndices.Length; ++i) - { - Vector3 v = Vector3.Cross( - bodyForce / m_Solver.invMasses[solverIndices[i]] / Time.fixedDeltaTime, - (Vector3)m_Solver.positions[solverIndices[i]] - com); - m_Solver.externalForces[solverIndices[i]] += new Vector4(v.x, v.y, v.z, 0); - } - } - break; - case ForceMode.VelocityChange: - { - for (int i = 0; i < solverIndices.Length; ++i) - { - Vector3 v = Vector3.Cross( - bodyForce / m_Solver.invMasses[solverIndices[i]] / Time.fixedDeltaTime, - (Vector3)m_Solver.positions[solverIndices[i]] - com); - m_Solver.externalForces[solverIndices[i]] += new Vector4(v.x, v.y, v.z, 0); - } - } - break; - } + case ForceMode.Force: + bufferedForces.angularForce += (Vector4)force; + break; + case ForceMode.Acceleration: + bufferedForces.angularAcceleration += (Vector4)force; + break; + case ForceMode.Impulse: + bufferedForces.angularImpulse += (Vector4)force; + break; + case ForceMode.VelocityChange: + bufferedForces.angularVelChange += (Vector4)force; + break; } } #region Blueprints - private void LoadBlueprintParticles(ObiActorBlueprint bp, int groupID) + private void LoadBlueprintParticles(ObiActorBlueprint bp) { + Matrix4x4 l2sTransform = actorLocalToSolverMatrix; Quaternion l2sRotation = l2sTransform.rotation; - for (int i = 0; i < solverIndices.Length; i++) + for (int i = 0; i < solverIndices.count; i++) { int k = solverIndices[i]; if (bp.positions != null && i < bp.positions.Length) { - m_Solver.startPositions[k] = m_Solver.prevPositions[k] = - m_Solver.positions[k] = l2sTransform.MultiplyPoint3x4(bp.positions[i]); + m_Solver.endPositions[k] = m_Solver.startPositions[k] = m_Solver.prevPositions[k] = m_Solver.positions[k] = l2sTransform.MultiplyPoint3x4(bp.positions[i]); m_Solver.renderablePositions[k] = l2sTransform.MultiplyPoint3x4(bp.positions[i]); } if (bp.orientations != null && i < bp.orientations.Length) { - m_Solver.startOrientations[k] = m_Solver.prevOrientations[k] = - m_Solver.orientations[k] = l2sRotation * bp.orientations[i]; + m_Solver.endOrientations[k] = m_Solver.startOrientations[k] = m_Solver.prevOrientations[k] = m_Solver.orientations[k] = l2sRotation * bp.orientations[i]; m_Solver.renderableOrientations[k] = l2sRotation * bp.orientations[i]; } + // for softbodies, xyz values store SDF normal in particle's local space: needs to be transformed using particle orientation during simulation. + // w value stores sparse SDF if < 0. + if (bp.restNormals != null && i < bp.restNormals.Length) + m_Solver.normals[k] = bp.restNormals[i]; + if (bp.restPositions != null && i < bp.restPositions.Length) m_Solver.restPositions[k] = bp.restPositions[i]; @@ -1023,13 +1135,22 @@ namespace Obi m_Solver.angularVelocities[k] = l2sTransform.MultiplyVector(bp.angularVelocities[i]); if (bp.invMasses != null && i < bp.invMasses.Length) - m_Solver.invMasses[k] = bp.invMasses[i]; + m_Solver.invMasses[k] = bp.invMasses[i] / m_MassScale; if (bp.invRotationalMasses != null && i < bp.invRotationalMasses.Length) - m_Solver.invRotationalMasses[k] = bp.invRotationalMasses[i]; + m_Solver.invRotationalMasses[k] = bp.invRotationalMasses[i] / m_MassScale; if (bp.principalRadii != null && i < bp.principalRadii.Length) - m_Solver.principalRadii[k] = bp.principalRadii[i]; + { + Vector4 radii = bp.principalRadii[i]; + radii.w = i < sourceBlueprint.activeParticleCount ? 1 : 0; + m_Solver.principalRadii[k] = radii; + } + else + { + // need inactive emitter particles to zero as their flag. + m_Solver.principalRadii[k] = Vector4.zero; + } if (bp.filters != null && i < bp.filters.Length) m_Solver.filters[k] = bp.filters[i]; @@ -1040,20 +1161,27 @@ namespace Obi m_Solver.phases[k] = ObiUtils.MakePhase(groupID, 0); } - m_ActiveParticleCount = sourceBlueprint.activeParticleCount; + m_ActiveParticleCount[0] = sourceBlueprint.activeParticleCount; m_Solver.dirtyActiveParticles = true; - m_Solver.dirtySimplices = true; + m_Solver.dirtyDeformableTriangles = true; + m_Solver.dirtyDeformableEdges = true; + m_Solver.dirtySimplices |= simplexTypes; + m_Solver.dirtyConstraints |= ~0; // Push collision materials: UpdateCollisionMaterials(); + } private void UnloadBlueprintParticles() { // Update active particles. - m_ActiveParticleCount = 0; + m_ActiveParticleCount[0] = 0; m_Solver.dirtyActiveParticles = true; - m_Solver.dirtySimplices = true; + m_Solver.dirtyDeformableTriangles = true; + m_Solver.dirtyDeformableEdges = true; + m_Solver.dirtySimplices |= simplexTypes; + m_Solver.dirtyConstraints |= ~0; } /// @@ -1073,16 +1201,13 @@ namespace Obi { int solverIndex = solverIndices[i]; - solver.renderablePositions[solverIndex] = solver.positions[solverIndex] = - l2sTransform.MultiplyPoint3x4(sourceBlueprint.positions[i]); + solver.startPositions[solverIndex] = solver.endPositions[solverIndex] = solver.positions[solverIndex] = l2sTransform.MultiplyPoint3x4(sourceBlueprint.positions[i]); solver.velocities[solverIndex] = l2sTransform.MultiplyVector(sourceBlueprint.velocities[i]); if (usesOrientedParticles) { - solver.renderableOrientations[solverIndex] = solver.orientations[solverIndex] = - l2sRotation * sourceBlueprint.orientations[i]; - solver.angularVelocities[solverIndex] = - l2sTransform.MultiplyVector(sourceBlueprint.angularVelocities[i]); + solver.startOrientations[solverIndex] = solver.endOrientations[solverIndex] = solver.orientations[solverIndex] = l2sRotation * sourceBlueprint.orientations[i]; + solver.angularVelocities[solverIndex] = l2sTransform.MultiplyVector(sourceBlueprint.angularVelocities[i]); } } } @@ -1092,42 +1217,46 @@ namespace Obi #region State + /// /// Resets the position and velocity of all particles, to the values stored in the blueprint. /// /// The blueprint that we want to fill with current particle data. /// Note that this will not resize the blueprint's data arrays, and that it does not perform range checking. For this reason, /// you must supply a blueprint large enough to store all particles' data. - public void SaveStateToBlueprint(ObiActorBlueprint bp) + public bool SaveStateToBlueprint(ObiActorBlueprint bp) { - if (bp == null) - return; + if (bp == null || !m_Loaded) + return false; Matrix4x4 l2sTransform = actorLocalToSolverMatrix.inverse; Quaternion l2sRotation = l2sTransform.rotation; - for (int i = 0; i < solverIndices.Length; i++) + // blueprint might have been regenerated, and reduced its size: + for (int i = 0; i < solverIndices.count; i++) { int k = solverIndices[i]; - if (m_Solver.positions != null && k < m_Solver.positions.count) + if (bp.positions != null && m_Solver.positions != null && k < m_Solver.positions.count && i < bp.positions.Length) bp.positions[i] = l2sTransform.MultiplyPoint3x4(m_Solver.positions[k]); - if (m_Solver.velocities != null && k < m_Solver.velocities.count) + if (bp.velocities != null && m_Solver.velocities != null && k < m_Solver.velocities.count && i < bp.velocities.Length) bp.velocities[i] = l2sTransform.MultiplyVector(m_Solver.velocities[k]); } + + return true; } protected void StoreState() { - DestroyImmediate(state); - state = Instantiate(sourceBlueprint); - SaveStateToBlueprint(state); + DestroyImmediate(m_State); + m_State = Instantiate(sourceBlueprint); + SaveStateToBlueprint(m_State); } public void ClearState() { - DestroyImmediate(state); + DestroyImmediate(m_State); } #endregion @@ -1135,104 +1264,119 @@ namespace Obi #region Solver callbacks /// - /// Loads this actor's blueprint into a given solver. Automatically called by . + /// Loads this actor's blueprint into the current solver. Automatically called by . /// - public virtual void LoadBlueprint(ObiSolver solver) + internal virtual void LoadBlueprint() { var bp = sharedBlueprint; // in case we have temporary state, load that instead of the original blueprint. if (Application.isPlaying) { - bp = state != null ? state : sourceBlueprint; + bp = m_State != null ? m_State : sourceBlueprint; } m_Loaded = true; - LoadBlueprintParticles(bp, solver.actors.Count); - solver.dirtyConstraints |= ~0; + LoadBlueprintParticles(bp); - if (OnBlueprintLoaded != null) - OnBlueprintLoaded(this, null); + OnBlueprintLoaded?.Invoke(this, bp); } /// /// Unloads this actor's blueprint from a given solver. Automatically called by . /// - public virtual void UnloadBlueprint(ObiSolver solver) + internal virtual void UnloadBlueprint() { // instantiate blueprint and store current state in the instance: if (Application.isPlaying) - { StoreState(); - } m_Loaded = false; // unload the blueprint. - solver.dirtyConstraints |= ~0; UnloadBlueprintParticles(); - if (OnBlueprintUnloaded != null) - OnBlueprintUnloaded(this, null); + OnBlueprintUnloaded?.Invoke(this, sharedBlueprint); } - public virtual void PrepareFrame() + public virtual void SimulationStart(float timeToSimulate, float substepTime) { - if (OnPrepareFrame != null) - OnPrepareFrame(this); + OnSimulationStart?.Invoke(this, timeToSimulate, substepTime); + + // Apply any buffered forces/torques: + if (bufferedForces.dirty) + { + float mass = GetMass(out Vector3 com); + + if (!float.IsInfinity(mass)) + { + Vector4 accum; + foreach (var p in solverIndices) + { + accum = bufferedForces.force / m_Solver.invMasses[p] / mass; + accum += bufferedForces.acceleration / m_Solver.invMasses[p]; + accum += bufferedForces.impulse / m_Solver.invMasses[p] / mass / timeToSimulate; + accum += bufferedForces.velChange / m_Solver.invMasses[p] / timeToSimulate; + m_Solver.externalForces[p] += accum; + + accum = bufferedForces.angularForce / m_Solver.invMasses[p] / mass; + accum += bufferedForces.angularAcceleration / m_Solver.invMasses[p]; + accum += bufferedForces.angularImpulse / m_Solver.invMasses[p] / mass / timeToSimulate; + accum += bufferedForces.angularVelChange / m_Solver.invMasses[p] / timeToSimulate; + m_Solver.externalForces[p] += (Vector4)Vector3.Cross(accum, (Vector3)m_Solver.positions[p] - com); + } + } + + bufferedForces.Clear(); + } } - public virtual void PrepareStep(float stepTime) + public virtual void CollisionDetectionStart(float simulatedTime, float substepTime) { - if (OnPrepareStep != null) - OnPrepareStep(this, stepTime); + OnCollisionDetectionStart?.Invoke(this, simulatedTime, substepTime); } - public virtual void BeginStep(float stepTime) + public virtual void SubstepsStart(float simulatedTime, float substepTime) { - if (OnBeginStep != null) - OnBeginStep(this, stepTime); + OnSubstepsStart?.Invoke(this, simulatedTime, substepTime); } - public virtual void Substep(float substepTime) + public virtual void SimulationEnd(float simulatedTime, float substepTime) { - if (OnSubstep != null) - OnSubstep(this, substepTime); + OnSimulationEnd?.Invoke(this, simulatedTime, substepTime); } - public virtual void EndStep(float substepTime) + public virtual void RequestReadback() { - if (OnEndStep != null) - OnEndStep(this, substepTime); + OnRequestReadback?.Invoke(this); } - public virtual void Interpolate() + public virtual void Interpolate(float simulatedTime, float substepTime) { - // Update particle renderable positions/orientations in the solver: + // Update particle positions/orientations in the solver: if (!Application.isPlaying && isLoaded) { Matrix4x4 l2sTransform = actorLocalToSolverMatrix; Quaternion l2sRotation = l2sTransform.rotation; - for (int i = 0; i < solverIndices.Length; i++) + for (int i = 0; i < solverIndices.count; i++) { int k = solverIndices[i]; - if (sourceBlueprint.positions != null && i < sourceBlueprint.positions.Length) + if (sourceBlueprint.positions != null && i < sourceBlueprint.positions.Length) { - m_Solver.renderablePositions[k] = l2sTransform.MultiplyPoint3x4(sourceBlueprint.positions[i]); + m_Solver.renderablePositions[k] = m_Solver.positions[k] = m_Solver.startPositions[k] = m_Solver.endPositions[k] = l2sTransform.MultiplyPoint3x4(sourceBlueprint.positions[i]); } if (sourceBlueprint.orientations != null && i < sourceBlueprint.orientations.Length) { - m_Solver.renderableOrientations[k] = l2sRotation * sourceBlueprint.orientations[i]; + m_Solver.renderableOrientations[k] = m_Solver.orientations[k] = m_Solver.startOrientations[k] = m_Solver.endOrientations[k] = l2sRotation * sourceBlueprint.orientations[i]; } } } - if (OnInterpolate != null) - OnInterpolate(this); + OnInterpolate?.Invoke(this, simulatedTime, substepTime); } public virtual void OnSolverVisibilityChanged(bool visible) @@ -1240,5 +1384,8 @@ namespace Obi } #endregion + + } -} \ No newline at end of file +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs index 0c4b373cb..6a94fc9db 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs @@ -10,7 +10,7 @@ namespace Obi { public class BurstBackend : IObiBackend { -#region Solver + #region Solver public ISolverImpl CreateSolver(ObiSolver solver, int capacity) { return new BurstSolverImpl(solver); @@ -20,8 +20,7 @@ namespace Obi if (solver != null) solver.Destroy(); } -#endregion - + #endregion } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs index d25a5ba29..baaa099ab 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs @@ -39,7 +39,9 @@ namespace Obi [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float4 DifferentiateAngular(quaternion rotation, quaternion prevRotation, float dt) { - return new float4((math.mul(rotation, math.inverse(prevRotation)).value * 2.0f / dt).xyz, 0); + quaternion deltaq = math.mul(rotation, math.inverse(prevRotation)); + float sign = deltaq.value.w >= 0 ? 1 : -1; + return new float4(sign * deltaq.value.xyz * 2.0f / dt, 0); } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs index 189ccdd8b..df3caa35c 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs @@ -5,22 +5,16 @@ namespace Obi { public class BurstJobHandle : IObiJobHandle { - private JobHandle handle = new JobHandle(); - - public BurstJobHandle SetHandle(JobHandle newHandle) - { - handle = newHandle; - return this; - } + public JobHandle jobHandle { get; set; } = new JobHandle(); public void Complete() { - handle.Complete(); + jobHandle.Complete(); } public void Release() { - handle = new JobHandle(); + jobHandle = new JobHandle(); } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstMath.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstMath.cs index e333ae55d..e683dce37 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstMath.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/BurstMath.cs @@ -1,16 +1,17 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System; -using System.Collections.Generic; -using UnityEngine; -using Unity.Collections; -using Unity.Jobs; -using Unity.Mathematics; -using Unity.Burst; -using System.Runtime.CompilerServices; +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using System.Collections.Generic; +using UnityEngine; +using Unity.Collections; +using Unity.Jobs; +using Unity.Mathematics; +using Unity.Burst; +using System.Runtime.CompilerServices; using Unity.Collections.LowLevel.Unsafe; +using System.Threading; -namespace Obi -{ +namespace Obi +{ public static class BurstMath { @@ -19,23 +20,83 @@ namespace Obi public const float one = 1; public static readonly float golden = (math.sqrt(5.0f) + 1) / 2.0f; - // multiplies a column vector by a row vector. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float3x3 multrnsp(float4 column, float4 row) + public static unsafe void AddRange(this NativeList dst, U[] array) where T : unmanaged where U : unmanaged { - return new float3x3(column[0] * row[0], column[0] * row[1], column[0] * row[2], - column[1] * row[0], column[1] * row[1], column[1] * row[2], - column[2] * row[0], column[2] * row[1], column[2] * row[2]); + var tsize = sizeof(T); + var usize = sizeof(U); + + if (tsize == usize) + { + int dstIndex = dst.Length; + dst.ResizeUninitialized(dst.Length + array.Length); + + fixed (U* srcPtr = array) + { + var dstPtr = (T*)dst.GetUnsafePtr() + dstIndex; + UnsafeUtility.MemCpy(dstPtr, srcPtr, usize * array.Length); + } + } + } + + public static unsafe void AddReplicate(this NativeList dst, U value, int length) where T : unmanaged where U : unmanaged + { + var tsize = sizeof(T); + var usize = sizeof(U); + + if (tsize == usize) + { + int dstIndex = dst.Length; + dst.ResizeUninitialized(dst.Length + length); + + var dstPtr = (T*)dst.GetUnsafePtr() + dstIndex; + var srcPtr = UnsafeUtility.AddressOf(ref value); + UnsafeUtility.MemCpyReplicate(dstPtr, srcPtr, tsize, length); + } + } + + public static float AtomicAdd(ref float location, float value) + { + float newCurrentValue = location; + while (true) + { + float currentValue = newCurrentValue; + float newValue = currentValue + value; + newCurrentValue = Interlocked.CompareExchange(ref location, newValue, currentValue); + if (newCurrentValue.Equals(currentValue)) + return newValue; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe static void AtomicAdd(NativeArray array, int p, float4 data) + { + float4* arr = (float4*)array.GetUnsafePtr(); + AtomicAdd(ref arr[p].x, data.x); + AtomicAdd(ref arr[p].y, data.y); + AtomicAdd(ref arr[p].z, data.z); + AtomicAdd(ref arr[p].w, data.w); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public unsafe static void AtomicAdd(NativeArray array, int p, float data) + { + float* arr = (float*)array.GetUnsafePtr(); + AtomicAdd(ref arr[p], data); } // multiplies a column vector by a row vector. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float4x4 multrnsp4(float4 column, float4 row) + public static float3x3 multrnsp(in float4 column, in float4 row) { - return new float4x4(column[0] * row[0], column[0] * row[1], column[0] * row[2], 0, - column[1] * row[0], column[1] * row[1], column[1] * row[2], 0, - column[2] * row[0], column[2] * row[1], column[2] * row[2], 0, - 0, 0, 0, 1); + return new float3x3(column.xyz * row[0], column.xyz * row[1], column.xyz * row[2]); + } + + // multiplies a column vector by a row vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4x4 multrnsp4(in float4 column, float4 row) + { + row[3] = 0; + return new float4x4(column * row[0], column * row[1], column * row[2], float4.zero); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -47,6 +108,33 @@ namespace Obi return math.dot(onto, vector) * onto / len; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float3 project(this float3 vector, float3 onto) + { + float len = math.lengthsq(onto); + if (len < epsilon) + return float3.zero; + return math.dot(onto, vector) * onto / len; + } + + /*[MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 GetInvParticleInertiaTensor(float4 principalRadii, float invRotationalMass) + { + float4 sqrRadii = principalRadii * principalRadii; + return new float4(5 * invRotationalMass / math.max(new float3(sqrRadii[1] + sqrRadii[2], + sqrRadii[0] + sqrRadii[2], + sqrRadii[0] + sqrRadii[1]), epsilon), 0); + }*/ + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 GetParticleInertiaTensor(float4 principalRadii, float invRotationalMass) + { + float4 sqrRadii = principalRadii * principalRadii; + return 0.2f / (invRotationalMass + epsilon) * new float4(sqrRadii[1] + sqrRadii[2], + sqrRadii[0] + sqrRadii[2], + sqrRadii[0] + sqrRadii[1], 0); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float4x4 TransformInertiaTensor(float4 tensor, quaternion rotation) { @@ -83,30 +171,41 @@ namespace Obi NativeArray rigidbodies, NativeArray linearDeltas, NativeArray angularDeltas, - BurstAffineTransform solverToWorld) + BurstInertialFrame solverToWorld) { float4 linear = rigidbodies[rigidbodyIndex].velocity + linearDeltas[rigidbodyIndex]; float4 angular = rigidbodies[rigidbodyIndex].angularVelocity + angularDeltas[rigidbodyIndex]; - float4 r = solverToWorld.TransformPoint(point) - rigidbodies[rigidbodyIndex].com; + float4 r = solverToWorld.frame.TransformPoint(point) - rigidbodies[rigidbodyIndex].com; - // Point is assumed to be expressed in solver space. Since rigidbodies are expressed in world space, we need to convert the - // point to world space, and convert the resulting velocity back to solver space. - return solverToWorld.InverseTransformVector(linear + new float4(math.cross(angular.xyz, r.xyz), 0)); + // calculate rigidbody velocity: + float4 wsRigidbodyVelocity = linear + new float4(math.cross(angular.xyz, r.xyz), 0); + + // calculate solver velocity: + float4 wsSolverVelocity = solverToWorld.velocity + new float4(math.cross(solverToWorld.angularVelocity.xyz, point.xyz), 0); + + // convert the resulting velocity back to solver space: + return solverToWorld.frame.InverseTransformVector(wsRigidbodyVelocity - wsSolverVelocity); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float4 GetRigidbodyVelocityAtPoint(int rigidbodyIndex, float4 point, NativeArray rigidbodies, - BurstAffineTransform solverToWorld) + BurstInertialFrame solverToWorld) { float4 linear = rigidbodies[rigidbodyIndex].velocity; float4 angular = rigidbodies[rigidbodyIndex].angularVelocity; - float4 r = solverToWorld.TransformPoint(point) - rigidbodies[rigidbodyIndex].com; + float4 r = solverToWorld.frame.TransformPoint(point) - rigidbodies[rigidbodyIndex].com; + + // calculate rigidbody velocity: + float4 wsRigidbodyVelocity = linear + new float4(math.cross(angular.xyz, r.xyz), 0); + + // calculate solver velocity: + float4 wsSolverVelocity = solverToWorld.velocity + new float4(math.cross(solverToWorld.angularVelocity.xyz, point.xyz), 0); // Point is assumed to be expressed in solver space. Since rigidbodies are expressed in world space, we need to convert the // point to world space, and convert the resulting velocity back to solver space. - return solverToWorld.InverseTransformVector(linear + new float4(math.cross(angular.xyz, r.xyz), 0)); + return solverToWorld.frame.InverseTransformVector(wsRigidbodyVelocity - wsSolverVelocity); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -120,8 +219,12 @@ namespace Obi { float4 impulseWS = solverToWorld.TransformVector(impulse); float4 r = solverToWorld.TransformPoint(point) - rigidbodies[rigidbodyIndex].com; - linearDeltas[rigidbodyIndex] += rigidbodies[rigidbodyIndex].inverseMass * impulseWS; - angularDeltas[rigidbodyIndex] += math.mul(rigidbodies[rigidbodyIndex].inverseInertiaTensor, new float4(math.cross(r.xyz, impulseWS.xyz), 0)); + + float4 linearDelta = rigidbodies[rigidbodyIndex].inverseMass * impulseWS; + float4 angularDelta = math.mul(rigidbodies[rigidbodyIndex].inverseInertiaTensor, new float4(math.cross(r.xyz, impulseWS.xyz), 0)); + + AtomicAdd(linearDeltas, rigidbodyIndex, linearDelta); + AtomicAdd(angularDeltas, rigidbodyIndex, angularDelta); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -137,7 +240,7 @@ namespace Obi // convert quaternion delta to angular acceleration: quaternion newRotation = math.normalize(new quaternion(rotationWS.value + deltaWS.value)); - angularDeltas[rigidbodyIndex] += BurstIntegration.DifferentiateAngular(newRotation, rotationWS, dt); + AtomicAdd(angularDeltas, rigidbodyIndex, BurstIntegration.DifferentiateAngular(newRotation, rotationWS, dt)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -147,6 +250,15 @@ namespace Obi if (dot < 0) normal -= 2 * dot * forward; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void OneSidedNormal2(float4 xij, ref float4 nij) + { + float dot = math.dot(xij.xyz, nij.xyz); + if (dot < 0) + nij = xij - 2 * dot * nij; + else nij = xij; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float EllipsoidRadius(float4 normSolverDirection, quaternion orientation, float3 radii) { @@ -157,15 +269,20 @@ namespace Obi public static quaternion ExtractRotation(float4x4 matrix, quaternion rotation, int iterations) { - float4x4 R; + return ExtractRotation((float3x3)matrix, rotation, iterations); + } + + public static quaternion ExtractRotation(float3x3 matrix, quaternion rotation, int iterations) + { + float3x3 R; for (int i = 0; i < iterations; ++i) { - R = rotation.toMatrix(); - float3 omega = (math.cross(R.c0.xyz, matrix.c0.xyz) + math.cross(R.c1.xyz, matrix.c1.xyz) + math.cross(R.c2.xyz, matrix.c2.xyz)) / - (math.abs(math.dot(R.c0.xyz, matrix.c0.xyz) + math.dot(R.c1.xyz, matrix.c1.xyz) + math.dot(R.c2.xyz, matrix.c2.xyz)) + BurstMath.epsilon); + R = rotation.toMatrix3(); + float3 omega = (math.cross(R.c0, matrix.c0) + math.cross(R.c1, matrix.c1) + math.cross(R.c2, matrix.c2)) / + (math.abs(math.dot(R.c0, matrix.c0) + math.dot(R.c1, matrix.c1) + math.dot(R.c2, matrix.c2)) + epsilon); float w = math.length(omega); - if (w < BurstMath.epsilon) + if (w < epsilon) break; rotation = math.normalize(math.mul(quaternion.AxisAngle((1.0f / w) * omega, w), rotation)); @@ -203,6 +320,25 @@ namespace Obi 0, 0, 0, 1); } + public static float3x3 toMatrix3(this quaternion q) + { + float xx = q.value.x * q.value.x; + float xy = q.value.x * q.value.y; + float xz = q.value.x * q.value.z; + float xw = q.value.x * q.value.w; + + float yy = q.value.y * q.value.y; + float yz = q.value.y * q.value.z; + float yw = q.value.y * q.value.w; + + float zz = q.value.z * q.value.z; + float zw = q.value.z * q.value.w; + + return new float3x3(1 - 2 * (yy + zz), 2 * (xy - zw), 2 * (xz + yw), + 2 * (xy + zw), 1 - 2 * (xx + zz), 2 * (yz - xw), + 2 * (xz - yw), 2 * (yz + xw), 1 - 2 * (xx + yy)); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float4x4 asDiagonal(this float4 v) { @@ -212,6 +348,11 @@ namespace Obi 0, 0, 0, v.w); } + /** * Modulo operator that also follows intuition for negative arguments. That is , -1 mod 3 = 2, not -1. */ + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float3 nfmod(float3 a, float3 b) { return a - b * math.floor(a / b); } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float nfmod(float a, float b) { return a - b * math.floor(a / b); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float4 diagonal(this float4x4 value) { @@ -262,8 +403,8 @@ namespace Obi V.c0 = V0; V.c1 = V1; V.c2 = V2; - } - + } + static float3 unitOrthogonal(this float3 input) { // Find a vector to cross() the input with. @@ -278,9 +419,9 @@ namespace Obi float invnm = 1 / math.length(input.yz); return new float3(0, -input.z * invnm, input.y * invnm); } - } - - // D is symmetric, S is an eigen value + } + + // D is symmetric, S is an eigen value static float3 EigenVector(float3x3 D, float S) { // Compute a cofactor matrix of D - sI. @@ -317,7 +458,8 @@ namespace Obi { V[0] = 1; return V; } - else if (index == 0) + + if (index == 0) { V[0] = c0p[0]; V[1] = c1p[0]; V[2] = c2p[0]; } @@ -330,8 +472,8 @@ namespace Obi V = c2p; } return math.normalize(V); - } - + } + static float3 EigenValues(float3x3 D) { float one_third = 1 / 3.0f; @@ -390,8 +532,8 @@ namespace Obi } return new float3(e2, e1, e0); - } - + } + public struct CachedTri { public float4 vertex; @@ -412,8 +554,8 @@ namespace Obi data[2] = math.dot(edge1, edge1); data[3] = data[0] * data[2] - data[1] * data[1]; } - } - + } + public static float4 NearestPointOnTri(in CachedTri tri, float4 p, out float4 bary) @@ -576,7 +718,21 @@ namespace Obi float4 ap = p - a; float4 ab = b - a; - mu = math.dot(ap, ab) / math.dot(ab, ab); + mu = math.dot(ap, ab) / (math.dot(ab, ab) + epsilon); + + if (clampToSegment) + mu = math.saturate(mu); + + return a + ab * mu; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float3 NearestPointOnEdge(float3 a, float3 b, float3 p, out float mu, bool clampToSegment = true) + { + float3 ap = p - a; + float3 ab = b - a; + + mu = math.dot(ap, ab) / (math.dot(ab, ab) + epsilon); if (clampToSegment) mu = math.saturate(mu); @@ -679,6 +835,178 @@ namespace Obi return center; } + // https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/ + + // "Insert" a 0 bit after each of the 16 low bits of x + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint Part1By1(uint x) + { + x &= 0x0000ffff; // x = ---- ---- ---- ---- fedc ba98 7654 3210 + x = (x ^ (x << 8)) & 0x00ff00ff; // x = ---- ---- fedc ba98 ---- ---- 7654 3210 + x = (x ^ (x << 4)) & 0x0f0f0f0f; // x = ---- fedc ---- ba98 ---- 7654 ---- 3210 + x = (x ^ (x << 2)) & 0x33333333; // x = --fe --dc --ba --98 --76 --54 --32 --10 + x = (x ^ (x << 1)) & 0x55555555; // x = -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 + return x; + } + + + // "Insert" two 0 bits after each of the 10 low bits of x + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint Part1By2(uint x) + { + x &= 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210 + x = (x ^ (x << 16)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210 + x = (x ^ (x << 8)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210 + x = (x ^ (x << 4)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10 + x = (x ^ (x << 2)) & 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 + return x; + } + + // Inverse of Part1By1 - "delete" all odd-indexed bits + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint Compact1By1(uint x) + { + x &= 0x55555555; // x = -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 + x = (x ^ (x >> 1)) & 0x33333333; // x = --fe --dc --ba --98 --76 --54 --32 --10 + x = (x ^ (x >> 2)) & 0x0f0f0f0f; // x = ---- fedc ---- ba98 ---- 7654 ---- 3210 + x = (x ^ (x >> 4)) & 0x00ff00ff; // x = ---- ---- fedc ba98 ---- ---- 7654 3210 + x = (x ^ (x >> 8)) & 0x0000ffff; // x = ---- ---- ---- ---- fedc ba98 7654 3210 + return x; + } + + // Inverse of Part1By2 - "delete" all bits not at positions divisible by 3 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint Compact1By2(uint x) + { + x &= 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 + x = (x ^ (x >> 2)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10 + x = (x ^ (x >> 4)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210 + x = (x ^ (x >> 8)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210 + x = (x ^ (x >> 16)) & 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210 + return x; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint EncodeMorton2(uint2 coords) + { + return (Part1By1(coords.y) << 1) + Part1By1(coords.x); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint EncodeMorton3(uint3 coords) + { + return (Part1By2(coords.z) << 2) + (Part1By2(coords.y) << 1) + Part1By2(coords.x); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint3 DecodeMorton2(uint code) + { + return new uint3(Compact1By1(code >> 0), Compact1By1(code >> 1), 0); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint3 DecodeMorton3(uint code) + { + return new uint3(Compact1By2(code >> 0), Compact1By2(code >> 1), Compact1By2(code >> 2)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 UnpackFloatRGBA(float v) + { + uint rgba = math.asuint(v); + float r = ((rgba & 0xff000000) >> 24) / 255f; + float g = ((rgba & 0x00ff0000) >> 16) / 255f; + float b = ((rgba & 0x0000ff00) >> 8) / 255f; + float a = (rgba & 0x000000ff) / 255f; + return new float4(r, g, b, a); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float PackFloatRGBA(float4 enc) + { + uint rgba = ((uint)(enc.x * 255f) << 24) + + ((uint)(enc.y * 255f) << 16) + + ((uint)(enc.z * 255f) << 8) + + (uint)(enc.w * 255f); + return math.asfloat(rgba); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float2 UnpackFloatRG(float v) + { + uint rgba = math.asuint(v); + float r = ((rgba & 0xffff0000) >> 16) / 65535f; + float g = (rgba & 0x0000ffff) / 65535f; + return new float2(r, g); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float PackFloatRG(float2 enc) + { + uint rgba = ((uint)(enc.x * 65535f) << 16) + + (uint)(enc.y * 65535f); + return math.asfloat(rgba); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static float2 OctWrap(float2 v) + { + return (1.0f - math.abs(v.yx)) * new float2(v.x >= 0.0f ? 1.0f : -1.0f, v.y >= 0.0f ? 1.0f : -1.0f); + } + + // use octahedral encoding to reduce to 2 coords, then pack them as two 16 bit values in a 32 bit float. + public static float OctEncode(float3 n) + { + n /= math.abs(n.x) + math.abs(n.y) + math.abs(n.z); + n.xy = n.z >= 0.0 ? n.xy : OctWrap(n.xy); + n.xy = n.xy * 0.5f + 0.5f; + + uint nx = (uint)(n.x * 0xffff); + uint ny = (uint)(n.y * 0xffff); + return math.asfloat((nx << 16) | (ny & 0xffff)); + } + + public static float3 OctDecode(float k) + { + uint d = math.asuint(k); + float2 f = new float2((d >> 16) / 65535f, (d & 0xffff) / 65535f) * 2f - 1f; + + float3 n = new float3(f.x, f.y, 1.0f - math.abs(f.x) - math.abs(f.y)); + float t = math.saturate(-n.z); + n.x += n.x >= 0.0f ? -t : t; + n.y += n.y >= 0.0f ? -t : t; + return math.normalize(n); + } + + public static float Remap01(float value, float min_, float max_) + { + return (math.min(value, max_) - math.min(value, min_)) / (max_ - min_); + } + + public static float3 Sort(this float3 f) + { + float aux; + if (f.x > f.y) + { + aux = f.x; + f.x = f.y; + f.y = aux; + } + if (f.x > f.z) + { + aux = f.x; + f.x = f.z; + f.z = aux; + } + if (f.y > f.z) + { + aux = f.y; + f.y = f.z; + f.z = aux; + } + return new float3(f.z,f.y,f.x); + } + public static unsafe void RemoveRangeBurst(this NativeList list, int index, int count) where T : unmanaged { @@ -701,6 +1029,57 @@ namespace Obi list.RemoveAtSwapBack(list.Length - 1); } } - } -} + + //https://www.shadertoy.com/view/4djSRW + public static float3 Hash33(float3 p3) + { + p3 = math.frac(p3 * new float3(.1031f, .1030f, .0973f)); + p3 += math.dot(p3, p3.yxz + 33.33f); + return math.frac((p3.xxy + p3.yxx) * p3.zyx); + } + + public static float Hash13(float3 p3) + { + p3 = math.frac(p3 * .1031f); + p3 += math.dot(p3, p3.zyx + 31.32f); + return math.frac((p3.x + p3.y) * p3.z); + } + + public static float2 Hash21(float p) + { + float3 p3 = math.frac(new float3(p) * new float3(.1031f, .1030f, .0973f)); + p3 += math.dot(p3, p3.yzx + 33.33f); + return math.frac((p3.xx + p3.yz) * p3.zy); + } + + public static float3 Hash31(float p) + { + float3 p3 = math.frac(new float3(p) * new float3(.1031f, .1030f, .0973f)); + p3 += math.dot(p3, p3.yzx + 33.33f); + return math.frac((p3.xxy + p3.yzz) * p3.zyx); + } + + public static void RandomInCylinder(float seed, float4 pos, float4 dir, float length, float radius, out float4 position, out float3 velocity) + { + float3 rand = Hash31(seed); + + float3 b1 = dir.xyz; + float3 b2 = math.normalizesafe(math.cross(b1, new float3(1, 0, 0))); + float3 b3 = math.cross(b2, b1); + + float theta = rand.y * 2 * math.PI; + float2 disc = radius * math.sqrt(rand.x) * new float2(math.cos(theta), math.sin(theta)); + + velocity = b2 * disc.x + b3 * disc.y; + position = new float4(pos.xyz + b1 * length * rand.z + velocity, 0); + } + + public static void RandomInBox(float seed, float4 center, float4 size, out float4 position, out float3 velocity) + { + float3 rand = Hash31(seed); + velocity = (rand - new float3(0.5f, 0.5f, 0.5f)) * size.xyz; + position = new float4(center.xyz + velocity, 0); + } + } +} #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs index e5e2cf7d7..44adb2feb 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs @@ -1,14 +1,15 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; using Unity.Collections; +using Unity.Jobs; using Unity.Mathematics; namespace Obi { - public struct BurstBox : BurstLocalOptimization.IDistanceFunction, IBurstCollider + public struct BurstBox : BurstLocalOptimization.IDistanceFunction { public BurstColliderShape shape; public BurstAffineTransform colliderToSolver; - public float dt; public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) { @@ -18,7 +19,7 @@ namespace Obi // clamp the point to the surface of the box: point = colliderToSolver.InverseTransformPointUnscaled(point) - center; - if (shape.is2D != 0) + if (shape.is2D) point[2] = 0; // get minimum distance for each axis: @@ -55,39 +56,100 @@ namespace Obi projectedPoint.normal = colliderToSolver.TransformDirection(projectedPoint.normal); } - public void Contacts(int colliderIndex, - int rigidbodyIndex, - NativeArray rigidbodies, - - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - - NativeArray simplices, - in BurstAabb simplexBounds, - int simplexIndex, - int simplexStart, - int simplexSize, - - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) { - var co = new BurstContact() { bodyA = simplexIndex, bodyB = colliderIndex }; - float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.Box + 1] - contactOffsetsPerType[(int)Oni.ShapeType.Box]; + if (pairCount == 0) return inputDeps; - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); + var job = new GenerateBoxContactsJob + { + contactPairs = contactPairs, - co.pointB = colliderPoint.point; - co.normal = colliderPoint.normal; - co.pointA = simplexBary; + positions = solver.positions, + orientations = solver.orientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, - contacts.Enqueue(co); + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + + contactsQueue = contactQueue.AsParallelWriter(), + + worldToSolver = solver.worldToSolver, + deltaTime = deltaTime, + parameters = solver.abstraction.parameters, + firstPair = contactOffsetsPerType[(int)Oni.ShapeType.Box] + }; + + inputDeps = job.Schedule(pairCount, 8, inputDeps); + return inputDeps; } - } + [BurstCompile] + struct GenerateBoxContactsJob : IJobParallelFor + { + [ReadOnly] public NativeList contactPairs; + + // particle arrays: + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + // collider arrays: + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray shapes; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactsQueue; + + // auxiliar data: + [ReadOnly] public int firstPair; + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public float deltaTime; + [ReadOnly] public Oni.SolverParameters parameters; + + public void Execute(int i) + { + int simplexIndex = contactPairs[firstPair + i].bodyA; + int colliderIndex = contactPairs[firstPair + i].bodyB; + + int simplexStart = simplexCounts.GetSimplexStartAndSize(simplexIndex, out int simplexSize); + + BurstAffineTransform colliderToSolver = worldToSolver * transforms[colliderIndex]; + + BurstBox shape = new BurstBox { colliderToSolver = colliderToSolver, shape = shapes[colliderIndex] }; + + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + var colliderPoint = BurstLocalOptimization.Optimize(ref shape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out _, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); + + contactsQueue.Enqueue(new BurstContact + { + bodyA = simplexIndex, + bodyB = colliderIndex, + pointA = simplexBary, + pointB = colliderPoint.point, + normal = colliderPoint.normal * shape.shape.sign + }); + } + } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs index e23c0b11b..c66e8df36 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs @@ -1,21 +1,22 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; using Unity.Collections; +using Unity.Jobs; using Unity.Mathematics; namespace Obi { - public struct BurstCapsule : BurstLocalOptimization.IDistanceFunction, IBurstCollider + public struct BurstCapsule : BurstLocalOptimization.IDistanceFunction { public BurstColliderShape shape; public BurstAffineTransform colliderToSolver; - public float dt; public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) { float4 center = shape.center * colliderToSolver.scale; point = colliderToSolver.InverseTransformPointUnscaled(point) - center; - if (shape.is2D != 0) + if (shape.is2D) point[2] = 0; int direction = (int)shape.size.z; @@ -36,38 +37,100 @@ namespace Obi projectedPoint.normal = colliderToSolver.TransformDirection(normal); } - public void Contacts(int colliderIndex, - int rigidbodyIndex, - NativeArray rigidbodies, - - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - - NativeArray simplices, - in BurstAabb simplexBounds, - int simplexIndex, - int simplexStart, - int simplexSize, - - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) { - var co = new BurstContact() { bodyA = simplexIndex, bodyB = colliderIndex }; - float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.Capsule + 1] - contactOffsetsPerType[(int)Oni.ShapeType.Capsule]; + if (pairCount == 0) return inputDeps; - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); + var job = new GenerateCapsuleContactsJob + { + contactPairs = contactPairs, - co.pointB = colliderPoint.point; - co.normal = colliderPoint.normal; - co.pointA = simplexBary; + positions = solver.positions, + orientations = solver.orientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, - contacts.Enqueue(co); + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + + contactsQueue = contactQueue.AsParallelWriter(), + + worldToSolver = solver.worldToSolver, + deltaTime = deltaTime, + parameters = solver.abstraction.parameters, + firstPair = contactOffsetsPerType[(int)Oni.ShapeType.Capsule] + }; + + inputDeps = job.Schedule(pairCount, 8, inputDeps); + return inputDeps; } } + [BurstCompile] + struct GenerateCapsuleContactsJob : IJobParallelFor + { + [ReadOnly] public NativeList contactPairs; + + // particle arrays: + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + // collider arrays: + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray shapes; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactsQueue; + + // auxiliar data: + [ReadOnly] public int firstPair; + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public float deltaTime; + [ReadOnly] public Oni.SolverParameters parameters; + + public void Execute(int i) + { + int simplexIndex = contactPairs[firstPair + i].bodyA; + int colliderIndex = contactPairs[firstPair + i].bodyB; + + int simplexStart = simplexCounts.GetSimplexStartAndSize(simplexIndex, out int simplexSize); + + BurstAffineTransform colliderToSolver = worldToSolver * transforms[colliderIndex]; + + BurstCapsule shape = new BurstCapsule { colliderToSolver = colliderToSolver, shape = shapes[colliderIndex] }; + + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + var colliderPoint = BurstLocalOptimization.Optimize(ref shape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out _, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); + + contactsQueue.Enqueue(new BurstContact + { + bodyA = simplexIndex, + bodyB = colliderIndex, + pointA = simplexBary, + pointB = colliderPoint.point, + normal = colliderPoint.normal * shape.shape.sign + }); + } + } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs index af31c7a9d..88c580a4e 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs @@ -14,12 +14,28 @@ namespace Obi public ColliderShape.ShapeType type; public float contactOffset; - public int dataIndex; + public int dataIndex; // index of the associated collider data in the collision world. public int rigidbodyIndex; // index of the associated rigidbody in the collision world. public int materialIndex; // index of the associated material in the collision world. + public int forceZoneIndex; // index of the associated force zone in the collision world. public int filter; - public int flags; // for now, only used for trigger (1) or regular collider (0). - public int is2D; // whether the collider is 2D (1) or 3D (0). + public int flags; // first bit whether the collider is 2D (1) or 3D (0), second bit whether it's a trigger (1) or regular collider (0), + // third bit determines whether shape is inverted or not. + + public bool is2D + { + get => (flags & 1) != 0; + set => flags |= value ? 1 : 0; + } + public bool isTrigger + { + get => (flags & 1 << 1) != 0 || forceZoneIndex >= 0; + set => flags |= value ? 1 << 1 : 0; + } + public float sign + { + get => (flags & 1 << 2) != 0 ? -1 : 1; + } } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs index 97736248e..3f0823cc6 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs @@ -4,6 +4,8 @@ using Unity.Collections; using Unity.Jobs; using Unity.Mathematics; using Unity.Burst; +using System.Threading; +using Unity.Collections.LowLevel.Unsafe; namespace Obi { @@ -18,24 +20,32 @@ namespace Obi public int entity; } - private int refCount = 0; - private int colliderCount = 0; + public int referenceCount { get; private set; } = 0; + public int colliderCount { get; private set; } = 0; private NativeMultilevelGrid grid; private NativeQueue movingColliders; + + private NativeArray colliderTypeCounts; + private NativeQueue contactPairQueue; + public NativeList contactPairs; + public NativeArray contactOffsetsPerType; + public NativeQueue colliderContactQueue; public ObiNativeCellSpanList cellSpans; - public int referenceCount { get { return refCount; } } - public void Awake() { - this.grid = new NativeMultilevelGrid(1000, Allocator.Persistent); this.movingColliders = new NativeQueue(Allocator.Persistent); this.colliderContactQueue = new NativeQueue(Allocator.Persistent); + this.contactPairQueue = new NativeQueue(Allocator.Persistent); + this.colliderTypeCounts = new NativeArray(Oni.ColliderShapeTypeCount, Allocator.Persistent); + this.contactOffsetsPerType = new NativeArray(Oni.ColliderShapeTypeCount + 1, Allocator.Persistent); + this.contactPairs = new NativeList(Allocator.Persistent); + this.cellSpans = new ObiNativeCellSpanList(); ObiColliderWorld.GetInstance().RegisterImplementation(this); @@ -47,23 +57,30 @@ namespace Obi grid.Dispose(); movingColliders.Dispose(); + + colliderTypeCounts.Dispose(); + contactPairQueue.Dispose(); + contactPairs.Dispose(); + contactOffsetsPerType.Dispose(); + colliderContactQueue.Dispose(); + cellSpans.Dispose(); } public void IncreaseReferenceCount() { - refCount++; + referenceCount++; } public void DecreaseReferenceCount() { - if (--refCount <= 0 && gameObject != null) + if (--referenceCount <= 0 && gameObject != null) DestroyImmediate(gameObject); } - public void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms, int count) + public void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms) { - colliderCount = count; + colliderCount = shapes.count; // insert new empty cellspans at the end if needed: while (colliderCount > cellSpans.count) @@ -74,6 +91,10 @@ namespace Obi { } + public void SetForceZones(ObiNativeForceZoneList rigidbody) + { + } + public void SetCollisionMaterials(ObiNativeCollisionMaterialList materials) { @@ -162,7 +183,7 @@ namespace Obi new int4(GridHash.Quantize(velocityBounds.max.xyz, cellSize), level)); // if the collider is 2D, project it to the z = 0 cells. - if (shapes[i].is2D != 0) + if (shapes[i].is2D) { newSpan.min[2] = 0; newSpan.max[2] = 0; @@ -173,7 +194,7 @@ namespace Obi if (i >= colliderCount || cellIndices[i] != newSpan) { // Add the collider to the list of moving colliders: - movingColliders.Enqueue(new MovingCollider() + movingColliders.Enqueue(new MovingCollider { oldSpan = cellIndices[i], newSpan = newSpan, @@ -230,6 +251,7 @@ namespace Obi [ReadOnly] public NativeArray invMasses; [ReadOnly] public NativeArray radii; [ReadOnly] public NativeArray filters; + [ReadOnly] public NativeArray particleMaterialIndices; // simplex arrays: [ReadOnly] public NativeArray simplices; @@ -243,47 +265,27 @@ namespace Obi [ReadOnly] public NativeArray rigidbodies; [ReadOnly] public NativeArray bounds; - // distance field data: - [ReadOnly] public NativeArray distanceFieldHeaders; - [ReadOnly] public NativeArray distanceFieldNodes; - - // triangle mesh data: - [ReadOnly] public NativeArray triangleMeshHeaders; - [ReadOnly] public NativeArray bihNodes; - [ReadOnly] public NativeArray triangles; - [ReadOnly] public NativeArray vertices; - - // edge mesh data: - [ReadOnly] public NativeArray edgeMeshHeaders; - [ReadOnly] public NativeArray edgeBihNodes; - [ReadOnly] public NativeArray edges; - [ReadOnly] public NativeArray edgeVertices; - - // height field data: - [ReadOnly] public NativeArray heightFieldHeaders; - [ReadOnly] public NativeArray heightFieldSamples; - - // output contacts queue: [WriteOnly] [NativeDisableParallelForRestriction] - public NativeQueue.ParallelWriter contactsQueue; + public NativeQueue.ParallelWriter contactPairQueue; + + [NativeDisableParallelForRestriction] + public NativeArray colliderTypeCounts; // auxiliar data: [ReadOnly] public BurstAffineTransform solverToWorld; - [ReadOnly] public BurstAffineTransform worldToSolver; [ReadOnly] public float deltaTime; [ReadOnly] public Oni.SolverParameters parameters; public void Execute(int i) { int simplexStart = simplexCounts.GetSimplexStartAndSize(i, out int simplexSize); - BurstAabb simplexBoundsSS = simplexBounds[i]; // get all colliders overlapped by the cell bounds, in all grid levels: - BurstAabb simplexBoundsWS = simplexBoundsSS.Transformed(solverToWorld); + BurstAabb simplexBoundsWS = simplexBounds[i].Transformed(solverToWorld); NativeList candidates = new NativeList(16,Allocator.Temp); - // max size of the particle bounds in cells: + // max size of the simplex bounds in cells: int3 maxSize = new int3(10); bool is2D = parameters.mode == Oni.SolverParameters.Mode.Mode2D; @@ -360,139 +362,203 @@ namespace Obi if (shouldCollide && simplexBoundsWS.IntersectsAabb(in colliderBoundsWS, is2D)) { - // generate contacts for the collider: - BurstAffineTransform colliderToSolver = worldToSolver * transforms[c]; - GenerateContacts(in shape, in colliderToSolver, c, rb, i, simplexStart, simplexSize, simplexBoundsSS); + // increment the amount of contacts for this shape type: + Interlocked.Increment(ref ((int*)colliderTypeCounts.GetUnsafePtr())[(int)shape.type]); + + // enqueue a new contact pair: + contactPairQueue.Enqueue(new Oni.ContactPair{ + bodyA = i, + bodyB = c + }); } } } } } - - private void GenerateContacts(in BurstColliderShape shape, - in BurstAffineTransform colliderToSolver, - int colliderIndex, - int rigidbodyIndex, - int simplexIndex, - int simplexStart, - int simplexSize, - in BurstAabb simplexBoundsSS) - { - float4x4 solverToCollider; - BurstAabb simplexBoundsCS; - - switch (shape.type) - { - case ColliderShape.ShapeType.Sphere: - BurstSphere sphereShape = new BurstSphere() { colliderToSolver = colliderToSolver, shape = shape, dt = deltaTime }; - sphereShape.Contacts(colliderIndex, rigidbodyIndex, rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBoundsSS, - simplexIndex, simplexStart, simplexSize, contactsQueue, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - break; - case ColliderShape.ShapeType.Box: - BurstBox boxShape = new BurstBox() { colliderToSolver = colliderToSolver, shape = shape, dt = deltaTime }; - boxShape.Contacts(colliderIndex, rigidbodyIndex, rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBoundsSS, - simplexIndex, simplexStart, simplexSize, contactsQueue, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - break; - case ColliderShape.ShapeType.Capsule: - BurstCapsule capsuleShape = new BurstCapsule(){colliderToSolver = colliderToSolver,shape = shape, dt = deltaTime }; - capsuleShape.Contacts(colliderIndex, rigidbodyIndex, rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBoundsSS, - simplexIndex, simplexStart, simplexSize, contactsQueue, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - break; - case ColliderShape.ShapeType.SignedDistanceField: - - if (shape.dataIndex < 0) return; - - BurstDistanceField distanceFieldShape = new BurstDistanceField() - { - colliderToSolver = colliderToSolver, - solverToWorld = solverToWorld, - shape = shape, - distanceFieldHeaders = distanceFieldHeaders, - dfNodes = distanceFieldNodes, - dt = deltaTime, - collisionMargin = parameters.collisionMargin - }; - - distanceFieldShape.Contacts(colliderIndex, rigidbodyIndex, rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBoundsSS, - simplexIndex, simplexStart, simplexSize, contactsQueue, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - - break; - case ColliderShape.ShapeType.Heightmap: - - if (shape.dataIndex < 0) return; - - // invert a full matrix here to accurately represent collider bounds scale. - solverToCollider = math.inverse(float4x4.TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); - simplexBoundsCS = simplexBoundsSS.Transformed(solverToCollider); - - BurstHeightField heightmapShape = new BurstHeightField() - { - colliderToSolver = colliderToSolver, - solverToWorld = solverToWorld, - shape = shape, - header = heightFieldHeaders[shape.dataIndex], - heightFieldSamples = heightFieldSamples, - collisionMargin = parameters.collisionMargin, - dt = deltaTime - }; - - heightmapShape.Contacts(colliderIndex, rigidbodyIndex, rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBoundsCS, - simplexIndex, simplexStart, simplexSize, contactsQueue, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - - break; - case ColliderShape.ShapeType.TriangleMesh: - - if (shape.dataIndex < 0) return; - - // invert a full matrix here to accurately represent collider bounds scale. - solverToCollider = math.inverse(float4x4.TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); - simplexBoundsCS = simplexBoundsSS.Transformed(solverToCollider); - - BurstTriangleMesh triangleMeshShape = new BurstTriangleMesh() - { - colliderToSolver = colliderToSolver, - solverToWorld = solverToWorld, - shape = shape, - header = triangleMeshHeaders[shape.dataIndex], - bihNodes = bihNodes, - triangles = triangles, - vertices = vertices, - collisionMargin = parameters.collisionMargin, - dt = deltaTime - }; - - triangleMeshShape.Contacts(colliderIndex, rigidbodyIndex, rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBoundsCS, - simplexIndex, simplexStart, simplexSize, contactsQueue, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - - break; - case ColliderShape.ShapeType.EdgeMesh: - - if (shape.dataIndex < 0) return; - - // invert a full matrix here to accurately represent collider bounds scale. - solverToCollider = math.inverse(float4x4.TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); - simplexBoundsCS = simplexBoundsSS.Transformed(solverToCollider); - - BurstEdgeMesh edgeMeshShape = new BurstEdgeMesh() - { - colliderToSolver = colliderToSolver, - shape = shape, - header = edgeMeshHeaders[shape.dataIndex], - edgeBihNodes = edgeBihNodes, - edges = edges, - vertices = edgeVertices, - dt = deltaTime - }; - - edgeMeshShape.Contacts(colliderIndex, rigidbodyIndex, rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBoundsCS, - simplexIndex, simplexStart, simplexSize, contactsQueue, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - - break; - } - } - } + [BurstCompile] + struct PrefixSumJob : IJob + { + [ReadOnly] public NativeArray array; + public NativeArray sum; + + public void Execute() + { + sum[0] = 0; + for (int i = 1; i < sum.Length; ++i) + sum[i] = sum[i - 1] + array[i-1]; + } + } + + [BurstCompile] + struct SortContactPairsByShape : IJob + { + public NativeQueue contactPairQueue; + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray start; // prefix sum + public NativeArray count; + + public NativeList contactPairs; + + public void Execute() + { + contactPairs.ResizeUninitialized(contactPairQueue.Count); + + while (!contactPairQueue.IsEmpty()) + { + var pair = contactPairQueue.Dequeue(); + int shapeType = (int)shapes[pair.bodyB].type; + + // write the pair directly at its position in the sorted array: + contactPairs[start[shapeType] + (--count[shapeType])] = pair; + } + } + } + + [BurstCompile] + unsafe struct ApplyForceZonesJob : IJobParallelFor + { + // particle arrays: + [NativeDisableParallelForRestriction] public NativeArray externalForces; + [NativeDisableParallelForRestriction] public NativeArray wind; + [NativeDisableParallelForRestriction] public NativeArray velocities; + [NativeDisableParallelForRestriction] public NativeArray colors; + [NativeDisableParallelForRestriction] public NativeArray life; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + // collider arrays: + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray forceZones; + + // contacts + [ReadOnly] public NativeArray contacts; + + // auxiliar data: + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public float deltaTime; + + public void Execute(int i) + { + var contact = contacts[i]; + int forceZoneIndex = shapes[contact.bodyB].forceZoneIndex; + + if (forceZoneIndex >= 0) + { + int simplexStart = simplexCounts.GetSimplexStartAndSize(contact.bodyA, out int simplexSize); + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + + float distance = -math.dot(positions[particleIndex] - contact.pointB, contact.normal); + if (distance < 0) continue; + + float4 axis = (worldToSolver * transforms[contact.bodyB]).TransformDirection(new float4(0, 0, 1, 0)); + + // calculate falloff region based on min/max distances: + float falloff = 1; + float range = forceZones[forceZoneIndex].maxDistance - forceZones[forceZoneIndex].minDistance; + if (math.abs(range) > BurstMath.epsilon) + falloff = math.pow(math.saturate((distance - forceZones[forceZoneIndex].minDistance) / range), forceZones[forceZoneIndex].falloffPower); + + float forceIntensity = forceZones[forceZoneIndex].intensity * falloff; + float dampIntensity = forceZones[forceZoneIndex].damping * falloff; + + // tint particles: + float mix = math.pow(1 - math.saturate(forceZones[forceZoneIndex].color.a * falloff), deltaTime); + colors[particleIndex] = math.lerp((Vector4)forceZones[forceZoneIndex].color, colors[particleIndex], mix); + + // calculate force direction, depending on the type of the force field: + float4 result = float4.zero; + switch (forceZones[forceZoneIndex].type) + { + case ForceZone.ZoneType.Radial: + result = contact.normal * forceIntensity; + break; + case ForceZone.ZoneType.Vortex: + result = new float4(math.cross(axis.xyz * forceIntensity, contact.normal.xyz).xyz, 0); + break; + case ForceZone.ZoneType.Directional: + result = axis * forceIntensity; + break; + default: + BurstMath.AtomicAdd(life, particleIndex, -forceIntensity * deltaTime); + continue; + } + + // apply damping: + switch (forceZones[forceZoneIndex].dampingDir) + { + case ForceZone.DampingDirection.ForceDirection: + { + float4 forceDir = math.normalizesafe(result); + result -= forceDir * math.dot(velocities[particleIndex], forceDir) * dampIntensity; + } + break; + case ForceZone.DampingDirection.SurfaceDirection: + result -= contact.normal * math.dot(velocities[particleIndex], contact.normal) * dampIntensity; + break; + default: + result -= velocities[particleIndex] * dampIntensity; + break; + } + + if (invMasses[particleIndex] > 0) + { + switch (forceZones[forceZoneIndex].mode) + { + case ForceZone.ForceMode.Acceleration: + BurstMath.AtomicAdd(externalForces, particleIndex, result / simplexSize / invMasses[particleIndex]); + break; + case ForceZone.ForceMode.Force: + BurstMath.AtomicAdd(externalForces, particleIndex, result / simplexSize); + break; + case ForceZone.ForceMode.Wind: + BurstMath.AtomicAdd(wind, particleIndex, result / simplexSize); + break; + } + } + + } + } + } + } + + public JobHandle ApplyForceZones(BurstSolverImpl solver, float deltaTime, JobHandle inputDeps) + { + var world = ObiColliderWorld.GetInstance(); + + var applyForceFieldsJob = new ApplyForceZonesJob + { + contacts = solver.abstraction.colliderContacts.AsNativeArray(), + + positions = solver.positions, + velocities = solver.velocities, + externalForces = solver.externalForces, + wind = solver.wind, + invMasses = solver.invMasses, + life = solver.life, + colors = solver.colors, + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + forceZones = world.forceZones.AsNativeArray(), + + worldToSolver = solver.worldToSolver, + deltaTime = deltaTime, + }; + + return applyForceFieldsJob.Schedule(solver.abstraction.colliderContacts.count, 64, inputDeps); + } public JobHandle GenerateContacts(BurstSolverImpl solver, float deltaTime, JobHandle inputDeps) { @@ -509,6 +575,7 @@ namespace Obi invMasses = solver.invMasses, radii = solver.principalRadii, filters = solver.filters, + particleMaterialIndices = solver.collisionMaterials, simplices = solver.simplices, simplexCounts = solver.simplexCounts, @@ -520,33 +587,46 @@ namespace Obi collisionMaterials = world.collisionMaterials.AsNativeArray(), bounds = world.colliderAabbs.AsNativeArray(), - distanceFieldHeaders = world.distanceFieldContainer.headers.AsNativeArray(), - distanceFieldNodes = world.distanceFieldContainer.dfNodes.AsNativeArray(), + contactPairQueue = contactPairQueue.AsParallelWriter(), + colliderTypeCounts = colliderTypeCounts, - triangleMeshHeaders = world.triangleMeshContainer.headers.AsNativeArray(), - bihNodes = world.triangleMeshContainer.bihNodes.AsNativeArray(), - triangles = world.triangleMeshContainer.triangles.AsNativeArray(), - vertices = world.triangleMeshContainer.vertices.AsNativeArray(), - - edgeMeshHeaders = world.edgeMeshContainer.headers.AsNativeArray(), - edgeBihNodes = world.edgeMeshContainer.bihNodes.AsNativeArray(), - edges = world.edgeMeshContainer.edges.AsNativeArray(), - edgeVertices = world.edgeMeshContainer.vertices.AsNativeArray(), - - heightFieldHeaders = world.heightFieldContainer.headers.AsNativeArray(), - heightFieldSamples = world.heightFieldContainer.samples.AsNativeArray(), - - contactsQueue = colliderContactQueue.AsParallelWriter(), solverToWorld = solver.solverToWorld, - worldToSolver = solver.worldToSolver, deltaTime = deltaTime, parameters = solver.abstraction.parameters }; - return generateColliderContactsJob.Schedule(solver.simplexCounts.simplexCount, 16, inputDeps); + inputDeps = generateColliderContactsJob.Schedule(solver.simplexCounts.simplexCount, 16, inputDeps); + var prefixSumJob = new PrefixSumJob + { + array = colliderTypeCounts, + sum = contactOffsetsPerType + }; + inputDeps = prefixSumJob.Schedule(inputDeps); + + var sortPairsJob = new SortContactPairsByShape + { + contactPairQueue = contactPairQueue, + shapes = world.colliderShapes.AsNativeArray(), + start = contactOffsetsPerType, + count = colliderTypeCounts, + contactPairs = contactPairs + }; + inputDeps = sortPairsJob.Schedule(inputDeps); + + inputDeps.Complete(); + + inputDeps = BurstSphere.GenerateContacts(world,solver,contactPairs,colliderContactQueue,contactOffsetsPerType,deltaTime,inputDeps); + inputDeps = BurstBox.GenerateContacts(world,solver,contactPairs,colliderContactQueue, contactOffsetsPerType,deltaTime,inputDeps); + inputDeps = BurstCapsule.GenerateContacts(world, solver, contactPairs, colliderContactQueue, contactOffsetsPerType, deltaTime, inputDeps); + inputDeps = BurstDistanceField.GenerateContacts(world, solver, contactPairs, colliderContactQueue, contactOffsetsPerType, deltaTime, inputDeps); + inputDeps = BurstTriangleMesh.GenerateContacts(world, solver, contactPairs, colliderContactQueue, contactOffsetsPerType, deltaTime, inputDeps); + inputDeps = BurstHeightField.GenerateContacts(world, solver, contactPairs, colliderContactQueue, contactOffsetsPerType, deltaTime, inputDeps); + inputDeps = BurstEdgeMesh.GenerateContacts(world, solver, contactPairs, colliderContactQueue, contactOffsetsPerType, deltaTime, inputDeps); + + return inputDeps; } } } -#endif \ No newline at end of file +#endif diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs index 613303262..1ebf5c041 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs @@ -1,17 +1,15 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; using Unity.Collections; +using Unity.Jobs; using Unity.Mathematics; namespace Obi { - public struct BurstDistanceField : BurstLocalOptimization.IDistanceFunction, IBurstCollider + public struct BurstDistanceField : BurstLocalOptimization.IDistanceFunction { public BurstColliderShape shape; public BurstAffineTransform colliderToSolver; - public BurstAffineTransform solverToWorld; - - public float dt; - public float collisionMargin; public NativeArray distanceFieldHeaders; public NativeArray dfNodes; @@ -20,47 +18,143 @@ namespace Obi { point = colliderToSolver.InverseTransformPoint(point); - if (shape.is2D != 0) + if (shape.is2D) point[2] = 0; var header = distanceFieldHeaders[shape.dataIndex]; - float4 sample = DFTraverse(point, 0, in header, in dfNodes); + float4 sample = DFTraverse(point, in header); float4 normal = new float4(math.normalize(sample.xyz), 0); projectedPoint.point = colliderToSolver.TransformPoint(point - normal * (sample[3] - shape.contactOffset)); projectedPoint.normal = colliderToSolver.TransformDirection(normal); } - public void Contacts(int colliderIndex, - int rigidbodyIndex, - NativeArray rigidbodies, - - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - - NativeArray simplices, - in BurstAabb simplexBounds, - int simplexIndex, - int simplexStart, - int simplexSize, - - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) + private float4 DFTraverse(float4 particlePosition, in DistanceFieldHeader header) { - if (shape.dataIndex < 0) return; + var stack = new NativeArray(12, Allocator.Temp); + int stackTop = 0; + + stack[stackTop++] = 0; + + while (stackTop > 0) + { + int nodeIndex = stack[--stackTop]; + var node = dfNodes[header.firstNode + nodeIndex]; + + // if the child node exists, recurse down the df octree: + if (node.firstChild >= 0) + stack[stackTop++] = node.firstChild + node.GetOctant(particlePosition); + else + return node.SampleWithGradient(particlePosition); + } + return float4.zero; + } + + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) + { + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.SignedDistanceField + 1] - contactOffsetsPerType[(int)Oni.ShapeType.SignedDistanceField]; + if (pairCount == 0) return inputDeps; + + var job = new GenerateDistanceFieldContactsJob + { + contactPairs = contactPairs, + + positions = solver.positions, + orientations = solver.orientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + rigidbodies = world.rigidbodies.AsNativeArray(), + + distanceFieldHeaders = world.distanceFieldContainer.headers.AsNativeArray(), + distanceFieldNodes = world.distanceFieldContainer.dfNodes.AsNativeArray(), + + contactsQueue = contactQueue.AsParallelWriter(), + + solverToWorld = solver.inertialFrame, + worldToSolver = solver.worldToSolver, + deltaTime = deltaTime, + parameters = solver.abstraction.parameters, + firstPair = contactOffsetsPerType[(int)Oni.ShapeType.SignedDistanceField] + }; + + inputDeps = job.Schedule(pairCount, 1, inputDeps); + return inputDeps; + } + } + + [BurstCompile] + struct GenerateDistanceFieldContactsJob : IJobParallelFor + { + [ReadOnly] public NativeList contactPairs; + + // particle arrays: + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + // collider arrays: + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray rigidbodies; + + // distance field data: + [ReadOnly] public NativeArray distanceFieldHeaders; + [ReadOnly] public NativeArray distanceFieldNodes; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactsQueue; + + // auxiliar data: + [ReadOnly] public int firstPair; + [ReadOnly] public BurstInertialFrame solverToWorld; + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public float deltaTime; + [ReadOnly] public Oni.SolverParameters parameters; + + public void Execute(int i) + { + + int simplexIndex = contactPairs[firstPair + i].bodyA; + int colliderIndex = contactPairs[firstPair + i].bodyB; + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + if (shapes[colliderIndex].dataIndex < 0) return; + + int simplexStart = simplexCounts.GetSimplexStartAndSize(simplexIndex, out int simplexSize); + BurstAffineTransform colliderToSolver = worldToSolver * transforms[colliderIndex]; + + BurstDistanceField dfShape = new BurstDistanceField() + { + colliderToSolver = colliderToSolver, + shape = shapes[colliderIndex], + distanceFieldHeaders = distanceFieldHeaders, + dfNodes = distanceFieldNodes + }; + - var co = new BurstContact() { bodyA = simplexIndex, bodyB = colliderIndex }; float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); - - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 simplexPoint, optimizationIterations, optimizationTolerance); - - co.pointB = colliderPoint.point; - co.normal = colliderPoint.normal; - co.pointA = simplexBary; + var colliderPoint = BurstLocalOptimization.Optimize(ref dfShape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out float4 simplexPoint, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); float4 velocity = float4.zero; float simplexRadius = 0; @@ -76,31 +170,18 @@ namespace Obi rbVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, colliderPoint.point, rigidbodies, solverToWorld); float dAB = math.dot(simplexPoint - colliderPoint.point, colliderPoint.normal); - float vel = math.dot(velocity - rbVelocity, colliderPoint.normal); + float vel = math.dot(velocity - rbVelocity, colliderPoint.normal); - if (vel * dt + dAB <= simplexRadius + shape.contactOffset + collisionMargin) - contacts.Enqueue(co); + //if (vel * deltaTime + dAB <= simplexRadius + shapes[colliderIndex].contactOffset + parameters.collisionMargin) + contactsQueue.Enqueue(new BurstContact + { + bodyA = simplexIndex, + bodyB = colliderIndex, + pointA = simplexBary, + pointB = colliderPoint.point, + normal = colliderPoint.normal * dfShape.shape.sign + }); } - - private static float4 DFTraverse(float4 particlePosition, - int nodeIndex, - in DistanceFieldHeader header, - in NativeArray dfNodes) - { - var node = dfNodes[header.firstNode + nodeIndex]; - - // if the child node exists, recurse down the df octree: - if (node.firstChild >= 0) - { - int octant = node.GetOctant(particlePosition); - return DFTraverse(particlePosition, node.firstChild + octant, in header, in dfNodes); - } - else - { - return node.SampleWithGradient(particlePosition); - } - } - } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs index 026d6fd5a..754887774 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs @@ -1,16 +1,17 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; using Unity.Collections; +using Unity.Jobs; using Unity.Mathematics; namespace Obi { - public struct BurstEdgeMesh : BurstLocalOptimization.IDistanceFunction, IBurstCollider + public struct BurstEdgeMesh : BurstLocalOptimization.IDistanceFunction { public BurstColliderShape shape; public BurstAffineTransform colliderToSolver; public int dataOffset; - public float dt; public EdgeMeshHeader header; public NativeArray edgeBihNodes; @@ -21,12 +22,12 @@ namespace Obi { point = colliderToSolver.InverseTransformPointUnscaled(point); - if (shape.is2D != 0) + if (shape.is2D) point[2] = 0; Edge t = edges[header.firstEdge + dataOffset]; - float4 v1 = (new float4(vertices[header.firstVertex + t.i1], 0) + shape.center) * colliderToSolver.scale; - float4 v2 = (new float4(vertices[header.firstVertex + t.i2], 0) + shape.center) * colliderToSolver.scale; + float4 v1 = (new float4(vertices[header.firstVertex + t.i1], 0, 0) + shape.center) * colliderToSolver.scale; + float4 v2 = (new float4(vertices[header.firstVertex + t.i2], 0, 0) + shape.center) * colliderToSolver.scale; float4 nearestPoint = BurstMath.NearestPointOnEdge(v1, v2, point, out float mu); float4 normal = math.normalizesafe(point - nearestPoint); @@ -35,90 +36,175 @@ namespace Obi projectedPoint.point = colliderToSolver.TransformPointUnscaled(nearestPoint + normal * shape.contactOffset); } - - public void Contacts(int colliderIndex, - int rigidbodyIndex, - NativeArray rigidbodies, - - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - - NativeArray simplices, - in BurstAabb simplexBounds, - int simplexIndex, - int simplexStart, - int simplexSize, - - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) { - if (shape.dataIndex < 0) return; + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.EdgeMesh + 1] - contactOffsetsPerType[(int)Oni.ShapeType.EdgeMesh]; + if (pairCount == 0) return inputDeps; - BIHTraverse(colliderIndex, simplexIndex, simplexStart, simplexSize, - positions, orientations, radii, simplices, in simplexBounds, 0, contacts, optimizationIterations, optimizationTolerance); + var job = new GenerateEdgeMeshContactsJob + { + contactPairs = contactPairs, + + positions = solver.positions, + orientations = solver.orientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + simplexBounds = solver.simplexBounds, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + rigidbodies = world.rigidbodies.AsNativeArray(), + + edgeMeshHeaders = world.edgeMeshContainer.headers.AsNativeArray(), + edgeBihNodes = world.edgeMeshContainer.bihNodes.AsNativeArray(), + edges = world.edgeMeshContainer.edges.AsNativeArray(), + edgeVertices = world.edgeMeshContainer.vertices.AsNativeArray(), + + contactsQueue = contactQueue.AsParallelWriter(), + + solverToWorld = solver.solverToWorld, + worldToSolver = solver.worldToSolver, + deltaTime = deltaTime, + parameters = solver.abstraction.parameters, + firstPair = contactOffsetsPerType[(int)Oni.ShapeType.TriangleMesh] + }; + + inputDeps = job.Schedule(pairCount, 1, inputDeps); + return inputDeps; } + } - private void BIHTraverse(int colliderIndex, - int simplexIndex, - int simplexStart, - int simplexSize, - NativeArray positions, - NativeArray orientations, - NativeArray radii, - NativeArray simplices, - in BurstAabb simplexBounds, - int nodeIndex, - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) + [BurstCompile] + struct GenerateEdgeMeshContactsJob : IJobParallelFor + { + [ReadOnly] public NativeList contactPairs; + + // particle arrays: + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + [ReadOnly] public NativeArray simplexBounds; + + // collider arrays: + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray rigidbodies; + + // edge mesh data: + [ReadOnly] public NativeArray edgeMeshHeaders; + [ReadOnly] public NativeArray edgeBihNodes; + [ReadOnly] public NativeArray edges; + [ReadOnly] public NativeArray edgeVertices; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactsQueue; + + // auxiliar data: + [ReadOnly] public int firstPair; + [ReadOnly] public BurstAffineTransform solverToWorld; + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public float deltaTime; + [ReadOnly] public Oni.SolverParameters parameters; + + public void Execute(int i) { - var node = edgeBihNodes[header.firstNode + nodeIndex]; + int simplexIndex = contactPairs[firstPair + i].bodyA; + int colliderIndex = contactPairs[firstPair + i].bodyB; + var shape = shapes[colliderIndex]; - if (node.firstChild >= 0) - { - // visit min node: - if (simplexBounds.min[node.axis] <= node.min + shape.center[node.axis]) - BIHTraverse(colliderIndex, simplexIndex, simplexStart, simplexSize, - positions, orientations, radii, simplices, in simplexBounds, - node.firstChild, contacts, optimizationIterations, optimizationTolerance); + if (shape.dataIndex < 0) + return; - // visit max node: - if (simplexBounds.max[node.axis] >= node.max + shape.center[node.axis]) - BIHTraverse(colliderIndex, simplexIndex, simplexStart, simplexSize, - positions, orientations, radii, simplices, in simplexBounds, - node.firstChild + 1, contacts, optimizationIterations, optimizationTolerance); - } - else + var header = edgeMeshHeaders[shape.dataIndex]; + + int simplexStart = simplexCounts.GetSimplexStartAndSize(simplexIndex, out int simplexSize); + var simplexBound = simplexBounds[simplexIndex]; + + BurstAffineTransform colliderToSolver = worldToSolver * transforms[colliderIndex]; + + // invert a full matrix here to accurately represent collider bounds scale. + var solverToCollider = math.inverse(float4x4.TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); + var simplexBoundsCS = simplexBound.Transformed(solverToCollider); + + float4 marginCS = new float4((shape.contactOffset + parameters.collisionMargin) / colliderToSolver.scale.xyz, 0); + + BurstEdgeMesh edgeMeshShape = new BurstEdgeMesh() { - // check for contact against all triangles: - for (dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) + colliderToSolver = colliderToSolver, + shape = shape, + header = header, + edgeBihNodes = edgeBihNodes, + edges = edges, + vertices = edgeVertices + }; + + NativeQueue queue = new NativeQueue(Allocator.Temp); + + queue.Enqueue(0); + + while (!queue.IsEmpty()) + { + int nodeIndex = queue.Dequeue(); + var node = edgeBihNodes[header.firstNode + nodeIndex]; + + // leaf node: + if (node.firstChild < 0) { - Edge t = edges[header.firstEdge + dataOffset]; - float4 v1 = new float4(vertices[header.firstVertex + t.i1], 0) + shape.center; - float4 v2 = new float4(vertices[header.firstVertex + t.i2], 0) + shape.center; - BurstAabb edgeBounds = new BurstAabb(v1, v2, shape.contactOffset + 0.01f); - - if (edgeBounds.IntersectsAabb(simplexBounds, shape.is2D != 0)) + // check for contact against all triangles: + for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) { - var co = new BurstContact() { bodyA = simplexIndex, bodyB = colliderIndex }; - float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + Edge t = edges[header.firstEdge + dataOffset]; + float4 v1 = new float4(edgeVertices[header.firstVertex + t.i1], 0, 0) + shape.center; + float4 v2 = new float4(edgeVertices[header.firstVertex + t.i2], 0, 0) + shape.center; + BurstAabb edgeBounds = new BurstAabb(v1, v2, marginCS); - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); + if (edgeBounds.IntersectsAabb(simplexBoundsCS, shape.is2D)) + { + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); - co.pointB = colliderPoint.point; - co.normal = colliderPoint.normal; - co.pointA = simplexBary; + edgeMeshShape.dataOffset = dataOffset; + var colliderPoint = BurstLocalOptimization.Optimize(ref edgeMeshShape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out float4 convexPoint, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - contacts.Enqueue(co); + contactsQueue.Enqueue(new BurstContact(){ + bodyA = simplexIndex, + bodyB = colliderIndex, + pointA = simplexBary, + pointB = colliderPoint.point, + normal = colliderPoint.normal * edgeMeshShape.shape.sign + }); + } } } + else // check min and/or max children: + { + // visit min node: + if (simplexBoundsCS.min[node.axis] <= node.min) + queue.Enqueue(node.firstChild); + + // visit max node: + if (simplexBoundsCS.max[node.axis] >= node.max) + queue.Enqueue(node.firstChild + 1); + } } } - } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs index 31f46c182..321510321 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs @@ -1,17 +1,15 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; using Unity.Collections; +using Unity.Jobs; using Unity.Mathematics; namespace Obi { - public struct BurstHeightField : BurstLocalOptimization.IDistanceFunction, IBurstCollider + public struct BurstHeightField : BurstLocalOptimization.IDistanceFunction { - public BurstColliderShape shape; public BurstAffineTransform colliderToSolver; - public BurstAffineTransform solverToWorld; - public float dt; - public float collisionMargin; public BurstMath.CachedTri tri; public float4 triNormal; @@ -23,7 +21,7 @@ namespace Obi { point = colliderToSolver.InverseTransformPoint(point); - float4 nearestPoint = BurstMath.NearestPointOnTri(tri, point, out float4 bary); + float4 nearestPoint = BurstMath.NearestPointOnTri(tri, point, out _); float4 normal = math.normalizesafe(point - nearestPoint); // flip the contact normal if it points below ground: (doesn't work with holes) @@ -33,30 +31,123 @@ namespace Obi projectedPoint.normal = colliderToSolver.TransformDirection(normal); } - public void Contacts(int colliderIndex, - int rigidbodyIndex, - NativeArray rigidbodies, - - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - - NativeArray simplices, - in BurstAabb simplexBounds, - int simplexIndex, - int simplexStart, - int simplexSize, - - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) { - if (shape.dataIndex < 0) return; + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.Heightmap + 1] - contactOffsetsPerType[(int)Oni.ShapeType.Heightmap]; + if (pairCount == 0) return inputDeps; - triNormal = float4.zero; + var job = new GenerateHeightFieldContactsJob + { + contactPairs = contactPairs, - var co = new BurstContact() { bodyA = simplexIndex, bodyB = colliderIndex }; + positions = solver.positions, + orientations = solver.orientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + simplexBounds = solver.simplexBounds, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + rigidbodies = world.rigidbodies.AsNativeArray(), + + heightFieldHeaders = world.heightFieldContainer.headers.AsNativeArray(), + heightFieldSamples = world.heightFieldContainer.samples.AsNativeArray(), + + contactsQueue = contactQueue.AsParallelWriter(), + + solverToWorld = solver.inertialFrame, + worldToSolver = solver.worldToSolver, + deltaTime = deltaTime, + parameters = solver.abstraction.parameters, + firstPair = contactOffsetsPerType[(int)Oni.ShapeType.Heightmap] + }; + + inputDeps = job.Schedule(pairCount, 1, inputDeps); + return inputDeps; + } + + } + + [BurstCompile] + struct GenerateHeightFieldContactsJob : IJobParallelFor + { + [ReadOnly] public NativeList contactPairs; + + // particle arrays: + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + [ReadOnly] public NativeArray simplexBounds; + + // collider arrays: + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray rigidbodies; + + // height field data: + [ReadOnly] public NativeArray heightFieldHeaders; + [ReadOnly] public NativeArray heightFieldSamples; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactsQueue; + + // auxiliar data: + [ReadOnly] public int firstPair; + [ReadOnly] public BurstInertialFrame solverToWorld; + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public float deltaTime; + [ReadOnly] public Oni.SolverParameters parameters; + + public void Execute(int i) + { + + int simplexIndex = contactPairs[firstPair + i].bodyA; + int colliderIndex = contactPairs[firstPair + i].bodyB; + var shape = shapes[colliderIndex]; + + if (shape.dataIndex < 0) + return; + + var header = heightFieldHeaders[shape.dataIndex]; + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + int simplexStart = simplexCounts.GetSimplexStartAndSize(simplexIndex, out int simplexSize); + var simplexBound = simplexBounds[simplexIndex]; + + BurstAffineTransform colliderToSolver = worldToSolver * transforms[colliderIndex]; + + // invert a full matrix here to accurately represent collider bounds scale. + var solverToCollider = math.inverse(float4x4.TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); + var simplexBoundsCS = simplexBound.Transformed(solverToCollider); + + BurstHeightField triangleMeshShape = new BurstHeightField() + { + colliderToSolver = colliderToSolver, + shape = shapes[colliderIndex], + header = heightFieldHeaders[shapes[colliderIndex].dataIndex], + heightFieldSamples = heightFieldSamples + }; + + float4 triNormal = float4.zero; + + var co = new BurstContact { bodyA = simplexIndex, bodyB = colliderIndex }; int resolutionU = (int)shape.center.x; int resolutionV = (int)shape.center.y; @@ -66,8 +157,8 @@ namespace Obi float cellHeight = shape.size.z / (resolutionV - 1); // calculate particle bounds min/max cells: - int2 min = new int2((int)math.floor(simplexBounds.min[0] / cellWidth), (int)math.floor(simplexBounds.min[2] / cellHeight)); - int2 max = new int2((int)math.floor(simplexBounds.max[0] / cellWidth), (int)math.floor(simplexBounds.max[2] / cellHeight)); + int2 min = new int2((int)math.floor(simplexBoundsCS.min[0] / cellWidth), (int)math.floor(simplexBoundsCS.min[2] / cellHeight)); + int2 max = new int2((int)math.floor(simplexBoundsCS.max[0] / cellWidth), (int)math.floor(simplexBoundsCS.max[2] / cellHeight)); for (int su = min[0]; su <= max[0]; ++su) { @@ -106,11 +197,11 @@ namespace Obi float4 v2 = new float4(max_x, h4, max_z, 0); float4 v3 = new float4(min_x, h1, min_z, 0); - tri.Cache(v1, v2, v3); + triangleMeshShape.tri.Cache(v1, v2, v3); triNormal.xyz = math.normalizesafe(math.cross((v2 - v1).xyz, (v3 - v1).xyz)); - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out convexPoint, optimizationIterations, optimizationTolerance); + var colliderPoint = BurstLocalOptimization.Optimize(ref triangleMeshShape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out convexPoint, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); float4 velocity = float4.zero; float simplexRadius = 0; @@ -128,12 +219,12 @@ namespace Obi float dAB = math.dot(convexPoint - colliderPoint.point, colliderPoint.normal); float vel = math.dot(velocity - rbVelocity, colliderPoint.normal); - if (vel * dt + dAB <= simplexRadius + shape.contactOffset + collisionMargin) + if (vel * deltaTime + dAB <= simplexRadius + shape.contactOffset + parameters.collisionMargin) { co.pointB = colliderPoint.point; - co.normal = colliderPoint.normal; + co.normal = colliderPoint.normal * triangleMeshShape.shape.sign; co.pointA = simplexBary; - contacts.Enqueue(co); + contactsQueue.Enqueue(co); } // ------contact against the second triangle------: @@ -141,11 +232,11 @@ namespace Obi v2 = new float4(max_x, h4, max_z, 0); v3 = new float4(max_x, h2, min_z, 0); - tri.Cache(v1, v2, v3); + triangleMeshShape.tri.Cache(v1, v2, v3); triNormal.xyz = math.normalizesafe(math.cross((v2 - v1).xyz, (v3 - v1).xyz)); - colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out convexPoint, optimizationIterations, optimizationTolerance); + colliderPoint = BurstLocalOptimization.Optimize(ref triangleMeshShape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out convexPoint, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); velocity = float4.zero; simplexRadius = 0; @@ -163,21 +254,19 @@ namespace Obi dAB = math.dot(convexPoint - colliderPoint.point, colliderPoint.normal); vel = math.dot(velocity - rbVelocity, colliderPoint.normal); - if (vel * dt + dAB <= simplexRadius + shape.contactOffset + collisionMargin) + if (vel * deltaTime + dAB <= simplexRadius + shape.contactOffset + parameters.collisionMargin) { co.pointB = colliderPoint.point; - co.normal = colliderPoint.normal; + co.normal = colliderPoint.normal * triangleMeshShape.shape.sign; co.pointA = simplexBary; - contacts.Enqueue(co); + contactsQueue.Enqueue(co); } } } } } - } - } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs index 0b0570e08..16da88c46 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs @@ -50,6 +50,7 @@ namespace Obi convexRadii += radii[particle] * convexBary[j]; convexOrientation.value += orientations[particle].value * convexBary[j]; } + convexPoint.w = 0; } public static SurfacePoint Optimize(ref T function, @@ -112,6 +113,7 @@ namespace Obi { int particle = simplices[simplexStart + j]; float4 candidate = positions[particle] - convexPoint; + candidate.w = 0; // here, we adjust the candidate by projecting it to the engrosed simplex's surface: candidate -= pointInFunction.normal * (radii[particle].x - convexThickness.x); @@ -176,6 +178,8 @@ namespace Obi float4 candidateC = positions[simplices[simplexStart]] - pointInFunction.point; float4 candidateD = positions[simplices[simplexStart + 1]] - pointInFunctionD.point; + candidateC.w = 0; + candidateD.w = 0; candidateC -= pointInFunction.normal * (radii[simplices[simplexStart]].x - convexThickness.x); candidateD -= pointInFunctionD.normal * (radii[simplices[simplexStart + 1]].x - convexThicknessD.x); diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs index 35f990289..d042894d9 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs @@ -24,9 +24,9 @@ namespace Obi { if (simplexSize == 3) { - tri.Cache(positions[simplices[simplexStart]], - positions[simplices[simplexStart + 1]], - positions[simplices[simplexStart + 2]]); + tri.Cache(new float4(positions[simplices[simplexStart]].xyz,0), + new float4(positions[simplices[simplexStart + 1]].xyz,0), + new float4(positions[simplices[simplexStart + 2]].xyz,0)); } } @@ -35,16 +35,17 @@ namespace Obi switch (simplexSize) { case 1: + default: { - float4 p1 = positions[simplices[simplexStart]]; + float4 p1 = positions[simplices[simplexStart]]; p1.w = 0; projectedPoint.bary = new float4(1, 0, 0, 0); projectedPoint.point = p1; } break; case 2: { - float4 p1 = positions[simplices[simplexStart]]; - float4 p2 = positions[simplices[simplexStart + 1]]; + float4 p1 = positions[simplices[simplexStart]]; p1.w = 0; + float4 p2 = positions[simplices[simplexStart + 1]]; p2.w = 0; BurstMath.NearestPointOnEdge(p1, p2, point, out float mu); projectedPoint.bary = new float4(1 - mu, mu, 0, 0); projectedPoint.point = p1 * projectedPoint.bary[0] + p2 * projectedPoint.bary[1]; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs index 327262365..cd5b297f1 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs @@ -1,21 +1,22 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; using Unity.Collections; +using Unity.Jobs; using Unity.Mathematics; namespace Obi { - public struct BurstSphere : BurstLocalOptimization.IDistanceFunction, IBurstCollider + public struct BurstSphere : BurstLocalOptimization.IDistanceFunction { public BurstColliderShape shape; public BurstAffineTransform colliderToSolver; - public float dt; public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) { float4 center = shape.center * colliderToSolver.scale; point = colliderToSolver.InverseTransformPointUnscaled(point) - center; - if (shape.is2D != 0) + if (shape.is2D) point[2] = 0; float radius = shape.size.x * math.cmax(colliderToSolver.scale.xyz); @@ -27,36 +28,98 @@ namespace Obi projectedPoint.normal = colliderToSolver.TransformDirection(normal); } - public void Contacts(int colliderIndex, - int rigidbodyIndex, - NativeArray rigidbodies, - - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - - NativeArray simplices, - in BurstAabb simplexBounds, - int simplexIndex, - int simplexStart, - int simplexSize, - - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) { - var co = new BurstContact() { bodyA = simplexIndex, bodyB = colliderIndex }; + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.Sphere + 1] - contactOffsetsPerType[(int)Oni.ShapeType.Sphere]; + if (pairCount == 0) return inputDeps; + + var job = new GenerateSphereContactsJob + { + contactPairs = contactPairs, + + positions = solver.positions, + orientations = solver.orientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + + contactsQueue = contactQueue.AsParallelWriter(), + + worldToSolver = solver.worldToSolver, + deltaTime = deltaTime, + parameters = solver.abstraction.parameters, + firstPair = contactOffsetsPerType[(int)Oni.ShapeType.Sphere] + }; + + inputDeps = job.Schedule(pairCount, 8, inputDeps); + return inputDeps; + } + } + + [BurstCompile] + struct GenerateSphereContactsJob : IJobParallelFor + { + [ReadOnly] public NativeList contactPairs; + + // particle arrays: + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + // collider arrays: + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray shapes; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactsQueue; + + // auxiliar data: + [ReadOnly] public int firstPair; + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public float deltaTime; + [ReadOnly] public Oni.SolverParameters parameters; + + public void Execute(int i) + { + int simplexIndex = contactPairs[firstPair + i].bodyA; + int colliderIndex = contactPairs[firstPair + i].bodyB; + + int simplexStart = simplexCounts.GetSimplexStartAndSize(simplexIndex, out int simplexSize); + + BurstAffineTransform colliderToSolver = worldToSolver * transforms[colliderIndex]; + + BurstSphere shape = new BurstSphere { colliderToSolver = colliderToSolver, shape = shapes[colliderIndex] }; + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + var colliderPoint = BurstLocalOptimization.Optimize(ref shape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out _, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); - - co.pointB = colliderPoint.point; - co.normal = colliderPoint.normal; - co.pointA = simplexBary; - - contacts.Enqueue(co); + contactsQueue.Enqueue(new BurstContact { + bodyA = simplexIndex, + bodyB = colliderIndex, + pointA = simplexBary, + pointB = colliderPoint.point, + normal = colliderPoint.normal * shape.shape.sign + }); } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs index 6edf852f4..6ef8be0bf 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs @@ -1,30 +1,23 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; using Unity.Collections; +using Unity.Jobs; using Unity.Mathematics; namespace Obi { - public struct BurstTriangleMesh : BurstLocalOptimization.IDistanceFunction, IBurstCollider + public struct BurstTriangleMesh : BurstLocalOptimization.IDistanceFunction { public BurstColliderShape shape; public BurstAffineTransform colliderToSolver; - public BurstAffineTransform solverToWorld; - public TriangleMeshHeader header; - public NativeArray bihNodes; - public NativeArray triangles; - public NativeArray vertices; - - public float dt; - public float collisionMargin; - - private BurstMath.CachedTri tri; + public BurstMath.CachedTri tri; public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) { point = colliderToSolver.InverseTransformPointUnscaled(point); - if (shape.is2D != 0) + if (shape.is2D) point[2] = 0; float4 nearestPoint = BurstMath.NearestPointOnTri(tri, point, out float4 bary); @@ -34,116 +27,194 @@ namespace Obi projectedPoint.normal = colliderToSolver.TransformDirection(normal); } - public void Contacts(int colliderIndex, - int rigidbodyIndex, - NativeArray rigidbodies, - - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - - NativeArray simplices, - in BurstAabb simplexBounds, - int simplexIndex, - int simplexStart, - int simplexSize, - - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) { + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.TriangleMesh + 1] - contactOffsetsPerType[(int)Oni.ShapeType.TriangleMesh]; + if (pairCount == 0) return inputDeps; - BIHTraverse(colliderIndex, rigidbodyIndex, simplexIndex, simplexStart, simplexSize, - rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBounds, 0, contacts, optimizationIterations, optimizationTolerance); - - } - - private void BIHTraverse(int colliderIndex, - int rigidbodyIndex, - int simplexIndex, - int simplexStart, - int simplexSize, - NativeArray rigidbodies, - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - NativeArray simplices, - in BurstAabb simplexBounds, - int nodeIndex, - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance) - { - var node = bihNodes[header.firstNode + nodeIndex]; - - if (node.firstChild >= 0) - { - // visit min node: - if (simplexBounds.min[node.axis] <= node.min) - BIHTraverse(colliderIndex, rigidbodyIndex, simplexIndex, simplexStart, simplexSize, - rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBounds, - node.firstChild, contacts, optimizationIterations, optimizationTolerance); - - // visit max node: - if (simplexBounds.max[node.axis] >= node.max) - BIHTraverse(colliderIndex, rigidbodyIndex, simplexIndex, simplexStart, simplexSize, - rigidbodies, positions, orientations, velocities, radii, simplices, in simplexBounds, - node.firstChild + 1, contacts, optimizationIterations, optimizationTolerance); - } - else + var job = new GenerateTriangleMeshContactsJob { - // check for contact against all triangles: - for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) + contactPairs = contactPairs, + + positions = solver.positions, + orientations = solver.orientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + simplexBounds = solver.simplexBounds, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + rigidbodies = world.rigidbodies.AsNativeArray(), + + triangleMeshHeaders = world.triangleMeshContainer.headers.AsNativeArray(), + bihNodes = world.triangleMeshContainer.bihNodes.AsNativeArray(), + triangles = world.triangleMeshContainer.triangles.AsNativeArray(), + vertices = world.triangleMeshContainer.vertices.AsNativeArray(), + + contactsQueue = contactQueue.AsParallelWriter(), + + solverToWorld = solver.inertialFrame, + worldToSolver = solver.worldToSolver, + deltaTime = deltaTime, + parameters = solver.abstraction.parameters, + firstPair = contactOffsetsPerType[(int)Oni.ShapeType.TriangleMesh] + }; + + inputDeps = job.Schedule(pairCount, 1, inputDeps); + return inputDeps; + } + } + + [BurstCompile] + struct GenerateTriangleMeshContactsJob : IJobParallelFor + { + [ReadOnly] public NativeList contactPairs; + + // particle arrays: + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + [ReadOnly] public NativeArray simplexBounds; + + // collider arrays: + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray rigidbodies; + + // triangle mesh data: + [ReadOnly] public NativeArray triangleMeshHeaders; + [ReadOnly] public NativeArray bihNodes; + [ReadOnly] public NativeArray triangles; + [ReadOnly] public NativeArray vertices; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactsQueue; + + // auxiliar data: + [ReadOnly] public int firstPair; + [ReadOnly] public BurstInertialFrame solverToWorld; + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public float deltaTime; + [ReadOnly] public Oni.SolverParameters parameters; + + public void Execute(int i) + { + int simplexIndex = contactPairs[firstPair + i].bodyA; + int colliderIndex = contactPairs[firstPair + i].bodyB; + var shape = shapes[colliderIndex]; + + if (shape.dataIndex < 0) + return; + + int rigidbodyIndex = shape.rigidbodyIndex; + var header = triangleMeshHeaders[shape.dataIndex]; + + int simplexStart = simplexCounts.GetSimplexStartAndSize(simplexIndex, out int simplexSize); + var simplexBound = simplexBounds[simplexIndex]; + + BurstAffineTransform colliderToSolver = worldToSolver * transforms[colliderIndex]; + + // invert a full matrix here to accurately represent collider bounds scale. + var solverToCollider = math.inverse(float4x4.TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); + var simplexBoundsCS = simplexBound.Transformed(solverToCollider); + + float4 marginCS = new float4((shape.contactOffset + parameters.collisionMargin) / colliderToSolver.scale.xyz, 0); + + BurstTriangleMesh triangleMeshShape = new BurstTriangleMesh() + { + colliderToSolver = colliderToSolver, + shape = shape + }; + + NativeQueue queue = new NativeQueue(Allocator.Temp); + + queue.Enqueue(0); + + while (!queue.IsEmpty()) + { + int nodeIndex = queue.Dequeue(); + var node = bihNodes[header.firstNode + nodeIndex]; + + // leaf node: + if (node.firstChild < 0) { - Triangle t = triangles[header.firstTriangle + dataOffset]; - float4 v1 = new float4(vertices[header.firstVertex + t.i1], 0); - float4 v2 = new float4(vertices[header.firstVertex + t.i2], 0); - float4 v3 = new float4(vertices[header.firstVertex + t.i3], 0); - BurstAabb triangleBounds = new BurstAabb(v1, v2, v3, shape.contactOffset + collisionMargin); - - if (triangleBounds.IntersectsAabb(simplexBounds, shape.is2D != 0)) + // check for contact against all triangles: + for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) { - float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); - tri.Cache(v1 * colliderToSolver.scale, v2 * colliderToSolver.scale, v3 * colliderToSolver.scale); + Triangle t = triangles[header.firstTriangle + dataOffset]; + float4 v1 = new float4(vertices[header.firstVertex + t.i1], 0); + float4 v2 = new float4(vertices[header.firstVertex + t.i2], 0); + float4 v3 = new float4(vertices[header.firstVertex + t.i3], 0); + BurstAabb triangleBounds = new BurstAabb(v1, v2, v3, marginCS); - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 simplexPoint, optimizationIterations, optimizationTolerance); - - float4 velocity = float4.zero; - float simplexRadius = 0; - for (int j = 0; j < simplexSize; ++j) + if (triangleBounds.IntersectsAabb(simplexBoundsCS, shape.is2D)) { - int particleIndex = simplices[simplexStart + j]; - simplexRadius += radii[particleIndex].x * simplexBary[j]; - velocity += velocities[particleIndex] * simplexBary[j]; - } + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); - float4 rbVelocity = float4.zero; - if (rigidbodyIndex >= 0) - rbVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, colliderPoint.point, rigidbodies, solverToWorld); + triangleMeshShape.tri.Cache(v1 * colliderToSolver.scale, v2 * colliderToSolver.scale, v3 * colliderToSolver.scale); - float dAB = math.dot(simplexPoint - colliderPoint.point, colliderPoint.normal); - float vel = math.dot(velocity - rbVelocity, colliderPoint.normal); + var colliderPoint = BurstLocalOptimization.Optimize(ref triangleMeshShape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out float4 simplexPoint, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); - if (vel * dt + dAB <= simplexRadius + shape.contactOffset + collisionMargin) - { - contacts.Enqueue(new BurstContact() + float4 velocity = float4.zero; + float simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) { - bodyA = simplexIndex, - bodyB = colliderIndex, - pointA = simplexBary, - pointB = colliderPoint.point, - normal = colliderPoint.normal, - }); + int particleIndex = simplices[simplexStart + j]; + simplexRadius += radii[particleIndex].x * simplexBary[j]; + velocity += velocities[particleIndex] * simplexBary[j]; + } + + float4 rbVelocity = float4.zero; + if (rigidbodyIndex >= 0) + rbVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, colliderPoint.point, rigidbodies, solverToWorld); + + float dAB = math.dot(simplexPoint - colliderPoint.point, colliderPoint.normal); + float vel = math.dot(velocity - rbVelocity, colliderPoint.normal); + + if (vel * deltaTime + dAB <= simplexRadius + shape.contactOffset + parameters.collisionMargin) + { + contactsQueue.Enqueue(new BurstContact() + { + bodyA = simplexIndex, + bodyB = colliderIndex, + pointA = simplexBary, + pointB = colliderPoint.point, + normal = colliderPoint.normal * triangleMeshShape.shape.sign + }); + } } } } + else // check min and/or max children: + { + // visit min node: + if (simplexBoundsCS.min[node.axis] <= node.min) + queue.Enqueue(node.firstChild); + + // visit max node: + if (simplexBoundsCS.max[node.axis] >= node.max) + queue.Enqueue(node.firstChild + 1); + } } } - } - } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/IBurstCollider.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/IBurstCollider.cs deleted file mode 100644 index dd6e73bc2..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Collisions/IBurstCollider.cs +++ /dev/null @@ -1,29 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Collections; -using Unity.Mathematics; - -namespace Obi -{ - interface IBurstCollider - { - void Contacts(int colliderIndex, - int rigidbodyIndex, - NativeArray rigidbodies, - - NativeArray positions, - NativeArray orientations, - NativeArray velocities, - NativeArray radii, - - NativeArray simplices, - in BurstAabb simplexBounds, - int simplexIndex, - int simplexStart, - int simplexSize, - - NativeQueue.ParallelWriter contacts, - int optimizationIterations, - float optimizationTolerance); - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs index 3fc159964..2c66cbdc9 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs @@ -26,12 +26,12 @@ namespace Obi m_ConstraintCount = count; } - public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { return inputDeps; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new AerodynamicConstraintsBatchJob() { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs index b163b493e..18997515c 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs @@ -42,7 +42,7 @@ namespace Obi applyConstraints.particleIndices = this.particleIndices; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { projectConstraints.positions = solverImplementation.positions; projectConstraints.invMasses = solverImplementation.invMasses; @@ -97,7 +97,6 @@ namespace Obi float4 bendVector = positions[p3] - (positions[p1] + positions[p2] + positions[p3]) / 3.0f; float bend = math.length(bendVector); - float constraint = bend - restBends[i]; constraint = math.max(0, constraint - stiffnesses[i].x) + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs index c34acf76c..bea412444 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs @@ -32,7 +32,7 @@ namespace Obi m_ConstraintCount = count; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new BendTwistConstraintsBatchJob() { @@ -107,12 +107,11 @@ namespace Obi quaternion omega_plus; omega_plus.value = omega.value + rest.value; //delta Omega with - omega_0 omega.value -= rest.value; //delta Omega with + omega_0 - if (math.lengthsq(omega.value) > math.lengthsq(omega_plus.value)) omega = omega_plus; // plasticity - if (math.lengthsq(omega.value) > plasticity[i].x * plasticity[i].x) + if (math.lengthsq(omega.value.xyz) > plasticity[i].x * plasticity[i].x) { rest.value += omega.value * plasticity[i].y * deltaTime; restDarboux[i] = rest; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs index 5594e4786..35f19d56b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs @@ -24,11 +24,7 @@ namespace Obi public bool enabled { - set - { - if (m_Enabled != value) - m_Enabled = value; - } + set { m_Enabled = value; } get { return m_Enabled; } } @@ -50,22 +46,17 @@ namespace Obi protected NativeArray particleIndices; protected NativeArray lambdas; - public virtual JobHandle Initialize(JobHandle inputDeps, float substepTime) + public virtual JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { if (lambdas.IsCreated) { - // no need for jobs here, memclear is faster and we don't pay scheduling overhead. - unsafe - { - UnsafeUtility.MemClear(NativeArrayUnsafeUtility.GetUnsafeBufferPointerWithoutChecks(lambdas), - lambdas.Length * UnsafeUtility.SizeOf()); - } + inputDeps = new ClearLambdasJob {lambdas = lambdas}.Schedule(lambdas.Length, 256, inputDeps); } return inputDeps; } // implemented by concrete constraint subclasses. - public abstract JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps); + public abstract JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft); public abstract JobHandle Apply(JobHandle inputDeps, float substepTime); public virtual void Destroy() @@ -104,6 +95,16 @@ namespace Obi counts[particleIndex] = 0; } } + + [BurstCompile] + public struct ClearLambdasJob : IJobParallelFor + { + public NativeArray lambdas; + public void Execute(int i) + { + lambdas[i] = 0; + } + } } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs index 2b502be8b..961b8de13 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs @@ -9,8 +9,8 @@ namespace Obi { public interface IBurstConstraintsImpl : IConstraints { - JobHandle Initialize(JobHandle inputDeps, float substepTime); - JobHandle Project(JobHandle inputDeps, float stepTime, float substepTime, int substeps); + JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft); + JobHandle Project(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft); void Dispose(); IConstraintsBatchImpl CreateConstraintsBatch(); @@ -63,14 +63,14 @@ namespace Obi return count; } - public JobHandle Initialize(JobHandle inputDeps, float substepTime) + public JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { // initialize all batches in parallel: if (batches.Count > 0) { NativeArray deps = new NativeArray(batches.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); for (int i = 0; i < batches.Count; ++i) - deps[i] = batches[i].enabled ? batches[i].Initialize(inputDeps, substepTime) : inputDeps; + deps[i] = batches[i].enabled ? batches[i].Initialize(inputDeps, stepTime, substepTime, steps, timeLeft) : inputDeps; JobHandle result = JobHandle.CombineDependencies(deps); deps.Dispose(); @@ -81,7 +81,7 @@ namespace Obi return inputDeps; } - public JobHandle Project(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public JobHandle Project(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { UnityEngine.Profiling.Profiler.BeginSample("Project"); @@ -90,11 +90,11 @@ namespace Obi switch(parameters.evaluationOrder) { case Oni.ConstraintParameters.EvaluationOrder.Sequential: - inputDeps = EvaluateSequential(inputDeps, stepTime, substepTime, substeps); + inputDeps = EvaluateSequential(inputDeps, stepTime, substepTime, steps, timeLeft); break; case Oni.ConstraintParameters.EvaluationOrder.Parallel: - inputDeps = EvaluateParallel(inputDeps, stepTime, substepTime, substeps); + inputDeps = EvaluateParallel(inputDeps, stepTime, substepTime, steps, timeLeft); break; } @@ -103,14 +103,14 @@ namespace Obi return inputDeps; } - protected virtual JobHandle EvaluateSequential(JobHandle inputDeps, float stepTime, float substepTime,int substeps) + protected virtual JobHandle EvaluateSequential(JobHandle inputDeps, float stepTime, float substepTime,int steps, float timeLeft) { // evaluate and apply all batches: for (int i = 0; i < batches.Count; ++i) { if (batches[i].enabled) { - inputDeps = batches[i].Evaluate(inputDeps, stepTime, substepTime, substeps); + inputDeps = batches[i].Evaluate(inputDeps, stepTime, substepTime, steps, timeLeft); inputDeps = batches[i].Apply(inputDeps, substepTime); m_Solver.ScheduleBatchedJobsIfNeeded(); } @@ -119,13 +119,13 @@ namespace Obi return inputDeps; } - protected virtual JobHandle EvaluateParallel(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + protected virtual JobHandle EvaluateParallel(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { // evaluate all batches: for (int i = 0; i < batches.Count; ++i) if (batches[i].enabled) { - inputDeps = batches[i].Evaluate(inputDeps, stepTime, substepTime, substeps); + inputDeps = batches[i].Evaluate(inputDeps, stepTime, substepTime, steps, timeLeft); m_Solver.ScheduleBatchedJobsIfNeeded(); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs index 080e3a65b..2a177188d 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs @@ -30,7 +30,7 @@ namespace Obi m_ConstraintCount = count; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new ChainConstraintsBatchJob() @@ -88,12 +88,14 @@ namespace Obi { int numEdges = numIndices[c] - 1; int first = firstIndex[c]; - float minLength = restLengths[c].y; + float minLength = restLengths[c].x; float maxLength = restLengths[c].y; // (ni:constraint gradient, di:desired lenght) NativeArray ni = new NativeArray(numEdges, Allocator.Temp); - NativeArray di = new NativeArray(numEdges, Allocator.Temp); + + // calculate ai (subdiagonals), bi (diagonals) and ci (superdiagonals): + NativeArray diagonals = new NativeArray(numEdges, Allocator.Temp); for (int i = 0; i < numEdges; ++i) { @@ -104,20 +106,10 @@ namespace Obi float4 diff = p1 - p2; float distance = math.length(diff); - float correction = 0; - - if (distance >= maxLength) - correction = distance - maxLength; - else if (distance <= minLength) - correction = distance - minLength; - - di[i] = correction; ni[i] = new float4(diff/(distance + BurstMath.epsilon)); } - // calculate ai (subdiagonals), bi (diagonals) and ci (superdiagonals): - NativeArray diagonals = new NativeArray(numEdges, Allocator.Temp); - + // calculate ai, bi and ci (superdiagonals): for (int i = 0; i < numEdges; ++i) { int edge = first + i; @@ -135,34 +127,47 @@ namespace Obi -w__i * math.dot(n_i_, n__i));// ci } - NativeArray sweep = new NativeArray(numEdges, Allocator.Temp); - // solve step #1, forward sweep: + // reuse diagonals.xy to store sweep results ci_ and di_: for (int i = 0; i < numEdges; ++i) { int edge = first + i; + float4 p1 = positions[particleIndices[edge]]; + float4 p2 = positions[particleIndices[edge + 1]]; - float cip_ = (i > 0) ? sweep[i - 1].x : 0; - float dip_ = (i > 0) ? sweep[i - 1].y : 0; + float cip_ = (i > 0) ? diagonals[i - 1].x : 0; + float dip_ = (i > 0) ? diagonals[i - 1].y : 0; float den = diagonals[i].y - cip_ * diagonals[i].x; - if (den != 0) + float3 d = diagonals[i]; + if (math.abs(den) > BurstMath.epsilon) { - sweep[i] = new float2((diagonals[i].z / den), - (di[i] - dip_ * diagonals[i].x) / den); + float distance = math.distance(p1, p2); + float correction = 0; + + if (distance >= maxLength) + correction = distance - maxLength; + else if (distance <= minLength) + correction = distance - minLength; + + d.xy = new float2(d.z / den, + (correction - dip_ * d.x) / den); + } else - sweep[i] = float2.zero; + d.xy = float2.zero; + + diagonals[i] = d; } - // solve step #2, backward sweep: - NativeArray xi = new NativeArray(numEdges, Allocator.Temp); + // solve step #2, backward sweep. reuse diagonals.z to store solution xi: for (int i = numEdges - 1; i >= 0; --i) { - int edge = first + i; + float xi_ = (i < numEdges - 1) ? diagonals[i + 1].z : 0; - float xi_ = (i < numEdges - 1) ? xi[i + 1] : 0; - xi[i] = sweep[i].y - sweep[i].x * xi_; + float3 d = diagonals[i]; + d.z = d.y - d.x * xi_; + diagonals[i] = d; } // calculate deltas: @@ -173,11 +178,11 @@ namespace Obi float4 ni__ = (i > 0) ? ni[i - 1] : float4.zero; float4 n_i_ = (i < numIndices[c] - 1) ? ni[i] : float4.zero; - float xi_ = (i > 0) ? xi[i - 1] : 0; - float nxi = (i < numIndices[c] - 1) ? xi[i] : 0; + float xi_ = (i > 0) ? diagonals[i - 1].z : 0; + float nxi = (i < numIndices[c] - 1) ? diagonals[i].z : 0; int p = particleIndices[index]; - deltas[p] -= invMasses[p] * (-ni__ * xi_ + n_i_ * nxi); + deltas[p] += invMasses[p] * (ni__ * xi_ - n_i_ * nxi); counts[p]++; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs index e7d0e1a22..b139b9481 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs @@ -24,9 +24,7 @@ namespace Obi public override int GetConstraintCount() { - if (!((BurstSolverImpl)solver).colliderContacts.IsCreated) - return 0; - return ((BurstSolverImpl)solver).colliderContacts.Length; + return ((BurstSolverImpl)solver).abstraction.colliderContacts.count; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs index 12cd97c1b..35538e876 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs @@ -17,7 +17,7 @@ namespace Obi m_ConstraintType = Oni.ConstraintType.Collision; } - public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var updateContacts = new UpdateContactsJob() { @@ -26,7 +26,7 @@ namespace Obi velocities = solverImplementation.velocities, radii = solverImplementation.principalRadii, invMasses = solverImplementation.invMasses, - invInertiaTensors = solverImplementation.invInertiaTensors, + invRotationalMasses = solverImplementation.invRotationalMasses, particleMaterialIndices = solverImplementation.collisionMaterials, collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), @@ -39,13 +39,14 @@ namespace Obi rigidbodyLinearDeltas = solverImplementation.abstraction.rigidbodyLinearDeltas.AsNativeArray(), rigidbodyAngularDeltas = solverImplementation.abstraction.rigidbodyAngularDeltas.AsNativeArray(), - contacts = ((BurstSolverImpl)constraints.solver).colliderContacts, + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.contactEffectiveMasses.AsNativeArray(), inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame }; - return updateContacts.Schedule(((BurstSolverImpl)constraints.solver).colliderContacts.Length, 128, inputDeps); + return updateContacts.Schedule(((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.count, 128, inputDeps); } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); @@ -72,11 +73,13 @@ namespace Obi deltas = solverAbstraction.positionDeltas.AsNativeArray(), counts = solverAbstraction.positionConstraintCounts.AsNativeArray(), - contacts = ((BurstSolverImpl)constraints.solver).colliderContacts, + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.contactEffectiveMasses.AsNativeArray(), inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, constraintParameters = parameters, solverParameters = solverAbstraction.parameters, - substeps = substeps, + steps = steps, + timeLeft = timeLeft, stepTime = stepTime, substepTime = substepTime }; @@ -89,7 +92,7 @@ namespace Obi var applyConstraints = new ApplyCollisionConstraintsBatchJob() { - contacts = ((BurstSolverImpl)constraints.solver).colliderContacts, + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), simplices = solverImplementation.simplices, simplexCounts = solverImplementation.simplexCounts, @@ -108,7 +111,7 @@ namespace Obi /** * Updates contact data (such as contact distance) at the beginning of each substep. This is - * necessary because contacts are generalted only once at the beginning of each step, not every substep. + * necessary because contacts are generated only once at the beginning of each step, not every substep. */ [BurstCompile] public struct UpdateContactsJob : IJobParallelFor @@ -118,7 +121,7 @@ namespace Obi [ReadOnly] public NativeArray velocities; [ReadOnly] public NativeArray radii; [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray invInertiaTensors; + [ReadOnly] public NativeArray invRotationalMasses; [ReadOnly] public NativeArray particleMaterialIndices; [ReadOnly] public NativeArray collisionMaterials; @@ -133,12 +136,14 @@ namespace Obi [ReadOnly] public NativeArray rigidbodyLinearDeltas; [ReadOnly] public NativeArray rigidbodyAngularDeltas; + public NativeArray effectiveMasses; public NativeArray contacts; [ReadOnly] public BurstInertialFrame inertialFrame; public void Execute(int i) { var contact = contacts[i]; + var efMasses = effectiveMasses[i]; int simplexStart = simplexCounts.GetSimplexStartAndSize(contact.bodyA, out int simplexSize); @@ -150,7 +155,7 @@ namespace Obi float4 simplexPrevPosition = float4.zero; quaternion simplexPrevOrientation = new quaternion(0, 0, 0, 0); float simplexInvMass = 0; - float4 simplexInvInertia = float4.zero; + float simplexInvRotationalMass = 0; float simplexRadius = 0; for (int j = 0; j < simplexSize; ++j) @@ -160,7 +165,7 @@ namespace Obi simplexPrevPosition += prevPositions[particleIndex] * contact.pointA[j]; simplexPrevOrientation.value += prevOrientations[particleIndex].value * contact.pointA[j]; simplexInvMass += invMasses[particleIndex] * contact.pointA[j]; - simplexInvInertia += invInertiaTensors[particleIndex] * contact.pointA[j]; + simplexInvRotationalMass = invRotationalMasses[particleIndex] * contact.pointA[j]; simplexRadius += BurstMath.EllipsoidRadius(contact.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; } @@ -168,7 +173,7 @@ namespace Obi int rigidbodyIndex = shapes[contact.bodyB].rigidbodyIndex; if (rigidbodyIndex >= 0) { - relativeVelocity -= BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); + relativeVelocity -= BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); int bMaterialIndex = shapes[contact.bodyB].materialIndex; rollingContacts |= bMaterialIndex >= 0 ? collisionMaterials[bMaterialIndex].rollingContacts > 0 : false; @@ -180,17 +185,21 @@ namespace Obi // calculate contact point in A's surface: float4 contactPoint = contact.pointB + contact.normal * contact.distance; - // update contact orthonormal basis: - contact.CalculateBasis(relativeVelocity); + // calculate contact tangent (first friction direction) using relative velocity: + contact.CalculateTangent(relativeVelocity); // calculate A's contact mass. - contact.CalculateContactMassesA(simplexInvMass, simplexInvInertia, simplexPrevPosition, simplexPrevOrientation, contactPoint, rollingContacts); + float4 invInertiaTensor = math.rcp(BurstMath.GetParticleInertiaTensor(simplexRadius, simplexInvRotationalMass) + new float4(BurstMath.epsilon)); + efMasses.CalculateContactMassesA(simplexInvMass, invInertiaTensor, simplexPrevPosition, simplexPrevOrientation, contactPoint, contact.normal, contact.tangent, contact.bitangent, rollingContacts); // calculate B's contact mass. if (rigidbodyIndex >= 0) - contact.CalculateContactMassesB(rigidbodies[rigidbodyIndex], inertialFrame.frame); + efMasses.CalculateContactMassesB(rigidbodies[rigidbodyIndex], inertialFrame.frame, contact.pointB, contact.normal, contact.tangent, contact.bitangent); + else + efMasses.ClearContactMassesB(); contacts[i] = contact; + effectiveMasses[i] = efMasses; } } @@ -220,12 +229,14 @@ namespace Obi [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; public NativeArray contacts; + [ReadOnly] public NativeArray effectiveMasses; [ReadOnly] public BurstInertialFrame inertialFrame; [ReadOnly] public Oni.ConstraintParameters constraintParameters; [ReadOnly] public Oni.SolverParameters solverParameters; [ReadOnly] public float stepTime; [ReadOnly] public float substepTime; - [ReadOnly] public int substeps; + [ReadOnly] public float timeLeft; + [ReadOnly] public int steps; public void Execute() { @@ -237,12 +248,15 @@ namespace Obi int colliderIndex = contact.bodyB; // Skip contacts involving triggers: - if (shapes[colliderIndex].flags > 0) + if (shapes[colliderIndex].isTrigger) continue; // Get the rigidbody index (might be < 0, in that case there's no rigidbody present) int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + float frameEnd = stepTime * steps; + float substepsToEnd = timeLeft / substepTime; + // Combine collision materials (use material from first particle in simplex) BurstCollisionMaterial material = CombineCollisionMaterials(simplices[simplexStart], colliderIndex); @@ -262,24 +276,24 @@ namespace Obi } // project position to the end of the full step: - float4 posA = math.lerp(simplexPrevPosition, simplexPosition, substeps); + float4 posA = math.lerp(simplexPrevPosition, simplexPosition, substepsToEnd); posA += -contact.normal * simplexRadius; float4 posB = contact.pointB; if (rigidbodyIndex >= 0) - posB += BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame) * stepTime; + posB += BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame) * frameEnd; // adhesion: - float lambda = contact.SolveAdhesion(posA, posB, material.stickDistance, material.stickiness, stepTime); + float lambda = contact.SolveAdhesion(effectiveMasses[i].TotalNormalInvMass, posA, posB, material.stickDistance, material.stickiness, stepTime); // depenetration: - lambda += contact.SolvePenetration(posA, posB, solverParameters.maxDepenetration * stepTime); + lambda += contact.SolvePenetration(effectiveMasses[i].TotalNormalInvMass, posA, posB, solverParameters.maxDepenetration * stepTime); // Apply normal impulse to both simplex and rigidbody: if (math.abs(lambda) > BurstMath.epsilon) { - float4 delta = lambda * contact.normal * BurstMath.BaryScale(contact.pointA) / substeps; + float4 delta = lambda * contact.normal * BurstMath.BaryScale(contact.pointA) / substepsToEnd; for (int j = 0; j < simplexSize; ++j) { int particleIndex = simplices[simplexStart + j]; @@ -298,8 +312,8 @@ namespace Obi } if (rigidbodyIndex >= 0) - { - BurstMath.ApplyImpulse(rigidbodyIndex, -lambda / stepTime * contact.normal, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); + { + BurstMath.ApplyImpulse(rigidbodyIndex, -lambda / frameEnd * contact.normal, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs index e7be9989a..5d57a75e3 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs @@ -25,9 +25,7 @@ namespace Obi public override int GetConstraintCount() { - if (!((BurstSolverImpl)solver).colliderContacts.IsCreated) - return 0; - return ((BurstSolverImpl)solver).colliderContacts.Length; + return ((BurstSolverImpl)solver).abstraction.colliderContacts.count; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs index 6505d5302..bd39b1612 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs @@ -15,16 +15,13 @@ namespace Obi m_ConstraintType = Oni.ConstraintType.Friction; } - public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { return inputDeps; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { - if (!((BurstSolverImpl)constraints.solver).colliderContacts.IsCreated) - return inputDeps; - var projectConstraints = new FrictionConstraintsBatchJob() { positions = solverImplementation.positions, @@ -33,7 +30,7 @@ namespace Obi prevOrientations = solverImplementation.prevOrientations, invMasses = solverImplementation.invMasses, - invInertiaTensors = solverImplementation.invInertiaTensors, + invRotationalMasses = solverImplementation.invRotationalMasses, radii = solverImplementation.principalRadii, particleMaterialIndices = solverImplementation.collisionMaterials, @@ -52,9 +49,10 @@ namespace Obi orientationDeltas = solverImplementation.orientationDeltas, orientationCounts = solverImplementation.orientationConstraintCounts, - contacts = ((BurstSolverImpl)constraints.solver).colliderContacts, + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.contactEffectiveMasses.AsNativeArray(), inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, - substeps = substeps, + steps = steps, stepTime = stepTime, substepTime = substepTime }; @@ -63,14 +61,11 @@ namespace Obi public override JobHandle Apply(JobHandle inputDeps, float substepTime) { - if (!((BurstSolverImpl)constraints.solver).colliderContacts.IsCreated) - return inputDeps; - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); var applyConstraints = new ApplyCollisionConstraintsBatchJob() { - contacts = ((BurstSolverImpl)constraints.solver).colliderContacts, + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), simplices = solverImplementation.simplices, simplexCounts = solverImplementation.simplexCounts, @@ -96,7 +91,7 @@ namespace Obi [ReadOnly] public NativeArray prevOrientations; [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray invInertiaTensors; + [ReadOnly] public NativeArray invRotationalMasses; [ReadOnly] public NativeArray radii; [ReadOnly] public NativeArray particleMaterialIndices; @@ -118,10 +113,11 @@ namespace Obi [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationCounts; public NativeArray contacts; + [ReadOnly] public NativeArray effectiveMasses; [ReadOnly] public BurstInertialFrame inertialFrame; [ReadOnly] public float stepTime; [ReadOnly] public float substepTime; - [ReadOnly] public int substeps; + [ReadOnly] public int steps; public void Execute() { @@ -134,7 +130,7 @@ namespace Obi int colliderIndex = contact.bodyB; // Skip contacts involving triggers: - if (shapes[colliderIndex].flags > 0) + if (shapes[colliderIndex].isTrigger) continue; // Get the rigidbody index (might be < 0, in that case there's no rigidbody present) @@ -149,9 +145,9 @@ namespace Obi float4 prevPositionA = float4.zero; float4 linearVelocityA = float4.zero; float4 angularVelocityA = float4.zero; - float4 invInertiaTensorA = float4.zero; + float invRotationalMassA = 0; quaternion orientationA = new quaternion(0, 0, 0, 0); - float simplexRadiusA = 0; + float4 simplexRadiiA = float4.zero; for (int j = 0; j < simplexSize; ++j) { @@ -159,17 +155,17 @@ namespace Obi prevPositionA += prevPositions[particleIndex] * contact.pointA[j]; linearVelocityA += BurstIntegration.DifferentiateLinear(positions[particleIndex],prevPositions[particleIndex], substepTime) * contact.pointA[j]; angularVelocityA += BurstIntegration.DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * contact.pointA[j]; - invInertiaTensorA += invInertiaTensors[particleIndex] * contact.pointA[j]; + invRotationalMassA += invRotationalMasses[particleIndex] * contact.pointA[j]; orientationA.value += orientations[particleIndex].value * contact.pointA[j]; - simplexRadiusA += BurstMath.EllipsoidRadius(contact.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; + simplexRadiiA += radii[particleIndex] * contact.pointA[j]; } - + float4 relativeVelocity = linearVelocityA; // Add particle angular velocity if rolling contacts are enabled: if (material.rollingContacts > 0) { - rA = -contact.normal * simplexRadiusA; + rA = -contact.normal * BurstMath.EllipsoidRadius(contact.normal, orientationA, simplexRadiiA.xyz); relativeVelocity += new float4(math.cross(angularVelocityA.xyz, rA.xyz), 0); } @@ -178,11 +174,11 @@ namespace Obi { // Note: unlike rA, that is expressed in solver space, rB is expressed in world space. rB = inertialFrame.frame.TransformPoint(contact.pointB) - rigidbodies[rigidbodyIndex].com; - relativeVelocity -= BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); + relativeVelocity -= BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); } // Determine impulse magnitude: - float2 impulses = contact.SolveFriction(relativeVelocity, material.staticFriction, material.dynamicFriction, stepTime); + float2 impulses = contact.SolveFriction(effectiveMasses[i].TotalTangentInvMass, effectiveMasses[i].TotalBitangentInvMass, relativeVelocity, material.staticFriction, material.dynamicFriction, stepTime); if (math.abs(impulses.x) > BurstMath.epsilon || math.abs(impulses.y) > BurstMath.epsilon) { @@ -194,8 +190,7 @@ namespace Obi for (int j = 0; j < simplexSize; ++j) { int particleIndex = simplices[simplexStart + j]; - //(tangentImpulse * contact.tangentInvMassA + bitangentImpulse * contact.bitangentInvMassA) * dt; - deltas[particleIndex] += (tangentImpulse * contact.tangentInvMassA + bitangentImpulse * contact.bitangentInvMassA) * substepTime * contact.pointA[j] * baryScale; + deltas[particleIndex] += (tangentImpulse * effectiveMasses[i].tangentInvMassA + bitangentImpulse * effectiveMasses[i].bitangentInvMassA) * substepTime * contact.pointA[j] * baryScale; counts[particleIndex]++; } @@ -208,7 +203,8 @@ namespace Obi if (material.rollingContacts > 0) { // Calculate angular velocity deltas due to friction impulse: - float4x4 solverInertiaA = BurstMath.TransformInertiaTensor(invInertiaTensorA, orientationA); + float4 invInertiaTensor = math.rcp(BurstMath.GetParticleInertiaTensor(simplexRadiiA, invRotationalMassA) + new float4(BurstMath.epsilon)); + float4x4 solverInertiaA = BurstMath.TransformInertiaTensor(invInertiaTensor, orientationA); float4 angVelDeltaA = math.mul(solverInertiaA, new float4(math.cross(rA.xyz, totalImpulse.xyz), 0)); float4 angVelDeltaB = float4.zero; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs index 602e3b3f1..5110160a2 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs @@ -1,9 +1,8 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System; -using Unity.Jobs; using Unity.Burst; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; using Unity.Mathematics; namespace Obi @@ -12,10 +11,6 @@ namespace Obi { public NativeList fluidParticles; - public NativeArray eta; - public NativeArray smoothPositions; - public NativeArray anisotropies; - public BurstDensityConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Density) { fluidParticles = new NativeList(Allocator.Persistent); @@ -39,12 +34,12 @@ namespace Obi batch.Destroy(); } - protected override JobHandle EvaluateSequential(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + protected override JobHandle EvaluateSequential(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { - return EvaluateParallel(inputDeps, stepTime, substepTime, substeps); + return EvaluateParallel(inputDeps, stepTime, substepTime, steps, timeLeft); } - protected override JobHandle EvaluateParallel(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + protected override JobHandle EvaluateParallel(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { inputDeps = UpdateInteractions(inputDeps); @@ -53,15 +48,41 @@ namespace Obi { if (batches[i].enabled) { - inputDeps = batches[i].Evaluate(inputDeps, stepTime, substepTime, substeps); + inputDeps = batches[i].Evaluate(inputDeps, stepTime, substepTime, steps, timeLeft); m_Solver.ScheduleBatchedJobsIfNeeded(); } } - // calculate per-particle lambdas: + // calculate per-particle density lambdas: inputDeps = CalculateLambdas(inputDeps, substepTime); - // then apply them: + // calculate viscosity/vorticity: + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + inputDeps = batches[i].ViscosityAndVorticity(inputDeps); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + } + + // apply viscosity/vorticity positional deltas: + var app = new ApplyPositionDeltasJob() + { + fluidParticles = fluidParticles, + positions = m_Solver.positions, + deltas = m_Solver.positionDeltas, + counts = m_Solver.positionConstraintCounts, + anisotropies = m_Solver.anisotropies, + normals = m_Solver.normals, + fluidData = m_Solver.fluidData, + matchingRotations = m_Solver.orientationDeltas, + linearFromAngular = m_Solver.restPositions, + }; + + inputDeps = app.Schedule(fluidParticles.Length, 64, inputDeps); + + // apply density positional deltas: for (int i = 0; i < batches.Count; ++i) { if (batches[i].enabled) @@ -74,29 +95,23 @@ namespace Obi return inputDeps; } + public JobHandle CalculateVelocityCorrections(JobHandle inputDeps, float deltaTime) + { + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + inputDeps = batches[i].CalculateNormals(inputDeps, deltaTime); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + } + + return inputDeps; + } + public JobHandle ApplyVelocityCorrections(JobHandle inputDeps, float deltaTime) { - eta = new NativeArray(((BurstSolverImpl)solver).particleCount, Allocator.TempJob); - - for (int i = 0; i < batches.Count; ++i) - { - if (batches[i].enabled) - { - inputDeps = batches[i].CalculateViscosityAndNormals(inputDeps, deltaTime); - m_Solver.ScheduleBatchedJobsIfNeeded(); - } - } - - for (int i = 0; i < batches.Count; ++i) - { - if (batches[i].enabled) - { - inputDeps = batches[i].CalculateVorticity(inputDeps); - m_Solver.ScheduleBatchedJobsIfNeeded(); - } - } - - inputDeps = ApplyVorticityAndAtmosphere(inputDeps, deltaTime); + inputDeps = ApplyAtmosphere(inputDeps, deltaTime); m_Solver.ScheduleBatchedJobsIfNeeded(); return inputDeps; @@ -106,10 +121,7 @@ namespace Obi { // if the constraints are deactivated or we need no anisotropy: if (((BurstSolverImpl)solver).abstraction.parameters.maxAnisotropy <= 1) - return IdentityAnisotropy(inputDeps); - - smoothPositions = new NativeArray(((BurstSolverImpl)solver).particleCount, Allocator.TempJob); - anisotropies = new NativeArray(((BurstSolverImpl)solver).particleCount, Allocator.TempJob); + return inputDeps; for (int i = 0; i < batches.Count; ++i) { @@ -139,8 +151,11 @@ namespace Obi // clear existing fluid data: var clearData = new ClearFluidDataJob() { - fluidParticles = fluidParticles.AsDeferredJobArray(), - fluidData = ((BurstSolverImpl)solver).abstraction.fluidData.AsNativeArray(), + fluidParticles = fluidParticles, + fluidData = m_Solver.fluidData, + massCenters = m_Solver.normals, + prevMassCenters = m_Solver.renderablePositions, + moments = m_Solver.anisotropies }; inputDeps = clearData.Schedule(fluidParticles.Length, 64, inputDeps); @@ -150,7 +165,7 @@ namespace Obi { pairs = m_Solver.fluidInteractions, positions = m_Solver.positions, - radii = m_Solver.smoothingRadii, + fluidMaterials = m_Solver.fluidMaterials, densityKernel = new Poly6Kernel(((BurstSolverImpl)solver).abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), gradientKernel = new SpikyKernel(((BurstSolverImpl)solver).abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), }; @@ -161,64 +176,65 @@ namespace Obi private JobHandle CalculateLambdas(JobHandle inputDeps, float deltaTime) { // calculate lagrange multipliers: - var calculateLambdas = new CalculateLambdasJob() + var calculateLambdas = new CalculateLambdasJob { - fluidParticles = fluidParticles.AsDeferredJobArray(), - invMasses = m_Solver.invMasses, - radii = m_Solver.smoothingRadii, - restDensities = m_Solver.restDensities, - surfaceTension = m_Solver.surfaceTension, + fluidParticles = fluidParticles, + positions = m_Solver.positions, + prevPositions = m_Solver.prevPositions, + matchingRotations = m_Solver.restPositions.Reinterpret(), + principalRadii = m_Solver.principalRadii, + fluidMaterials = m_Solver.fluidMaterials, densityKernel = new Poly6Kernel(m_Solver.abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), gradientKernel = new SpikyKernel(m_Solver.abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), - normals = m_Solver.normals, - vorticity = m_Solver.vorticities, - fluidData = m_Solver.fluidData + fluidData = m_Solver.fluidData, + + massCenters = m_Solver.normals, + prevMassCenters = m_Solver.renderablePositions, + moments = m_Solver.anisotropies, + + deltas = m_Solver.positionDeltas, + counts = m_Solver.positionConstraintCounts, + + solverParams = m_Solver.abstraction.parameters }; return calculateLambdas.Schedule(fluidParticles.Length,64,inputDeps); } - private JobHandle ApplyVorticityAndAtmosphere(JobHandle inputDeps, float deltaTime) + private JobHandle ApplyAtmosphere(JobHandle inputDeps, float deltaTime) { - // calculate lagrange multipliers: - var conf = new ApplyVorticityConfinementAndAtmosphere() + var conf = new ApplyAtmosphereJob { - fluidParticles = fluidParticles.AsDeferredJobArray(), + fluidParticles = fluidParticles, wind = m_Solver.wind, - vorticities = m_Solver.vorticities, - eta = eta, - atmosphericDrag = m_Solver.athmosphericDrag, - atmosphericPressure = m_Solver.athmosphericPressure, - vorticityConfinement = m_Solver.vortConfinement, - restDensities = m_Solver.restDensities, + fluidInterface = m_Solver.fluidInterface, + fluidMaterials2 = m_Solver.fluidMaterials2, + principalRadii = m_Solver.principalRadii, normals = m_Solver.normals, fluidData = m_Solver.fluidData, velocities = m_Solver.velocities, - dt = deltaTime + angularVelocities = m_Solver.angularVelocities, + vorticity = m_Solver.restOrientations.Reinterpret(), + vorticityAccelerations = m_Solver.orientationDeltas.Reinterpret(), + linearAccelerations = m_Solver.positionDeltas, + linearFromAngular = m_Solver.restPositions, + angularDiffusion = m_Solver.anisotropies, + positions = m_Solver.positions, + prevPositions = m_Solver.prevPositions, + dt = deltaTime, + solverParams = m_Solver.abstraction.parameters }; return conf.Schedule(fluidParticles.Length, 64, inputDeps); } - private JobHandle IdentityAnisotropy(JobHandle inputDeps) - { - var idAnisotropy = new IdentityAnisotropyJob() - { - fluidParticles = fluidParticles.AsDeferredJobArray(), - principalAxes = m_Solver.anisotropies, - radii = m_Solver.principalRadii - }; - - return idAnisotropy.Schedule(fluidParticles.Length, 64, inputDeps); - } - private JobHandle AverageSmoothPositions(JobHandle inputDeps) { var average = new AverageSmoothPositionsJob() { - fluidParticles = fluidParticles.AsDeferredJobArray(), + fluidParticles = fluidParticles, renderablePositions = m_Solver.renderablePositions, - smoothPositions = smoothPositions + anisotropies = m_Solver.anisotropies }; return average.Schedule(fluidParticles.Length, 64, inputDeps); @@ -228,13 +244,16 @@ namespace Obi { var average = new AverageAnisotropyJob() { - fluidParticles = fluidParticles.AsDeferredJobArray(), + fluidParticles = fluidParticles, renderablePositions = m_Solver.renderablePositions, - smoothPositions = smoothPositions, + renderableOrientations = m_Solver.renderableOrientations, principalRadii = m_Solver.principalRadii, - anisotropies = anisotropies, + anisotropies = m_Solver.anisotropies, maxAnisotropy = m_Solver.abstraction.parameters.maxAnisotropy, - principalAxes = m_Solver.anisotropies + renderableRadii = m_Solver.renderableRadii, + fluidData = m_Solver.fluidData, + life = m_Solver.life, + solverParams = m_Solver.abstraction.parameters }; return average.Schedule(fluidParticles.Length, 64, inputDeps); @@ -243,12 +262,19 @@ namespace Obi [BurstCompile] public struct ClearFluidDataJob : IJobParallelFor { - [ReadOnly] public NativeArray fluidParticles; + [ReadOnly] public NativeList fluidParticles; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray fluidData; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray massCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray prevMassCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray moments; public void Execute(int i) { - fluidData[fluidParticles[i]] = float4.zero; + int p = fluidParticles[i]; + fluidData[p] = float4.zero; + massCenters[p] = float4.zero; + prevMassCenters[p] = float4.zero; + moments[p] = float4x4.zero; } } @@ -256,7 +282,7 @@ namespace Obi public struct UpdateInteractionsJob : IJobParallelFor { [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray fluidMaterials; [ReadOnly] public Poly6Kernel densityKernel; [ReadOnly] public SpikyKernel gradientKernel; @@ -269,16 +295,16 @@ namespace Obi var pair = pairs[i]; // calculate normalized gradient vector: - pair.gradient = (positions[pair.particleA] - positions[pair.particleB]); + pair.gradient = new float4((positions[pair.particleA] - positions[pair.particleB]).xyz,0); float distance = math.length(pair.gradient); pair.gradient /= distance + math.FLT_MIN_NORMAL; // calculate and store average density and gradient kernels: - pair.avgKernel = (densityKernel.W(distance, radii[pair.particleA]) + - densityKernel.W(distance, radii[pair.particleB])) * 0.5f; + pair.avgKernel = (densityKernel.W(distance, fluidMaterials[pair.particleA].x) + + densityKernel.W(distance, fluidMaterials[pair.particleB].x)) * 0.5f; - pair.avgGradient = (gradientKernel.W(distance, radii[pair.particleA]) + - gradientKernel.W(distance, radii[pair.particleB])) * 0.5f; + pair.avgGradient = (gradientKernel.W(distance, fluidMaterials[pair.particleA].x) + + gradientKernel.W(distance, fluidMaterials[pair.particleB].x)) * 0.5f; pairs[i] = pair; } @@ -287,164 +313,239 @@ namespace Obi [BurstCompile] public struct CalculateLambdasJob : IJobParallelFor { - [ReadOnly] public NativeArray fluidParticles; - [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray radii; - [ReadOnly] public NativeArray restDensities; - [ReadOnly] public NativeArray surfaceTension; + [ReadOnly] public NativeList fluidParticles; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray fluidMaterials; [ReadOnly] public Poly6Kernel densityKernel; - [ReadOnly] public SpikyKernel gradientKernel; + [ReadOnly] public SpikyKernel gradientKernel; + + [ReadOnly] public Oni.SolverParameters solverParams; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray normals; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray vorticity; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray fluidData; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray massCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray prevMassCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray moments; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray matchingRotations; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + public void Execute(int p) { int i = fluidParticles[p]; - normals[i] = float4.zero; - vorticity[i] = float4.zero; - + float restVolume = math.pow(principalRadii[i].x * 2, 3 - (int)solverParams.mode); float4 data = fluidData[i]; - float grad = gradientKernel.W(0, radii[i]) / invMasses[i] / restDensities[i]; + float grad = restVolume * gradientKernel.W(0, fluidMaterials[i].x); - // self particle contribution to density and gradient: - data += new float4(densityKernel.W(0, radii[i]), 0, grad, grad * grad + data[2] * data[2]); + // self particle contribution to density, gradient and mass centers: + data += new float4(densityKernel.W(0, fluidMaterials[i].x), 0, grad, grad * grad + data[2] * data[2]); + massCenters[i] += new float4(positions[i].xyz, 1) / positions[i].w; + prevMassCenters[i] += new float4(prevPositions[i].xyz, 1) / positions[i].w; - // weight by mass: - data[0] /= invMasses[i]; - - // evaluate density constraint (clamp pressure): - float constraint = math.max(-0.5f * surfaceTension[i], data[0] / restDensities[i] - 1); + // usually, we'd weight density by mass (density contrast formulation) by dividing by invMass. Then, multiply by invMass when + // calculating the state equation (density / restDensity - 1, restDensity = mass / volume, so density * invMass * restVolume - 1 + // We end up with density / invMass * invMass * restVolume - 1, invMass cancels out. + float constraint = math.max(0, data[0] * restVolume - 1) * fluidMaterials[i].w; // calculate lambda: - data[1] = -constraint / (invMasses[i] * data[3] + math.FLT_MIN_NORMAL); + data[1] = -constraint / (positions[i].w * data[3] + math.FLT_MIN_NORMAL); fluidData[i] = data; + + // get total neighborhood mass: + float M = massCenters[i][3]; + massCenters[i] /= massCenters[i][3]; + prevMassCenters[i] /= prevMassCenters[i][3]; + + // update moments: + moments[i] += (BurstMath.multrnsp4(positions[i], prevPositions[i]) + float4x4.identity * math.pow(principalRadii[i].x, 2) * 0.001f) / positions[i].w; + moments[i] -= M * BurstMath.multrnsp4(massCenters[i], prevMassCenters[i]); + + // extract neighborhood orientation delta: + matchingRotations[i] = BurstMath.ExtractRotation(moments[i], quaternion.identity, 5); + + // viscosity and vorticity: + float4 viscGoal = new float4(massCenters[i].xyz + math.rotate(matchingRotations[i], (prevPositions[i] - prevMassCenters[i]).xyz), 0); + deltas[i] += (viscGoal - positions[i]) * fluidMaterials[i].z; + + counts[i]++; + } + } + + [BurstCompile] + public struct ApplyPositionDeltasJob : IJobParallelFor + { + [ReadOnly] public NativeList fluidParticles; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray normals; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray anisotropies; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray matchingRotations; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray linearFromAngular; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray fluidData; + + public void Execute(int p) + { + int i = fluidParticles[p]; + + if (counts[i] > 0) + { + positions[i] += new float4(deltas[i].xyz,0) / counts[i]; + deltas[i] = float4.zero; + counts[i] = 0; + } + + normals[i] = float4.zero; + anisotropies[i] = float4x4.zero; + linearFromAngular[i] = float4.zero; + matchingRotations[i] = new quaternion(0, 0, 0, 0); + + // zero out fluidData.z in preparation to accumulate relative velocity. + float4 data = fluidData[i]; + data.z = 0; + fluidData[i] = data; } } [BurstCompile] - public struct ApplyVorticityConfinementAndAtmosphere : IJobParallelFor + public struct ApplyAtmosphereJob : IJobParallelFor { - [ReadOnly] public NativeArray fluidParticles; + [ReadOnly] public NativeList fluidParticles; [ReadOnly] public NativeArray wind; - [ReadOnly] public NativeArray vorticities; - [ReadOnly] public NativeArray atmosphericDrag; - [ReadOnly] public NativeArray atmosphericPressure; - [ReadOnly] public NativeArray vorticityConfinement; - [ReadOnly] public NativeArray restDensities; + [ReadOnly] public NativeArray fluidInterface; + [ReadOnly] public NativeArray fluidMaterials2; + [ReadOnly] public NativeArray principalRadii; [ReadOnly] public NativeArray normals; [ReadOnly] public NativeArray fluidData; + [ReadOnly] public NativeArray linearFromAngular; - [DeallocateOnJobCompletion] [ReadOnly] public NativeArray eta; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray prevPositions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray linearAccelerations; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray vorticityAccelerations; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray vorticity; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray angularDiffusion; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray angularVelocities; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray velocities; [ReadOnly] public float dt; + [ReadOnly] public Oni.SolverParameters solverParams; public void Execute(int p) { int i = fluidParticles[p]; + float restVolume = math.pow(principalRadii[i].x * 2, 3 - (int)solverParams.mode); + //atmospheric drag: float4 velocityDiff = velocities[i] - wind[i]; // particles near the surface should experience drag: - velocities[i] -= atmosphericDrag[i] * velocityDiff * math.max(0, 1 - fluidData[i][0] / restDensities[i]) * dt; + velocities[i] -= fluidInterface[i].x * velocityDiff * math.max(0, 1 - fluidData[i][0] * restVolume) * dt; // ambient pressure: - velocities[i] += atmosphericPressure[i] * normals[i] * dt; + velocities[i] += fluidInterface[i].y * normals[i] * dt; - // apply vorticity confinement: - velocities[i] += new float4(math.cross(math.normalizesafe(eta[i]).xyz,vorticities[i].xyz), 0) * vorticityConfinement[i] * dt; - } - } + // angular accel due to baroclinity: + angularVelocities[i] += new float4(fluidMaterials2[i].z * math.cross(-normals[i].xyz, -velocityDiff.xyz), 0) * dt; + angularVelocities[i] -= fluidMaterials2[i].w * angularDiffusion[i].c0; - [BurstCompile] - public struct IdentityAnisotropyJob : IJobParallelFor - { - [ReadOnly] public NativeArray fluidParticles; - [ReadOnly] public NativeArray radii; + // micropolar vorticity: + velocities[i] += fluidMaterials2[i].x * linearAccelerations[i] * dt; + vorticity[i] += fluidMaterials2[i].x * (vorticityAccelerations[i] * 0.5f - vorticity[i]) * dt; + vorticity[i] -= fluidMaterials2[i].y * angularDiffusion[i].c1; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray principalAxes; + linearAccelerations[i] = float4.zero; + vorticityAccelerations[i] = float4.zero; + angularDiffusion[i] = float4x4.zero; - public void Execute(int p) - { - int i = fluidParticles[p]; - - // align the principal axes of the particle with the solver axes: - principalAxes[i * 3] = new float4(1,0,0,radii[i].x); - principalAxes[i * 3 + 1] = new float4(0,1,0,radii[i].x); - principalAxes[i * 3 + 2] = new float4(0,0,1,radii[i].x); + // we want to add together linear and angular velocity fields and use result to advect particles without modifying either field: + positions[i] += new float4(linearFromAngular[i].xyz * dt,0); + prevPositions[i] += new float4(linearFromAngular[i].xyz * dt, 0); } } [BurstCompile] public struct AverageSmoothPositionsJob : IJobParallelFor { - [ReadOnly] public NativeArray fluidParticles; + [ReadOnly] public NativeList fluidParticles; [ReadOnly] public NativeArray renderablePositions; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray smoothPositions; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray anisotropies; public void Execute(int p) { int i = fluidParticles[p]; - if (smoothPositions[i].w > 0) - smoothPositions[i] /= smoothPositions[i].w; + var smoothPos = anisotropies[i]; + + if (smoothPos.c3.w > 0) + smoothPos.c3 /= smoothPos.c3.w; else - smoothPositions[i] = renderablePositions[i]; + smoothPos.c3.xyz = renderablePositions[i].xyz; + + anisotropies[i] = smoothPos; } } [BurstCompile] public struct AverageAnisotropyJob : IJobParallelFor { - [ReadOnly] public NativeArray fluidParticles; + [ReadOnly] public NativeList fluidParticles; [ReadOnly] public NativeArray principalRadii; [ReadOnly] public float maxAnisotropy; + [ReadOnly] public NativeArray anisotropies; + [ReadOnly] public NativeArray life; - [ReadOnly] - [DeallocateOnJobCompletion] - public NativeArray smoothPositions; - - [ReadOnly] - [DeallocateOnJobCompletion] - public NativeArray anisotropies; - + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray fluidData; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray renderablePositions; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray principalAxes; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray renderableOrientations; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray renderableRadii; + + [ReadOnly] public Oni.SolverParameters solverParams; public void Execute(int p) { int i = fluidParticles[p]; - if (smoothPositions[i].w > 0 && (anisotropies[i].c0[0] + anisotropies[i].c1[1] + anisotropies[i].c2[2]) > 0.01f) + if (anisotropies[i].c3.w > 0 && (anisotropies[i].c0[0] + anisotropies[i].c1[1] + anisotropies[i].c2[2]) > 0.01f) { float3 singularValues; float3x3 u; - BurstMath.EigenSolve(anisotropies[i] / smoothPositions[i].w, out singularValues, out u); + BurstMath.EigenSolve(math.float3x3(anisotropies[i] / anisotropies[i].c3.w), out singularValues, out u); float max = singularValues[0]; float3 s = math.max(singularValues,new float3(max / maxAnisotropy)) / max * principalRadii[i].x; - principalAxes[i * 3] = new float4(u.c0, s.x); - principalAxes[i * 3 + 1] = new float4(u.c1, s.y); - principalAxes[i * 3 + 2] = new float4(u.c2, s.z); + renderableOrientations[i] = quaternion.LookRotationSafe(u.c2,u.c1); + renderableRadii[i] = new float4(s.xyz,1); } else { float radius = principalRadii[i].x / maxAnisotropy; - principalAxes[i * 3] = new float4(1, 0, 0, radius); - principalAxes[i * 3 + 1] = new float4(0, 1, 0, radius); - principalAxes[i * 3 + 2] = new float4(0, 0, 1, radius); + renderableOrientations[i] = quaternion.identity; + renderableRadii[i] = new float4(radius,radius,radius,1); + + float4 data = fluidData[i]; + data.x = 1 / math.pow(math.abs(radius * 2), 3 - (int)solverParams.mode); // normal volume of an isolated particle. + fluidData[i] = data; } - renderablePositions[i] = smoothPositions[i]; + renderablePositions[i] = math.lerp(renderablePositions[i], anisotropies[i].c3, math.min((maxAnisotropy - 1)/3.0f,1)); + + // inactive particles have radii.w == 0, set it right away for particles killed during this frame + // to keep them from being rendered during this frame instead of waiting to do it at the start of next sim step: + float4 radii = renderableRadii[i]; + radii.w = life[i] <= 0 ? 0 : radii.w; + renderableRadii[i] = radii; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs index c44762137..c37438008 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs @@ -1,11 +1,9 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; using Unity.Jobs; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using Unity.Mathematics; using Unity.Burst; -using System.Collections; namespace Obi { @@ -19,12 +17,12 @@ namespace Obi m_ConstraintType = Oni.ConstraintType.Density; } - public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { return inputDeps; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { // update densities and gradients: @@ -32,13 +30,16 @@ namespace Obi { pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, positions = solverImplementation.positions, - invMasses = solverImplementation.invMasses, - restDensities = solverImplementation.restDensities, - diffusion = solverImplementation.diffusion, - userData = solverImplementation.userData, + prevPositions = solverImplementation.prevPositions, + principalRadii = solverImplementation.principalRadii, + fluidMaterials = solverImplementation.fluidMaterials, fluidData = solverImplementation.fluidData, + moments = solverImplementation.anisotropies, + massCenters = solverImplementation.normals, + prevMassCenters = solverImplementation.renderablePositions, + densityKernel = new Poly6Kernel(solverAbstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), batchData = batchData, - dt = substepTime + solverParams = solverAbstraction.parameters }; int batchCount = batchData.isLast ? batchData.workItemCount : 1; @@ -52,15 +53,14 @@ namespace Obi // update densities and gradients: var apply = new ApplyDensityConstraintsJob() { - invMasses = solverImplementation.invMasses, - radii = solverImplementation.smoothingRadii, - restDensities = solverImplementation.restDensities, - surfaceTension = solverImplementation.surfaceTension, + principalRadii = solverImplementation.principalRadii, + fluidMaterials = solverImplementation.fluidMaterials, pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, densityKernel = new Poly6Kernel(solverAbstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), positions = solverImplementation.positions, fluidData = solverImplementation.fluidData, batchData = batchData, + solverParams = solverAbstraction.parameters, sorFactor = parameters.SORFactor }; @@ -68,36 +68,54 @@ namespace Obi return apply.Schedule(batchData.workItemCount, batchCount, inputDeps); } - public JobHandle CalculateViscosityAndNormals(JobHandle inputDeps, float deltaTime) + public JobHandle CalculateNormals(JobHandle inputDeps, float deltaTime) { - var viscosity = new NormalsViscosityAndVorticityJob() + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + + var vorticity = new NormalsJob() { - positions = solverImplementation.positions, invMasses = solverImplementation.invMasses, - radii = solverImplementation.smoothingRadii, - restDensities = solverImplementation.restDensities, - viscosities = solverImplementation.viscosities, + positions = solverImplementation.positions, + principalRadii = solverImplementation.principalRadii, + fluidMaterials = solverImplementation.fluidMaterials, + fluidMaterials2 = solverImplementation.fluidMaterials2, fluidData = solverImplementation.fluidData, - pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, + fluidInterface = solverImplementation.fluidInterface, velocities = solverImplementation.velocities, - vorticities = solverImplementation.vorticities, + angularVelocities = solverImplementation.angularVelocities, + + vorticityAccelerations = solverImplementation.orientationDeltas.Reinterpret(), + vorticity = solverImplementation.restOrientations.Reinterpret(), + linearAccelerations = solverImplementation.positionDeltas, + linearFromAngular = solverImplementation.restPositions, + angularDiffusion = solverImplementation.anisotropies, + + userData = solverImplementation.userData, + pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, normals = solverImplementation.normals, - batchData = batchData + densityKernel = new Poly6Kernel(solverAbstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), + gradKernel = new SpikyKernel(solverAbstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), + solverParams = solverAbstraction.parameters, + batchData = batchData, + dt = deltaTime, }; - int batchCount = batchData.isLast ? batchData.workItemCount : 1; - return viscosity.Schedule(batchData.workItemCount, batchCount, inputDeps); + return vorticity.Schedule(batchData.workItemCount, batchCount, inputDeps); } - public JobHandle CalculateVorticity(JobHandle inputDeps) + public JobHandle ViscosityAndVorticity(JobHandle inputDeps) { - var eta = new CalculateVorticityEta() + var eta = new ViscosityVorticityJob() { - invMasses = solverImplementation.invMasses, - restDensities = solverImplementation.restDensities, + positions = solverImplementation.positions, + prevPositions = solverImplementation.prevPositions, + matchingRotations = solverImplementation.restPositions.Reinterpret(), pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, - vorticities = solverImplementation.vorticities, - eta = ((BurstDensityConstraints)this.constraints).eta, + massCenters = solverImplementation.normals, + prevMassCenters = solverImplementation.renderablePositions, + fluidParams = solverImplementation.fluidMaterials, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, batchData = batchData }; @@ -110,8 +128,8 @@ namespace Obi var accumulateSmooth = new AccumulateSmoothPositionsJob() { renderablePositions = solverImplementation.renderablePositions, - smoothPositions = ((BurstDensityConstraints)this.constraints).smoothPositions, - radii = solverImplementation.smoothingRadii, + anisotropies = solverImplementation.anisotropies, + fluidMaterials = solverImplementation.fluidMaterials, densityKernel = new Poly6Kernel(solverAbstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, batchData = batchData @@ -126,8 +144,7 @@ namespace Obi var accumulateAnisotropy = new AccumulateAnisotropyJob() { renderablePositions = solverImplementation.renderablePositions, - smoothPositions = ((BurstDensityConstraints)this.constraints).smoothPositions, - anisotropies = ((BurstDensityConstraints)this.constraints).anisotropies, + anisotropies = solverImplementation.anisotropies, pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, batchData = batchData }; @@ -140,17 +157,21 @@ namespace Obi public struct UpdateDensitiesJob : IJobParallelFor { [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray restDensities; - [ReadOnly] public NativeArray diffusion; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray fluidMaterials; + [ReadOnly] public NativeArray principalRadii; [ReadOnly] public NativeArray pairs; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray userData; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray fluidData; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray moments; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray massCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray prevMassCenters; + + [ReadOnly] public Poly6Kernel densityKernel; [ReadOnly] public BatchData batchData; - [ReadOnly] public float dt; + [ReadOnly] public Oni.SolverParameters solverParams; public void Execute(int workItemIndex) { @@ -161,8 +182,8 @@ namespace Obi { var pair = pairs[i]; - float restVolumeA = 1.0f / invMasses[pair.particleA] / restDensities[pair.particleA]; - float restVolumeB = 1.0f / invMasses[pair.particleB] / restDensities[pair.particleB]; + float restVolumeA = math.pow(principalRadii[pair.particleA].x * 2, 3 - (int)solverParams.mode); + float restVolumeB = math.pow(principalRadii[pair.particleB].x * 2, 3 - (int)solverParams.mode); float gradA = restVolumeB * pair.avgGradient; float gradB = restVolumeA * pair.avgGradient; @@ -174,11 +195,17 @@ namespace Obi fluidData[pair.particleA] += new float4(vA * pair.avgKernel, 0, gradA, gradA * gradA); fluidData[pair.particleB] += new float4(vB * pair.avgKernel, 0, gradB, gradB * gradB); - // property diffusion: - float diffusionSpeed = (diffusion[pair.particleA] + diffusion[pair.particleB]) * pair.avgKernel * dt; - float4 userDelta = (userData[pair.particleB] - userData[pair.particleA]) * diffusionSpeed; - userData[pair.particleA] += vA * userDelta; - userData[pair.particleB] -= vB * userDelta; + // accumulate masses for COMs and moment matrices: + float wAvg = pair.avgKernel / ((densityKernel.W(0, fluidMaterials[pair.particleA].x) + densityKernel.W(0, fluidMaterials[pair.particleB].x)) * 0.5f); + + massCenters[pair.particleA] += wAvg * new float4(positions[pair.particleB].xyz, 1) / positions[pair.particleB].w; + massCenters[pair.particleB] += wAvg * new float4(positions[pair.particleA].xyz, 1) / positions[pair.particleA].w; + + prevMassCenters[pair.particleA] += wAvg * new float4(prevPositions[pair.particleB].xyz, 1) / positions[pair.particleB].w; + prevMassCenters[pair.particleB] += wAvg * new float4(prevPositions[pair.particleA].xyz, 1) / positions[pair.particleA].w; + + moments[pair.particleA] += wAvg * (BurstMath.multrnsp4(positions[pair.particleB], prevPositions[pair.particleB]) + float4x4.identity * math.pow(principalRadii[pair.particleB].x, 2) * 0.001f) / positions[pair.particleB].w; + moments[pair.particleB] += wAvg * (BurstMath.multrnsp4(positions[pair.particleA], prevPositions[pair.particleA]) + float4x4.identity * math.pow(principalRadii[pair.particleA].x, 2) * 0.001f) / positions[pair.particleA].w; } } } @@ -186,18 +213,18 @@ namespace Obi [BurstCompile] public struct ApplyDensityConstraintsJob : IJobParallelFor { - [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray radii; - [ReadOnly] public NativeArray restDensities; - [ReadOnly] public NativeArray surfaceTension; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray fluidMaterials; [ReadOnly] public NativeArray pairs; [ReadOnly] public Poly6Kernel densityKernel; + [ReadOnly] public CohesionKernel cohesionKernel; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray positions; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray fluidData; [ReadOnly] public BatchData batchData; [ReadOnly] public float sorFactor; + [ReadOnly] public Oni.SolverParameters solverParams; public void Execute(int workItemIndex) { @@ -208,36 +235,41 @@ namespace Obi { var pair = pairs[i]; - float restVolumeA = 1.0f / invMasses[pair.particleA] / restDensities[pair.particleA]; - float restVolumeB = 1.0f / invMasses[pair.particleB] / restDensities[pair.particleB]; + float restVolumeA = math.pow(principalRadii[pair.particleA].x * 2, 3 - (int)solverParams.mode); + float restVolumeB = math.pow(principalRadii[pair.particleB].x * 2, 3 - (int)solverParams.mode); + + float dist = math.length(positions[pair.particleA].xyz - positions[pair.particleB].xyz); // TODO: FIX! we cant read positions while we are writing to them. // calculate tensile instability correction factor: - float wAvg = pair.avgKernel / ((densityKernel.W(0, radii[pair.particleA]) + densityKernel.W(0, radii[pair.particleB])) * 0.5f); - float scorrA = -(0.001f + 0.2f * surfaceTension[pair.particleA]) * wAvg / (invMasses[pair.particleA] * fluidData[pair.particleA][3]); - float scorrB = -(0.001f + 0.2f * surfaceTension[pair.particleB]) * wAvg / (invMasses[pair.particleB] * fluidData[pair.particleB][3]); + float cAvg = (cohesionKernel.W(dist, fluidMaterials[pair.particleA].x * 1.4f) + cohesionKernel.W(dist, fluidMaterials[pair.particleB].x * 1.4f)) * 0.5f; + float st = 0.2f * cAvg * (1 - math.saturate(math.abs(fluidMaterials[pair.particleA].y - fluidMaterials[pair.particleB].y))) * (fluidMaterials[pair.particleA].y + fluidMaterials[pair.particleB].y) * 0.5f; + float scorrA = -st / (positions[pair.particleA].w * fluidData[pair.particleA][3] + math.FLT_MIN_NORMAL); + float scorrB = -st / (positions[pair.particleB].w * fluidData[pair.particleB][3] + math.FLT_MIN_NORMAL); // calculate position delta: float4 delta = pair.gradient * pair.avgGradient * ((fluidData[pair.particleA][1] + scorrA) * restVolumeB + (fluidData[pair.particleB][1] + scorrB) * restVolumeA) * sorFactor; - positions[pair.particleA] += delta * invMasses[pair.particleA]; - positions[pair.particleB] -= delta * invMasses[pair.particleB]; + delta.w = 0; + positions[pair.particleA] += delta * positions[pair.particleA].w; + positions[pair.particleB] -= delta * positions[pair.particleB].w; + } } } [BurstCompile] - public struct NormalsViscosityAndVorticityJob : IJobParallelFor + public struct ViscosityVorticityJob : IJobParallelFor { [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray radii; - [ReadOnly] public NativeArray restDensities; - [ReadOnly] public NativeArray viscosities; - [ReadOnly] public NativeArray fluidData; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray matchingRotations; + [ReadOnly] public NativeArray fluidParams; [ReadOnly] public NativeArray pairs; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray velocities; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray vorticities; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray normals; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray massCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray prevMassCenters; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; [ReadOnly] public BatchData batchData; @@ -250,41 +282,50 @@ namespace Obi { var pair = pairs[i]; - float restVolumeA = 1.0f / invMasses[pair.particleA] / restDensities[pair.particleA]; - float restVolumeB = 1.0f / invMasses[pair.particleB] / restDensities[pair.particleB]; + float visc = math.min(fluidParams[pair.particleA].z, fluidParams[pair.particleB].z); - // XSPH viscosity: - float viscosityCoeff = math.min(viscosities[pair.particleA], viscosities[pair.particleB]); - float4 relVelocity = velocities[pair.particleB] - velocities[pair.particleA]; - float4 viscosity = viscosityCoeff * relVelocity * pair.avgKernel; - velocities[pair.particleA] += viscosity * restVolumeB; - velocities[pair.particleB] -= viscosity * restVolumeA; + // viscosity: + float4 goalA = new float4(massCenters[pair.particleB].xyz + math.rotate(matchingRotations[pair.particleB], (prevPositions[pair.particleA] - prevMassCenters[pair.particleB]).xyz), 0); + float4 goalB = new float4(massCenters[pair.particleA].xyz + math.rotate(matchingRotations[pair.particleA], (prevPositions[pair.particleB] - prevMassCenters[pair.particleA]).xyz), 0); + deltas[pair.particleA] += (goalA - positions[pair.particleA]) * visc; + deltas[pair.particleB] += (goalB - positions[pair.particleB]) * visc; - // calculate vorticity: - float4 vgrad = pair.gradient * pair.avgGradient; - float4 vorticity = new float4(math.cross(relVelocity.xyz,vgrad.xyz),0); - vorticities[pair.particleA] += vorticity * restVolumeB; - vorticities[pair.particleB] += vorticity * restVolumeA; - - // calculate color field normal: - float radius = (radii[pair.particleA] + radii[pair.particleB]) * 0.5f; - normals[pair.particleA] += vgrad * radius / invMasses[pair.particleB] / fluidData[pair.particleB][0]; - normals[pair.particleB] -= vgrad * radius / invMasses[pair.particleA] / fluidData[pair.particleA][0]; + counts[pair.particleA]++; + counts[pair.particleB]++; } } } [BurstCompile] - public struct CalculateVorticityEta : IJobParallelFor + public struct NormalsJob : IJobParallelFor { - [ReadOnly] public NativeArray vorticities; [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray restDensities; + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray angularVelocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray vorticity; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray pairs; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray eta; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray fluidMaterials; + [ReadOnly] public NativeArray fluidMaterials2; + [ReadOnly] public NativeArray fluidInterface; + [ReadOnly] public NativeArray pairs; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray fluidData; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray userData; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray normals; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray linearAccelerations; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray vorticityAccelerations; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray linearFromAngular; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray angularDiffusion; + + [ReadOnly] public Poly6Kernel densityKernel; + [ReadOnly] public SpikyKernel gradKernel; [ReadOnly] public BatchData batchData; + [ReadOnly] public Oni.SolverParameters solverParams; + [ReadOnly] public float dt; public void Execute(int workItemIndex) { @@ -295,9 +336,70 @@ namespace Obi { var pair = pairs[i]; - float4 vgrad = pair.gradient * pair.avgGradient; - eta[pair.particleA] += math.length(vorticities[pair.particleA]) * vgrad / invMasses[pair.particleB] / restDensities[pair.particleB]; - eta[pair.particleB] -= math.length(vorticities[pair.particleB]) * vgrad / invMasses[pair.particleA] / restDensities[pair.particleA]; + float restVolumeA = math.pow(principalRadii[pair.particleA].x * 2, 3 - (int)solverParams.mode); + float restVolumeB = math.pow(principalRadii[pair.particleB].x * 2, 3 - (int)solverParams.mode); + + float invDensityA = invMasses[pair.particleA] / fluidData[pair.particleA].x; + float invDensityB = invMasses[pair.particleB] / fluidData[pair.particleB].x; + + float3 relVel = velocities[pair.particleA].xyz - velocities[pair.particleB].xyz; + float3 relAng = angularVelocities[pair.particleA].xyz - angularVelocities[pair.particleB].xyz; + float3 relVort = vorticity[pair.particleA].xyz - vorticity[pair.particleB].xyz; + float4 d = new float4((positions[pair.particleA] - positions[pair.particleB]).xyz,0); + float dist = math.length(d); + + float avgGrad = (gradKernel.W(dist, fluidMaterials[pair.particleA].x) + + gradKernel.W(dist, fluidMaterials[pair.particleB].x)) * 0.5f; + float avgKern = (densityKernel.W(dist, fluidMaterials[pair.particleA].x) + + densityKernel.W(dist, fluidMaterials[pair.particleB].x)) * 0.5f; + float avgNorm = (densityKernel.W(0, fluidMaterials[pair.particleA].x) + + densityKernel.W(0, fluidMaterials[pair.particleB].x)) * 0.5f; + + // property diffusion: + float diffusionSpeed = (fluidInterface[pair.particleA].w + fluidInterface[pair.particleB].w) * avgKern * dt; + float4 userDelta = (userData[pair.particleB] - userData[pair.particleA]) * solverParams.diffusionMask * diffusionSpeed; + userData[pair.particleA] += restVolumeB / restVolumeA * userDelta; + userData[pair.particleB] -= restVolumeA / restVolumeB * userDelta; + + // calculate color field normal: + float4 normGrad = d / (dist + BurstMath.epsilon); + float4 vgrad = normGrad * avgGrad; + float radius = (fluidMaterials[pair.particleA].x + fluidMaterials[pair.particleB].x) * 0.5f; + normals[pair.particleA] += vgrad * radius * restVolumeB; + normals[pair.particleB] -= vgrad * radius * restVolumeA; + + // measure relative velocity for foam generation: + float4 dataA = fluidData[pair.particleA]; + float4 dataB = fluidData[pair.particleB]; + float relVelMag = math.length(relVel) + BurstMath.epsilon; + float avgVelDiffKernel = 1 - math.min(1, dist / (radius + BurstMath.epsilon)); + float rv = relVelMag * (1 - math.dot(relVel / relVelMag, normGrad.xyz)) * avgVelDiffKernel; + dataA.z += rv; + dataB.z += rv; + fluidData[pair.particleA] = dataA; + fluidData[pair.particleB] = dataB; + + // micropolar: curl of linear/angular velocity: + float3 velCross = math.cross(relVel, vgrad.xyz); + float3 vortCross = math.cross(relVort, vgrad.xyz); + linearAccelerations[pair.particleA] += new float4(vortCross / invMasses[pair.particleB] * invDensityA, 0); + linearAccelerations[pair.particleB] += new float4(vortCross / invMasses[pair.particleA] * invDensityB, 0); + vorticityAccelerations[pair.particleA] += new float4(velCross / invMasses[pair.particleB] * invDensityA, 0); + vorticityAccelerations[pair.particleB] += new float4(velCross / invMasses[pair.particleA] * invDensityB, 0); + + // angular diffusion: + float4x4 diffA = angularDiffusion[pair.particleA]; + float4x4 diffB = angularDiffusion[pair.particleB]; + diffA.c0 += new float4(relAng * avgKern / invMasses[pair.particleB] * invDensityA, 0); + diffB.c0 -= new float4(relAng * avgKern / invMasses[pair.particleA] * invDensityB, 0); + diffA.c1 += new float4(relVort * avgKern / invMasses[pair.particleB] * invDensityA, 0); + diffB.c1 -= new float4(relVort * avgKern / invMasses[pair.particleA] * invDensityB, 0); + angularDiffusion[pair.particleA] = diffA; + angularDiffusion[pair.particleB] = diffB; + + // linear velocity due to baroclinity: + linearFromAngular[pair.particleA] += new float4(math.cross(angularVelocities[pair.particleB].xyz, d.xyz) * avgKern / avgNorm, 0); + linearFromAngular[pair.particleB] -= new float4(math.cross(angularVelocities[pair.particleA].xyz, d.xyz) * avgKern / avgNorm, 0); } } } @@ -306,10 +408,10 @@ namespace Obi public struct AccumulateSmoothPositionsJob : IJobParallelFor { [ReadOnly] public NativeArray renderablePositions; - [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray fluidMaterials; [ReadOnly] public Poly6Kernel densityKernel; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray smoothPositions; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray anisotropies; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray pairs; [ReadOnly] public BatchData batchData; @@ -323,14 +425,19 @@ namespace Obi { var pair = pairs[i]; - float4 gradient = (renderablePositions[pair.particleA] - renderablePositions[pair.particleB]); - float distance = math.length(gradient); + float distance = math.length((renderablePositions[pair.particleA] - renderablePositions[pair.particleB]).xyz); - pair.avgKernel = (densityKernel.W(distance, radii[pair.particleA]) + - densityKernel.W(distance, radii[pair.particleB])) * 0.5f; + pair.avgKernel = (densityKernel.W(distance, fluidMaterials[pair.particleA].x) + + densityKernel.W(distance, fluidMaterials[pair.particleB].x)) * 0.5f; - smoothPositions[pair.particleA] += new float4(renderablePositions[pair.particleB].xyz,1) * pair.avgKernel; - smoothPositions[pair.particleB] += new float4(renderablePositions[pair.particleA].xyz,1) * pair.avgKernel; + var A = anisotropies[pair.particleA]; + var B = anisotropies[pair.particleB]; + + A.c3 += new float4(renderablePositions[pair.particleB].xyz,1) * pair.avgKernel; + B.c3 += new float4(renderablePositions[pair.particleA].xyz,1) * pair.avgKernel; + + anisotropies[pair.particleA] = A; + anisotropies[pair.particleB] = B; pairs[i] = pair; } @@ -341,10 +448,9 @@ namespace Obi public struct AccumulateAnisotropyJob : IJobParallelFor { [ReadOnly] public NativeArray renderablePositions; - [ReadOnly] public NativeArray smoothPositions; [ReadOnly] public NativeArray pairs; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray anisotropies; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray anisotropies; [ReadOnly] public BatchData batchData; @@ -357,15 +463,15 @@ namespace Obi { var pair = pairs[i]; - float4 distanceA = renderablePositions[pair.particleB] - smoothPositions[pair.particleA]; - float4 distanceB = renderablePositions[pair.particleA] - smoothPositions[pair.particleB]; + float4 distanceA = (renderablePositions[pair.particleB] - anisotropies[pair.particleA].c3) * pair.avgKernel; + float4 distanceB = (renderablePositions[pair.particleA] - anisotropies[pair.particleB].c3) * pair.avgKernel; - anisotropies[pair.particleA] += BurstMath.multrnsp(distanceA,distanceA) * pair.avgKernel; - anisotropies[pair.particleB] += BurstMath.multrnsp(distanceB,distanceB) * pair.avgKernel; + anisotropies[pair.particleA] += BurstMath.multrnsp4(distanceA,distanceA); + anisotropies[pair.particleB] += BurstMath.multrnsp4(distanceB,distanceB); } } } } } -#endif \ No newline at end of file +#endif diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs new file mode 100644 index 000000000..ed30bdf36 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs @@ -0,0 +1,15 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using Unity.Mathematics; + +namespace Obi +{ + public struct CohesionKernel + { + public float W(float r, float h) + { + return math.cos(math.min(r, h) * 3 * math.PI / (2 * h)); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs.meta new file mode 100644 index 000000000..9278ccede --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2bcf975ae59e4fcf9412ec328a3e2b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs index 5bdf72c08..4d83f2e44 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs @@ -39,7 +39,7 @@ namespace Obi applyConstraints.particleIndices = this.particleIndices; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { projectConstraints.positions = solverImplementation.positions; projectConstraints.invMasses = solverImplementation.invMasses; @@ -62,7 +62,7 @@ namespace Obi return applyConstraints.Schedule(m_ConstraintCount, 64, inputDeps); } - [BurstCompile] + [BurstCompile] public struct DistanceConstraintsBatchJob : IJobParallelFor { [ReadOnly] public NativeArray particleIndices; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs index 02bb86246..5401abd7b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs @@ -25,9 +25,7 @@ namespace Obi public override int GetConstraintCount() { - if (!((BurstSolverImpl)solver).particleContacts.IsCreated) - return 0; - return ((BurstSolverImpl)solver).particleContacts.Length; + return ((BurstSolverImpl)solver).abstraction.particleContacts.count; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs index 735144267..e7b438b30 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs @@ -24,7 +24,7 @@ namespace Obi this.batchData = batchData; } - public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var updateContacts = new UpdateParticleContactsJob() { @@ -33,7 +33,7 @@ namespace Obi velocities = solverImplementation.velocities, radii = solverImplementation.principalRadii, invMasses = solverImplementation.invMasses, - invInertiaTensors = solverImplementation.invInertiaTensors, + invRotationalMasses = solverImplementation.invRotationalMasses, simplices = solverImplementation.simplices, simplexCounts = solverImplementation.simplexCounts, @@ -41,7 +41,8 @@ namespace Obi particleMaterialIndices = solverImplementation.collisionMaterials, collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), - contacts = ((BurstSolverImpl)constraints.solver).particleContacts, + contacts = ((BurstSolverImpl)constraints.solver).abstraction.particleContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.particleContactEffectiveMasses.AsNativeArray(), batchData = batchData }; @@ -49,7 +50,7 @@ namespace Obi return updateContacts.Schedule(batchData.workItemCount, batchCount, inputDeps); } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); @@ -60,6 +61,7 @@ namespace Obi invMasses = solverImplementation.invMasses, radii = solverImplementation.principalRadii, particleMaterialIndices = solverImplementation.collisionMaterials, + fluidInterface = solverImplementation.fluidInterface, collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), simplices = solverImplementation.simplices, @@ -67,7 +69,9 @@ namespace Obi deltas = solverImplementation.positionDeltas, counts = solverImplementation.positionConstraintCounts, - contacts = ((BurstSolverImpl)constraints.solver).particleContacts, + userData = solverImplementation.userData, + contacts = solverAbstraction.particleContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.particleContactEffectiveMasses.AsNativeArray(), batchData = batchData, constraintParameters = parameters, @@ -86,7 +90,7 @@ namespace Obi var applyConstraints = new ApplyBatchedCollisionConstraintsBatchJob() { - contacts = ((BurstSolverImpl)constraints.solver).particleContacts, + contacts = solverAbstraction.particleContacts.AsNativeArray(), simplices = solverImplementation.simplices, simplexCounts = solverImplementation.simplexCounts, @@ -117,7 +121,7 @@ namespace Obi [ReadOnly] public NativeArray velocities; [ReadOnly] public NativeArray radii; [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray invInertiaTensors; + [ReadOnly] public NativeArray invRotationalMasses; [ReadOnly] public NativeArray particleMaterialIndices; [ReadOnly] public NativeArray collisionMaterials; @@ -126,6 +130,7 @@ namespace Obi [ReadOnly] public NativeArray simplices; [ReadOnly] public SimplexCounts simplexCounts; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray effectiveMasses; [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray contacts; [ReadOnly] public BatchData batchData; @@ -138,6 +143,7 @@ namespace Obi for (int i = start; i < end; ++i) { var contact = contacts[i]; + var efMasses = effectiveMasses[i]; int simplexStartA = simplexCounts.GetSimplexStartAndSize(contact.bodyA, out int simplexSizeA); int simplexStartB = simplexCounts.GetSimplexStartAndSize(contact.bodyB, out int simplexSizeB); @@ -147,14 +153,14 @@ namespace Obi quaternion simplexPrevOrientationA = new quaternion(0, 0, 0, 0); float simplexRadiusA = 0; float simplexInvMassA = 0; - float4 simplexInvInertiaA = float4.zero; + float simplexInvRotationalMassA = 0; float4 simplexVelocityB = float4.zero; float4 simplexPrevPositionB = float4.zero; quaternion simplexPrevOrientationB = new quaternion(0, 0, 0, 0); float simplexRadiusB = 0; float simplexInvMassB = 0; - float4 simplexInvInertiaB = float4.zero; + float simplexInvRotationalMassB = 0; for (int j = 0; j < simplexSizeA; ++j) { @@ -163,7 +169,7 @@ namespace Obi simplexPrevPositionA += prevPositions[particleIndex] * contact.pointA[j]; simplexPrevOrientationA.value += prevOrientations[particleIndex].value * contact.pointA[j]; simplexInvMassA += invMasses[particleIndex] * contact.pointA[j]; - simplexInvInertiaA += invInertiaTensors[particleIndex] * contact.pointA[j]; + simplexInvRotationalMassA += invRotationalMasses[particleIndex] * contact.pointA[j]; simplexRadiusA += BurstMath.EllipsoidRadius(contact.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; } @@ -174,20 +180,21 @@ namespace Obi simplexPrevPositionB += prevPositions[particleIndex] * contact.pointB[j]; simplexPrevOrientationB.value += prevOrientations[particleIndex].value * contact.pointB[j]; simplexInvMassB += invMasses[particleIndex] * contact.pointB[j]; - simplexInvInertiaB += invInertiaTensors[particleIndex] * contact.pointB[j]; + simplexInvRotationalMassB += invRotationalMasses[particleIndex] * contact.pointB[j]; simplexRadiusB += BurstMath.EllipsoidRadius(contact.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * contact.pointB[j]; } - // update contact distance - float dAB = math.dot(simplexPrevPositionA - simplexPrevPositionB, contact.normal); - contact.distance = dAB - (simplexRadiusA + simplexRadiusB); + simplexPrevPositionA.w = 0; + simplexPrevPositionB.w = 0; - // calculate contact points: - float4 contactPointA = simplexPrevPositionB + contact.normal * (contact.distance + simplexRadiusB); - float4 contactPointB = simplexPrevPositionA - contact.normal * (contact.distance + simplexRadiusA); + // update contact distance + float4 contactPointA = simplexPrevPositionA - contact.normal * simplexRadiusA; + float4 contactPointB = simplexPrevPositionB + contact.normal * simplexRadiusB; + + contact.distance = math.dot(contactPointA - contactPointB, contact.normal); // update contact basis: - contact.CalculateBasis(simplexVelocityA - simplexVelocityB); + contact.CalculateTangent(simplexVelocityA - simplexVelocityB); // update contact masses: int aMaterialIndex = particleMaterialIndices[simplices[simplexStartA]]; @@ -195,10 +202,14 @@ namespace Obi bool rollingContacts = (aMaterialIndex >= 0 ? collisionMaterials[aMaterialIndex].rollingContacts > 0 : false) | (bMaterialIndex >= 0 ? collisionMaterials[bMaterialIndex].rollingContacts > 0 : false); - contact.CalculateContactMassesA(simplexInvMassA, simplexInvInertiaA, simplexPrevPositionA, simplexPrevOrientationA, contactPointA, rollingContacts); - contact.CalculateContactMassesB(simplexInvMassB, simplexInvInertiaB, simplexPrevPositionB, simplexPrevOrientationB, contactPointB, rollingContacts); + float4 invInertiaTensorA = math.rcp(BurstMath.GetParticleInertiaTensor(simplexRadiusA, simplexInvRotationalMassA) + new float4(BurstMath.epsilon)); + float4 invInertiaTensorB = math.rcp(BurstMath.GetParticleInertiaTensor(simplexRadiusB, simplexInvRotationalMassB) + new float4(BurstMath.epsilon)); + + efMasses.CalculateContactMassesA(simplexInvMassA, invInertiaTensorA, simplexPrevPositionA, simplexPrevOrientationA, contactPointA, contact.normal, contact.tangent, contact.bitangent, rollingContacts); + efMasses.CalculateContactMassesB(simplexInvMassB, invInertiaTensorB, simplexPrevPositionB, simplexPrevOrientationB, contactPointB, contact.normal, contact.tangent, contact.bitangent, rollingContacts); contacts[i] = contact; + effectiveMasses[i] = efMasses; } } } @@ -210,6 +221,7 @@ namespace Obi [ReadOnly] public NativeArray invMasses; [ReadOnly] public NativeArray radii; [ReadOnly] public NativeArray particleMaterialIndices; + [ReadOnly] public NativeArray fluidInterface; [ReadOnly] public NativeArray collisionMaterials; // simplex arrays: @@ -218,8 +230,10 @@ namespace Obi [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray userData; [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray contacts; + [ReadOnly] public NativeArray effectiveMasses; [ReadOnly] public Oni.ConstraintParameters constraintParameters; [ReadOnly] public Oni.SolverParameters solverParameters; @@ -240,34 +254,42 @@ namespace Obi int simplexStartA = simplexCounts.GetSimplexStartAndSize(contact.bodyA, out int simplexSizeA); int simplexStartB = simplexCounts.GetSimplexStartAndSize(contact.bodyB, out int simplexSizeB); - // Combine collision materials: BurstCollisionMaterial material = CombineCollisionMaterials(simplices[simplexStartA], simplices[simplexStartB]); float4 simplexPositionA = float4.zero, simplexPositionB = float4.zero; float simplexRadiusA = 0, simplexRadiusB = 0; + float4 simplexUserDataA = float4.zero, simplexUserDataB = float4.zero; + float miscibility = 0; for (int j = 0; j < simplexSizeA; ++j) { int particleIndex = simplices[simplexStartA + j]; simplexPositionA += positions[particleIndex] * contact.pointA[j]; simplexRadiusA += BurstMath.EllipsoidRadius(contact.normal, orientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; + simplexUserDataA += userData[particleIndex] * contact.pointA[j]; + miscibility += fluidInterface[particleIndex].w * contact.pointA[j]; } for (int j = 0; j < simplexSizeB; ++j) { int particleIndex = simplices[simplexStartB + j]; simplexPositionB += positions[particleIndex] * contact.pointB[j]; simplexRadiusB += BurstMath.EllipsoidRadius(contact.normal, orientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; + simplexUserDataB += userData[particleIndex] * contact.pointB[j]; + miscibility += fluidInterface[particleIndex].w * contact.pointB[j]; } + simplexPositionA.w = 0; + simplexPositionB.w = 0; + float4 posA = simplexPositionA - contact.normal * simplexRadiusA; float4 posB = simplexPositionB + contact.normal * simplexRadiusB; // adhesion: - float lambda = contact.SolveAdhesion(posA, posB, material.stickDistance, material.stickiness, substepTime); + float lambda = contact.SolveAdhesion(effectiveMasses[i].TotalNormalInvMass, posA, posB, material.stickDistance, material.stickiness, substepTime); // depenetration: - lambda += contact.SolvePenetration(posA, posB, solverParameters.maxDepenetration * substepTime); + lambda += contact.SolvePenetration(effectiveMasses[i].TotalNormalInvMass, posA, posB, solverParameters.maxDepenetration * substepTime); // Apply normal impulse to both particles (w/ shock propagation): if (math.abs(lambda) > BurstMath.epsilon) @@ -292,20 +314,27 @@ namespace Obi } } + // property diffusion: + if (contact.distance < solverParameters.collisionMargin) + { + float diffusionSpeed = miscibility * 0.5f * substepTime; + float4 userDelta = (simplexUserDataB - simplexUserDataA) * solverParameters.diffusionMask * diffusionSpeed; + + for (int j = 0; j < simplexSizeA; ++j) + userData[simplices[simplexStartA + j]] += userDelta * contact.pointA[j]; + + for (int j = 0; j < simplexSizeB; ++j) + userData[simplices[simplexStartB + j]] -= userDelta * contact.pointB[j]; + } + // Apply position deltas immediately, if using sequential evaluation: if (constraintParameters.evaluationOrder == Oni.ConstraintParameters.EvaluationOrder.Sequential) { for (int j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - BurstConstraintsBatchImpl.ApplyPositionDelta(particleIndex, constraintParameters.SORFactor, ref positions, ref deltas, ref counts); - } + ApplyPositionDelta(simplices[simplexStartA + j], constraintParameters.SORFactor, ref positions, ref deltas, ref counts); for (int j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - BurstConstraintsBatchImpl.ApplyPositionDelta(particleIndex, constraintParameters.SORFactor, ref positions, ref deltas, ref counts); - } + ApplyPositionDelta(simplices[simplexStartB + j], constraintParameters.SORFactor, ref positions, ref deltas, ref counts); } contacts[i] = contact; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs index 3e9974dde..0eda6086a 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs @@ -24,9 +24,7 @@ namespace Obi public override int GetConstraintCount() { - if (!((BurstSolverImpl)solver).particleContacts.IsCreated) - return 0; - return ((BurstSolverImpl)solver).particleContacts.Length; + return ((BurstSolverImpl)solver).abstraction.particleContacts.count; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs index c96cfbd21..f69bc41a3 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs @@ -24,15 +24,13 @@ namespace Obi this.batchData = batchData; } - public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { return inputDeps; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { - if (!((BurstSolverImpl)constraints.solver).particleContacts.IsCreated) - return inputDeps; var projectConstraints = new ParticleFrictionConstraintsBatchJob() { @@ -42,7 +40,7 @@ namespace Obi prevOrientations = solverImplementation.prevOrientations, invMasses = solverImplementation.invMasses, - invInertiaTensors = solverImplementation.invInertiaTensors, + invRotationalMasses = solverImplementation.invRotationalMasses, radii = solverImplementation.principalRadii, particleMaterialIndices = solverImplementation.collisionMaterials, collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), @@ -54,7 +52,8 @@ namespace Obi counts = solverImplementation.positionConstraintCounts, orientationDeltas = solverImplementation.orientationDeltas, orientationCounts = solverImplementation.orientationConstraintCounts, - contacts = ((BurstSolverImpl)constraints.solver).particleContacts, + contacts = ((BurstSolverImpl)constraints.solver).abstraction.particleContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.particleContactEffectiveMasses.AsNativeArray(), batchData = batchData, substepTime = substepTime, @@ -66,14 +65,12 @@ namespace Obi public override JobHandle Apply(JobHandle inputDeps, float substepTime) { - if (!((BurstSolverImpl)constraints.solver).particleContacts.IsCreated) - return inputDeps; var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); var applyConstraints = new ApplyBatchedCollisionConstraintsBatchJob() { - contacts = ((BurstSolverImpl)constraints.solver).particleContacts, + contacts = solverAbstraction.particleContacts.AsNativeArray(), simplices = solverImplementation.simplices, simplexCounts = solverImplementation.simplexCounts, @@ -102,7 +99,7 @@ namespace Obi [ReadOnly] public NativeArray prevOrientations; [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray invInertiaTensors; + [ReadOnly] public NativeArray invRotationalMasses; [ReadOnly] public NativeArray radii; [ReadOnly] public NativeArray particleMaterialIndices; [ReadOnly] public NativeArray collisionMaterials; @@ -118,6 +115,7 @@ namespace Obi [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationCounts; [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray contacts; + [ReadOnly] public NativeArray effectiveMasses; [ReadOnly] public BatchData batchData; [ReadOnly] public float substepTime; @@ -140,16 +138,16 @@ namespace Obi float4 prevPositionA = float4.zero; float4 linearVelocityA = float4.zero; float4 angularVelocityA = float4.zero; - float4 invInertiaTensorA = float4.zero; + float invRotationalMassA = 0; quaternion orientationA = new quaternion(0, 0, 0, 0); - float simplexRadiusA = 0; + float4 simplexRadiiA = float4.zero; float4 prevPositionB = float4.zero; float4 linearVelocityB = float4.zero; float4 angularVelocityB = float4.zero; - float4 invInertiaTensorB = float4.zero; + float invRotationalMassB = 0; quaternion orientationB = new quaternion(0, 0, 0, 0); - float simplexRadiusB = 0; + float4 simplexRadiiB = float4.zero; for (int j = 0; j < simplexSizeA; ++j) { @@ -157,9 +155,9 @@ namespace Obi prevPositionA += prevPositions[particleIndex] * contact.pointA[j]; linearVelocityA += BurstIntegration.DifferentiateLinear(positions[particleIndex], prevPositions[particleIndex], substepTime) * contact.pointA[j]; angularVelocityA += BurstIntegration.DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * contact.pointA[j]; - invInertiaTensorA += invInertiaTensors[particleIndex] * contact.pointA[j]; + invRotationalMassA += invRotationalMasses[particleIndex] * contact.pointA[j]; orientationA.value += orientations[particleIndex].value * contact.pointA[j]; - simplexRadiusA += BurstMath.EllipsoidRadius(contact.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; + simplexRadiiA += radii[particleIndex] * contact.pointA[j]; } for (int j = 0; j < simplexSizeB; ++j) { @@ -167,9 +165,9 @@ namespace Obi prevPositionB += prevPositions[particleIndex] * contact.pointB[j]; linearVelocityB += BurstIntegration.DifferentiateLinear(positions[particleIndex], prevPositions[particleIndex], substepTime) * contact.pointB[j]; angularVelocityB += BurstIntegration.DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * contact.pointB[j]; - invInertiaTensorB += invInertiaTensors[particleIndex] * contact.pointB[j]; + invRotationalMassB += invRotationalMasses[particleIndex] * contact.pointB[j]; orientationB.value += orientations[particleIndex].value * contact.pointB[j]; - simplexRadiusB += BurstMath.EllipsoidRadius(contact.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * contact.pointB[j]; + simplexRadiiB += radii[particleIndex] * contact.pointB[j]; } float4 rA = float4.zero, rB = float4.zero; @@ -177,8 +175,8 @@ namespace Obi // Consider angular velocities if rolling contacts are enabled: if (material.rollingContacts > 0) { - rA = -contact.normal * simplexRadiusA; - rB = contact.normal * simplexRadiusB; + rA = -contact.normal * BurstMath.EllipsoidRadius(contact.normal, orientationA, simplexRadiiA.xyz); + rB = contact.normal * BurstMath.EllipsoidRadius(contact.normal, orientationB, simplexRadiiB.xyz); linearVelocityA += new float4(math.cross(angularVelocityA.xyz, rA.xyz), 0); linearVelocityB += new float4(math.cross(angularVelocityB.xyz, rB.xyz), 0); @@ -187,8 +185,8 @@ namespace Obi // Calculate relative velocity: float4 relativeVelocity = linearVelocityA - linearVelocityB; - // Calculate friction impulses (in the tangent and bitangent ddirections): - float2 impulses = contact.SolveFriction(relativeVelocity, material.staticFriction, material.dynamicFriction, substepTime); + // Calculate friction impulses (in the tangent and bitangent directions): + float2 impulses = contact.SolveFriction(effectiveMasses[i].TotalTangentInvMass, effectiveMasses[i].TotalBitangentInvMass, relativeVelocity, material.staticFriction, material.dynamicFriction, substepTime); // Apply friction impulses to both particles: if (math.abs(impulses.x) > BurstMath.epsilon || math.abs(impulses.y) > BurstMath.epsilon) @@ -201,7 +199,7 @@ namespace Obi for (int j = 0; j < simplexSizeA; ++j) { int particleIndex = simplices[simplexStartA + j]; - deltas[particleIndex] += (tangentImpulse * contact.tangentInvMassA + bitangentImpulse * contact.bitangentInvMassA) * substepTime * contact.pointA[j] * baryScale; + deltas[particleIndex] += (tangentImpulse * effectiveMasses[i].tangentInvMassA + bitangentImpulse * effectiveMasses[i].bitangentInvMassA) * substepTime * contact.pointA[j] * baryScale; counts[particleIndex]++; } @@ -209,13 +207,16 @@ namespace Obi for (int j = 0; j < simplexSizeB; ++j) { int particleIndex = simplices[simplexStartB + j]; - deltas[particleIndex] -= (tangentImpulse * contact.tangentInvMassB + bitangentImpulse * contact.bitangentInvMassB) * substepTime * contact.pointB[j] * baryScale; + deltas[particleIndex] -= (tangentImpulse * effectiveMasses[i].tangentInvMassB + bitangentImpulse * effectiveMasses[i].bitangentInvMassB) * substepTime * contact.pointB[j] * baryScale; counts[particleIndex]++; } // Rolling contacts: if (material.rollingContacts > 0) { + float4 invInertiaTensorA = math.rcp(BurstMath.GetParticleInertiaTensor(simplexRadiiA, invRotationalMassA) + new float4(BurstMath.epsilon)); + float4 invInertiaTensorB = math.rcp(BurstMath.GetParticleInertiaTensor(simplexRadiiB, invRotationalMassB) + new float4(BurstMath.epsilon)); + // Calculate angular velocity deltas due to friction impulse: float4x4 solverInertiaA = BurstMath.TransformInertiaTensor(invInertiaTensorA, orientationA); float4x4 solverInertiaB = BurstMath.TransformInertiaTensor(invInertiaTensorB, orientationB); @@ -252,7 +253,7 @@ namespace Obi for (int j = 0; j < simplexSizeB; ++j) { - int particleIndex = simplices[simplexStartB+ j]; + int particleIndex = simplices[simplexStartB + j]; quaternion qB = orientationDeltas[particleIndex]; qB.value += orientationDeltaB.value; orientationDeltas[particleIndex] = qB; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs index 530040132..d552207ec 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs @@ -1,5 +1,6 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using System; +using Unity.Jobs; namespace Obi { @@ -21,6 +22,20 @@ namespace Obi batches.Remove(batch as BurstPinConstraintsBatch); batch.Destroy(); } + + public JobHandle ProjectRenderablePositions(JobHandle inputDeps) + { + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + inputDeps = batches[i].ProjectRenderablePositions(inputDeps); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + } + + return inputDeps; + } } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs index bf8efe8cc..18a58a6b7 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs @@ -6,6 +6,7 @@ using Unity.Collections.LowLevel.Unsafe; using Unity.Mathematics; using Unity.Burst; using System.Collections.Generic; +using System.Threading; namespace Obi { @@ -33,7 +34,29 @@ namespace Obi m_ConstraintCount = count; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var clearPins = new ClearPinsJob + { + colliderIndices = colliderIndices, + shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), + rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), + }; + inputDeps = clearPins.Schedule(m_ConstraintCount, 128, inputDeps); + + var updatePins = new UpdatePinsJob + { + colliderIndices = colliderIndices, + shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), + rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), + }; + inputDeps = updatePins.Schedule(m_ConstraintCount, 128, inputDeps); + + // clear lambdas: + return base.Initialize(inputDeps, stepTime, substepTime, steps, timeLeft); + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new PinConstraintsBatchJob() { @@ -63,12 +86,13 @@ namespace Obi inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, stepTime = stepTime, + steps = steps, substepTime = substepTime, - substeps = substeps, + timeLeft = timeLeft, activeConstraintCount = m_ConstraintCount }; - return projectConstraints.Schedule(inputDeps); + return projectConstraints.Schedule(m_ConstraintCount, 16, inputDeps); } public override JobHandle Apply(JobHandle inputDeps, float substepTime) @@ -94,8 +118,78 @@ namespace Obi return applyConstraints.Schedule(inputDeps); } + public JobHandle ProjectRenderablePositions(JobHandle inputDeps) + { + var project = new ProjectRenderablePositionsJob() + { + particleIndices = particleIndices, + colliderIndices = colliderIndices, + offsets = offsets, + stiffnesses = stiffnesses, + restDarboux = restDarbouxVectors, + + transforms = ObiColliderWorld.GetInstance().colliderTransforms.AsNativeArray(), + + renderablePositions = solverImplementation.renderablePositions, + renderableOrientations = solverImplementation.renderableOrientations, + + inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, + }; + + return project.Schedule(m_ConstraintCount, 16, inputDeps); + } + [BurstCompile] - public unsafe struct PinConstraintsBatchJob : IJob + public unsafe struct ClearPinsJob : IJobParallelFor + { + [ReadOnly] public NativeArray colliderIndices; + [ReadOnly] public NativeArray shapes; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodies; + + public void Execute(int i) + { + int colliderIndex = colliderIndices[i]; + + // no collider to pin to, so ignore the constraint. + if (colliderIndex < 0) + return; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + BurstRigidbody* arr = (BurstRigidbody*)rigidbodies.GetUnsafePtr(); + Interlocked.Exchange(ref arr[rigidbodyIndex].constraintCount, 0); + } + } + } + + [BurstCompile] + public unsafe struct UpdatePinsJob : IJobParallelFor + { + [ReadOnly] public NativeArray colliderIndices; + [ReadOnly] public NativeArray shapes; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodies; + + public void Execute(int i) + { + int colliderIndex = colliderIndices[i]; + + // no collider to pin to, so ignore the constraint. + if (colliderIndex < 0) + return; + + // Increment the amount of constraints affecting this rigidbody for mass splitting: + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + BurstRigidbody* arr = (BurstRigidbody*)rigidbodies.GetUnsafePtr(); + Interlocked.Increment(ref arr[rigidbodyIndex].constraintCount); + } + } + } + + [BurstCompile] + public unsafe struct PinConstraintsBatchJob : IJobParallelFor { [ReadOnly] public NativeArray particleIndices; [ReadOnly] public NativeArray colliderIndices; @@ -103,7 +197,7 @@ namespace Obi [ReadOnly] public NativeArray offsets; [ReadOnly] public NativeArray stiffnesses; [ReadOnly] public NativeArray restDarboux; - public NativeArray lambdas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray lambdas; [ReadOnly] public NativeArray positions; [ReadOnly] public NativeArray prevPositions; @@ -114,8 +208,8 @@ namespace Obi [ReadOnly] public NativeArray shapes; [ReadOnly] public NativeArray transforms; [ReadOnly] public NativeArray rigidbodies; - public NativeArray rigidbodyLinearDeltas; - public NativeArray rigidbodyAngularDeltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodyLinearDeltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodyAngularDeltas; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; @@ -125,112 +219,113 @@ namespace Obi [ReadOnly] public BurstInertialFrame inertialFrame; [ReadOnly] public float stepTime; [ReadOnly] public float substepTime; - [ReadOnly] public int substeps; + [ReadOnly] public float timeLeft; + [ReadOnly] public int steps; [ReadOnly] public int activeConstraintCount; - public void Execute() + public void Execute(int i) { - for (int i = 0; i < activeConstraintCount; ++i) + int particleIndex = particleIndices[i]; + int colliderIndex = colliderIndices[i]; + + // no collider to pin to, so ignore the constraint. + if (colliderIndex < 0) + return; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + + float frameEnd = stepTime * steps; + float substepsToEnd = timeLeft / substepTime; + + // calculate time adjusted compliances + float2 compliances = stiffnesses[i].xy / (substepTime * substepTime); + + // project particle position to the end of the full step: + float4 particlePosition = math.lerp(prevPositions[particleIndex], positions[particleIndex], substepsToEnd); + + // express pin offset in world space: + float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); + float4 predictedPinOffset = worldPinOffset; + quaternion predictedRotation = transforms[colliderIndex].rotation; + + float rigidbodyLinearW = 0; + float rigidbodyAngularW = 0; + + if (rigidbodyIndex >= 0) { - int particleIndex = particleIndices[i]; - int colliderIndex = colliderIndices[i]; + var rigidbody = rigidbodies[rigidbodyIndex]; - // no collider to pin to, so ignore the constraint. - if (colliderIndex < 0) - continue; + // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) + float4 velocityAtPoint = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, inertialFrame.frame.InverseTransformPoint(worldPinOffset), rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); + predictedPinOffset = BurstIntegration.IntegrateLinear(predictedPinOffset, inertialFrame.frame.TransformVector(velocityAtPoint), frameEnd); - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + // predict rotation at the end of the step: + predictedRotation = BurstIntegration.IntegrateAngular(predictedRotation, rigidbody.angularVelocity + rigidbodyAngularDeltas[rigidbodyIndex], stepTime); - // calculate time adjusted compliances - float2 compliances = stiffnesses[i].xy / (substepTime * substepTime); + // calculate linear and angular rigidbody effective masses (mass splitting: multiply by constraint count) + rigidbodyLinearW = rigidbody.inverseMass * rigidbody.constraintCount; + rigidbodyAngularW = BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, + worldPinOffset - rigidbody.com, + math.normalizesafe(inertialFrame.frame.TransformPoint(particlePosition) - predictedPinOffset)) * rigidbody.constraintCount; - // project particle position to the end of the full step: - float4 particlePosition = math.lerp(prevPositions[particleIndex], positions[particleIndex], substeps); - - // express pin offset in world space: - float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); - float4 predictedPinOffset = worldPinOffset; - quaternion predictedRotation = transforms[colliderIndex].rotation; - - float rigidbodyLinearW = 0; - float rigidbodyAngularW = 0; - - if (rigidbodyIndex >= 0) - { - var rigidbody = rigidbodies[rigidbodyIndex]; - - // predict offset point position: - float4 velocityAtPoint = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, inertialFrame.frame.InverseTransformPoint(worldPinOffset), rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); - predictedPinOffset = BurstIntegration.IntegrateLinear(predictedPinOffset, inertialFrame.frame.TransformVector(velocityAtPoint), stepTime); - - // predict rotation at the end of the step: - predictedRotation = BurstIntegration.IntegrateAngular(predictedRotation, rigidbody.angularVelocity + rigidbodyAngularDeltas[rigidbodyIndex], stepTime); - - // calculate linear and angular rigidbody weights: - rigidbodyLinearW = rigidbody.inverseMass; - rigidbodyAngularW = BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, - worldPinOffset - rigidbody.com, - math.normalizesafe(inertialFrame.frame.TransformPoint(particlePosition) - predictedPinOffset)); - - } - - // Transform pin position to solver space for constraint solving: - predictedPinOffset = inertialFrame.frame.InverseTransformPoint(predictedPinOffset); - predictedRotation = math.mul(math.conjugate(inertialFrame.frame.rotation), predictedRotation); - - float4 gradient = particlePosition - predictedPinOffset; - float constraint = math.length(gradient); - float4 gradientDir = gradient / (constraint + BurstMath.epsilon); - - float4 lambda = lambdas[i]; - float linearDLambda = (-constraint - compliances.x * lambda.w) / (invMasses[particleIndex] + rigidbodyLinearW + rigidbodyAngularW + compliances.x + BurstMath.epsilon); - lambda.w += linearDLambda; - float4 correction = linearDLambda * gradientDir; - - deltas[particleIndex] += correction * invMasses[particleIndex] / substeps; - counts[particleIndex]++; - - if (rigidbodyIndex >= 0) - { - BurstMath.ApplyImpulse(rigidbodyIndex, - -correction / stepTime * 1, - inertialFrame.frame.InverseTransformPoint(worldPinOffset), - rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); - } - - if (rigidbodyAngularW > 0 || invRotationalMasses[particleIndex] > 0) - { - // bend/twist constraint: - quaternion omega = math.mul(math.conjugate(orientations[particleIndex]), predictedRotation); //darboux vector - - quaternion omega_plus; - omega_plus.value = omega.value + restDarboux[i].value; //delta Omega with - omega_0 - omega.value -= restDarboux[i].value; //delta Omega with + omega_0 - if (math.lengthsq(omega.value) > math.lengthsq(omega_plus.value)) - omega = omega_plus; - - float3 dlambda = (omega.value.xyz - compliances.y * lambda.xyz) / new float3(compliances.y + invRotationalMasses[particleIndex] + rigidbodyAngularW + BurstMath.epsilon); - lambda.xyz += dlambda; - - //discrete Darboux vector does not have vanishing scalar part - quaternion dlambdaQ = new quaternion(dlambda[0], dlambda[1], dlambda[2], 0); - - quaternion orientDelta = orientationDeltas[particleIndex]; - orientDelta.value += math.mul(predictedRotation, dlambdaQ).value * invRotationalMasses[particleIndex] / substeps; - orientationDeltas[particleIndex] = orientDelta; - orientationCounts[particleIndex]++; - - if (rigidbodyIndex >= 0) - { - BurstMath.ApplyDeltaQuaternion(rigidbodyIndex, - predictedRotation, - -math.mul(orientations[particleIndex], dlambdaQ).value * rigidbodyAngularW, - rigidbodyAngularDeltas, inertialFrame.frame, stepTime); - } - } - - lambdas[i] = lambda; } + + // Transform pin position to solver space for constraint solving: + predictedPinOffset = inertialFrame.frame.InverseTransformPoint(predictedPinOffset); + predictedRotation = math.mul(math.conjugate(inertialFrame.frame.rotation), predictedRotation); + + float4 gradient = particlePosition - predictedPinOffset; + float constraint = math.length(gradient); + float4 gradientDir = gradient / (constraint + BurstMath.epsilon); + + float4 lambda = lambdas[i]; + float linearDLambda = (-constraint - compliances.x * lambda.w) / (invMasses[particleIndex] + rigidbodyLinearW + rigidbodyAngularW + compliances.x + BurstMath.epsilon); + lambda.w += linearDLambda; + float4 correction = linearDLambda * gradientDir; + + deltas[particleIndex] += correction * invMasses[particleIndex] / substepsToEnd; + counts[particleIndex]++; + + if (rigidbodyIndex >= 0) + { + BurstMath.ApplyImpulse(rigidbodyIndex, + -correction / frameEnd, + inertialFrame.frame.InverseTransformPoint(worldPinOffset), + rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); + } + + if (rigidbodyAngularW > 0 || invRotationalMasses[particleIndex] > 0) + { + // bend/twist constraint: + quaternion omega = math.mul(math.conjugate(orientations[particleIndex]), predictedRotation); //darboux vector + + quaternion omega_plus; + omega_plus.value = omega.value + restDarboux[i].value; //delta Omega with - omega_0 + omega.value -= restDarboux[i].value; //delta Omega with + omega_0 + if (math.lengthsq(omega.value) > math.lengthsq(omega_plus.value)) + omega = omega_plus; + + float3 dlambda = (omega.value.xyz - compliances.y * lambda.xyz) / (compliances.y + invRotationalMasses[particleIndex] + rigidbodyAngularW + BurstMath.epsilon); + lambda.xyz += dlambda; + + //discrete Darboux vector does not have vanishing scalar part + quaternion dlambdaQ = new quaternion(dlambda[0], dlambda[1], dlambda[2], 0); + + quaternion orientDelta = orientationDeltas[particleIndex]; + orientDelta.value += math.mul(predictedRotation, dlambdaQ).value * invRotationalMasses[particleIndex] / substepsToEnd; + orientationDeltas[particleIndex] = orientDelta; + orientationCounts[particleIndex]++; + + if (rigidbodyIndex >= 0) + { + BurstMath.ApplyDeltaQuaternion(rigidbodyIndex, + predictedRotation, + -math.mul(orientations[particleIndex], dlambdaQ).value * rigidbodyAngularW, + rigidbodyAngularDeltas, inertialFrame.frame, frameEnd); + } + } + + lambdas[i] = lambda; } } @@ -275,6 +370,40 @@ namespace Obi } } } + + [BurstCompile] + public struct ProjectRenderablePositionsJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray colliderIndices; + + [ReadOnly] public NativeArray offsets; + [ReadOnly] public NativeArray stiffnesses; + [ReadOnly] public NativeArray restDarboux; + + [ReadOnly] public NativeArray transforms; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray renderablePositions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray renderableOrientations; + + [ReadOnly] public BurstInertialFrame inertialFrame; + + public void Execute(int i) + { + int particleIndex = particleIndices[i]; + int colliderIndex = colliderIndices[i]; + + // no collider to pin to or projection deactivated, so ignore the constraint. + if (colliderIndex < 0 || offsets[i].w < 0.5f) + return; + + BurstAffineTransform attachmentMatrix = inertialFrame.frame.Inverse() * transforms[colliderIndex]; + + renderablePositions[particleIndex] = attachmentMatrix.TransformPoint(offsets[i]); + if (stiffnesses[i].y < 10000) + renderableOrientations[particleIndex] = math.mul(attachmentMatrix.rotation, restDarboux[i]); + } + } } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole.meta new file mode 100644 index 000000000..75112eaea --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 744a58a1ca5364e0a86c93e04770c0b8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs new file mode 100644 index 000000000..7c962bbc0 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstPinholeConstraints : BurstConstraintsImpl + { + public BurstPinholeConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Pinhole) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstPinholeConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstPinholeConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs.meta new file mode 100644 index 000000000..17b0fea75 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71db1a3a2698147deb04f0264e4a728f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs new file mode 100644 index 000000000..7f0a2b9c9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs @@ -0,0 +1,490 @@ + #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Jobs; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using Unity.Burst; +using System.Collections.Generic; +using System.Threading; + +namespace Obi +{ + public class BurstPinholeConstraintsBatch : BurstConstraintsBatchImpl, IPinholeConstraintsBatchImpl + { + private NativeArray colliderIndices; + private NativeArray offsets; + private NativeArray edgeMus; + private NativeArray edgeRanges; + private NativeArray edgeRangeMus; + private NativeArray parameters; + private NativeArray relativeVelocities; + + public BurstPinholeConstraintsBatch(BurstPinholeConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Pinhole; + } + + public void SetPinholeConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeFloatList edgeMus, ObiNativeIntList edgeRanges, ObiNativeFloatList edgeRangeMus, ObiNativeFloatList parameters, ObiNativeFloatList relativeVelocities, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsNativeArray(); + this.colliderIndices = colliderIndices.AsNativeArray(); + this.offsets = offsets.AsNativeArray(); + this.edgeMus = edgeMus.AsNativeArray(); + this.edgeRanges = edgeRanges.AsNativeArray(); + this.edgeRangeMus = edgeRangeMus.AsNativeArray(); + this.parameters = parameters.AsNativeArray(); + this.relativeVelocities = relativeVelocities.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var clearPins = new ClearPinsJob + { + colliderIndices = colliderIndices, + shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), + rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), + }; + inputDeps = clearPins.Schedule(m_ConstraintCount, 128, inputDeps); + + var updatePins = new UpdatePinsJob + { + particleIndices = particleIndices, + colliderIndices = colliderIndices, + offsets = offsets, + edgeMus = edgeMus, + edgeRangeMus = edgeRangeMus, + relativeVelocities = relativeVelocities, + parameters = parameters, + edgeRanges = edgeRanges, + + positions = solverImplementation.positions, + prevPositions = solverImplementation.prevPositions, + invMasses = solverImplementation.invMasses, + + deformableEdges = solverImplementation.abstraction.deformableEdges.AsNativeArray(), + + shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), + transforms = ObiColliderWorld.GetInstance().colliderTransforms.AsNativeArray(), + rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), + rigidbodyLinearDeltas = solverImplementation.abstraction.rigidbodyLinearDeltas.AsNativeArray(), + rigidbodyAngularDeltas = solverImplementation.abstraction.rigidbodyAngularDeltas.AsNativeArray(), + + inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, + stepTime = stepTime, + steps = steps, + substepTime = substepTime, + timeLeft = timeLeft, + activeConstraintCount = m_ConstraintCount + }; + inputDeps = updatePins.Schedule(m_ConstraintCount, 128, inputDeps); + + // clear lambdas: + return base.Initialize(inputDeps, stepTime, substepTime, steps, timeLeft); + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new PinholeConstraintsBatchJob() + { + particleIndices = particleIndices, + colliderIndices = colliderIndices, + offsets = offsets, + edgeMus = edgeMus, + parameters = parameters, + lambdas = lambdas, + + positions = solverImplementation.positions, + prevPositions = solverImplementation.prevPositions, + invMasses = solverImplementation.invMasses, + + deformableEdges = solverImplementation.abstraction.deformableEdges.AsNativeArray(), + + shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), + transforms = ObiColliderWorld.GetInstance().colliderTransforms.AsNativeArray(), + rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), + rigidbodyLinearDeltas = solverImplementation.abstraction.rigidbodyLinearDeltas.AsNativeArray(), + rigidbodyAngularDeltas = solverImplementation.abstraction.rigidbodyAngularDeltas.AsNativeArray(), + + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, + stepTime = stepTime, + steps = steps, + substepTime = substepTime, + timeLeft = timeLeft, + activeConstraintCount = m_ConstraintCount + }; + + return projectConstraints.Schedule(m_ConstraintCount, 16, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var cparameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyPinholeConstraintsBatchJob() + { + particleIndices = particleIndices, + deformableEdges = solverImplementation.abstraction.deformableEdges.AsNativeArray(), + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + sorFactor = cparameters.SORFactor, + activeConstraintCount = m_ConstraintCount, + }; + + return applyConstraints.Schedule(inputDeps); + } + + [BurstCompile] + public unsafe struct ClearPinsJob : IJobParallelFor + { + [ReadOnly] public NativeArray colliderIndices; + [ReadOnly] public NativeArray shapes; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodies; + + public void Execute(int i) + { + int colliderIndex = colliderIndices[i]; + + // no collider to pin to, so ignore the constraint. + if (colliderIndex < 0) + return; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + BurstRigidbody* arr = (BurstRigidbody*)rigidbodies.GetUnsafePtr(); + Interlocked.Exchange(ref arr[rigidbodyIndex].constraintCount, 0); + } + } + } + + [BurstCompile] + public unsafe struct UpdatePinsJob : IJobParallelFor + { + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray particleIndices; + + [ReadOnly] public NativeArray edgeRanges; + [ReadOnly] public NativeArray edgeRangeMus; + [ReadOnly] public NativeArray offsets; + [ReadOnly] public NativeArray parameters; // compliance, friction, motor speed, motor force, clamp behavior. + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray edgeMus; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray relativeVelocities; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray invMasses; + + [ReadOnly] public NativeArray deformableEdges; + + [ReadOnly] public NativeArray colliderIndices; + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray transforms; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodies; + + [ReadOnly] public NativeArray rigidbodyLinearDeltas; + [ReadOnly] public NativeArray rigidbodyAngularDeltas; + + [ReadOnly] public BurstInertialFrame inertialFrame; + [ReadOnly] public float stepTime; + [ReadOnly] public float substepTime; + [ReadOnly] public float timeLeft; + [ReadOnly] public int steps; + [ReadOnly] public int activeConstraintCount; + + private bool IsEdgeValid(int edgeIndex, int nextEdgeIndex, float mix) + { + return mix < 0 ? deformableEdges[nextEdgeIndex * 2 + 1] == deformableEdges[edgeIndex * 2] : + deformableEdges[nextEdgeIndex * 2] == deformableEdges[edgeIndex * 2 + 1]; + } + + private bool ClampToRange(int i, int edgeIndex, ref float mix) + { + bool clamped = false; + if (edgeIndex == edgeRanges[i].x && mix < edgeRangeMus[i].x) + { + mix = edgeRangeMus[i].x; + clamped = true; + } + if (edgeIndex == edgeRanges[i].y && mix > edgeRangeMus[i].y) + { + mix = edgeRangeMus[i].y; + clamped = true; + } + return clamped; + } + + public void Execute(int i) + { + int edgeIndex = particleIndices[i]; + int colliderIndex = colliderIndices[i]; + + // if no collider or edge, ignore the constraint. + if (colliderIndex < 0 || edgeIndex < 0) + return; + + // Increment the amount of constraints affecting this rigidbody for mass splitting: + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + BurstRigidbody* arr = (BurstRigidbody*)rigidbodies.GetUnsafePtr(); + Interlocked.Increment(ref arr[rigidbodyIndex].constraintCount); + } + + float frameEnd = stepTime * steps; + float substepsToEnd = timeLeft / substepTime; + + int p1 = deformableEdges[edgeIndex * 2]; + int p2 = deformableEdges[edgeIndex * 2 + 1]; + int edgeCount = math.max(0, edgeRanges[i].y - edgeRanges[i].x + 1); + + // express pin offset in world space: + float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); + float4 predictedPinOffset = worldPinOffset; + + if (rigidbodyIndex >= 0) + { + // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) + float4 pointVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, inertialFrame.frame.InverseTransformPoint(worldPinOffset), rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); + predictedPinOffset = BurstIntegration.IntegrateLinear(predictedPinOffset, inertialFrame.frame.TransformVector(pointVelocity), frameEnd); + } + + // transform pinhole position to solver space for constraint solving: + float4 solverPredictedOffset = inertialFrame.frame.InverseTransformPoint(predictedPinOffset); + + // get current edge data: + float4 particlePosition1 = math.lerp(prevPositions[p1], positions[p1], substepsToEnd); + float4 particlePosition2 = math.lerp(prevPositions[p2], positions[p2], substepsToEnd); + float edgeLength = math.length(particlePosition1 - particlePosition2) + BurstMath.epsilon; + BurstMath.NearestPointOnEdge(particlePosition1, particlePosition2, solverPredictedOffset, out float mix, false); + + // calculate current relative velocity between rope and pinhole: + float velocity = (mix - edgeMus[i]) / substepTime * edgeLength; // vel = pos / time. + relativeVelocities[i] = velocity; + + //apply motor force: + float targetAccel = (parameters[i * 5 + 2] - velocity) / substepTime; // accel = vel / time. + float maxAccel = parameters[i * 5 + 3] * math.max(math.lerp(invMasses[p1], invMasses[p2], mix), BurstMath.epsilon); // accel = force / mass. Guard against inf*0 + velocity += math.clamp(targetAccel, -maxAccel, maxAccel) * substepTime; + + // calculate new position by adding motor acceleration: + float corrMix = edgeMus[i] + velocity * substepTime / edgeLength; + + // apply artificial friction by interpolating predicted position and corrected position. + mix = math.lerp(mix, corrMix, parameters[i * 5 + 1]); + + // move to an adjacent edge if needed: + if (!ClampToRange(i, edgeIndex, ref mix) && (mix < 0 || mix > 1)) + { + bool clampOnEnd = parameters[i * 5 + 4] > 0.5f; + + // calculate distance we need to travel along edge chain: + float distToTravel = math.length(particlePosition1 - particlePosition2) * (mix < 0 ? -mix : mix - 1); + + int nextEdgeIndex; + for (int k = 0; k < 10; ++k) // look up to 10 edges away. + { + // calculate index of next edge: + nextEdgeIndex = mix < 0 ? edgeIndex - 1 : edgeIndex + 1; + nextEdgeIndex = edgeRanges[i].x + (int)BurstMath.nfmod(nextEdgeIndex - edgeRanges[i].x, edgeCount); + + // see if it's valid + if (!IsEdgeValid(edgeIndex, nextEdgeIndex, mix)) + { + // disable constraint if needed + if (!clampOnEnd) { particleIndices[i] = -1; return; } + + // otherwise clamp: + mix = math.saturate(mix); + break; + } + + // advance to next edge: + edgeIndex = nextEdgeIndex; + p1 = deformableEdges[edgeIndex * 2]; + p2 = deformableEdges[edgeIndex * 2 + 1]; + particlePosition1 = math.lerp(prevPositions[p1], positions[p1], substepsToEnd); + particlePosition2 = math.lerp(prevPositions[p2], positions[p2], substepsToEnd); + edgeLength = math.length(particlePosition1 - particlePosition2) + BurstMath.epsilon; + + // stop if we reached target edge: + if (distToTravel <= edgeLength) + { + mix = mix < 0 ? 1 - math.saturate(distToTravel / edgeLength) : math.saturate(distToTravel / edgeLength); + ClampToRange(i, edgeIndex, ref mix); + break; + } + + // stop if we reached end of range: + if (ClampToRange(i, edgeIndex, ref mix)) + break; + + distToTravel -= edgeLength; + } + } + + edgeMus[i] = mix; + particleIndices[i] = edgeIndex; + } + } + + [BurstCompile] + public unsafe struct PinholeConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray colliderIndices; + + [ReadOnly] public NativeArray offsets; + [ReadOnly] public NativeArray parameters; // compliance, friction, motor speed, motor force, clamp behavior. + [ReadOnly] public NativeArray edgeMus; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray invMasses; + + [ReadOnly] public NativeArray deformableEdges; + + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray rigidbodies; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodyLinearDeltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodyAngularDeltas; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public BurstInertialFrame inertialFrame; + [ReadOnly] public float stepTime; + [ReadOnly] public float substepTime; + [ReadOnly] public float timeLeft; + [ReadOnly] public int steps; + [ReadOnly] public int activeConstraintCount; + + public void Execute(int i) + { + int edgeIndex = particleIndices[i]; + int colliderIndex = colliderIndices[i]; + + // if no collider or edge, ignore the constraint. + if (edgeIndex < 0 || colliderIndex < 0) + return; + + float frameEnd = stepTime * steps; + float substepsToEnd = timeLeft / substepTime; + + // calculate time adjusted compliance + float compliance = parameters[i * 5] / (substepTime * substepTime); + + int p1 = deformableEdges[edgeIndex * 2]; + int p2 = deformableEdges[edgeIndex * 2 + 1]; + + // calculate projection on current edge: + float mix = edgeMus[i]; + float4 particlePosition1 = math.lerp(prevPositions[p1], positions[p1], substepsToEnd); + float4 particlePosition2 = math.lerp(prevPositions[p2], positions[p2], substepsToEnd); + float4 projection = math.lerp(particlePosition1, particlePosition2, mix); + + // express pin offset in world space: + float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); + float4 predictedPinOffset = worldPinOffset; + + float rigidbodyLinearW = 0; + float rigidbodyAngularW = 0; + + int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + var rigidbody = rigidbodies[rigidbodyIndex]; + + // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) + float4 pointVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, inertialFrame.frame.InverseTransformPoint(worldPinOffset), rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); + predictedPinOffset = BurstIntegration.IntegrateLinear(predictedPinOffset, inertialFrame.frame.TransformVector(pointVelocity), frameEnd); + + // calculate linear and angular rigidbody effective masses (mass splitting: multiply by constraint count) + rigidbodyLinearW = rigidbody.inverseMass * rigidbody.constraintCount; + rigidbodyAngularW = BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, + worldPinOffset - rigidbody.com, + math.normalizesafe(inertialFrame.frame.TransformPoint(projection) - predictedPinOffset)) * rigidbody.constraintCount; + } + + // Transform pinhole position to solver space for constraint solving: + predictedPinOffset = inertialFrame.frame.InverseTransformPoint(predictedPinOffset); + + float4 gradient = projection - predictedPinOffset; + float constraint = math.length(gradient); + float4 gradientDir = gradient / (constraint + BurstMath.epsilon); + + float lambda = (-constraint - compliance * lambdas[i]) / (math.lerp(invMasses[p1], invMasses[p2], mix) + rigidbodyLinearW + rigidbodyAngularW + compliance + BurstMath.epsilon); + lambdas[i] += lambda; + float4 correction = lambda * gradientDir; + + float baryScale = BurstMath.BaryScale(new float4(1 - mix, mix, 0, 0)); + + deltas[p1] += correction * baryScale * invMasses[p1] * (1 - mix) / substepsToEnd; + counts[p1]++; + + deltas[p2] += correction * baryScale * invMasses[p2] * mix / substepsToEnd; + counts[p2]++; + + if (rigidbodyIndex >= 0) + { + BurstMath.ApplyImpulse(rigidbodyIndex, + -correction / frameEnd, + inertialFrame.frame.InverseTransformPoint(worldPinOffset), + rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); + } + } + } + + [BurstCompile] + public struct ApplyPinholeConstraintsBatchJob : IJob + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public float sorFactor; + + [ReadOnly] public NativeArray deformableEdges; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public int activeConstraintCount; + + public void Execute() + { + for (int i = 0; i < activeConstraintCount; ++i) + { + int edgeIndex = particleIndices[i]; + if (edgeIndex < 0) continue; + + int p1 = deformableEdges[edgeIndex * 2]; + int p2 = deformableEdges[edgeIndex * 2 + 1]; + + if (counts[p1] > 0) + { + positions[p1] += deltas[p1] * sorFactor / counts[p1]; + deltas[p1] = float4.zero; + counts[p1] = 0; + } + + if (counts[p2] > 0) + { + positions[p2] += deltas[p2] * sorFactor / counts[p2]; + deltas[p2] = float4.zero; + counts[p2] = 0; + } + } + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs.meta new file mode 100644 index 000000000..a62fb0bef --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c3a800919e2e435785c5beca1029b70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs index c73dc01c4..bb7f43537 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs @@ -23,6 +23,8 @@ namespace Obi private NativeArray linearTransforms; private NativeArray plasticDeformations; + private bool m_RecalculateRestShape = false; + public BurstShapeMatchingConstraintsBatch(BurstShapeMatchingConstraints constraints) { m_Constraints = constraints; @@ -67,13 +69,37 @@ namespace Obi Aqq.Dispose(); } - public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { return inputDeps; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { + if (m_RecalculateRestShape) + { + m_RecalculateRestShape = false; + + var calculateRest = new ShapeMatchingCalculateRestJob() + { + particleIndices = particleIndices, + firstIndex = firstIndex, + numIndices = numIndices, + restComs = restComs, + coms = coms, + Aqq = Aqq, + deformation = plasticDeformations, + + restPositions = solverAbstraction.restPositions.AsNativeArray(), + restOrientations = solverAbstraction.restOrientations.AsNativeArray(), + principalRadii = solverAbstraction.principalRadii.AsNativeArray(), + invMasses = solverAbstraction.invMasses.AsNativeArray(), + invRotationalMasses = solverAbstraction.invRotationalMasses.AsNativeArray(), + }; + + inputDeps = calculateRest.Schedule(numIndices.Length, 64, inputDeps); + } + var projectConstraints = new ShapeMatchingConstraintsBatchJob() { particleIndices = particleIndices, @@ -94,7 +120,7 @@ namespace Obi restOrientations = solverImplementation.restOrientations, invMasses = solverImplementation.invMasses, invRotationalMasses = solverImplementation.invRotationalMasses, - invInertiaTensors = solverImplementation.invInertiaTensors, + principalRadii = solverImplementation.principalRadii, deltas = solverImplementation.positionDeltas, counts = solverImplementation.positionConstraintCounts, @@ -127,25 +153,7 @@ namespace Obi public void CalculateRestShapeMatching() { - var deps = ((BurstSolverImpl)constraints.solver).RecalculateInertiaTensors(new JobHandle()); - - var calculateRest = new ShapeMatchingCalculateRestJob() - { - particleIndices = particleIndices, - firstIndex = firstIndex, - numIndices = numIndices, - restComs = restComs, - coms = coms, - Aqq = Aqq, - deformation = plasticDeformations, - - restPositions = solverAbstraction.restPositions.AsNativeArray(), - restOrientations = solverAbstraction.restOrientations.AsNativeArray(), - invMasses = solverAbstraction.invMasses.AsNativeArray(), - invInertiaTensors = solverAbstraction.invInertiaTensors.AsNativeArray(), - }; - - calculateRest.Schedule(numIndices.Length, 64, deps).Complete(); + m_RecalculateRestShape = true; } protected static void RecalculateRestData(int i, @@ -156,9 +164,10 @@ namespace Obi ref NativeArray deformation, ref NativeArray numIndices, ref NativeArray invMasses, + ref NativeArray invRotationalMasses, ref NativeArray restPositions, ref NativeArray restOrientations, - ref NativeArray invInertiaTensors) + ref NativeArray principalRadii) { int k = 0; float maximumMass = 10000; @@ -185,7 +194,7 @@ namespace Obi particleR[3][3] = 0; _Rqq += math.mul(particleR, - math.mul(math.rcp(invInertiaTensors[k] + new float4(BurstMath.epsilon)).asDiagonal(), + math.mul(BurstMath.GetParticleInertiaTensor(principalRadii[k], invRotationalMasses[k]).asDiagonal(), math.transpose(particleR)) ); @@ -225,7 +234,8 @@ namespace Obi [ReadOnly] public NativeArray restPositions; [ReadOnly] public NativeArray restOrientations; [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray invInertiaTensors; + [ReadOnly] public NativeArray invRotationalMasses; + [ReadOnly] public NativeArray principalRadii; public void Execute(int i) { @@ -237,9 +247,10 @@ namespace Obi ref deformation, ref numIndices, ref invMasses, + ref invRotationalMasses, ref restPositions, ref restOrientations, - ref invInertiaTensors); + ref principalRadii); } } @@ -265,7 +276,7 @@ namespace Obi [ReadOnly] public NativeArray restOrientations; [ReadOnly] public NativeArray invMasses; [ReadOnly] public NativeArray invRotationalMasses; - [ReadOnly] public NativeArray invInertiaTensors; + [ReadOnly] public NativeArray principalRadii; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray orientations; [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; @@ -298,7 +309,7 @@ namespace Obi particleRT[3][3] = 0; Rpq += math.mul(particleR, - math.mul(math.rcp(invInertiaTensors[k] + new float4(BurstMath.epsilon)).asDiagonal(), + math.mul(BurstMath.GetParticleInertiaTensor(principalRadii[k], invRotationalMasses[k]).asDiagonal(), math.transpose(particleRT)) ); @@ -327,7 +338,7 @@ namespace Obi linearTransforms[i] = math.mul(Apq_def, Aqq[i]); // extract rotation from transform matrix, using warmstarting and few iterations: - constraintOrientations[i] = BurstMath.ExtractRotation(Apq_def, constraintOrientations[i], 2); + constraintOrientations[i] = BurstMath.ExtractRotation(Apq_def, constraintOrientations[i], 5); // finally, obtain rotation matrix: float4x4 R = constraintOrientations[i].toMatrix(); @@ -400,9 +411,10 @@ namespace Obi ref deformation, ref numIndices, ref invMasses, + ref invRotationalMasses, ref restPositions, ref restOrientations, - ref invInertiaTensors); + ref principalRadii); } } @@ -418,9 +430,10 @@ namespace Obi ref deformation, ref numIndices, ref invMasses, + ref invRotationalMasses, ref restPositions, ref restOrientations, - ref invInertiaTensors); + ref principalRadii); } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs index 01ebb638b..85d1a9796 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs @@ -33,7 +33,7 @@ namespace Obi m_ConstraintCount = count; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new SkinConstraintsBatchJob() { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs index 58cabef91..934e06c45 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs @@ -27,7 +27,7 @@ namespace Obi m_ConstraintCount = count; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new StitchConstraintsBatchJob() { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs index 4824c5bab..006153e1a 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs @@ -33,7 +33,7 @@ namespace Obi m_ConstraintCount = count; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new StretchShearConstraintsBatchJob() { @@ -126,8 +126,8 @@ namespace Obi // subtract third director vector (0,0,1): gamma[2] -= 1; - float3 W = new float3((w1 + w2) / (restLengths[i] + BurstMath.epsilon) + invRotationalMasses[q] * 4.0f * restLengths[i] + BurstMath.epsilon); - float3 dlambda = (gamma - compliances * lambdas[i]) / (compliances + W); + float3 W = new float3((w1 + w2) / (restLengths[i] + BurstMath.epsilon) + invRotationalMasses[q] * 4.0f * restLengths[i]); + float3 dlambda = (gamma - compliances * lambdas[i]) / (W + compliances + BurstMath.epsilon); lambdas[i] += dlambda; // convert lambda delta lambda back to world space: @@ -142,7 +142,10 @@ namespace Obi // calculate rotation delta: quaternion rotDelta = math.mul(new quaternion(dlambda[0], dlambda[1], dlambda[2], 0.0f),q_e_3_bar); rotDelta.value *= 2.0f * invRotationalMasses[q] * restLengths[i]; - orientationDeltas[q] = rotDelta; + + quaternion orDelta = orientationDeltas[q]; + orDelta.value += rotDelta.value; + orientationDeltas[q] = orDelta; counts[p1]++; counts[p2]++; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs index 4e3cd237c..eb1a4ee28 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs @@ -29,7 +29,7 @@ namespace Obi m_ConstraintCount = count; } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new TetherConstraintsBatchJob() { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs index 6d49fcd21..f813744dc 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs @@ -40,7 +40,7 @@ namespace Obi } - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { var projectConstraints = new VolumeConstraintsBatchJob() { @@ -106,10 +106,7 @@ namespace Obi { float compliance = pressureStiffness[i].y / deltaTimeSqr; - NativeList particleIndices = new NativeList(numTriangles[i] * 3, Allocator.Temp); - // calculate volume: - float volume = 0; for (int j = 0; j < numTriangles[i]; ++j) { int v = (firstTriangle[i] + j) * 3; @@ -117,21 +114,12 @@ namespace Obi int i2 = triangles[v + 1]; int i3 = triangles[v + 2]; - particleIndices.Add(i1); - particleIndices.Add(i2); - particleIndices.Add(i3); - - //calculate this triangle's volume contribution: - volume += math.dot(math.cross(positions[i1].xyz, positions[i2].xyz), positions[i3].xyz) / 6.0f; + gradients[i1] = new float4(0, 0, 0, 1); + gradients[i2] = new float4(0, 0, 0, 1); + gradients[i3] = new float4(0, 0, 0, 1); } - particleIndices.Sort(); - int particleCount = particleIndices.AsArray().Unique(); - - // accumulate particle gradients: - for (int j = 0; j < particleCount; ++j) - gradients[particleIndices[j]] = float4.zero; - + float volume = 0; for (int j = 0; j < numTriangles[i]; ++j) { int v = (firstTriangle[i] + j) * 3; @@ -143,14 +131,28 @@ namespace Obi gradients[i1] += new float4(math.cross(positions[i2].xyz, positions[i3].xyz), 0); gradients[i2] += new float4(math.cross(positions[i3].xyz, positions[i1].xyz), 0); gradients[i3] += new float4(math.cross(positions[i1].xyz, positions[i2].xyz), 0); + + //calculate this triangle's volume contribution: + volume += math.dot(math.cross(positions[i1].xyz, positions[i2].xyz), positions[i3].xyz) / 6.0f; } // calculate constraint denominator (G(Cj)*inv(M)): float denominator = 0; - for (int j = 0; j < particleCount; ++j) + for (int j = 0; j < numTriangles[i]; ++j) { - int p = particleIndices[j]; - denominator += invMasses[p] * math.lengthsq(gradients[p]); + int v = (firstTriangle[i] + j) * 3; + int i1 = triangles[v]; + int i2 = triangles[v + 1]; + int i3 = triangles[v + 2]; + + denominator += invMasses[i1] * math.lengthsq(gradients[i1].xyz) * gradients[i1].w; + gradients[i1] = new float4(gradients[i1].xyz,0); + + denominator += invMasses[i2] * math.lengthsq(gradients[i2].xyz) * gradients[i2].w; + gradients[i2] = new float4(gradients[i2].xyz, 0); + + denominator += invMasses[i3] * math.lengthsq(gradients[i3].xyz) * gradients[i3].w; + gradients[i3] = new float4(gradients[i3].xyz, 0); } // equality constraint: volume - pressure * rest volume = 0 @@ -161,11 +163,21 @@ namespace Obi lambdas[i] += dlambda; // calculate position deltas: - for (int j = 0; j < particleCount; ++j) + for (int j = 0; j < numTriangles[i]; ++j) { - int p = particleIndices[j]; - deltas[p] += dlambda * invMasses[p] * gradients[p]; - counts[p]++; + int v = (firstTriangle[i] + j) * 3; + int i1 = triangles[v]; + int i2 = triangles[v + 1]; + int i3 = triangles[v + 2]; + + deltas[i1] += dlambda * invMasses[i1] * gradients[i1]; + counts[i1]++; + + deltas[i2] += dlambda * invMasses[i2] * gradients[i2]; + counts[i2]++; + + deltas[i3] += dlambda * invMasses[i3] * gradients[i3]; + counts[i3]++; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs index a02213b38..5fea22d30 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs @@ -24,16 +24,16 @@ namespace Obi this.max = max; } - public BurstAabb(float4 v1, float4 v2, float4 v3, float margin) + public BurstAabb(float4 v1, float4 v2, float4 v3, float4 margin) { - min = math.min(math.min(v1, v2), v3) - new float4(margin, margin, margin, 0); - max = math.max(math.max(v1, v2), v3) + new float4(margin, margin, margin, 0); + min = math.min(math.min(v1, v2), v3) - margin; + max = math.max(math.max(v1, v2), v3) + margin; } - public BurstAabb(float2 v1, float2 v2, float margin) + public BurstAabb(float4 v1, float4 v2, float4 margin) { - min = new float4(math.min(v1, v2) - new float2(margin, margin),0,0); - max = new float4(math.max(v1, v2) + new float2(margin, margin),0,0); + min = math.min(v1, v2) - margin; + max = math.max(v1, v2) + margin; } public BurstAabb(float4 previousPosition, float4 position, float radius) @@ -50,7 +50,7 @@ namespace Obi public float MaxAxisLength() { - return math.cmax(max - min); + return math.cmax((max - min).xyz); } public void EncapsulateParticle(float4 position, float radius) diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs index cda36e3f0..f601191d2 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs @@ -36,6 +36,13 @@ namespace Obi 1 / scale); } + public BurstAffineTransform Integrate(float4 linearVelocity, float4 angularVelocity, float dt) + { + return new BurstAffineTransform(BurstIntegration.IntegrateLinear(translation, linearVelocity, dt), + BurstIntegration.IntegrateAngular(rotation, angularVelocity, dt), + scale); + } + public BurstAffineTransform Interpolate(BurstAffineTransform other, float translationalMu, float rotationalMu, float scaleMu) { return new BurstAffineTransform(math.lerp(translation, other.translation, translationalMu), diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs index 6bb3d5994..a93368131 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs @@ -25,7 +25,7 @@ namespace Obi switch (frictionCombineMode) { - case Oni.MaterialCombineMode.Average: + default: // average result.dynamicFriction = (a.dynamicFriction + b.dynamicFriction) * 0.5f; result.staticFriction = (a.staticFriction + b.staticFriction) * 0.5f; result.rollingFriction = (a.rollingFriction + b.rollingFriction) * 0.5f; @@ -37,22 +37,22 @@ namespace Obi result.rollingFriction = math.min(a.rollingFriction, b.rollingFriction); break; - case Oni.MaterialCombineMode.Maximum: - result.dynamicFriction = math.max(a.dynamicFriction, b.dynamicFriction); - result.staticFriction = math.max(a.staticFriction, b.staticFriction); - result.rollingFriction = math.max(a.rollingFriction, b.rollingFriction); - break; - case Oni.MaterialCombineMode.Multiply: result.dynamicFriction = a.dynamicFriction * b.dynamicFriction; result.staticFriction = a.staticFriction * b.staticFriction; result.rollingFriction = a.rollingFriction * b.rollingFriction; break; + + case Oni.MaterialCombineMode.Maximum: + result.dynamicFriction = math.max(a.dynamicFriction, b.dynamicFriction); + result.staticFriction = math.max(a.staticFriction, b.staticFriction); + result.rollingFriction = math.max(a.rollingFriction, b.rollingFriction); + break; } switch (stickCombineMode) { - case Oni.MaterialCombineMode.Average: + default: // average result.stickiness = (a.stickiness + b.stickiness) * 0.5f; break; @@ -60,13 +60,13 @@ namespace Obi result.stickiness = math.min(a.stickiness, b.stickiness); break; - case Oni.MaterialCombineMode.Maximum: - result.stickiness = math.max(a.stickiness, b.stickiness); - break; - case Oni.MaterialCombineMode.Multiply: result.stickiness = a.stickiness * b.stickiness; break; + + case Oni.MaterialCombineMode.Maximum: + result.stickiness = math.max(a.stickiness, b.stickiness); + break; } result.stickDistance = math.max(a.stickDistance, b.stickDistance); diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs index a49d7d566..a1e7b5513 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs @@ -38,6 +38,11 @@ namespace Obi angularAcceleration = float4.zero; } + public float4 VelocityAtPoint(float4 point) + { + return velocity + new float4(math.cross(angularVelocity.xyz, (point - prevFrame.translation).xyz), 0); + } + public void Update(float4 position, float4 scale, quaternion rotation, float dt) { prevFrame = frame; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs new file mode 100644 index 000000000..c214ce9e9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs @@ -0,0 +1,128 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System.Collections.Generic; +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using Unity.Mathematics; + +namespace Obi +{ + public class BurstPrefixSum + { + private int inputSize; + private const int numBlocks = 8; + + private NativeArray blockSums; + + public BurstPrefixSum(int inputSize) + { + this.inputSize = inputSize; + blockSums = new NativeArray(numBlocks, Allocator.Persistent); + } + + public void Dispose() + { + if (blockSums.IsCreated) + blockSums.Dispose(); + } + + public unsafe JobHandle Sum(NativeArray input, NativeArray result, int* count, JobHandle inputDeps) + { + + // calculate partial prefix sums, one per block: + var job = new BlockSumJob + { + input = input, + output = result, + blocks = blockSums, + count = count + }; + inputDeps = job.Schedule(numBlocks, 1, inputDeps); + + var job3 = new BlockSum + { + blocks = blockSums + }; + inputDeps = job3.Schedule(inputDeps); + + // add the scanned partial block sums to the result: + var job2 = new PrefixSumJob + { + prefixBlocks = blockSums, + output = result, + count = count + }; + return job2.Schedule(numBlocks, 1, inputDeps); + } + + [BurstCompile] + unsafe struct BlockSumJob : IJobParallelFor + { + [ReadOnly] public NativeArray input; + [NativeDisableParallelForRestriction] public NativeArray output; + public NativeArray blocks; + + [ReadOnly] [NativeDisableUnsafePtrRestriction] public int* count; + + public void Execute(int block) + { + int length = *count + 1; // add 1 to get total sum in last element+1 + int blockSize = (int)math.ceil(length / (float)numBlocks); + + int start = block * blockSize; + int end = math.min(start + blockSize, length); + + output[start] = 0; + + if (blockSize == 0) { blocks[block] = 0; return; } + + for (int i = start + 1; i < end; ++i) + output[i] = output[i - 1] + input[i - 1]; + + blocks[block] = output[end - 1] + input[end - 1]; + } + } + + [BurstCompile] + struct BlockSum : IJob + { + public NativeArray blocks; + + public void Execute() + { + int aux = blocks[0]; + blocks[0] = 0; + + for (int i = 1; i < blocks.Length; ++i) + { + int a = blocks[i]; + blocks[i] = blocks[i - 1] + aux; + aux = a; + } + } + } + + [BurstCompile] + unsafe struct PrefixSumJob : IJobParallelFor + { + [ReadOnly] public NativeArray prefixBlocks; + [NativeDisableParallelForRestriction] public NativeArray output; + + [ReadOnly] [NativeDisableUnsafePtrRestriction] public int* count; + + public void Execute(int block) + { + int length = *count + 1; // add 1 to get total sum in last element+1 + int blockSize = (int)math.ceil(length / (float)numBlocks); + + int start = block * blockSize; + int end = math.min(start + blockSize, length); + + for (int i = start; i < end; ++i) + output[i] += prefixBlocks[block]; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs.meta new file mode 100644 index 000000000..3cd7558fd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fa11563c202445279d5e04b0eb1631b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs index 39f7cf90c..b56880310 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs @@ -9,7 +9,7 @@ namespace Obi public float4 size; public QueryShape.QueryType type; public float contactOffset; - public float distance; + public float maxDistance; public int filter; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs index 6406cc850..7df6296a1 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs @@ -15,7 +15,7 @@ namespace Obi public float4 com; public float inverseMass; - private int pad0; + public int constraintCount; private int pad1; private int pad2; } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs index f1fcfb1f9..5f2c182bc 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs @@ -1,4 +1,4 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using System; using Unity.Collections; using Unity.Mathematics; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs index f15939bf9..3b3bf9ee9 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs @@ -1,4 +1,4 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using System; using System.Collections.Generic; using Unity.Collections; @@ -9,7 +9,7 @@ using Unity.Jobs; namespace Obi { - public class ConstraintSorter where T : unmanaged, IConstraint + public class ConstraintSorter where T : unmanaged, IConstraint { public struct ConstraintComparer : IComparer where K : IConstraint @@ -28,7 +28,7 @@ namespace Obi public JobHandle SortConstraints(int particleCount, NativeArray constraints, ref NativeArray sortedConstraints, - JobHandle handle) + JobHandle handle) { // Count the amount of digits in the largest particle index that can be referenced by a constraint: NativeArray totalCountUpToDigit = new NativeArray(particleCount + 1, Allocator.TempJob); @@ -59,16 +59,16 @@ namespace Obi { InOutArray = sortedConstraints, NextElementIndex = totalCountUpToDigit, - comparer = new ConstraintComparer() + comparer = new ConstraintComparer() }.Schedule(totalCountUpToDigit.Length, numPerBatch, handle); return handle; } [BurstCompile] - public struct CountSortPerFirstParticleJob : IJob + public struct CountSortPerFirstParticleJob : IJob { - [ReadOnly] [NativeDisableContainerSafetyRestriction] public NativeArray input; + [ReadOnly][NativeDisableContainerSafetyRestriction] public NativeArray input; public NativeArray output; [NativeDisableContainerSafetyRestriction] public NativeArray digitCount; @@ -117,7 +117,7 @@ namespace Obi [NativeDisableContainerSafetyRestriction] public NativeArray InOutArray; // Typically lastDigitIndex is resulting RadixSortPerBodyAJob.digitCount. nextElementIndex[i] = index of first element with bodyA index == i + 1 - [NativeDisableContainerSafetyRestriction] [DeallocateOnJobCompletion] public NativeArray NextElementIndex; + [NativeDisableContainerSafetyRestriction][DeallocateOnJobCompletion] public NativeArray NextElementIndex; [ReadOnly] public ConstraintComparer comparer; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs index 5c1470577..2015869be 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs @@ -1,9 +1,10 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System; - -public interface IConstraint +namespace Obi { - int GetParticleCount(); - int GetParticle(int index); + public interface IConstraint + { + int GetParticleCount(); + int GetParticle(int index); + } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs index c572cea82..fe57581a0 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs @@ -1,118 +1,76 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using Unity.Mathematics; -public struct GridHash +namespace Obi { - public readonly static int3[] cellOffsets3D = + public struct GridHash { - new int3(1,0,0), - new int3(0,1,0), - new int3(1,1,0), - new int3(0,0,1), - new int3(1,0,1), - new int3(0,1,1), - new int3(1,1,1), - new int3(-1,1,0), - new int3(-1,-1,1), - new int3(0,-1,1), - new int3(1,-1,1), - new int3(-1,0,1), - new int3(-1,1,1) - }; - - public readonly static int3[] cellOffsets = - { - new int3(0, 0, 0), - new int3(-1, 0, 0), - new int3(0, -1, 0), - new int3(0, 0, -1), - new int3(1, 0, 0), - new int3(0, 1, 0), - new int3(0, 0, 1) - }; - - public readonly static int2[] cell2DOffsets = - { - new int2(0, 0), - new int2(-1, 0), - new int2(0, -1), - new int2(1, 0), - new int2(0, 1), - }; - - public static int Hash(float3 v, float cellSize) - { - return Hash(Quantize(v, cellSize)); - } - - public static int3 Quantize(float3 v, float cellSize) - { - return new int3(math.floor(v / cellSize)); - } - - public static int Hash(float2 v, float cellSize) - { - return Hash(Quantize(v, cellSize)); - } - - public static int2 Quantize(float2 v, float cellSize) - { - return new int2(math.floor(v / cellSize)); - } - - public static int Hash(int3 grid) - { - unchecked + public readonly static int3[] cellOffsets3D = { - // Simple int3 hash based on a pseudo mix of : - // 1) https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function - // 2) https://en.wikipedia.org/wiki/Jenkins_hash_function - int hash = grid.x; - hash = (hash * 397) ^ grid.y; - hash = (hash * 397) ^ grid.z; - hash += hash << 3; - hash ^= hash >> 11; - hash += hash << 15; - return hash; - } - } + new int3(1,0,0), + new int3(0,1,0), + new int3(1,1,0), + new int3(0,0,1), + new int3(1,0,1), + new int3(0,1,1), + new int3(1,1,1), + new int3(-1,1,0), + new int3(-1,-1,1), + new int3(0,-1,1), + new int3(1,-1,1), + new int3(-1,0,1), + new int3(-1,1,1) + }; - public static int Hash(int2 grid) - { - unchecked + public readonly static int3[] cellOffsets = { - // Simple int3 hash based on a pseudo mix of : - // 1) https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function - // 2) https://en.wikipedia.org/wiki/Jenkins_hash_function - int hash = grid.x; - hash = (hash * 397) ^ grid.y; - hash += hash << 3; - hash ^= hash >> 11; - hash += hash << 15; - return hash; + new int3(0, 0, 0), + new int3(-1, 0, 0), + new int3(0, -1, 0), + new int3(0, 0, -1), + new int3(1, 0, 0), + new int3(0, 1, 0), + new int3(0, 0, 1) + }; + + public readonly static int2[] cell2DOffsets = + { + new int2(0, 0), + new int2(-1, 0), + new int2(0, -1), + new int2(1, 0), + new int2(0, 1), + }; + + public static int3 Quantize(float3 v, float cellSize) + { + return new int3(math.floor(v / cellSize)); } - } - public static ulong Hash(ulong hash, ulong key) - { - const ulong m = 0xc6a4a7935bd1e995UL; - const int r = 47; + public static int2 Quantize(float2 v, float cellSize) + { + return new int2(math.floor(v / cellSize)); + } - ulong h = hash; - ulong k = key; + public static int Hash(in int4 cellIndex, int maxCells) + { + const int p1 = 73856093; + const int p2 = 19349663; + const int p3 = 83492791; + const int p4 = 10380569; + return math.abs(p1 * cellIndex.x ^ p2 * cellIndex.y ^ p3 * cellIndex.z ^ p4 * cellIndex.w) % maxCells; + } - k *= m; - k ^= k >> r; - k *= m; + public static int Hash(in int3 cellIndex, int maxCells) + { + const int p1 = 73856093; + const int p2 = 19349663; + const int p3 = 83492791; + return ((p1 * cellIndex.x ^ p2 * cellIndex.y ^ p3 * cellIndex.z) & 0x7fffffff) % maxCells; - h ^= k; - h *= m; - - h ^= h >> r; - h *= m; - h ^= h >> r; - - return h; + /*var index = cellIndex - new int3(-32, -32, -32); + return index.x + index.y * 64 + index.z * 64 * 64;*/ + } } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs index c70f198fb..aa210c062 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs @@ -23,7 +23,9 @@ namespace Obi public unsafe struct NativeMultilevelGrid : IDisposable where T : unmanaged, IEquatable { - public const float minSize = 0.01f; + public const float minSize = 0.01f; // minimum cell size is 1 centimeter, enough for very small particles. + public const int minLevel = -6; // grid level for minSize. + public const int maxLevel = 17; /** * A cell in the multilevel grid. Coords are 4-dimensional, the 4th component is the grid level. @@ -58,7 +60,7 @@ namespace Obi { get { - return UnsafeUtility.ReadArrayElement(contents.Ptr, index); + return contents.ElementAt(index); } } @@ -69,11 +71,7 @@ namespace Obi public bool Remove(K entity) { - //int index = contents.IndexOf(entity); - int index = -1; - for (int i = 0; i < contents.Length; ++i) - if (contents[i].Equals(entity)) { index = i; break; } - + int index = contents.IndexOf(entity); if (index >= 0) { contents.RemoveAtSwapBack(index); @@ -88,15 +86,15 @@ namespace Obi } } - public NativeHashMap grid; + public NativeParallelHashMap grid; public NativeList> usedCells; - public NativeHashMap populatedLevels; + public NativeParallelHashMap populatedLevels; public NativeMultilevelGrid(int capacity, Allocator label) { - grid = new NativeHashMap(capacity, label); + grid = new NativeParallelHashMap(capacity, label); usedCells = new NativeList>(label); - populatedLevels = new NativeHashMap(10, label); + populatedLevels = new NativeParallelHashMap(10, label); } public int CellCount @@ -172,14 +170,16 @@ namespace Obi [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GridLevelForSize(float size) { - // the magic number is 1/log(2) - return (int)math.ceil(math.log(math.max(size,minSize)) * 1.44269504089f); + // the magic number is 1/log(2), used because log_a(x) = log_b(x) / log_b(a) + // level is clamped between MIN_LEVEL and MAX_LEVEL, then remapped to (0, MAX_LEVEL - MIN_LEVEL) + // this allows us to avoid InterlockedMax issues on GPU, since it doesn't work on negative numbers on some APIs. + return math.clamp((int)math.ceil(math.log(size) * 1.44269504089f), minLevel, maxLevel) - minLevel; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float CellSizeOfLevel(int level) { - return math.exp2(level); + return math.exp2(level + minLevel); } /** @@ -187,7 +187,7 @@ namespace Obi */ public static int4 GetParentCellCoords(int4 cellCoords, int level) { - float decimation = CellSizeOfLevel(level - cellCoords[3]); + float decimation = math.exp2(level - cellCoords[3]); int4 cell = (int4)math.floor((float4)cellCoords / decimation); cell[3] = level; return cell; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs index 5fab570fc..b2c8ccdae 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs @@ -4,6 +4,7 @@ using Unity.Collections; using Unity.Jobs; using Unity.Mathematics; using Unity.Burst; +using UnityEngine; namespace Obi { @@ -20,34 +21,14 @@ namespace Obi public NativeQueue particleContactQueue; public NativeQueue fluidInteractionQueue; - - [BurstCompile] - struct CalculateCellCoords : IJobParallelFor - { - [ReadOnly] public NativeArray simplexBounds; - public NativeArray cellCoords; - [ReadOnly] public bool is2D; - - public void Execute(int i) - { - int level = NativeMultilevelGrid.GridLevelForSize(simplexBounds[i].AverageAxisLength()); - float cellSize = NativeMultilevelGrid.CellSizeOfLevel(level); - - // get new particle cell coordinate: - int4 newCellCoord = new int4(GridHash.Quantize(simplexBounds[i].center.xyz, cellSize), level); - - // if the solver is 2D, project the particle to the z = 0 cell. - if (is2D) newCellCoord[2] = 0; - - cellCoords[i] = newCellCoord; - } - } - [BurstCompile] struct UpdateGrid : IJob { public NativeMultilevelGrid grid; - [ReadOnly] public NativeArray cellCoords; + [ReadOnly] public NativeArray simplexBounds; + public NativeArray cellCoords; + + [ReadOnly] public Oni.SolverParameters parameters; [ReadOnly] public int simplexCount; public void Execute() @@ -56,6 +37,17 @@ namespace Obi for (int i = 0; i < simplexCount; ++i) { + int level = NativeMultilevelGrid.GridLevelForSize(simplexBounds[i].MaxAxisLength()); + float cellSize = NativeMultilevelGrid.CellSizeOfLevel(level); + + // get new cell coordinate: + int4 newCellCoord = new int4(GridHash.Quantize(simplexBounds[i].center.xyz, cellSize), level); + + // if the solver is 2D, project to the z = 0 cell. + if (parameters.mode == Oni.SolverParameters.Mode.Mode2D) newCellCoord[2] = 0; + + cellCoords[i] = newCellCoord; + // add to new cell: int cellIndex = grid.GetOrCreateCell(cellCoords[i]); var newCell = grid.usedCells[cellIndex]; @@ -69,6 +61,7 @@ namespace Obi public struct GenerateParticleParticleContactsJob : IJobParallelFor { [ReadOnly] public NativeMultilevelGrid grid; + [DeallocateOnJobCompletion] [ReadOnly] public NativeArray gridLevels; @@ -80,14 +73,13 @@ namespace Obi [ReadOnly] public NativeArray invMasses; [ReadOnly] public NativeArray radii; [ReadOnly] public NativeArray normals; - [ReadOnly] public NativeArray fluidRadii; + [ReadOnly] public NativeArray fluidMaterials; [ReadOnly] public NativeArray phases; [ReadOnly] public NativeArray filters; // simplex arrays: [ReadOnly] public NativeArray simplices; [ReadOnly] public SimplexCounts simplexCounts; - [ReadOnly] public NativeArray simplexBounds; [ReadOnly] public NativeArray particleMaterialIndices; [ReadOnly] public NativeArray collisionMaterials; @@ -165,7 +157,7 @@ namespace Obi } // neighboring cells in levels above the current one: - int levelIndex = gridLevels.IndexOf(cellCoords.w); + int levelIndex = gridLevels.IndexOf(cellCoords.w); if (levelIndex >= 0) { levelIndex++; @@ -202,10 +194,10 @@ namespace Obi for (int j = 0; j < simplexSize; ++j) { int particleIndex = simplices[simplexStart + j]; + group = math.max(group, ObiUtils.GetGroupFromPhase(phases[particleIndex])); flags |= ObiUtils.GetFlagsFromPhase(phases[particleIndex]); category |= filters[particleIndex] & ObiUtils.FilterCategoryBitmask; mask |= (filters[particleIndex] & ObiUtils.FilterMaskBitmask) >> 16; - group = math.max(group, ObiUtils.GetGroupFromPhase(phases[particleIndex])); restPositionsEnabled |= restPositions[particleIndex].w > 0.5f; } @@ -214,10 +206,6 @@ namespace Obi private void InteractionTest(int A, int B, ref BurstSimplex simplexShape) { - // skip the pair if their bounds don't intersect: - if (!simplexBounds[A].IntersectsAabb(simplexBounds[B])) - return; - // get the start index and size of each simplex: int simplexStartA = simplexCounts.GetSimplexStartAndSize(A, out int simplexSizeA); int simplexStartB = simplexCounts.GetSimplexStartAndSize(B, out int simplexSizeB); @@ -247,17 +235,14 @@ namespace Obi // if all simplices are fluid, check their smoothing radii: if ((flagsA & ObiUtils.ParticleFlags.Fluid) != 0 && (flagsB & ObiUtils.ParticleFlags.Fluid) != 0) { + // for fluid we only consider the first particle in each simplex. int particleA = simplices[simplexStartA]; int particleB = simplices[simplexStartB]; - // for fluid we only consider the first particle in each simplex. - float4 predictedPositionA = positions[particleA] + velocities[particleA] * dt; - float4 predictedPositionB = positions[particleB] + velocities[particleB] * dt; - // Calculate particle center distance: - float d2 = math.lengthsq(predictedPositionA - predictedPositionB); + float d2 = math.lengthsq(positions[particleA].xyz - positions[particleB].xyz); - float fluidDistance = math.max(fluidRadii[particleA], fluidRadii[particleB]); + float fluidDistance = math.max(fluidMaterials[particleA].x, fluidMaterials[particleB].x) + collisionMargin; if (d2 <= fluidDistance * fluidDistance) { fluidInteractionsQueue.Enqueue(new FluidInteraction { particleA = particleA, particleB = particleB }); @@ -299,7 +284,7 @@ namespace Obi // compare distance along contact normal with radius. if (math.dot(simplexPoint - restPoint.point, restPoint.normal) < simplexRadiusA + simplexRadiusB) - return; + return; } simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSizeA); @@ -310,13 +295,16 @@ namespace Obi simplices, simplexStartA, simplexSizeA, ref simplexBary, out simplexPoint, optimizationIterations, optimizationTolerance); simplexRadiusA = 0; simplexRadiusB = 0; - float4 velocityA = float4.zero, velocityB = float4.zero, normalB = float4.zero; + float4 velocityA = float4.zero, velocityB = float4.zero, normalA = float4.zero, normalB = float4.zero; + float invMassA = 0, invMassB = 0; for (int j = 0; j < simplexSizeA; ++j) { int particleIndex = simplices[simplexStartA + j]; simplexRadiusA += radii[particleIndex].x * simplexBary[j]; velocityA += velocities[particleIndex] * simplexBary[j]; + normalA += (normals[particleIndex].w < 0 ? new float4(math.rotate(orientations[particleIndex],normals[particleIndex].xyz), normals[particleIndex].w) : normals[particleIndex]) * simplexBary[j]; + invMassA += invMasses[particleIndex] * simplexBary[j]; } for (int j = 0; j < simplexSizeB; ++j) @@ -324,111 +312,53 @@ namespace Obi int particleIndex = simplices[simplexStartB + j]; simplexRadiusB += radii[particleIndex].x * surfacePoint.bary[j]; velocityB += velocities[particleIndex] * surfacePoint.bary[j]; - normalB += normals[particleIndex] * surfacePoint.bary[j]; + normalB += (normals[particleIndex].w < 0 ? new float4(math.rotate(orientations[particleIndex], normals[particleIndex].xyz), normals[particleIndex].w) : normals[particleIndex]) * surfacePoint.bary[j]; + invMassB += invMasses[particleIndex] * simplexBary[j]; } + // no contact between fixed simplices: + //if (!(invMassA > 0 || invMassB > 0)) + // return; + float dAB = math.dot(simplexPoint - surfacePoint.point, surfacePoint.normal); - float vel = math.dot(velocityA - velocityB, surfacePoint.normal); + float vel = math.dot(velocityA - velocityB, surfacePoint.normal); // check if the projected velocity along the contact normal will get us within collision distance. if (vel * dt + dAB <= simplexRadiusA + simplexRadiusB + collisionMargin) { // adapt collision normal for one-sided simplices: if ((flagsB & ObiUtils.ParticleFlags.OneSided) != 0 && categoryA < categoryB) - BurstMath.OneSidedNormal(normalB, ref surfacePoint.normal); + BurstMath.OneSidedNormal(normalB, ref surfacePoint.normal); - contactsQueue.Enqueue(new BurstContact() + // during inter-collision, if either particle contains SDF data and they overlap: + if (groupA != groupB && (normalB.w < 0 || normalA.w < 0) && dAB * 1.05f <= simplexRadiusA + simplexRadiusB) + { + // as normal, pick SDF gradient belonging to least penetration distance: + float4 nij = normalB; + if (normalB.w >= 0 || (normalA.w < 0 && normalB.w < normalA.w)) + nij = new float4(-normalA.xyz, normalA.w); + + // for boundary particles, use one sided sphere normal: + if (math.abs(nij.w) <= math.max(simplexRadiusA, simplexRadiusB) * 1.5f) + BurstMath.OneSidedNormal(nij, ref surfacePoint.normal); + else + surfacePoint.normal = nij; + } + + surfacePoint.normal.w = 0; + contactsQueue.Enqueue(new BurstContact { bodyA = A, bodyB = B, pointA = simplexBary, pointB = surfacePoint.bary, normal = surfacePoint.normal - }); + }); } } } } - [BurstCompile] - public struct InterpolateDiffusePropertiesJob : IJobParallelFor - { - [ReadOnly] public NativeMultilevelGrid grid; - - [DeallocateOnJobCompletion] - [ReadOnly] public NativeArray cellOffsets; - - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray properties; - [ReadOnly] public NativeArray diffusePositions; - [ReadOnly] public Poly6Kernel densityKernel; - - public NativeArray diffuseProperties; - public NativeArray neighbourCount; - - [DeallocateOnJobCompletion] - [ReadOnly] public NativeArray gridLevels; - - [ReadOnly] public BurstInertialFrame inertialFrame; - [ReadOnly] public bool mode2D; - - public void Execute(int p) - { - neighbourCount[p] = 0; - float4 diffuseProperty = float4.zero; - float kernelSum = 0; - - int offsetCount = mode2D ? 4 : 8; - - float4 solverDiffusePosition = inertialFrame.frame.InverseTransformPoint(diffusePositions[p]); - - for (int k = 0; k < gridLevels.Length; ++k) - { - int l = gridLevels[k]; - float radius = NativeMultilevelGrid.CellSizeOfLevel(l); - - float4 cellCoords = math.floor(solverDiffusePosition / radius); - - cellCoords[3] = 0; - if (mode2D) - cellCoords[2] = 0; - - float4 posInCell = solverDiffusePosition - (cellCoords * radius + new float4(radius * 0.5f)); - int4 quadrant = (int4)math.sign(posInCell); - - quadrant[3] = l; - - for (int i = 0; i < offsetCount; ++i) - { - int cellIndex; - if (grid.TryGetCellIndex((int4)cellCoords + cellOffsets[i] * quadrant, out cellIndex)) - { - var cell = grid.usedCells[cellIndex]; - for (int n = 0; n < cell.Length; ++n) - { - float4 r = solverDiffusePosition - positions[cell[n]]; - r[3] = 0; - if (mode2D) - r[2] = 0; - - float d = math.length(r); - if (d <= radius) - { - float w = densityKernel.W(d, radius); - kernelSum += w; - diffuseProperty += properties[cell[n]] * w; - neighbourCount[p]++; - } - } - } - } - } - - if (kernelSum > BurstMath.epsilon) - diffuseProperties[p] = diffuseProperty / kernelSum; - } - } - public ParticleGrid() { this.grid = new NativeMultilevelGrid(1000, Allocator.Persistent); @@ -436,22 +366,15 @@ namespace Obi this.fluidInteractionQueue = new NativeQueue(Allocator.Persistent); } - public void Update(BurstSolverImpl solver, float deltaTime, JobHandle inputDeps) + public void Update(BurstSolverImpl solver, JobHandle inputDeps) { - var calculateCells = new CalculateCellCoords - { - simplexBounds = solver.simplexBounds, - cellCoords = solver.cellCoords, - is2D = solver.abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D, - }; - - inputDeps = calculateCells.Schedule(solver.simplexCounts.simplexCount, 4, inputDeps); - var updateGrid = new UpdateGrid { grid = grid, + simplexBounds = solver.simplexBounds, + simplexCount = solver.simplexCounts.simplexCount, cellCoords = solver.cellCoords, - simplexCount = solver.simplexCounts.simplexCount + parameters = solver.abstraction.parameters }; updateGrid.Schedule(inputDeps).Complete(); } @@ -472,13 +395,12 @@ namespace Obi invMasses = solver.invMasses, radii = solver.principalRadii, normals = solver.normals, - fluidRadii = solver.smoothingRadii, + fluidMaterials = solver.fluidMaterials, phases = solver.phases, filters = solver.filters, simplices = solver.simplices, simplexCounts = solver.simplexCounts, - simplexBounds = solver.simplexBounds, particleMaterialIndices = solver.abstraction.collisionMaterials.AsNativeArray(), collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), @@ -494,49 +416,11 @@ namespace Obi return generateParticleContactsJob.Schedule(grid.CellCount, 1); } - public JobHandle InterpolateDiffuseProperties(BurstSolverImpl solver, - NativeArray properties, - NativeArray diffusePositions, - NativeArray diffuseProperties, - NativeArray neighbourCount, - int diffuseCount) - { - - NativeArray offsets = new NativeArray(8, Allocator.TempJob); - offsets[0] = new int4(0, 0, 0, 1); - offsets[1] = new int4(1, 0, 0, 1); - offsets[2] = new int4(0, 1, 0, 1); - offsets[3] = new int4(1, 1, 0, 1); - offsets[4] = new int4(0, 0, 1, 1); - offsets[5] = new int4(1, 0, 1, 1); - offsets[6] = new int4(0, 1, 1, 1); - offsets[7] = new int4(1, 1, 1, 1); - - var interpolateDiffusePropertiesJob = new InterpolateDiffusePropertiesJob - { - grid = grid, - positions = solver.abstraction.positions.AsNativeArray(), - cellOffsets = offsets, - properties = properties, - diffusePositions = diffusePositions, - diffuseProperties = diffuseProperties, - neighbourCount = neighbourCount, - densityKernel = new Poly6Kernel(solver.abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), - gridLevels = grid.populatedLevels.GetKeyArray(Allocator.TempJob), - inertialFrame = solver.inertialFrame, - mode2D = solver.abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D - }; - - return interpolateDiffusePropertiesJob.Schedule(diffuseCount, 64); - } - public JobHandle SpatialQuery(BurstSolverImpl solver, NativeArray shapes, NativeArray transforms, NativeQueue results) { - var world = ObiColliderWorld.GetInstance(); - var job = new SpatialQueryJob { grid = grid, diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs index aee21d6f2..483053074 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs @@ -1,6 +1,5 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using Unity.Mathematics; -using Unity.Collections; namespace Obi { @@ -9,34 +8,25 @@ namespace Obi public float4 pointA; // point A, expressed as simplex barycentric coords for simplices, as a solver-space position for colliders. public float4 pointB; // point B, expressed as simplex barycentric coords for simplices, as a solver-space position for colliders. - public float4 normal; - public float4 tangent; - public float4 bitangent; + public float4 normal; // contact normal on bodyB's surface. + public float4 tangent; // contact tangent on bodyB's surface. - public float distance; + public float distance; // distance between bodyA's and bodyB's surface. - float normalLambda; - float tangentLambda; - float bitangentLambda; - float stickLambda; - float rollingFrictionImpulse; + public float normalLambda; + public float tangentLambda; + public float bitangentLambda; + public float stickLambda; + public float rollingFrictionImpulse; public int bodyA; public int bodyB; - public float normalInvMassA; - public float tangentInvMassA; - public float bitangentInvMassA; - - public float normalInvMassB; - public float tangentInvMassB; - public float bitangentInvMassB; - - public double pad0; // padding to ensure correct alignment to 128 bytes. - public int GetParticleCount() { return 2; } public int GetParticle(int index) { return index == 0 ? bodyA : bodyB; } + public float4 bitangent => math.normalizesafe(new float4(math.cross(normal.xyz, tangent.xyz), 0)); + public override string ToString() { return bodyA + "," + bodyB; @@ -50,85 +40,15 @@ namespace Obi return first; } - public float TotalNormalInvMass - { - get { return normalInvMassA + normalInvMassB; } - } - - public float TotalTangentInvMass - { - get { return tangentInvMassA + tangentInvMassB; } - } - - public float TotalBitangentInvMass - { - get { return bitangentInvMassA + bitangentInvMassB; } - } - - public void CalculateBasis(float4 relativeVelocity) + public void CalculateTangent(float4 relativeVelocity) { tangent = math.normalizesafe(relativeVelocity - math.dot(relativeVelocity, normal) * normal); - bitangent = math.normalizesafe(new float4(math.cross(normal.xyz, tangent.xyz),0)); } - public void CalculateContactMassesA(float invMass, - float4 inverseInertiaTensor, - float4 position, - quaternion orientation, - float4 contactPoint, - bool rollingContacts) - { - // initialize inverse linear masses: - normalInvMassA = tangentInvMassA = bitangentInvMassA = invMass; - - if (rollingContacts) - { - float4 rA = contactPoint - position; - float4x4 solverInertiaA = BurstMath.TransformInertiaTensor(inverseInertiaTensor, orientation); - - normalInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, normal); - tangentInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, tangent); - bitangentInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, bitangent); - } - } - - public void CalculateContactMassesB(float invMass, - float4 inverseInertiaTensor, - float4 position, - quaternion orientation, - float4 contactPoint, - bool rollingContacts) - { - // initialize inverse linear masses: - normalInvMassB = tangentInvMassB = bitangentInvMassB = invMass; - - if (rollingContacts) - { - float4 rB = contactPoint - position; - float4x4 solverInertiaB = BurstMath.TransformInertiaTensor(inverseInertiaTensor, orientation); - - normalInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, normal); - tangentInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, tangent); - bitangentInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, bitangent); - } - } - - - public void CalculateContactMassesB(in BurstRigidbody rigidbody, in BurstAffineTransform solver2World) - { - float4 rB = solver2World.TransformPoint(pointB) - rigidbody.com; - - // initialize inverse linear masses: - normalInvMassB = tangentInvMassB = bitangentInvMassB = rigidbody.inverseMass; - normalInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, normal); - tangentInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, tangent); - bitangentInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, bitangent); - } - - public float SolveAdhesion(float4 posA, float4 posB, float stickDistance, float stickiness, float dt) + public float SolveAdhesion(float normalMass, float4 posA, float4 posB, float stickDistance, float stickiness, float dt) { - if (TotalNormalInvMass <= 0 || stickDistance <= 0 || stickiness <= 0 || dt <= 0) + if (normalMass <= 0 || stickDistance <= 0 || stickiness <= 0 || dt <= 0) return 0; distance = math.dot(posA - posB, normal); @@ -137,7 +57,7 @@ namespace Obi float constraint = stickiness * (1 - math.max(distance / stickDistance, 0)) * dt; // calculate lambda multiplier: - float dlambda = -constraint / TotalNormalInvMass; + float dlambda = -constraint / normalMass; // accumulate lambda: float newStickinessLambda = math.min(stickLambda + dlambda, 0); @@ -149,10 +69,9 @@ namespace Obi return lambdaChange; } - public float SolvePenetration(float4 posA, float4 posB, float maxDepenetrationDelta) + public float SolvePenetration(float normalMass, float4 posA, float4 posB, float maxDepenetrationDelta) { - - if (TotalNormalInvMass <= 0) + if (normalMass <= 0) return 0; //project position delta to normal vector: @@ -162,7 +81,7 @@ namespace Obi float maxProjection = math.max(-distance - maxDepenetrationDelta, 0); // calculate lambda multiplier: - float dlambda = -(distance + maxProjection) / TotalNormalInvMass; + float dlambda = -(distance + maxProjection) / normalMass; // accumulate lambda: float newLambda = math.max(normalLambda + dlambda, 0); @@ -174,11 +93,11 @@ namespace Obi return lambdaChange; } - public float2 SolveFriction(float4 relativeVelocity, float staticFriction, float dynamicFriction, float dt) + public float2 SolveFriction(float tangentMass, float bitangentMass, float4 relativeVelocity, float staticFriction, float dynamicFriction, float dt) { float2 lambdaChange = float2.zero; - if (TotalTangentInvMass <= 0 || TotalBitangentInvMass <= 0 || + if (tangentMass <= 0 || bitangentMass <= 0 || (dynamicFriction <= 0 && staticFriction <= 0) || (normalLambda <= 0 && stickLambda <= 0)) return lambdaChange; @@ -191,7 +110,7 @@ namespace Obi float staticFrictionCone = normalLambda / dt * staticFriction; // tangent impulse: - float tangentLambdaDelta = -tangentPosDelta / TotalTangentInvMass; + float tangentLambdaDelta = -tangentPosDelta / tangentMass; float newTangentLambda = tangentLambda + tangentLambdaDelta; if (math.abs(newTangentLambda) > staticFrictionCone) @@ -201,7 +120,7 @@ namespace Obi tangentLambda = newTangentLambda; // bitangent impulse: - float bitangentLambdaDelta = -bitangentPosDelta / TotalBitangentInvMass; + float bitangentLambdaDelta = -bitangentPosDelta / bitangentMass; float newBitangentLambda = bitangentLambda + bitangentLambdaDelta; if (math.abs(newBitangentLambda) > staticFrictionCone) @@ -239,6 +158,6 @@ namespace Obi return rolling_impulse_change; } -} + } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs index 7d676052c..5306e2cd6 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs @@ -10,9 +10,9 @@ namespace Obi public float4 queryPoint; // point B, expressed as simplex barycentric coords for simplices, as a solver-space position for colliders. public float4 normal; public float distance; + public float distanceAlongRay; public int simplexIndex; public int queryIndex; - public int pad0; // padding to ensure correct alignment. } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs index 4be8d5f1b..b56f3e35b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs @@ -67,17 +67,29 @@ namespace Obi int optimizationIterations, float optimizationTolerance) { - var co = new BurstQueryResult() { simplexIndex = simplexIndex, queryIndex = shapeIndex }; + var co = new BurstQueryResult { simplexIndex = simplexIndex, queryIndex = shapeIndex }; float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); + var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); + + float4 simplexPrevPosition = float4.zero; + float simplexRadius = 0; + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexPrevPosition += positions[particleIndex] * simplexBary[j]; + simplexRadius += BurstMath.EllipsoidRadius(colliderPoint.normal, orientations[particleIndex], radii[particleIndex].xyz) * simplexBary[j]; + } co.queryPoint = colliderPoint.point; co.normal = colliderPoint.normal; co.simplexBary = simplexBary; + co.distance = math.dot(simplexPrevPosition - colliderPoint.point, colliderPoint.normal) - simplexRadius; - results.Enqueue(co); + if (co.distance <= shape.maxDistance) + results.Enqueue(co); } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs index ce2533383..b89248af2 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs @@ -1,6 +1,7 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using Unity.Collections; using Unity.Mathematics; +using UnityEngine; namespace Obi { @@ -17,7 +18,7 @@ namespace Obi // express ray in simplex space (ellipsoid == scaled sphere) float4 rayOrigin = math.mul(colliderToSimplex, new float4(shape.center.xyz,1)); - float4 rayDirection = math.normalizesafe(math.mul(colliderToSimplex, new float4((shape.size - shape.center).xyz,0))); + float4 rayDirection = math.normalizesafe(math.mul(colliderToSimplex, new float4(shape.size.xyz,0))); float rayDistance = ObiUtils.RaySphereIntersection(rayOrigin.xyz, rayDirection.xyz, float3.zero, 1); @@ -25,7 +26,7 @@ namespace Obi { point = colliderToSolver.InverseTransformPointUnscaled(point); - float4 centerLine = BurstMath.NearestPointOnEdge(shape.center * colliderToSolver.scale, shape.size * colliderToSolver.scale, point, out float mu); + float4 centerLine = BurstMath.NearestPointOnEdge(shape.center * colliderToSolver.scale, (shape.center + shape.size) * colliderToSolver.scale, point, out float mu); float4 centerToPoint = point - centerLine; float distanceToCenter = math.length(centerToPoint); @@ -57,17 +58,33 @@ namespace Obi int optimizationIterations, float optimizationTolerance) { - var co = new BurstQueryResult() { simplexIndex = simplexIndex, queryIndex = shapeIndex }; + var co = new BurstQueryResult { simplexIndex = simplexIndex, queryIndex = shapeIndex }; float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); + var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); - co.queryPoint = colliderPoint.point; + float4 simplexPrevPosition = float4.zero; + float simplexRadius = 0; + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexPrevPosition += positions[particleIndex] * simplexBary[j]; + simplexRadius += BurstMath.EllipsoidRadius(colliderPoint.normal, orientations[particleIndex], radii[particleIndex].xyz) * simplexBary[j]; + } + + co.queryPoint = colliderPoint.point; co.normal = colliderPoint.normal; co.simplexBary = simplexBary; + co.distance = math.dot(simplexPrevPosition - colliderPoint.point, colliderPoint.normal) - simplexRadius; - results.Enqueue(co); + if (co.distance <= shape.maxDistance) + { + float4 pointOnRay = colliderPoint.point + colliderPoint.normal * co.distance; + co.distanceAlongRay = math.dot(pointOnRay.xyz - shape.center.xyz, math.normalizesafe(shape.size.xyz)); + results.Enqueue(co); + } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs index e36412357..82cf497eb 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs @@ -39,17 +39,29 @@ namespace Obi int optimizationIterations, float optimizationTolerance) { - var co = new BurstQueryResult() { simplexIndex = simplexIndex, queryIndex = shapeIndex }; + var co = new BurstQueryResult { simplexIndex = simplexIndex, queryIndex = shapeIndex }; float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); - var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, - ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); + var colliderPoint = BurstLocalOptimization.Optimize(ref this, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out float4 convexPoint, optimizationIterations, optimizationTolerance); + + float4 simplexPrevPosition = float4.zero; + float simplexRadius = 0; + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexPrevPosition += positions[particleIndex] * simplexBary[j]; + simplexRadius += BurstMath.EllipsoidRadius(colliderPoint.normal, orientations[particleIndex], radii[particleIndex].xyz) * simplexBary[j]; + } co.queryPoint = colliderPoint.point; co.normal = colliderPoint.normal; co.simplexBary = simplexBary; + co.distance = math.dot(simplexPrevPosition - colliderPoint.point, colliderPoint.normal) - simplexRadius; - results.Enqueue(co); + if (co.distance <= shape.maxDistance) + results.Enqueue(co); } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs index 6ea4f5875..1059408e3 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs @@ -54,7 +54,7 @@ namespace Obi { var cell = grid.usedCells[c]; - // calculate thickedned grid bounds: + // calculate thickened grid bounds: float size = NativeMultilevelGrid.CellSizeOfLevel(cell.Coords.w); float4 cellPos = (float4)cell.Coords * size; BurstAabb cellBounds = new BurstAabb(cellPos - new float4(size), cellPos + new float4(2 * size)); @@ -85,7 +85,7 @@ namespace Obi private BurstAabb CalculateShapeAABB(in BurstQueryShape shape) { - float offset = shape.contactOffset + shape.distance; + float offset = shape.contactOffset + shape.maxDistance; switch (shape.type) { case QueryShape.QueryType.Sphere: @@ -93,7 +93,7 @@ namespace Obi case QueryShape.QueryType.Box: return new BurstAabb(shape.center - shape.size*0.5f - offset, shape.center + shape.size * 0.5f + offset); case QueryShape.QueryType.Ray: - return new BurstAabb(shape.center, shape.size, offset); + return new BurstAabb(shape.center, shape.center + shape.size, offset); } return new BurstAabb(); } @@ -108,57 +108,22 @@ namespace Obi switch (shape.type) { case QueryShape.QueryType.Sphere: - BurstSphereQuery sphereShape = new BurstSphereQuery() { colliderToSolver = shapeToSolver, shape = shape}; + BurstSphereQuery sphereShape = new BurstSphereQuery { colliderToSolver = shapeToSolver, shape = shape}; sphereShape.Query(shapeIndex, positions, orientations, radii, simplices, simplexIndex, simplexStart, simplexSize, results, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); break; case QueryShape.QueryType.Box: - BurstBoxQuery boxShape = new BurstBoxQuery() { colliderToSolver = shapeToSolver, shape = shape}; + BurstBoxQuery boxShape = new BurstBoxQuery { colliderToSolver = shapeToSolver, shape = shape}; boxShape.Query(shapeIndex, positions, orientations, radii, simplices, simplexIndex, simplexStart, simplexSize, results, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); break; case QueryShape.QueryType.Ray: - BurstRay rayShape = new BurstRay() { colliderToSolver = shapeToSolver, shape = shape }; + BurstRay rayShape = new BurstRay { colliderToSolver = shapeToSolver, shape = shape }; rayShape.Query(shapeIndex, positions, orientations, radii, simplices, simplexIndex, simplexStart, simplexSize, results, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); break; } } } - - [BurstCompile] - public struct CalculateQueryDistances : IJobParallelFor - { - [ReadOnly] public NativeArray prevPositions; - [ReadOnly] public NativeArray prevOrientations; - [ReadOnly] public NativeArray radii; - - // simplex arrays: - [ReadOnly] public NativeArray simplices; - [ReadOnly] public SimplexCounts simplexCounts; - - public NativeArray queryResults; - - public void Execute(int i) - { - var result = queryResults[i]; - - int simplexStart = simplexCounts.GetSimplexStartAndSize(result.simplexIndex, out int simplexSize); - - float4 simplexPrevPosition = float4.zero; - float simplexRadius = 0; - - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexPrevPosition += prevPositions[particleIndex] * result.simplexBary[j]; - simplexRadius += BurstMath.EllipsoidRadius(result.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * result.simplexBary[j]; - } - - // update contact distance - result.distance = math.dot(simplexPrevPosition - result.queryPoint, result.normal) - simplexRadius; - queryResults[i] = result; - } - } } #endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering.meta new file mode 100644 index 000000000..5085057bd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6af4953b3f22459ab04c6e64cd948ab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common.meta new file mode 100644 index 000000000..632682d7c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3595afed529f346669fbe538323cd7d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs new file mode 100644 index 000000000..bcb706819 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs @@ -0,0 +1,62 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; +using UnityEngine; + +namespace Obi +{ + [BurstCompile] + struct BuildParticleMeshDataJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray rendererIndices; + [ReadOnly] public NativeArray rendererData; + + [ReadOnly] public NativeArray renderablePositions; + [ReadOnly] public NativeArray renderableOrientations; + [ReadOnly] public NativeArray renderableRadii; + [ReadOnly] public NativeArray colors; + + [NativeDisableParallelForRestriction] public NativeArray vertices; + [NativeDisableParallelForRestriction] public NativeArray indices; + + [ReadOnly] public int firstParticle; + + public void Execute(int i) + { + int p = particleIndices[firstParticle + i]; + int r = rendererIndices[firstParticle + i]; + + ParticleVertex v = new ParticleVertex(); + + v.pos = new float4(renderablePositions[p].xyz, 1); + v.color = colors[p] * (Vector4)rendererData[r].color; + v.b1 = new float4(math.mul(renderableOrientations[p], new float3(1, 0, 0)), renderableRadii[p][0] * renderableRadii[p][3] * rendererData[r].radiusScale); + v.b2 = new float4(math.mul(renderableOrientations[p], new float3(0, 1, 0)), renderableRadii[p][1] * renderableRadii[p][3] * rendererData[r].radiusScale); + v.b3 = new float4(math.mul(renderableOrientations[p], new float3(0, 0, 1)), renderableRadii[p][2] * renderableRadii[p][3] * rendererData[r].radiusScale); + + v.offset = new float3(1, 1, 0); + vertices[i * 4] = v; + + v.offset = new float3(-1, 1, 0); + vertices[i * 4 + 1] = v; + + v.offset = new float3(-1, -1, 0); + vertices[i * 4 + 2] = v; + + v.offset = new float3(1, -1, 0); + vertices[i * 4 + 3] = v; + + indices[i * 6] = (i * 4 + 2); + indices[i * 6 + 1] = (i * 4 + 1); + indices[i * 6 + 2] = (i * 4); + + indices[i * 6 + 3] = (i * 4 + 3); + indices[i * 6 + 4] = (i * 4 + 2); + indices[i * 6 + 5] = (i * 4); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs.meta new file mode 100644 index 000000000..c205bf0f6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cacb4a3597ee245a6b40358728c300e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs new file mode 100644 index 000000000..0b369f2a2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs @@ -0,0 +1,247 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using UnityEngine.Rendering; +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; +using Unity.Collections.LowLevel.Unsafe; +using System.Collections.Generic; + +#if (SRP_UNIVERSAL) +using UnityEngine.Rendering.Universal; +#endif + +namespace Obi +{ + + public class BurstFoamRenderSystem : ObiFoamRenderSystem + { + protected NativeArray sortHandles; + + protected struct SortHandleComparer : IComparer + { + public int Compare(float2 a, float2 b) + { + return b.y.CompareTo(a.y); + } + } + + protected SortHandleComparer comparer = new SortHandleComparer(); + + public BurstFoamRenderSystem(ObiSolver solver) : base(solver) + { +#if (SRP_UNIVERSAL) + if (GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset) + renderBatch = new ProceduralRenderBatch(0, Resources.Load("ObiMaterials/URP/Fluid/FoamParticlesURP"), new RenderBatchParams(true)); + else +#endif + renderBatch = new ProceduralRenderBatch(0, Resources.Load("ObiMaterials/Fluid/FoamParticles"), new RenderBatchParams(true)); + ReallocateRenderBatch(); + } + + public override void Dispose() + { + base.Dispose(); + + if (sortHandles.IsCreated) + sortHandles.Dispose(); + } + + private void ReallocateRenderBatch() + { + // in case the amount of particles allocated does not match + // the amount requested by the solver, reallocate + if (!sortHandles.IsCreated || m_Solver.foamPositions.count * 4 != renderBatch.vertexCount) + { + renderBatch.Dispose(); + renderBatch.vertexCount = m_Solver.foamPositions.count * 4; + renderBatch.triangleCount = m_Solver.foamPositions.count * 2; + renderBatch.Initialize(layout); + + if (sortHandles.IsCreated) + sortHandles.Dispose(); + sortHandles = new NativeArray(m_Solver.foamPositions.count, Allocator.Persistent); + } + } + + public override void Setup() + { + } + + public override void Step() + { + } + + public override unsafe void Render() + { + if (!Application.isPlaying) + return; + + var solver = m_Solver.implementation as BurstSolverImpl; + + ReallocateRenderBatch(); + + foreach (Camera camera in cameras) + { + if (camera == null) + continue; + + JobHandle inputDeps = new JobHandle(); + var sortJob = sortHandles.Slice(0, m_Solver.foamCount[3]).SortJob(comparer); + + //Clear all triangle indices to zero: + UnsafeUtility.MemClear( + NativeArrayUnsafeUtility.GetUnsafeBufferPointerWithoutChecks(renderBatch.triangles), + UnsafeUtility.SizeOf() * renderBatch.triangles.Length); + + var projectJob = new ProjectOnSortAxisJob + { + inputPositions = solver.abstraction.foamPositions.AsNativeArray(), + sortHandles = sortHandles, + sortAxis = solver.abstraction.transform.InverseTransformDirection(camera.transform.forward) + }; + + inputDeps = projectJob.Schedule(m_Solver.foamCount[3], 256, inputDeps); + + inputDeps = sortJob.Schedule(inputDeps); + + var sortParticlesJob = new SortParticles + { + sortHandles = sortHandles, + inputPositions = solver.abstraction.foamPositions.AsNativeArray(), + inputVelocities = solver.abstraction.foamVelocities.AsNativeArray(), + inputColors = solver.abstraction.foamColors.AsNativeArray(), + inputAttributes = solver.abstraction.foamAttributes.AsNativeArray(), + + outputPositions = solver.auxPositions, + outputVelocities = solver.auxVelocities, + outputColors = solver.auxColors, + outputAttributes = solver.auxAttributes + }; + + inputDeps = sortParticlesJob.Schedule(m_Solver.foamCount[3], 256, inputDeps); + + var meshJob = new BuildFoamMeshDataJob + { + inputPositions = solver.auxPositions, + inputVelocities = solver.auxVelocities, + inputColors = solver.auxColors, + inputAttributes = solver.auxAttributes, + + vertices = renderBatch.vertices, + indices = renderBatch.triangles, + }; + + inputDeps = meshJob.Schedule(m_Solver.foamCount[3], 128, inputDeps); + + inputDeps.Complete(); + + renderBatch.mesh.SetVertexBufferData(renderBatch.vertices, 0, 0, renderBatch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontResetBoneBounds | MeshUpdateFlags.DontNotifyMeshUsers); + renderBatch.mesh.SetIndexBufferData(renderBatch.triangles, 0, 0, renderBatch.triangleCount * 3, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + matProps.SetFloat("_FadeDepth", 0); + matProps.SetFloat("_VelocityStretching", m_Solver.maxFoamVelocityStretch); + matProps.SetFloat("_RadiusScale", m_Solver.foamRadiusScale); + matProps.SetFloat("_FadeIn", m_Solver.foamFade.x); + matProps.SetFloat("_FadeOut", m_Solver.foamFade.y); + matProps.SetFloat("_ScatterDensity", m_Solver.foamVolumeDensity); + matProps.SetFloat("_AmbientDensity", m_Solver.foamAmbientDensity); + matProps.SetColor("_ScatterColor", m_Solver.foamScatterColor); + matProps.SetColor("_AmbientColor", m_Solver.foamAmbientColor); + + var rp = renderBatch.renderParams; + rp.worldBounds = m_Solver.bounds; + rp.camera = camera; + rp.matProps = matProps; + + Graphics.RenderMesh(rp, renderBatch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + } + + + + [BurstCompile] + unsafe struct ProjectOnSortAxisJob : IJobParallelFor + { + [ReadOnly] public NativeArray inputPositions; + [NativeDisableParallelForRestriction] public NativeArray sortHandles; + + public float3 sortAxis; + + public void Execute(int i) + { + sortHandles[i] = new float2(i, math.dot(inputPositions[i].xyz, sortAxis)); + } + } + + [BurstCompile] + unsafe struct SortParticles : IJobParallelFor + { + [ReadOnly] public NativeArray sortHandles; + + [ReadOnly] public NativeArray inputPositions; + [ReadOnly] public NativeArray inputVelocities; + [ReadOnly] public NativeArray inputColors; + [ReadOnly] public NativeArray inputAttributes; + + [NativeDisableParallelForRestriction] public NativeArray outputPositions; + [NativeDisableParallelForRestriction] public NativeArray outputVelocities; + [NativeDisableParallelForRestriction] public NativeArray outputColors; + [NativeDisableParallelForRestriction] public NativeArray outputAttributes; + + public void Execute(int i) + { + int o = (int)sortHandles[i].x; + outputPositions[i] = inputPositions[o]; + outputVelocities[i] = inputVelocities[o]; + outputColors[i] = inputColors[o]; + outputAttributes[i] = inputAttributes[o]; + } + } + + [BurstCompile] + struct BuildFoamMeshDataJob : IJobParallelFor + { + [ReadOnly] public NativeArray inputPositions; + [ReadOnly] public NativeArray inputVelocities; + [ReadOnly] public NativeArray inputColors; + [ReadOnly] public NativeArray inputAttributes; + + [NativeDisableParallelForRestriction] public NativeArray vertices; + [NativeDisableParallelForRestriction] public NativeArray indices; + + public void Execute(int i) + { + DiffuseParticleVertex v = new DiffuseParticleVertex(); + + v.pos = new float4(inputPositions[i].xyz, 1); + v.color = inputColors[i]; + v.velocity = inputVelocities[i]; + v.attributes = inputAttributes[i]; + + v.offset = new float3(1, 1, 0); + vertices[i * 4] = v; + + v.offset = new float3(-1, 1, 0); + vertices[i * 4 + 1] = v; + + v.offset = new float3(-1, -1, 0); + vertices[i * 4 + 2] = v; + + v.offset = new float3(1, -1, 0); + vertices[i * 4 + 3] = v; + + indices[i * 6] = (i * 4 + 2); + indices[i * 6 + 1] = (i * 4 + 1); + indices[i * 6 + 2] = (i * 4); + + indices[i * 6 + 3] = (i * 4 + 3); + indices[i * 6 + 4] = (i * 4 + 2); + indices[i * 6 + 5] = (i * 4); + } + } + + } +} +#endif diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs.meta new file mode 100644 index 000000000..5f9e611de --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 555e1cc2122984a93afc0f6f31fa173b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs new file mode 100644 index 000000000..3441e2db0 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs @@ -0,0 +1,100 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; + +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; + +namespace Obi +{ + + public class BurstInstancedParticleRenderSystem : ObiInstancedParticleRenderSystem + { + + public BurstInstancedParticleRenderSystem(ObiSolver solver) : base(solver) + { + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + var instanceTransformsJob = new InstancedParticleTransforms + { + activeParticles = activeParticles.AsNativeArray(), + rendererData = rendererData.AsNativeArray(), + rendererIndex = rendererIndex.AsNativeArray(), + instanceTransforms = instanceTransforms.AsNativeArray(), + instanceColors = instanceColors.AsNativeArray(), + + renderablePositions = m_Solver.renderablePositions.AsNativeArray(), + renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), + renderableRadii = m_Solver.renderableRadii.AsNativeArray(), + colors = m_Solver.colors.AsNativeArray(), + solverToWorld = m_Solver.transform.localToWorldMatrix + }; + + instanceTransformsJob.Schedule(activeParticles.count, 32).Complete(); + + var mpb = new MaterialPropertyBlock(); + + //Draw instances: + for (int i = 0; i < batchList.Count; i++) + { + var batch = batchList[i]; + + if (batch.instanceCount > 0) + { + // workaround for RenderMeshInstanced bug + // (https://forum.unity.com/threads/gpu-instanced-custom-properties-dont-take-unity_baseinstanceid-into-account.1520602/) + // also, no NativeArray<> overload :( + mpb.SetVectorArray("_Colors", instanceColors.AsNativeArray().Slice(batch.firstInstance, batch.instanceCount).ToArray()); + + var rp = batch.renderParams; + rp.material = batch.material; + rp.worldBounds = m_Solver.bounds; + rp.matProps = mpb; + + // TODO: use generic overload to pass matrix + instance color. + Graphics.RenderMeshInstanced(rp, batch.mesh, 0, instanceTransforms.AsNativeArray(), batch.instanceCount, batch.firstInstance); + } + } + + } + } + + [BurstCompile] + struct InstancedParticleTransforms : IJobParallelFor + { + [ReadOnly] public NativeArray activeParticles; + [ReadOnly] public NativeArray rendererData; + [ReadOnly] public NativeArray rendererIndex; + + [ReadOnly] public NativeArray renderablePositions; + [ReadOnly] public NativeArray renderableOrientations; + [ReadOnly] public NativeArray renderableRadii; + [ReadOnly] public NativeArray colors; + [ReadOnly] public float4x4 solverToWorld; + + [NativeDisableParallelForRestriction] public NativeArray instanceTransforms; + [NativeDisableParallelForRestriction] public NativeArray instanceColors; + + public void Execute(int i) + { + int p = activeParticles[i]; + + Matrix4x4 tfrm = float4x4.TRS(renderablePositions[p].xyz, + renderableOrientations[p], + renderableRadii[p].xyz * renderableRadii[p][3] * rendererData[rendererIndex[i]].radiusScale); + + instanceTransforms[i] = math.mul(solverToWorld, tfrm); + + instanceColors[i] = colors[p] * (Vector4)rendererData[rendererIndex[i]].color; + } + + } + } +} +#endif + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs.meta new file mode 100644 index 000000000..2910089fc --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3896a2253db543bcaa92126d83a7ba0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs new file mode 100644 index 000000000..7b1460a3e --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs @@ -0,0 +1,58 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using UnityEngine.Rendering; + +using Unity.Jobs; +using Unity.Mathematics; + +namespace Obi +{ + public class BurstParticleRenderSystem : ObiParticleRenderSystem + { + public BurstParticleRenderSystem(ObiSolver solver) : base(solver) + { + m_Solver = solver; + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + var buildArraysJob = new BuildParticleMeshDataJob + { + particleIndices = activeParticles.AsNativeArray(), + rendererIndices = rendererIndex.AsNativeArray(), + rendererData = rendererData.AsNativeArray(), + + renderablePositions = m_Solver.renderablePositions.AsNativeArray(), + renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), + renderableRadii = m_Solver.renderableRadii.AsNativeArray(), + colors = m_Solver.colors.AsNativeArray(), + + vertices = batch.vertices, + indices = batch.triangles, + + firstParticle = batch.firstParticle, + }; + + buildArraysJob.Schedule(batch.vertexCount / 4, 32).Complete(); + + batch.mesh.SetVertexBufferData(batch.vertices, 0, 0, batch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontResetBoneBounds | MeshUpdateFlags.DontNotifyMeshUsers); + batch.mesh.SetIndexBufferData(batch.triangles, 0, 0, batch.triangleCount * 3, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + var rp = batch.renderParams; + rp.worldBounds = m_Solver.bounds; + + Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + + } + } + } +} +#endif + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs.meta new file mode 100644 index 000000000..89d3acbbf --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1d1ddc20ab7148e3ac806e3559ba2b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod.meta new file mode 100644 index 000000000..0222329ff --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 68fb3be53914247609d4e6da4f249e52 +labels: +- ObiRope +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs new file mode 100644 index 000000000..2fefee058 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs @@ -0,0 +1,139 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; + +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; +using Unity.Collections.LowLevel.Unsafe; + +namespace Obi +{ + + public class BurstChainRopeRenderSystem : ObiChainRopeRenderSystem + { + protected Matrix4x4[] transformsArray = new Matrix4x4[1023]; + + public BurstChainRopeRenderSystem(ObiSolver solver) : base(solver) + { + } + + public override void Setup() + { + base.Setup(); + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + // generate raw frames using parallel transport + var instanceTransformsJob = new InstanceTransforms() + { + rendererData = rendererData.AsNativeArray(), + chunkData = chunkData.AsNativeArray(), + modifiers = modifiers.AsNativeArray(), + elements = elements.AsNativeArray(), + + instanceTransforms = instanceTransforms.AsNativeArray(), + instanceColors = instanceColors.AsNativeArray(), + + renderablePositions = m_Solver.renderablePositions.AsNativeArray(), + renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), + principalRadii = m_Solver.principalRadii.AsNativeArray(), + colors = m_Solver.colors.AsNativeArray(), + solverToWorld = m_Solver.transform.localToWorldMatrix, + }; + + instanceTransformsJob.Schedule(chunkData.count, 8).Complete(); + + //Draw instances: + for (int i = 0; i < batchList.Count; i++) + { + var batch = batchList[i]; + + var rp = batch.renderParams; + rp.material = batch.material; + rp.worldBounds = m_Solver.bounds; + + Graphics.RenderMeshInstanced(rp, batch.mesh, 0, instanceTransforms.AsNativeArray(), batch.instanceCount, batch.firstInstance); + } + + } + } + + [BurstCompile] + struct InstanceTransforms : IJobParallelFor + { + [ReadOnly] public NativeArray rendererData; + [ReadOnly] public NativeArray chunkData; + [ReadOnly] public NativeArray modifiers; + [ReadOnly] public NativeArray elements; + + [ReadOnly] public NativeArray renderablePositions; + [ReadOnly] public NativeArray renderableOrientations; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray colors; + [ReadOnly] public float4x4 solverToWorld; + + [NativeDisableParallelForRestriction] public NativeArray instanceTransforms; + [NativeDisableParallelForRestriction] public NativeArray instanceColors; + + public void Execute(int i) + { + int firstIndex = i > 0 ? chunkData[i - 1].offset : 0; + int elementCount = chunkData[i].offset - firstIndex; + + var rendererIndex = chunkData[i].rendererIndex; + var renderer = rendererData[rendererIndex]; + + float3 rendScale = ((float4)renderer.scale).xyz; + + int firstModifier = rendererIndex > 0 ? rendererData[rendererIndex - 1].modifierOffset : 0; + int modifierCount = renderer.modifierOffset - firstModifier; + + var modifier = new ObiRopeChainRenderer.LinkModifier(); + modifier.Clear(); + + BurstPathFrame frame = new BurstPathFrame(); + frame.Reset(); + + float twist = -renderer.twist * elementCount * renderer.twistAnchor; + frame.SetTwist(twist); + + // parallel transport: + for (int m = 0; m < elementCount; ++m) + { + if (modifierCount > 0) + modifier = modifiers[firstModifier + m % modifierCount]; + + int index = firstIndex + m; + float4 pos = renderablePositions[elements[index].x]; + float4 nextPos = renderablePositions[elements[index].y]; + float4 vector = nextPos - pos; + float3 tangent = math.normalizesafe(vector.xyz); + + if (renderer.usesOrientedParticles == 1) + { + frame.Transport(nextPos.xyz, tangent, math.rotate(renderableOrientations[elements[index].x], new float3(0, 1, 0)), twist); + twist += renderer.twist; + } + else + frame.Transport(nextPos.xyz, tangent, renderer.twist); + + var rotation = quaternion.LookRotationSafe(frame.tangent, frame.normal); + var position = (pos + vector * 0.5f).xyz + math.mul(rotation, modifier.translation); + var scale = principalRadii[elements[index].x].x * 2 * rendScale * modifier.scale; + + rotation = math.mul(rotation, quaternion.Euler(math.radians(modifier.rotation))); + + instanceTransforms[index] = math.mul(solverToWorld,float4x4.TRS(position,rotation,scale)); + instanceColors[index] = (colors[elements[index].x] + colors[elements[index].y]) * 0.5f; + } + } + + } + } +} +#endif + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs.meta new file mode 100644 index 000000000..ce727dba7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c63ccd17bfc14b40a403c1c9a0be2c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs new file mode 100644 index 000000000..c133f40bb --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs @@ -0,0 +1,215 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using UnityEngine.Rendering; + +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; + +namespace Obi +{ + public class BurstExtrudedRopeRenderSystem : ObiExtrudedRopeRenderSystem + { + public BurstExtrudedRopeRenderSystem(ObiSolver solver) : base(solver) + { + } + + public override void Setup() + { + base.Setup(); + + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(layout, false); + } + + public override void Render() + { + if (pathSmootherSystem == null) + return; + + using (m_RenderMarker.Auto()) + { + var handles = new NativeArray(batchList.Count, Allocator.Temp); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + var meshJob = new BuildExtrudedMesh + { + pathSmootherIndices = pathSmootherIndices.AsNativeArray(), + chunkOffsets = pathSmootherSystem.chunkOffsets.AsNativeArray(), + + frames = pathSmootherSystem.smoothFrames.AsNativeArray(), + frameOffsets = pathSmootherSystem.smoothFrameOffsets.AsNativeArray(), + frameCounts = pathSmootherSystem.smoothFrameCounts.AsNativeArray(), + + sectionData = sectionData.AsNativeArray(), + sectionOffsets = sectionOffsets.AsNativeArray(), + sectionIndices = sectionIndices.AsNativeArray(), + + vertexOffsets = vertexOffsets.AsNativeArray(), + triangleOffsets = triangleOffsets.AsNativeArray(), + triangleCounts = triangleCounts.AsNativeArray(), + + pathData = pathSmootherSystem.pathData.AsNativeArray(), + rendererData = rendererData.AsNativeArray(), + + vertices = batch.vertices, + tris = batch.triangles, + + firstRenderer = batch.firstRenderer + }; + handles[i] = meshJob.Schedule(batch.rendererCount, 1); + } + + JobHandle.CombineDependencies(handles).Complete(); + handles.Dispose(); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + batch.mesh.SetVertexBufferData(batch.vertices, 0, 0, batch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds); + batch.mesh.SetIndexBufferData(batch.triangles, 0, 0, batch.triangleCount * 3, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds); + + var rp = batch.renderParams; + rp.worldBounds = m_Solver.bounds; + + Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + } + } + + [BurstCompile] + struct BuildExtrudedMesh : IJobParallelFor + { + [ReadOnly] public NativeArray pathSmootherIndices; + [ReadOnly] public NativeArray chunkOffsets; + + [ReadOnly] public NativeArray frames; + [ReadOnly] public NativeArray frameOffsets; + [ReadOnly] public NativeArray frameCounts; + + [ReadOnly] public NativeArray sectionData; + [ReadOnly] public NativeArray sectionOffsets; + [ReadOnly] public NativeArray sectionIndices; + + [ReadOnly] public NativeArray vertexOffsets; + [ReadOnly] public NativeArray triangleOffsets; + [ReadOnly] public NativeArray triangleCounts; + + [ReadOnly] public NativeArray rendererData; + [ReadOnly] public NativeArray pathData; + + [NativeDisableParallelForRestriction] public NativeArray vertices; + [NativeDisableParallelForRestriction] public NativeArray tris; + + [ReadOnly] public int firstRenderer; + + public void Execute(int u) + { + int k = firstRenderer + u; + int s = pathSmootherIndices[k]; + + float3 vertex = float3.zero; + float3 normal = float3.zero; + float4 texTangent = float4.zero; + + int tri = 0; + int sectionIndex = 0; + int sectionStart = sectionOffsets[sectionIndices[k]]; + int sectionSegments = (sectionOffsets[sectionIndices[k] + 1] - sectionStart) - 1; + int verticesPerSection = sectionSegments + 1; // the last vertex in each section must be duplicated, due to uv wraparound. + + float smoothLength = 0; + for (int i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) + smoothLength += pathData[i].smoothLength; + + float vCoord = -rendererData[k].uvScale.y * pathData[chunkOffsets[s]].restLength * rendererData[k].uvAnchor; + float actualToRestLengthRatio = smoothLength / pathData[chunkOffsets[s]].restLength; + + int firstVertex = vertexOffsets[k]; + int firstTriangle = triangleOffsets[k]; + + // clear out triangle indices for this rope: + for (int i = firstTriangle; i < firstTriangle + triangleCounts[k]; ++i) + { + int offset = i * 3; + tris[offset] = 0; + tris[offset+1] = 0; + tris[offset+2] = 0; + } + + // for each chunk in the rope: + for (int i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) + { + int firstFrame = frameOffsets[i]; + int frameCount = frameCounts[i]; + + for (int f = 0; f < frameCount; ++f) + { + // Calculate previous and next curve indices: + int prevIndex = firstFrame + math.max(f - 1, 0); + int index = firstFrame + f; + + // advance v texcoord: + vCoord += rendererData[k].uvScale.y * (math.distance(frames[index].position, frames[prevIndex].position) / + (rendererData[k].normalizeV == 1 ? smoothLength : actualToRestLengthRatio)); + + // calculate section thickness and scale the basis vectors by it: + float sectionThickness = frames[index].thickness * rendererData[k].thicknessScale; + + // Loop around each segment: + int nextSectionIndex = sectionIndex + 1; + for (int j = 0; j <= sectionSegments; ++j) + { + // make just one copy of the section vertex: + float2 sectionVertex = sectionData[sectionStart + j]; + + // calculate normal using section vertex, curve normal and binormal: + normal.x = (sectionVertex.x * frames[index].normal.x + sectionVertex.y * frames[index].binormal.x) * sectionThickness; + normal.y = (sectionVertex.x * frames[index].normal.y + sectionVertex.y * frames[index].binormal.y) * sectionThickness; + normal.z = (sectionVertex.x * frames[index].normal.z + sectionVertex.y * frames[index].binormal.z) * sectionThickness; + + // offset curve position by normal: + vertex.x = frames[index].position.x + normal.x; + vertex.y = frames[index].position.y + normal.y; + vertex.z = frames[index].position.z + normal.z; + + // cross(normal, curve tangent) + texTangent.xyz = math.cross(normal, frames[index].tangent); + texTangent.w = -1; + + vertices[firstVertex + sectionIndex * verticesPerSection + j] = new ProceduralRopeVertex + { + pos = vertex, + normal = normal, + tangent = texTangent, + color = frames[index].color, + uv = new float2(j / (float)sectionSegments * rendererData[k].uvScale.x, vCoord) + }; + + if (j < sectionSegments && f < frameCount - 1) + { + int offset = firstTriangle * 3; + tris[offset + tri++] = (firstVertex + sectionIndex * verticesPerSection + j); + tris[offset + tri++] = (firstVertex + nextSectionIndex * verticesPerSection + j); + tris[offset + tri++] = (firstVertex + sectionIndex * verticesPerSection + (j + 1)); + + tris[offset + tri++] = (firstVertex + sectionIndex * verticesPerSection + (j + 1)); + tris[offset + tri++] = (firstVertex + nextSectionIndex * verticesPerSection + j); + tris[offset + tri++] = (firstVertex + nextSectionIndex * verticesPerSection + (j + 1)); + } + } + sectionIndex++; + } + } + } + } + } +} +#endif + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs.meta new file mode 100644 index 000000000..0fced1ff8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 10b89fddf68724bc9ad3305774d86ee1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs new file mode 100644 index 000000000..80dbaf029 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs @@ -0,0 +1,215 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using UnityEngine.Rendering; + +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; + +namespace Obi +{ + public class BurstLineRopeRenderSystem : ObiLineRopeRenderSystem + { + public BurstLineRopeRenderSystem(ObiSolver solver) : base(solver) + { + } + + public override void Setup() + { + base.Setup(); + + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(layout, false); + } + + public override void Render(){} + + public override void RenderFromCamera(Camera camera) + { + if (pathSmootherSystem == null) + return; + + using (m_RenderMarker.Auto()) + { + var handles = new NativeArray(batchList.Count, Allocator.Temp); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + var meshJob = new BuildLineMesh + { + pathSmootherIndices = pathSmootherIndices.AsNativeArray(), + chunkOffsets = pathSmootherSystem.chunkOffsets.AsNativeArray(), + + frames = pathSmootherSystem.smoothFrames.AsNativeArray(), + frameOffsets = pathSmootherSystem.smoothFrameOffsets.AsNativeArray(), + frameCounts = pathSmootherSystem.smoothFrameCounts.AsNativeArray(), + + vertexOffsets = vertexOffsets.AsNativeArray(), + triangleOffsets = triangleOffsets.AsNativeArray(), + triangleCounts = triangleCounts.AsNativeArray(), + + pathData = pathSmootherSystem.pathData.AsNativeArray(), + rendererData = rendererData.AsNativeArray(), + + vertices = batch.vertices, + tris = batch.triangles, + + firstRenderer = batch.firstRenderer, + localSpaceCamera = m_Solver.transform.InverseTransformPoint(camera.transform.position) + }; + handles[i] = meshJob.Schedule(batch.rendererCount, 1); + } + + JobHandle.CombineDependencies(handles).Complete(); + handles.Dispose(); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + batch.mesh.SetVertexBufferData(batch.vertices, 0, 0, batch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds); + batch.mesh.SetIndexBufferData(batch.triangles, 0, 0, batch.triangleCount * 3, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds); + + var rp = batch.renderParams; + rp.worldBounds = m_Solver.bounds; + + Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + } + } + + [BurstCompile] + struct BuildLineMesh : IJobParallelFor + { + [ReadOnly] public NativeArray pathSmootherIndices; + [ReadOnly] public NativeArray chunkOffsets; + + [ReadOnly] public NativeArray frames; + [ReadOnly] public NativeArray frameOffsets; + [ReadOnly] public NativeArray frameCounts; + + [ReadOnly] public NativeArray vertexOffsets; + [ReadOnly] public NativeArray triangleOffsets; + [ReadOnly] public NativeArray triangleCounts; + + [ReadOnly] public NativeArray rendererData; + [ReadOnly] public NativeArray pathData; + + [NativeDisableParallelForRestriction] public NativeArray vertices; + [NativeDisableParallelForRestriction] public NativeArray tris; + + [ReadOnly] public int firstRenderer; + + [ReadOnly] public float3 localSpaceCamera; + + public void Execute(int u) + { + int k = firstRenderer + u; + int s = pathSmootherIndices[k]; + + float3 vertex = float3.zero; + float3 normal = float3.zero; + float4 bitangent = float4.zero; + + int tri = 0; + int sectionIndex = 0; + int firstVertex = vertexOffsets[k]; + int firstTriangle = triangleOffsets[k]; + + float smoothLength = 0; + for (int i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) + smoothLength += pathData[i].smoothLength; + + float vCoord = -rendererData[k].uvScale.y * pathData[chunkOffsets[s]].restLength * rendererData[k].uvAnchor; + float actualToRestLengthRatio = smoothLength / pathData[chunkOffsets[s]].restLength; + + // clear out triangle indices for this rope: + for (int i = firstTriangle; i < firstTriangle + triangleCounts[k]; ++i) + { + int offset = i * 3; + tris[offset] = 0; + tris[offset+1] = 0; + tris[offset+2] = 0; + } + + // for each chunk in the rope: + for (int i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) + { + int firstFrame = frameOffsets[i]; + int frameCount = frameCounts[i]; + + for (int f = 0; f < frameCount; ++f) + { + // Calculate previous and next curve indices: + int prevIndex = firstFrame + math.max(f - 1, 0); + int index = firstFrame + f; + + // advance v texcoord: + vCoord += rendererData[k].uvScale.y * (math.distance(frames[index].position, frames[prevIndex].position) / + (rendererData[k].normalizeV == 1 ? smoothLength : actualToRestLengthRatio)); + + // calculate section thickness and scale the basis vectors by it: + float sectionThickness = frames[index].thickness * rendererData[k].thicknessScale; + + normal.x = frames[index].position.x - localSpaceCamera.x; + normal.y = frames[index].position.y - localSpaceCamera.y; + normal.z = frames[index].position.z - localSpaceCamera.z; + normal = math.normalize(normal); + + bitangent.x = -(normal.y * frames[index].tangent.z - normal.z * frames[index].tangent.y); + bitangent.y = -(normal.z * frames[index].tangent.x - normal.x * frames[index].tangent.z); + bitangent.z = -(normal.x * frames[index].tangent.y - normal.y * frames[index].tangent.x); + bitangent.xyz = math.normalize(bitangent.xyz); + bitangent.w = 1; + + vertex.x = frames[index].position.x - bitangent.x * sectionThickness; + vertex.y = frames[index].position.y - bitangent.y * sectionThickness; + vertex.z = frames[index].position.z - bitangent.z * sectionThickness; + + vertices[firstVertex + sectionIndex * 2] = new ProceduralRopeVertex + { + pos = vertex, + normal = -normal, + tangent = bitangent, + color = frames[index].color, + uv = new float2(0, vCoord) + }; + + vertex.x = frames[index].position.x + bitangent.x * sectionThickness; + vertex.y = frames[index].position.y + bitangent.y * sectionThickness; + vertex.z = frames[index].position.z + bitangent.z * sectionThickness; + + vertices[firstVertex + sectionIndex * 2 + 1] = new ProceduralRopeVertex + { + pos = vertex, + normal = -normal, + tangent = bitangent, + color = frames[index].color, + uv = new float2(1, vCoord) + }; + + if (f < frameCount - 1) + { + int offset = firstTriangle * 3; + tris[offset + tri++] = firstVertex + sectionIndex * 2; + tris[offset + tri++] = firstVertex + (sectionIndex + 1) * 2; + tris[offset + tri++] = firstVertex + sectionIndex * 2 + 1; + + tris[offset + tri++] = firstVertex + sectionIndex * 2 + 1; + tris[offset + tri++] = firstVertex + (sectionIndex + 1) * 2; + tris[offset + tri++] = firstVertex + (sectionIndex + 1) * 2 + 1; + } + + sectionIndex++; + } + } + } + } + } +} +#endif + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs.meta new file mode 100644 index 000000000..7ab2fc4ea --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f950cc46a13e4273856e2ec96c59eb9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs new file mode 100644 index 000000000..3a78845b1 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs @@ -0,0 +1,272 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; + +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; +using UnityEngine.Rendering; + +namespace Obi +{ + public class BurstMeshRopeRenderSystem : ObiMeshRopeRenderSystem + { + public BurstMeshRopeRenderSystem(ObiSolver solver) : base(solver) + { + } + + protected override void CloseBatches() + { + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(sortedRenderers, meshData, meshIndices, layout, false); + + base.CloseBatches(); + } + + public override void Render() + { + if (pathSmootherSystem == null) + return; + + using (m_RenderMarker.Auto()) + { + var handles = new NativeArray(batchList.Count, Allocator.Temp); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + var meshJob = new BuildRopeMeshJob + { + chunkOffsets = pathSmootherSystem.chunkOffsets.AsNativeArray(), + pathSmootherIndices = pathSmootherIndices.AsNativeArray(), + + frames = pathSmootherSystem.smoothFrames.AsNativeArray(), + frameOffsets = pathSmootherSystem.smoothFrameOffsets.AsNativeArray(), + frameCounts = pathSmootherSystem.smoothFrameCounts.AsNativeArray(), + + vertexOffsets = vertexOffsets.AsNativeArray(), + + meshIndices = meshIndices.AsNativeArray(), + meshData = meshData.meshData.AsNativeArray(), + + rendererData = rendererData.AsNativeArray(), + pathData = pathSmootherSystem.pathData.AsNativeArray(), + + sortedIndices = sortedIndices.AsNativeArray(), + sortedOffsets = sortedOffsets.AsNativeArray(), + + positions = meshData.restPositions.AsNativeArray(), + normals = meshData.restNormals.AsNativeArray(), + tangents = meshData.restTangents.AsNativeArray(), + colors = meshData.restColors.AsNativeArray(), + + vertices = batch.dynamicVertexData.AsNativeArray(), + + firstRenderer = batch.firstRenderer + + }; + handles[i] = meshJob.Schedule(batch.rendererCount, 1); + } + + JobHandle.CombineDependencies(handles).Complete(); + handles.Dispose(); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + batch.mesh.SetVertexBufferData(batch.dynamicVertexData.AsNativeArray(), 0, 0, batch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontResetBoneBounds | MeshUpdateFlags.DontNotifyMeshUsers); + + var rp = batch.renderParams; + rp.worldBounds = m_Solver.bounds; + + for (int m = 0; m < batch.materials.Length; ++m) + { + rp.material = batch.materials[m]; + Graphics.RenderMesh(rp, batch.mesh, m, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + + // Unity bug: Graphics.RenderMesh consistently crashes when existing play mode (seems fixed in 2021.3.4f1) + // https://issuetracker.unity3d.com/issues/the-editor-crashes-on-exit-when-using-graphics-dot-rendermesh + //renderParams.material = batch.materials[m]; + //renderParams.camera = null; + //Graphics.RenderMesh(renderParams, batch.mesh, m, m_Solver.transform.localToWorldMatrix); + } + } + } + } + + [BurstCompile] + struct BuildRopeMeshJob : IJobParallelFor + { + [ReadOnly] public NativeArray pathSmootherIndices; + [ReadOnly] public NativeArray chunkOffsets; + [ReadOnly] public NativeArray frames; + [ReadOnly] public NativeArray frameOffsets; + [ReadOnly] public NativeArray frameCounts; + + [ReadOnly] public NativeArray vertexOffsets; + + [ReadOnly] public NativeArray meshIndices; + [ReadOnly] public NativeArray meshData; + + [ReadOnly] public NativeArray rendererData; + [ReadOnly] public NativeArray pathData; + + [ReadOnly] public NativeArray sortedIndices; + [ReadOnly] public NativeArray sortedOffsets; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray normals; + [ReadOnly] public NativeArray tangents; + [ReadOnly] public NativeArray colors; + + [NativeDisableParallelForRestriction] public NativeArray vertices; + + [ReadOnly] public int firstRenderer; + + public void Execute(int i) + { + int rendererIndex = firstRenderer + i; + int pathIndex = pathSmootherIndices[rendererIndex]; + var renderer = rendererData[rendererIndex]; + + // get mesh data: + var mesh = meshData[meshIndices[rendererIndex]]; + var sortedOffset = sortedOffsets[rendererIndex]; + + // get index of first output vertex: + int firstOutputVertex = vertexOffsets[rendererIndex]; + + // get index of first chunk, ignore others (no support for tearing): + int chunkIndex = chunkOffsets[pathIndex]; + + // get first frame and frame count: + int firstFrame = frameOffsets[chunkIndex]; + int lastFrame = firstFrame + frameCounts[chunkIndex] - 1; + + // get mesh deform axis: + int axis = (int)renderer.axis; + + // initialize scale vector: + float3 actualScale = (Vector3)renderer.scale; + + // calculate stretch ratio: + float stretchRatio = renderer.stretchWithRope == 1 ? pathData[chunkIndex].smoothLength / pathData[chunkIndex].restLength : 1; + + // squashing factor, makes mesh thinner when stretched and thicker when compresssed. + float squashing = math.clamp(1 + renderer.volumeScaling * (1 / math.max(stretchRatio, 0.01f) - 1), 0.01f, 2); + + // calculate scale along swept axis so that the mesh spans the entire lenght of the rope if required. + if (renderer.spanEntireLength == 1) + { + float totalMeshLength = renderer.meshSizeAlongAxis * renderer.instances; + float totalSpacing = renderer.instanceSpacing * (renderer.instances - 1); + actualScale[axis] = pathData[chunkIndex].restLength / (totalMeshLength + totalSpacing); + } + + // adjust axis lenght by stretch ratio: + actualScale[axis] *= stretchRatio; + + // init loop variables: + float lengthAlongAxis = renderer.offset; + int index = firstFrame; + int nextIndex = firstFrame + 1; + int prevIndex = firstFrame; + float nextMagnitude = math.distance(frames[index].position, frames[nextIndex].position); + float prevMagnitude = nextMagnitude; + + for (int k = 0; k < renderer.instances; ++k) + { + for (int j = 0; j < mesh.vertexCount; ++j) + { + int currVIndex = mesh.firstVertex + sortedIndices[sortedOffset + j]; + int prevVIndex = mesh.firstVertex + sortedIndices[sortedOffset + math.max(0,j - 1)]; + + // calculate how much we've advanced in the sort axis since the last vertex: + lengthAlongAxis += (positions[currVIndex][axis] - positions[prevVIndex][axis]) * actualScale[axis]; + + // check if we have moved to a new section of the curve: + BurstPathFrame frame; + if (lengthAlongAxis < 0) + { + while (-lengthAlongAxis > prevMagnitude && index > firstFrame) + { + lengthAlongAxis += prevMagnitude; + index = math.max(index - 1, firstFrame); + nextIndex = math.min(index + 1, lastFrame); + prevIndex = math.max(index - 1, firstFrame); + nextMagnitude = math.distance(frames[index].position, frames[nextIndex].position); + prevMagnitude = math.distance(frames[index].position, frames[prevIndex].position); + } + + var offset = float3.zero; + if (index == prevIndex) + { + offset = frames[index].position - frames[nextIndex].position; + prevMagnitude = math.length(offset); + } + + frame = InterpolateFrames(frames[index], frames[prevIndex], offset, -lengthAlongAxis / prevMagnitude); + } + else + { + while (lengthAlongAxis > nextMagnitude && index < lastFrame) + { + lengthAlongAxis -= nextMagnitude; + index = math.min(index + 1, lastFrame); + nextIndex = math.min(index + 1, lastFrame); + prevIndex = math.max(index - 1, firstFrame); + nextMagnitude = math.distance(frames[index].position, frames[nextIndex].position); + prevMagnitude = math.distance(frames[index].position, frames[prevIndex].position); + } + + var offset = float3.zero; + if (index == nextIndex) + { + offset = frames[index].position - frames[prevIndex].position; + nextMagnitude = math.length(offset); + } + + frame = InterpolateFrames(frames[index], frames[nextIndex], offset, lengthAlongAxis / nextMagnitude); + } + + // update basis matrix: + var basis = frame.ToMatrix(axis); + + // calculate vertex offset from curve: + float3 offsetFromCurve = positions[currVIndex] * actualScale * frame.thickness * squashing; + offsetFromCurve[axis] = 0; + + // write modified vertex data: + vertices[firstOutputVertex + sortedIndices[sortedOffset + j]] = new RopeMeshVertex + { + pos = frame.position + math.mul(basis, offsetFromCurve), + normal = math.mul(basis, normals[currVIndex]), + tangent = new float4(math.mul(basis, tangents[currVIndex].xyz), tangents[currVIndex].w), + color = colors[currVIndex] * frame.color, + }; + } + + firstOutputVertex += mesh.vertexCount; + lengthAlongAxis += renderer.instanceSpacing * actualScale[axis]; + } + } + + BurstPathFrame InterpolateFrames(BurstPathFrame a, BurstPathFrame b, float3 bOffset, float t) + { + // this offset is used to displace a copy of the first and last frames of the path, + // to ensure meshes extrude correctly prior to the first or past the last frame. + b.position += bOffset; + var interp = (1 - t) * a + t * b; + + // (no need to renormalize tangent, since offsetFromCurve[axis] = 0) + interp.normal = math.normalize(interp.normal); + interp.binormal = math.normalize(interp.binormal); + return interp; + } + } + } +} +#endif + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs.meta new file mode 100644 index 000000000..a4927d494 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1578f081848d045dba76cd147f835e7c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs new file mode 100644 index 000000000..cbf52794a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs @@ -0,0 +1,170 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System.Runtime.InteropServices; +using UnityEngine; +using Unity.Mathematics; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct BurstPathFrame + { + public enum Axis + { + X = 0, + Y = 1, + Z = 2 + } + + public float3 position; + public float3 tangent; + public float3 normal; + public float3 binormal; + public float4 color; + public float thickness; + + public BurstPathFrame(float3 position, float3 tangent, float3 normal, float3 binormal, float4 color, float thickness) + { + this.position = position; + this.normal = normal; + this.tangent = tangent; + this.binormal = binormal; + this.color = color; + this.thickness = thickness; + } + + public void Reset() + { + position = float3.zero; + tangent = new float3(0, 0, 1); + normal = new float3(0, 1, 0); + binormal = new float3(1, 0, 0); + color = new float4(1, 1, 1, 1); + thickness = 0; + } + + public static BurstPathFrame operator +(BurstPathFrame c1, BurstPathFrame c2) + { + return new BurstPathFrame(c1.position + c2.position, c1.tangent + c2.tangent, c1.normal + c2.normal, c1.binormal + c2.binormal, c1.color + c2.color, c1.thickness + c2.thickness); + } + + public static BurstPathFrame operator *(float f, BurstPathFrame c) + { + return new BurstPathFrame(c.position * f, c.tangent * f, c.normal * f, c.binormal * f, c.color * f, c.thickness * f); + } + + public static void WeightedSum(float w1, float w2, float w3, in BurstPathFrame c1, in BurstPathFrame c2, in BurstPathFrame c3, ref BurstPathFrame sum) + { + sum.position.x = c1.position.x * w1 + c2.position.x * w2 + c3.position.x * w3; + sum.position.y = c1.position.y * w1 + c2.position.y * w2 + c3.position.y * w3; + sum.position.z = c1.position.z * w1 + c2.position.z * w2 + c3.position.z * w3; + + sum.tangent.x = c1.tangent.x * w1 + c2.tangent.x * w2 + c3.tangent.x * w3; + sum.tangent.y = c1.tangent.y * w1 + c2.tangent.y * w2 + c3.tangent.y * w3; + sum.tangent.z = c1.tangent.z * w1 + c2.tangent.z * w2 + c3.tangent.z * w3; + + sum.normal.x = c1.normal.x * w1 + c2.normal.x * w2 + c3.normal.x * w3; + sum.normal.y = c1.normal.y * w1 + c2.normal.y * w2 + c3.normal.y * w3; + sum.normal.z = c1.normal.z * w1 + c2.normal.z * w2 + c3.normal.z * w3; + + sum.binormal.x = c1.binormal.x * w1 + c2.binormal.x * w2 + c3.binormal.x * w3; + sum.binormal.y = c1.binormal.y * w1 + c2.binormal.y * w2 + c3.binormal.y * w3; + sum.binormal.z = c1.binormal.z * w1 + c2.binormal.z * w2 + c3.binormal.z * w3; + + sum.color.x = c1.color.x * w1 + c2.color.x * w2 + c3.color.x * w3; + sum.color.y = c1.color.y * w1 + c2.color.y * w2 + c3.color.y * w3; + sum.color.z = c1.color.z * w1 + c2.color.z * w2 + c3.color.z * w3; + sum.color.w = c1.color.w * w1 + c2.color.w * w2 + c3.color.w * w3; + + sum.thickness = c1.thickness * w1 + c2.thickness * w2 + c3.thickness * w3; + } + + public void SetTwist(float twist) + { + quaternion twistQ = quaternion.AxisAngle(tangent, math.radians(twist)); + normal = math.mul(twistQ, normal); + binormal = math.mul(twistQ, binormal); + } + + public static quaternion FromToRotation(float3 aFrom, float3 aTo) + { + float3 axis = math.cross(aFrom, aTo); + float angle = math.acos(math.clamp(math.dot(math.normalize(aFrom), math.normalize(aTo)), -1f, 1f)); + return quaternion.AxisAngle(math.normalize(axis), angle); + } + + public void SetTwistAndTangent(float twist, float3 tangent) + { + this.tangent = tangent; + normal = math.normalize(new float3(tangent.y, tangent.x, 0)); + binormal = math.cross(normal, tangent); + + quaternion twistQ = quaternion.AxisAngle(tangent, math.radians(twist)); + normal = math.mul(twistQ, normal); + binormal = math.mul(twistQ, binormal); + } + + public void Transport(in BurstPathFrame frame, float twist) + { + // Calculate delta rotation: + quaternion rotQ = Quaternion.FromToRotation(tangent, frame.tangent); + quaternion twistQ = quaternion.AxisAngle(frame.tangent, math.radians(twist)); + quaternion finalQ = math.mul(twistQ, rotQ); + + // Rotate previous frame axes to obtain the new ones: + normal = math.mul(finalQ, normal); + binormal = math.mul(finalQ, binormal); + tangent = frame.tangent; + position = frame.position; + thickness = frame.thickness; + color = frame.color; + } + + public void Transport(float3 newPosition, float3 newTangent, float twist) + { + // Calculate delta rotation: + quaternion rotQ = Quaternion.FromToRotation(tangent, newTangent); + quaternion twistQ = quaternion.AxisAngle(newTangent, math.radians(twist)); + quaternion finalQ = math.mul(twistQ, rotQ); + + // Rotate previous frame axes to obtain the new ones: + normal = math.mul(finalQ, normal); + binormal = math.mul(finalQ, binormal); + tangent = newTangent; + position = newPosition; + + } + + // Transport, hinting the normal. + public void Transport(float3 newPosition, float3 newTangent, float3 newNormal, float twist) + { + normal = math.mul(quaternion.AxisAngle(newTangent, math.radians(twist)), newNormal); + tangent = newTangent; + binormal = math.cross(normal, tangent); + position = newPosition; + } + + public float3x3 ToMatrix(int mainAxis) + { + float3x3 basis = new float3x3(); + + int xo = (mainAxis) % 3; + int yo = (mainAxis + 1) % 3; + int zo = (mainAxis + 2) % 3; + + basis[xo] = tangent; + basis[yo] = binormal; + basis[zo] = normal; + + return basis; + } + + public void DebugDraw(float size) + { + Debug.DrawRay(position, binormal * size, Color.red); + Debug.DrawRay(position, normal * size, Color.green); + Debug.DrawRay(position, tangent * size, Color.blue); + } + } +} +#endif + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs.meta new file mode 100644 index 000000000..284880b92 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4827bd4bd4feb46bfbe458174871b8ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs new file mode 100644 index 000000000..3d1136240 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs @@ -0,0 +1,63 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Jobs; +using Unity.Mathematics; + +namespace Obi +{ + public class BurstPathSmootherRenderSystem : ObiPathSmootherRenderSystem + { + public BurstPathSmootherRenderSystem(ObiSolver solver) : base(solver) + { + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + base.Render(); + + // generate raw frames using parallel transport + var parallelTransportJob = new ParallelTransportJob + { + pathFrames = rawFrames.AsNativeArray(), + frameOffsets = rawFrameOffsets.AsNativeArray(), + particleIndices = particleIndices.AsNativeArray(), + renderablePositions = m_Solver.renderablePositions.AsNativeArray(), + renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), + principalRadii = m_Solver.principalRadii.AsNativeArray(), + colors = m_Solver.colors.AsNativeArray(), + pathData = pathData.AsNativeArray() + }; + + var handle = parallelTransportJob.Schedule(rawFrameOffsets.count, 4); + + // throw away unneeded frames using decimation + var decimationJob = new DecimateChunksJob + { + inputFrames = rawFrames.AsNativeArray(), + inputFrameOffsets = rawFrameOffsets.AsNativeArray(), + outputFrameCounts = decimatedFrameCounts.AsNativeArray(), + pathData = pathData.AsNativeArray() + }; + + handle = decimationJob.Schedule(rawFrameOffsets.count, 4, handle); + + // smooth chunks: + var chaikinJob = new ChaikinSmoothChunksJob() + { + inputFrames = rawFrames.AsNativeArray(), + inputFrameOffsets = rawFrameOffsets.AsNativeArray(), + inputFrameCounts = decimatedFrameCounts.AsNativeArray(), + outputFrames = smoothFrames.AsNativeArray(), + outputFrameOffsets = smoothFrameOffsets.AsNativeArray(), + outputFrameCounts = smoothFrameCounts.AsNativeArray(), + pathData = pathData.AsNativeArray() + }; + + chaikinJob.Schedule(rawFrameOffsets.count, 4, handle).Complete(); + } + } + } +} +#endif + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs.meta new file mode 100644 index 000000000..7cf39ab54 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be61f37ff31ff43ebb9bc8a55bd3edc7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs new file mode 100644 index 000000000..9a7587f81 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs @@ -0,0 +1,93 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using Unity.Mathematics; + +namespace Obi +{ + [BurstCompile] + struct ChaikinSmoothChunksJob : IJobParallelFor + { + [NativeDisableParallelForRestriction] public NativeArray inputFrames; + [ReadOnly] public NativeArray inputFrameOffsets; + [ReadOnly] public NativeArray inputFrameCounts; + + [NativeDisableParallelForRestriction] public NativeArray outputFrames; + [ReadOnly] public NativeArray outputFrameOffsets; + [NativeDisableParallelForRestriction] public NativeArray outputFrameCounts; + + [NativeDisableParallelForRestriction] public NativeArray pathData; + + public void Execute(int i) + { + int firstInputIndex = i > 0 ? inputFrameOffsets[i - 1] : 0; + int inputFrameCount = inputFrameCounts[i]; + + int firstOutputIndex = outputFrameOffsets[i]; + + int k = (int)pathData[i].smoothing; + + // No work to do. just copy the input to the output: + if (k == 0) + { + outputFrameCounts[i] = inputFrameCount; + for (int j = 0; j < inputFrameCount; ++j) + outputFrames[firstOutputIndex + j] = inputFrames[firstInputIndex + j]; + } + else + { + // precalculate some quantities: + int pCount = (int)math.pow(2, k); + int n0 = inputFrameCount - 1; + float twoRaisedToMinusKPlus1 = math.pow(2, -(k + 1)); + float twoRaisedToMinusK = math.pow(2, -k); + float twoRaisedToMinus2K = math.pow(2, -2 * k); + float twoRaisedToMinus2KMinus1 = math.pow(2, -2 * k - 1); + + outputFrameCounts[i] = (inputFrameCount - 2) * pCount + 2; + + // calculate initial curve points: + outputFrames[firstOutputIndex] = (0.5f + twoRaisedToMinusKPlus1) * inputFrames[firstInputIndex] + (0.5f - twoRaisedToMinusKPlus1) * inputFrames[firstInputIndex + 1]; + outputFrames[firstOutputIndex + pCount * n0 - pCount + 1] = (0.5f - twoRaisedToMinusKPlus1) * inputFrames[firstInputIndex + n0 - 1] + (0.5f + twoRaisedToMinusKPlus1) * inputFrames[firstInputIndex + n0]; + + // calculate internal points: + for (int j = 1; j <= pCount; ++j) + { + // precalculate coefficients: + float F = 0.5f - twoRaisedToMinusKPlus1 - (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2KMinus1); + float G = 0.5f + twoRaisedToMinusKPlus1 + (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2K); + float H = (j - 1) * j * twoRaisedToMinus2KMinus1; + + for (int l = 1; l < n0; ++l) + { + BurstPathFrame.WeightedSum(F, G, H, + in GetElementAsRef(inputFrames, firstInputIndex + l - 1), + in GetElementAsRef(inputFrames, firstInputIndex + l), + in GetElementAsRef(inputFrames, firstInputIndex + l + 1), + ref GetElementAsRef(outputFrames, firstOutputIndex + (l - 1) * pCount + j)); + } + } + + // make first and last curve points coincide with original points: + outputFrames[firstOutputIndex] = inputFrames[firstInputIndex]; + outputFrames[firstOutputIndex + outputFrameCounts[i] - 1] = inputFrames[firstInputIndex + inputFrameCount - 1]; + } + + var data = pathData[i]; + data.smoothLength = 0; + for (int j = firstOutputIndex + 1; j < firstOutputIndex + outputFrameCounts[i]; ++j) + data.smoothLength += math.distance(outputFrames[j - 1].position, outputFrames[j].position); + + pathData[i] = data; + + } + + private static unsafe ref T GetElementAsRef(NativeArray array, int index) where T : unmanaged + { + return ref UnsafeUtility.ArrayElementAsRef(array.GetUnsafePtr(), index); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs.meta new file mode 100644 index 000000000..450b2cf70 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b479f3e1bd184363a9259c4d737b611 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs new file mode 100644 index 000000000..6129c63b1 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs @@ -0,0 +1,79 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; +using Unity.Collections; +using Unity.Jobs; +using Unity.Mathematics; + +namespace Obi +{ + [BurstCompile] + struct DecimateChunksJob : IJobParallelFor + { + [ReadOnly] public NativeArray inputFrameOffsets; + [NativeDisableParallelForRestriction] public NativeArray inputFrames; + [NativeDisableParallelForRestriction] public NativeArray outputFrameCounts; + + [ReadOnly] public NativeArray pathData; + + public void Execute(int i) + { + + int firstInputIndex = i > 0 ? inputFrameOffsets[i - 1] : 0; + int inputFrameCount = inputFrameOffsets[i] - firstInputIndex; + + // no decimation, no work to do, just return: + if (pathData[i].decimation < 0.00001f || inputFrameCount < 3) + { + outputFrameCounts[i] = inputFrameCount; + return; + } + + float scaledThreshold = pathData[i].decimation * pathData[i].decimation * 0.01f; + + int start = 0; + int end = inputFrameCount - 1; + outputFrameCounts[i] = 0; + + while (start < end) + { + // add starting point: + inputFrames[firstInputIndex + outputFrameCounts[i]++] = inputFrames[firstInputIndex + start]; + + var newEnd = end; + + while (true) + { + int maxDistanceIndex = 0; + float maxDistance = 0; + + // find the point that's furthest away from the current segment: + for (int k = start + 1; k < newEnd; k++) + { + var nearest = BurstMath.NearestPointOnEdge(inputFrames[firstInputIndex + start].position, + inputFrames[firstInputIndex + newEnd].position, + inputFrames[firstInputIndex + k].position, out _); + float d = math.lengthsq(nearest - inputFrames[firstInputIndex + k].position); + + if (d > maxDistance) + { + maxDistanceIndex = k; + maxDistance = d; + } + } + + if (maxDistance <= scaledThreshold) + break; + + newEnd = maxDistanceIndex; + } + + start = newEnd; + } + + // add the last point: + inputFrames[firstInputIndex + outputFrameCounts[i]++] = inputFrames[firstInputIndex + end]; + + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs.meta new file mode 100644 index 000000000..2fdbac832 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e3177e6c6643442db096e939f5d7109 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs new file mode 100644 index 000000000..bd8390adf --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs @@ -0,0 +1,89 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; +using Unity.Collections; +using Unity.Jobs; +using Unity.Mathematics; + +namespace Obi +{ + [BurstCompile] + struct ParallelTransportJob : IJobParallelFor + { + [NativeDisableParallelForRestriction] public NativeArray pathFrames; + [ReadOnly] public NativeArray frameOffsets; + [ReadOnly] public NativeArray particleIndices; + + [ReadOnly] public NativeArray renderablePositions; + [ReadOnly] public NativeArray renderableOrientations; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray colors; + [ReadOnly] public NativeArray pathData; + + public void Execute(int i) + { + BurstPathFrame nextFrame = new BurstPathFrame(); + BurstPathFrame currFrame = new BurstPathFrame(); + BurstPathFrame prevFrame = new BurstPathFrame(); + + nextFrame.Reset(); + currFrame.Reset(); + prevFrame.Reset(); + + int firstIndex = i > 0 ? frameOffsets[i - 1] : 0; + int frameCount = frameOffsets[i] - firstIndex; + + // initialize current and previous frame: + PathFrameFromParticle(ref currFrame, particleIndices[firstIndex], pathData[i].usesOrientedParticles == 1, false); + prevFrame = currFrame; + + // parallel transport: + for (int m = 1; m <= frameCount; ++m) + { + int index = firstIndex + math.min(m, frameCount - 1); + int pIndex = particleIndices[index]; + + // generate curve frame from particle: + PathFrameFromParticle(ref nextFrame, pIndex, pathData[i].usesOrientedParticles == 1); + + if (pathData[i].usesOrientedParticles == 1) + { + // copy frame directly. + prevFrame = currFrame; + } + else + { + // perform parallel transport, using forward / backward average to calculate tangent. + // if the average is too small, reuse the previous frame tangent. + currFrame.tangent = math.normalizesafe((currFrame.position - prevFrame.position) + + (nextFrame.position - currFrame.position), prevFrame.tangent); + prevFrame.Transport(currFrame, pathData[i].twist); + } + + // advance current frame: + currFrame = nextFrame; + pathFrames[firstIndex + m - 1] = prevFrame; + } + + } + + private void PathFrameFromParticle(ref BurstPathFrame frame, int particleIndex, bool useOrientedParticles, bool interpolateOrientation = false) + { + // Update current frame values from particles: + frame.position = renderablePositions[particleIndex].xyz; + frame.thickness = principalRadii[particleIndex][0]; + frame.color = colors[particleIndex]; + + // Use particle orientation if possible: + if (useOrientedParticles) + { + quaternion current = renderableOrientations[particleIndex]; + quaternion previous = renderableOrientations[math.max(0, particleIndex - 1)]; + float4x4 average = (interpolateOrientation ? math.slerp(current, previous, 0.5f) : current).toMatrix(); + frame.normal = average.c1.xyz; + frame.binormal = average.c0.xyz; + frame.tangent = average.c2.xyz; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs.meta new file mode 100644 index 000000000..b07ca0faf --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c4018fb5d53646be9ef6c91f07c7eb6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs index fa1cc8e1a..ab3d68e66 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs @@ -24,8 +24,12 @@ namespace Obi [ReadOnly] public float worldAngularInertiaScale; [NativeDisableParallelForRestriction] public NativeArray velocities; + [NativeDisableParallelForRestriction] public NativeArray wind; [ReadOnly] public float deltaTime; + [ReadOnly] public float4 ambientWind; + [ReadOnly] public BurstInertialFrame inertialFrame; + [ReadOnly] public bool inertialWind; public void Execute(int index) { @@ -40,6 +44,14 @@ namespace Obi velocities[i] -= (inertialAccel * worldLinearInertiaScale + angularAccel * worldAngularInertiaScale) * deltaTime; } + + wind[i] = ambientWind; + + if (inertialWind) + { + float4 wsPos = inertialFrame.frame.TransformPoint(positions[i]); + wind[i] -= inertialFrame.frame.InverseTransformVector(inertialFrame.VelocityAtPoint(wsPos)); + } } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs index 89da4b413..f6ec1072b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs @@ -10,18 +10,52 @@ using System.Collections; namespace Obi { [BurstCompile] - struct ParticleToBoundsJob : IJobParallelFor + struct CalculateSimplexBoundsJob : IJobParallelFor { - [ReadOnly] public NativeArray activeParticles; - [ReadOnly] public NativeArray positions; [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray fluidMaterials; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray velocities; - public NativeArray bounds; + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [ReadOnly] public NativeArray particleMaterialIndices; + [ReadOnly] public NativeArray collisionMaterials; + public NativeArray simplexBounds; + public NativeArray reducedBounds; + + [ReadOnly] public Oni.SolverParameters parameters; + [ReadOnly] public float dt; public void Execute(int i) { - int p = activeParticles[i]; - bounds[i] = new BurstAabb(positions[p] - radii[p].x, positions[p] + radii[p].x); + int simplexStart = simplexCounts.GetSimplexStartAndSize(i, out int simplexSize); + + var sxBounds = new BurstAabb(float.MaxValue, float.MinValue); + var soBounds = new BurstAabb(float.MaxValue, float.MinValue); + + for (int j = 0; j < simplexSize; ++j) + { + int p = simplices[simplexStart + j]; + + int m = particleMaterialIndices[p]; + float solidRadius = radii[p].x + (m >= 0 ? collisionMaterials[m].stickDistance : 0); + + // Expand simplex bounds, using both the particle's original position and its velocity. + // Add collision margin for both fluid neighborhood too (prevents explosions at high pressures due to neighborhood deficiency) + sxBounds.EncapsulateParticle(positions[p], + BurstIntegration.IntegrateLinear(positions[p], velocities[p], dt * parameters.particleCCD), + math.max(solidRadius, fluidMaterials[p].x * 0.5f) + parameters.collisionMargin); + + soBounds.EncapsulateParticle(positions[p], + BurstIntegration.IntegrateLinear(positions[p], velocities[p], dt), + solidRadius); + } + + simplexBounds[i] = sxBounds; + reducedBounds[i] = soBounds; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BuildSimplexAabbs.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BuildSimplexAabbs.cs deleted file mode 100644 index d8931f228..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BuildSimplexAabbs.cs +++ /dev/null @@ -1,55 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - - [BurstCompile] - struct BuildSimplexAabbs : IJobParallelFor - { - [ReadOnly] public NativeArray radii; - [ReadOnly] public NativeArray fluidRadii; - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray velocities; - - // simplex arrays: - [ReadOnly] public NativeArray simplices; - [ReadOnly] public SimplexCounts simplexCounts; - - [ReadOnly] public NativeArray particleMaterialIndices; - [ReadOnly] public NativeArray collisionMaterials; - [ReadOnly] public float collisionMargin; - [ReadOnly] public float continuousCollisionDetection; - [ReadOnly] public float dt; - - public NativeArray simplexBounds; - - public void Execute(int i) - { - int simplexStart = simplexCounts.GetSimplexStartAndSize(i, out int simplexSize); - - var bounds = new BurstAabb(float.MaxValue, float.MinValue); - for (int j = 0; j < simplexSize; ++j) - { - int p = simplices[simplexStart + j]; - - // Find this particle's stick distance: - int m = particleMaterialIndices[p]; - float stickDistance = m >= 0 ? collisionMaterials[m].stickDistance : 0; - - // Expand simplex bounds, using both the particle's original position and its velocity: - bounds.EncapsulateParticle(positions[p], positions[p] + velocities[p] * continuousCollisionDetection * dt, - math.max(radii[p].x + stickDistance, fluidRadii[p] * 0.5f) + collisionMargin); - } - - simplexBounds[i] = bounds; - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs index 309143c7e..3a3f2766a 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs @@ -1,970 +1,339 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Mathematics; -using Unity.Collections; +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using UnityEngine; using Unity.Jobs; using Unity.Mathematics; using Unity.Collections; -namespace Obi -{ - public class BurstSolverImpl : ISolverImpl - { - ObiSolver m_Solver; +namespace Obi { public class BurstSolverImpl : ISolverImpl { public ObiSolver abstraction { get; } public int particleCount { get { return abstraction.positions.count; } } public int activeParticleCount { get { return abstraction.activeParticles.count; } } public BurstInertialFrame inertialFrame { get { return m_InertialFrame; } } public BurstAffineTransform solverToWorld { get { return m_InertialFrame.frame; } } public BurstAffineTransform worldToSolver { get { return m_InertialFrame.frame.Inverse(); } } public uint activeFoamParticleCount { private set; get; } private const int maxBatches = 17; private ConstraintBatcher collisionConstraintBatcher; private ConstraintBatcher fluidConstraintBatcher; // Per-type constraints array: private IBurstConstraintsImpl[] constraints; // Per-type iteration padding array: private int[] padding = new int[Oni.ConstraintTypeCount]; // job handle: private BurstJobHandle jobHandle; // particle contact generation: public ParticleGrid particleGrid; public NativeArray particleBatchData; // fluid interaction generation: public NativeArray fluidInteractions; public NativeArray fluidBatchData; // collider contact generation: private BurstColliderWorld colliderGrid; // deformable triangles: private NativeArray deformableTriangles; private NativeArray deformableUVs; // deformable edges: private NativeArray deformableEdges; - public ObiSolver abstraction - { - get { return m_Solver; } - } - - public int particleCount - { - get { return m_Solver.positions.count; } - } - - public int activeParticleCount - { - get { return abstraction.activeParticles.count; } - } - - public BurstInertialFrame inertialFrame - { - get { return m_InertialFrame; } - } - - public BurstAffineTransform solverToWorld - { - get { return m_InertialFrame.frame; } - } - - public BurstAffineTransform worldToSolver - { - get { return m_InertialFrame.frame.Inverse(); } - } - - private const int maxBatches = 17; - - private ConstraintBatcher collisionConstraintBatcher; - private ConstraintBatcher fluidConstraintBatcher; - - // Per-type constraints array: - private IBurstConstraintsImpl[] constraints; - - // Per-type iteration padding array: - private int[] padding = new int[Oni.ConstraintTypeCount]; - - // Pool job handles to avoid runtime alloc: - private JobHandlePool jobHandlePool; - - // particle contact generation: - public ParticleGrid particleGrid; - public NativeArray particleContacts; - public NativeArray particleBatchData; - - // fluid interaction generation: - public NativeArray fluidInteractions; - public NativeArray fluidBatchData; - - // collider contact generation: - private BurstColliderWorld colliderGrid; - public NativeArray colliderContacts; - - // misc data: - public NativeArray activeParticles; - private NativeList deformableTriangles; - - public NativeArray simplices; - public SimplexCounts simplexCounts; - - private BurstInertialFrame m_InertialFrame; // local to world inertial frame. - private int scheduledJobCounter = 0; + // simplices: + public NativeArray simplices; public SimplexCounts simplexCounts; private BurstInertialFrame m_InertialFrame; // local to world inertial frame. private int scheduledJobCounter = 0; // cached particle data arrays (just wrappers over raw unmanaged data held by the abstract solver) - public NativeArray positions; - public NativeArray restPositions; - public NativeArray prevPositions; - public NativeArray renderablePositions; + public NativeArray activeParticles; public NativeArray deadParticles; public NativeArray positions; public NativeArray restPositions; public NativeArray prevPositions; public NativeArray renderablePositions; public NativeArray orientations; public NativeArray restOrientations; public NativeArray prevOrientations; public NativeArray renderableOrientations; public NativeArray velocities; public NativeArray angularVelocities; public NativeArray invMasses; public NativeArray invRotationalMasses; public NativeArray externalForces; public NativeArray externalTorques; public NativeArray wind; public NativeArray positionDeltas; public NativeArray orientationDeltas; public NativeArray positionConstraintCounts; public NativeArray orientationConstraintCounts; public NativeArray colors; public NativeArray collisionMaterials; public NativeArray phases; public NativeArray filters; public NativeArray renderableRadii; public NativeArray principalRadii; public NativeArray normals; private NativeArray tangents; public NativeArray life; public NativeArray fluidData; public NativeArray userData; public NativeArray fluidInterface; public NativeArray fluidMaterials; + public NativeArray fluidMaterials2; + public NativeArray anisotropies; - public NativeArray orientations; - public NativeArray restOrientations; - public NativeArray prevOrientations; - public NativeArray renderableOrientations; - - public NativeArray velocities; - public NativeArray angularVelocities; - - public NativeArray invMasses; - public NativeArray invRotationalMasses; - public NativeArray invInertiaTensors; - - public NativeArray externalForces; - public NativeArray externalTorques; - public NativeArray wind; - - public NativeArray positionDeltas; - public NativeArray orientationDeltas; - public NativeArray positionConstraintCounts; - public NativeArray orientationConstraintCounts; - - public NativeArray collisionMaterials; - public NativeArray phases; - public NativeArray filters; - public NativeArray anisotropies; - public NativeArray principalRadii; - public NativeArray normals; - - public NativeArray vorticities; - public NativeArray fluidData; - public NativeArray userData; - public NativeArray smoothingRadii; - public NativeArray buoyancies; - public NativeArray restDensities; - public NativeArray viscosities; - public NativeArray surfaceTension; - public NativeArray vortConfinement; - public NativeArray athmosphericDrag; - public NativeArray athmosphericPressure; - public NativeArray diffusion; - - public NativeArray cellCoords; - public NativeArray simplexBounds; - - private ConstraintSorter contactSorter; - - public BurstSolverImpl(ObiSolver solver) - { - this.m_Solver = solver; - - jobHandlePool = new JobHandlePool(4); - contactSorter = new ConstraintSorter(); - - // Initialize collision world: - GetOrCreateColliderWorld(); - colliderGrid.IncreaseReferenceCount(); - - deformableTriangles = new NativeList(64, Allocator.Persistent); + // aux foam data: + public NativeArray auxPositions; + public NativeArray auxVelocities; + public NativeArray auxColors; + public NativeArray auxAttributes; + public NativeArray cellCoords; public NativeArray simplexBounds; + public NativeArray reducedBounds; public BurstAabb solverBounds; private ConstraintSorter contactSorter; public BurstSolverImpl(ObiSolver solver) { this.abstraction = solver; jobHandle = new BurstJobHandle(); contactSorter = new ConstraintSorter(); // Initialize collision world: GetOrCreateColliderWorld(); colliderGrid.IncreaseReferenceCount(); // Initialize contact generation acceleration structure: - particleGrid = new ParticleGrid(); + particleGrid = new ParticleGrid(); // Initialize constraint batcher: collisionConstraintBatcher = new ConstraintBatcher(maxBatches); fluidConstraintBatcher = new ConstraintBatcher(maxBatches); // Initialize constraint arrays: constraints = new IBurstConstraintsImpl[Oni.ConstraintTypeCount]; constraints[(int)Oni.ConstraintType.Tether] = new BurstTetherConstraints(this); constraints[(int)Oni.ConstraintType.Volume] = new BurstVolumeConstraints(this); constraints[(int)Oni.ConstraintType.Chain] = new BurstChainConstraints(this); constraints[(int)Oni.ConstraintType.Bending] = new BurstBendConstraints(this); constraints[(int)Oni.ConstraintType.Distance] = new BurstDistanceConstraints(this); constraints[(int)Oni.ConstraintType.ShapeMatching] = new BurstShapeMatchingConstraints(this); constraints[(int)Oni.ConstraintType.BendTwist] = new BurstBendTwistConstraints(this); constraints[(int)Oni.ConstraintType.StretchShear] = new BurstStretchShearConstraints(this); constraints[(int)Oni.ConstraintType.Pin] = new BurstPinConstraints(this); constraints[(int)Oni.ConstraintType.ParticleCollision] = new BurstParticleCollisionConstraints(this); constraints[(int)Oni.ConstraintType.Density] = new BurstDensityConstraints(this); constraints[(int)Oni.ConstraintType.Collision] = new BurstColliderCollisionConstraints(this); constraints[(int)Oni.ConstraintType.Skin] = new BurstSkinConstraints(this); constraints[(int)Oni.ConstraintType.Aerodynamics] = new BurstAerodynamicConstraints(this); constraints[(int)Oni.ConstraintType.Stitch] = new BurstStitchConstraints(this); constraints[(int)Oni.ConstraintType.ParticleFriction] = new BurstParticleFrictionConstraints(this); constraints[(int)Oni.ConstraintType.Friction] = new BurstColliderFrictionConstraints(this); constraints[(int)Oni.ConstraintType.Pinhole] = new BurstPinholeConstraints(this); var c = constraints[(int)Oni.ConstraintType.Collision] as BurstColliderCollisionConstraints; c.CreateConstraintsBatch(); var f = constraints[(int)Oni.ConstraintType.Friction] as BurstColliderFrictionConstraints; f.CreateConstraintsBatch(); } public void Destroy() { for (int i = 0; i < constraints.Length; ++i) if (constraints[i] != null) constraints[i].Dispose(); // Get rid of particle and collider grids: particleGrid.Dispose(); if (colliderGrid != null) colliderGrid.DecreaseReferenceCount(); collisionConstraintBatcher.Dispose(); fluidConstraintBatcher.Dispose(); if (simplexBounds.IsCreated) simplexBounds.Dispose(); if (reducedBounds.IsCreated) reducedBounds.Dispose(); if (tangents.IsCreated) tangents.Dispose(); if (particleBatchData.IsCreated) particleBatchData.Dispose(); if (fluidInteractions.IsCreated) fluidInteractions.Dispose(); if (fluidBatchData.IsCreated) fluidBatchData.Dispose(); if (auxPositions.IsCreated) auxPositions.Dispose(); if (auxVelocities.IsCreated) auxVelocities.Dispose(); if (auxColors.IsCreated) auxColors.Dispose(); if (auxAttributes.IsCreated) auxAttributes.Dispose(); } // Utility function to count scheduled jobs. Call it once per job. // Will JobHandle.ScheduleBatchedJobs once there's a good bunch of scheduled jobs. public void ScheduleBatchedJobsIfNeeded() { if (scheduledJobCounter++ > 16) { scheduledJobCounter = 0; JobHandle.ScheduleBatchedJobs(); } } private void GetOrCreateColliderWorld() { colliderGrid = GameObject.FindObjectOfType(); if (colliderGrid == null) { var world = new GameObject("BurstCollisionWorld", typeof(BurstColliderWorld)); colliderGrid = world.GetComponent(); } } public void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation) { m_InertialFrame = new BurstInertialFrame(translation, scale, rotation); } public void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, float deltaTime) { m_InertialFrame.Update(translation, scale, rotation, deltaTime); } public IObiJobHandle ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) { // inverse linear part: float4x4 linear = float4x4.TRS(float3.zero, inertialFrame.frame.rotation, math.rcp(inertialFrame.frame.scale.xyz)); float4x4 linearInv = math.transpose(linear); // non-inertial frame accelerations: float4 angularVel = math.mul(linearInv, math.mul(float4x4.Scale(inertialFrame.angularVelocity.xyz), linear)).diagonal(); float4 eulerAccel = math.mul(linearInv, math.mul(float4x4.Scale(inertialFrame.angularAcceleration.xyz), linear)).diagonal(); float4 inertialAccel = math.mul(linearInv, inertialFrame.acceleration); var applyInertialForces = new ApplyInertialForcesJob { activeParticles = activeParticles, positions = positions, velocities = velocities, invMasses = invMasses, angularVel = angularVel, inertialAccel = inertialAccel, eulerAccel = eulerAccel, worldLinearInertiaScale = worldLinearInertiaScale, worldAngularInertiaScale = worldAngularInertiaScale, wind = wind, ambientWind = new float4(abstraction.parameters.ambientWind, 0), inertialFrame = inertialFrame, deltaTime = deltaTime, inertialWind = abstraction.windSpace == Space.World }; jobHandle.jobHandle = applyInertialForces.Schedule(activeParticleCount, 64); return jobHandle; } public void SetDeformableTriangles(ObiNativeIntList indices, ObiNativeVector2List uvs) { deformableTriangles = indices.AsNativeArray(); deformableUVs = uvs.AsNativeArray(); } public void SetDeformableEdges(ObiNativeIntList indices) { deformableEdges = indices.AsNativeArray(); } public void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts) { this.simplices = simplices.AsNativeArray(); this.simplexCounts = counts; - // Initialize constraint batcher: - collisionConstraintBatcher = new ConstraintBatcher(maxBatches); - fluidConstraintBatcher = new ConstraintBatcher(maxBatches); + cellCoords = abstraction.cellCoords.AsNativeArray(); if (simplexBounds.IsCreated) simplexBounds.Dispose(); simplexBounds = new NativeArray(counts.simplexCount, Allocator.Persistent); - // Initialize constraint arrays: - constraints = new IBurstConstraintsImpl[Oni.ConstraintTypeCount]; - constraints[(int)Oni.ConstraintType.Tether] = new BurstTetherConstraints(this); - constraints[(int)Oni.ConstraintType.Volume] = new BurstVolumeConstraints(this); - constraints[(int)Oni.ConstraintType.Chain] = new BurstChainConstraints(this); - constraints[(int)Oni.ConstraintType.Bending] = new BurstBendConstraints(this); - constraints[(int)Oni.ConstraintType.Distance] = new BurstDistanceConstraints(this); - constraints[(int)Oni.ConstraintType.ShapeMatching] = new BurstShapeMatchingConstraints(this); - constraints[(int)Oni.ConstraintType.BendTwist] = new BurstBendTwistConstraints(this); - constraints[(int)Oni.ConstraintType.StretchShear] = new BurstStretchShearConstraints(this); - constraints[(int)Oni.ConstraintType.Pin] = new BurstPinConstraints(this); - constraints[(int)Oni.ConstraintType.ParticleCollision] = new BurstParticleCollisionConstraints(this); - constraints[(int)Oni.ConstraintType.Density] = new BurstDensityConstraints(this); - constraints[(int)Oni.ConstraintType.Collision] = new BurstColliderCollisionConstraints(this); - constraints[(int)Oni.ConstraintType.Skin] = new BurstSkinConstraints(this); - constraints[(int)Oni.ConstraintType.Aerodynamics] = new BurstAerodynamicConstraints(this); - constraints[(int)Oni.ConstraintType.Stitch] = new BurstStitchConstraints(this); - constraints[(int)Oni.ConstraintType.ParticleFriction] = new BurstParticleFrictionConstraints(this); - constraints[(int)Oni.ConstraintType.Friction] = new BurstColliderFrictionConstraints(this); + if (reducedBounds.IsCreated) reducedBounds.Dispose(); - var c = constraints[(int)Oni.ConstraintType.Collision] as BurstColliderCollisionConstraints; - c.CreateConstraintsBatch(); + reducedBounds = new NativeArray(counts.simplexCount, Allocator.Persistent); } public void SetActiveParticles(ObiNativeIntList activeIndices) { activeParticles = activeIndices.AsNativeArray(); } public IObiJobHandle UpdateBounds(IObiJobHandle inputDeps, float stepTime) { + BurstJobHandle burstHandle = inputDeps as BurstJobHandle; if (burstHandle == null) return inputDeps; - var f = constraints[(int)Oni.ConstraintType.Friction] as BurstColliderFrictionConstraints; - f.CreateConstraintsBatch(); - } - - public void Destroy() - { - for (int i = 0; i < constraints.Length; ++i) - if (constraints[i] != null) - constraints[i].Dispose(); - - // Get rid of particle and collider grids: - particleGrid.Dispose(); - - if (colliderGrid != null) - colliderGrid.DecreaseReferenceCount(); - - collisionConstraintBatcher.Dispose(); - fluidConstraintBatcher.Dispose(); - - if (deformableTriangles.IsCreated) - deformableTriangles.Dispose(); - if (simplexBounds.IsCreated) - simplexBounds.Dispose(); - - if (particleContacts.IsCreated) - particleContacts.Dispose(); - if (particleBatchData.IsCreated) - particleBatchData.Dispose(); - if (fluidInteractions.IsCreated) - fluidInteractions.Dispose(); - if (fluidBatchData.IsCreated) - fluidBatchData.Dispose(); - if (colliderContacts.IsCreated) - colliderContacts.Dispose(); - - } - - public void ReleaseJobHandles() - { - jobHandlePool.ReleaseAll(); - } - - // Utility function to count scheduled jobs. Call it once per job. - // Will JobHandle.ScheduleBatchedJobs once there's a good bunch of scheduled jobs. - public void ScheduleBatchedJobsIfNeeded() - { - if (scheduledJobCounter++ > 16) + // calculate bounding boxes for all simplices: + var boundsJob = new CalculateSimplexBoundsJob() { - scheduledJobCounter = 0; - JobHandle.ScheduleBatchedJobs(); - } - } - - private void GetOrCreateColliderWorld() - { - colliderGrid = GameObject.FindObjectOfType(); - if (colliderGrid == null) - { - var world = new GameObject("BurstCollisionWorld", typeof(BurstColliderWorld)); - colliderGrid = world.GetComponent(); - } - } - - public void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation) - { - m_InertialFrame = new BurstInertialFrame(translation, scale, rotation); - } - - public void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, float deltaTime) - { - m_InertialFrame.Update(translation, scale, rotation, deltaTime); - } - - public void ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) - { - // inverse linear part: - float4x4 linear = float4x4.TRS(float3.zero, inertialFrame.frame.rotation, math.rcp(inertialFrame.frame.scale.xyz)); - float4x4 linearInv = math.transpose(linear); - - // non-inertial frame accelerations: - float4 angularVel = math.mul(linearInv, math.mul(float4x4.Scale(inertialFrame.angularVelocity.xyz), linear)).diagonal(); - float4 eulerAccel = math.mul(linearInv, math.mul(float4x4.Scale(inertialFrame.angularAcceleration.xyz), linear)).diagonal(); - float4 inertialAccel = math.mul(linearInv, inertialFrame.acceleration); - - var applyInertialForces = new ApplyInertialForcesJob() - { - activeParticles = activeParticles, + radii = principalRadii, + fluidMaterials = fluidMaterials, positions = positions, velocities = velocities, - invMasses = invMasses, - angularVel = angularVel, - inertialAccel = inertialAccel, - eulerAccel = eulerAccel, - worldLinearInertiaScale = worldLinearInertiaScale, - worldAngularInertiaScale = worldAngularInertiaScale, - deltaTime = deltaTime, + simplices = simplices, + simplexCounts = simplexCounts, + particleMaterialIndices = collisionMaterials, + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + parameters = abstraction.parameters, + simplexBounds = simplexBounds, + reducedBounds = reducedBounds, + dt = stepTime }; - applyInertialForces.Schedule(activeParticleCount, 64).Complete(); - } - - public int GetDeformableTriangleCount() - { - return deformableTriangles.Length / 3; - } - - public void SetDeformableTriangles(int[] indices, int num, int destOffset) - { - if (destOffset + num >= deformableTriangles.Length / 3) - deformableTriangles.ResizeUninitialized((destOffset + num) * 3); - for (int i = 0; i < num * 3; ++i) - deformableTriangles[i + destOffset * 3] = indices[i]; - } - - public int RemoveDeformableTriangles(int num, int sourceOffset) - { - if (deformableTriangles.IsCreated) - { - int amount = deformableTriangles.Length / 3; - - if (num < 0) - { - deformableTriangles.Clear(); - return amount; - } - - int set = ClampArrayAccess(amount, num, sourceOffset); - int end = sourceOffset + set; - - // TODO: replace by built in method in 0.9.0 - deformableTriangles.RemoveRangeBurst(sourceOffset * 3, (end - sourceOffset) * 3 ); - - return set; - } - return 0; - } - - public void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts) - { - this.simplices = simplices.AsNativeArray(); - this.simplexCounts = counts; - - if (simplexBounds.IsCreated) - simplexBounds.Dispose(); - - simplexBounds = new NativeArray(counts.simplexCount, Allocator.Persistent); - cellCoords = abstraction.cellCoords.AsNativeArray(); - } - - public void SetActiveParticles(ObiNativeIntList indices) - { - activeParticles = indices.AsNativeArray(); - } - - int ClampArrayAccess(int size, int num, int offset) - { - return math.min(num, math.max(0, size - offset)); - } - - public JobHandle RecalculateInertiaTensors(JobHandle inputDeps) - { - var updateInertiaTensors = new UpdateInertiaTensorsJob() - { - activeParticles = activeParticles, - inverseMasses = abstraction.invMasses.AsNativeArray(), - inverseRotationalMasses = abstraction.invRotationalMasses.AsNativeArray(), - principalRadii = abstraction.principalRadii.AsNativeArray(), - inverseInertiaTensors = abstraction.invInertiaTensors.AsNativeArray(), - }; - - return updateInertiaTensors.Schedule(activeParticleCount, 128, inputDeps); - } - - public void GetBounds(ref Vector3 min, ref Vector3 max) - { - int chunkSize = 4; - NativeArray bounds = new NativeArray(activeParticleCount, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); - - var particleBoundsJob = new ParticleToBoundsJob() - { - activeParticles = activeParticles, - positions = positions, - radii = principalRadii, - bounds = bounds - }; - - JobHandle reduction = particleBoundsJob.Schedule(activeParticles.Length, 64); + burstHandle.jobHandle = boundsJob.Schedule(simplexCounts.simplexCount, 64, burstHandle.jobHandle); // parallel reduction: - int chunks = bounds.Length; - int stride = 1; - - while (chunks > 1) + int chunkSize = 4; int chunks = simplexCounts.simplexCount; int stride = 1; while (chunks > 1) { var reductionJob = new BoundsReductionJob() { bounds = reducedBounds, stride = stride, size = chunkSize, }; burstHandle.jobHandle = reductionJob.Schedule(chunks, 1, burstHandle.jobHandle); chunks = (int)math.ceil(chunks / (float)chunkSize); stride *= chunkSize; } + + var countRef = abstraction.deadParticles.GetCountReference(Allocator.TempJob); + var lifetimeJob = new UpdateParticleLifetimesJob { - var reductionJob = new BoundsReductionJob() - { - bounds = bounds, - stride = stride, - size = chunkSize, - }; - reduction = reductionJob.Schedule(chunks, 1, reduction); + activeParticles = activeParticles, + life = life, + deadParticles = deadParticles, + deadParticleCount = countRef, + dt = stepTime, + }; - chunks = (int)math.ceil(chunks / (float)chunkSize); - stride *= chunkSize; - } + burstHandle.jobHandle = lifetimeJob.Schedule(activeParticleCount, 64, burstHandle.jobHandle); + burstHandle.jobHandle.Complete(); - reduction.Complete(); - - // the parallel reduction leaves the final bounds in the first entry: - if (bounds.Length > 0) - { - min = bounds[0].min.xyz; - max = bounds[0].max.xyz; - } - - bounds.Dispose(); - } - - public void ResetForces() + abstraction.deadParticles.count = countRef.Value; + countRef.Dispose(); return burstHandle; } public void GetBounds(ref Vector3 min, ref Vector3 max) { + // update solver bounds struct: + if (reducedBounds.IsCreated && reducedBounds.Length > 0) + { + solverBounds.min = reducedBounds[0].min; + solverBounds.max = reducedBounds[0].max; + } + + min = solverBounds.min.xyz; + max = solverBounds.max.xyz; + } public int GetConstraintCount(Oni.ConstraintType type) { if ((int)type > 0 && (int)type < constraints.Length) return constraints[(int)type].GetConstraintCount(); return 0; } public void SetParameters(Oni.SolverParameters parameters) { + } public void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters) { // No need to implement. This backend grabs parameters from the abstraction when it needs them. } public void ParticleCountChanged(ObiSolver solver) { deadParticles = abstraction.deadParticles.AsNativeArray(abstraction.deadParticles.capacity); positions = abstraction.positions.AsNativeArray(); restPositions = abstraction.restPositions.AsNativeArray(); prevPositions = abstraction.prevPositions.AsNativeArray(); renderablePositions = abstraction.renderablePositions.AsNativeArray(); orientations = abstraction.orientations.AsNativeArray(); restOrientations = abstraction.restOrientations.AsNativeArray(); prevOrientations = abstraction.prevOrientations.AsNativeArray(); renderableOrientations = abstraction.renderableOrientations.AsNativeArray(); colors = abstraction.colors.AsNativeArray(); velocities = abstraction.velocities.AsNativeArray(); angularVelocities = abstraction.angularVelocities.AsNativeArray(); invMasses = abstraction.invMasses.AsNativeArray(); invRotationalMasses = abstraction.invRotationalMasses.AsNativeArray(); externalForces = abstraction.externalForces.AsNativeArray(); externalTorques = abstraction.externalTorques.AsNativeArray(); wind = abstraction.wind.AsNativeArray(); positionDeltas = abstraction.positionDeltas.AsNativeArray(); orientationDeltas = abstraction.orientationDeltas.AsNativeArray(); positionConstraintCounts = abstraction.positionConstraintCounts.AsNativeArray(); orientationConstraintCounts = abstraction.orientationConstraintCounts.AsNativeArray(); collisionMaterials = abstraction.collisionMaterials.AsNativeArray(); phases = abstraction.phases.AsNativeArray(); filters = abstraction.filters.AsNativeArray(); renderableRadii = abstraction.renderableRadii.AsNativeArray(); principalRadii = abstraction.principalRadii.AsNativeArray(); normals = abstraction.normals.AsNativeArray(); life = abstraction.life.AsNativeArray(); fluidData = abstraction.fluidData.AsNativeArray(); userData = abstraction.userData.AsNativeArray(); fluidInterface = abstraction.fluidInterface.AsNativeArray(); fluidMaterials = abstraction.fluidMaterials.AsNativeArray(); + fluidMaterials2 = abstraction.fluidMaterials2.AsNativeArray(); anisotropies = abstraction.anisotropies.AsNativeArray(); cellCoords = abstraction.cellCoords.AsNativeArray(); if (tangents.IsCreated) tangents.Dispose(); tangents = new NativeArray(normals.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); } public void MaxFoamParticleCountChanged(ObiSolver solver) + { + if (auxPositions.IsCreated) + auxPositions.Dispose(); + if (auxVelocities.IsCreated) + auxVelocities.Dispose(); + if (auxColors.IsCreated) + auxColors.Dispose(); + if (auxAttributes.IsCreated) + auxAttributes.Dispose(); + + auxPositions = new NativeArray((int)abstraction.maxFoamParticles, Allocator.Persistent); + auxVelocities = new NativeArray((int)abstraction.maxFoamParticles, Allocator.Persistent); + auxColors = new NativeArray((int)abstraction.maxFoamParticles, Allocator.Persistent); + auxAttributes = new NativeArray((int)abstraction.maxFoamParticles, Allocator.Persistent); + } public void SetRigidbodyArrays(ObiSolver solver) { // No need to implement. This backend grabs arrays from the abstraction when it needs them. } public IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType type) { return constraints[(int)type].CreateConstraintsBatch(); } public void DestroyConstraintsBatch(IConstraintsBatchImpl batch) { if (batch != null) constraints[(int)batch.constraintType].RemoveBatch(batch); } public void FinishSimulation() { + // Wipe all forces to zero. However we can't wipe wind here, since we + // need wind values during interpolation to calculate rope normals. abstraction.externalForces.WipeToZero(); abstraction.externalTorques.WipeToZero(); - abstraction.wind.WipeToZero(); - // We're at the end of a whole step (not a substep), so dispose of contact buffers: - if (particleContacts.IsCreated) - particleContacts.Dispose(); - if (particleBatchData.IsCreated) - particleBatchData.Dispose(); - if (colliderContacts.IsCreated) - colliderContacts.Dispose(); + // store current end positions as the start positions for the next step. + abstraction.startPositions.CopyFrom(abstraction.endPositions); + abstraction.startOrientations.CopyFrom(abstraction.endOrientations); + abstraction.endPositions.CopyFrom(abstraction.positions); abstraction.endOrientations.CopyFrom(abstraction.orientations); } + + public void PushData() + { } - public int GetConstraintCount(Oni.ConstraintType type) + public void RequestReadback() { - if ((int)type > 0 && (int)type < constraints.Length) - return constraints[(int)type].GetConstraintCount(); - return 0; - } + } public IObiJobHandle CollisionDetection(IObiJobHandle inputDeps, float stepTime) { BurstJobHandle burstHandle = inputDeps as BurstJobHandle; if (burstHandle == null) return inputDeps; - public void GetCollisionContacts(Oni.Contact[] contacts, int count) - { - NativeArray.Copy(colliderContacts.Reinterpret(),0, contacts,0,count); - } - - public void GetParticleCollisionContacts(Oni.Contact[] contacts, int count) - { - NativeArray.Copy(particleContacts.Reinterpret(),0, contacts,0,count); - } - - public void SetParameters(Oni.SolverParameters parameters) - { - // No need to implement. This backend grabs parameters from the abstraction when it needs them. - } - - public void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters) - { - // No need to implement. This backend grabs parameters from the abstraction when it needs them. - } - - public void ParticleCountChanged(ObiSolver solver) - { - positions = abstraction.positions.AsNativeArray(); - restPositions = abstraction.restPositions.AsNativeArray(); - prevPositions = abstraction.prevPositions.AsNativeArray(); - renderablePositions = abstraction.renderablePositions.AsNativeArray(); - - orientations = abstraction.orientations.AsNativeArray(); - restOrientations = abstraction.restOrientations.AsNativeArray(); - prevOrientations = abstraction.prevOrientations.AsNativeArray(); - renderableOrientations = abstraction.renderableOrientations.AsNativeArray(); - - velocities = abstraction.velocities.AsNativeArray(); - angularVelocities = abstraction.angularVelocities.AsNativeArray(); - - invMasses = abstraction.invMasses.AsNativeArray(); - invRotationalMasses = abstraction.invRotationalMasses.AsNativeArray(); - invInertiaTensors = abstraction.invInertiaTensors.AsNativeArray(); - - externalForces = abstraction.externalForces.AsNativeArray(); - externalTorques = abstraction.externalTorques.AsNativeArray(); - wind = abstraction.wind.AsNativeArray(); - - positionDeltas = abstraction.positionDeltas.AsNativeArray(); - orientationDeltas = abstraction.orientationDeltas.AsNativeArray(); - positionConstraintCounts = abstraction.positionConstraintCounts.AsNativeArray(); - orientationConstraintCounts = abstraction.orientationConstraintCounts.AsNativeArray(); - - collisionMaterials = abstraction.collisionMaterials.AsNativeArray(); - phases = abstraction.phases.AsNativeArray(); - filters = abstraction.filters.AsNativeArray(); - anisotropies = abstraction.anisotropies.AsNativeArray(); - principalRadii = abstraction.principalRadii.AsNativeArray(); - normals = abstraction.normals.AsNativeArray(); - - vorticities = abstraction.vorticities.AsNativeArray(); - fluidData = abstraction.fluidData.AsNativeArray(); - userData = abstraction.userData.AsNativeArray(); - smoothingRadii = abstraction.smoothingRadii.AsNativeArray(); - buoyancies = abstraction.buoyancies.AsNativeArray(); - restDensities = abstraction.restDensities.AsNativeArray(); - viscosities = abstraction.viscosities.AsNativeArray(); - surfaceTension = abstraction.surfaceTension.AsNativeArray(); - vortConfinement = abstraction.vortConfinement.AsNativeArray(); - athmosphericDrag = abstraction.atmosphericDrag.AsNativeArray(); - athmosphericPressure = abstraction.atmosphericPressure.AsNativeArray(); - diffusion = abstraction.diffusion.AsNativeArray(); - } - - public void SetRigidbodyArrays(ObiSolver solver) - { - // No need to implement. This backend grabs arrays from the abstraction when it needs them. - } - - public IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType type) - { - return constraints[(int)type].CreateConstraintsBatch(); - } - - public void DestroyConstraintsBatch(IConstraintsBatchImpl batch) - { - if (batch != null) - constraints[(int)batch.constraintType].RemoveBatch(batch); - } - - public IObiJobHandle CollisionDetection(float stepTime) - { - var fluidHandle = FindFluidParticles(); - - var inertiaUpdate = RecalculateInertiaTensors(fluidHandle); - - return jobHandlePool.Borrow().SetHandle(GenerateContacts(inertiaUpdate, stepTime)); - } - - protected JobHandle FindFluidParticles() - { - var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; - - // Update positions: - var findFluidJob = new FindFluidParticlesJob() - { - activeParticles = activeParticles, - phases = m_Solver.phases.AsNativeArray(), - fluidParticles = d.fluidParticles, - }; - - return findFluidJob.Schedule(); - } - - protected JobHandle UpdateSimplexBounds(JobHandle inputDeps, float deltaTime) - { - var buildAabbs = new BuildSimplexAabbs - { - radii = principalRadii, - fluidRadii = smoothingRadii, - positions = positions, - velocities = velocities, - - simplices = simplices, - simplexCounts = simplexCounts, - simplexBounds = simplexBounds, - - particleMaterialIndices = abstraction.collisionMaterials.AsNativeArray(), - collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), - collisionMargin = abstraction.parameters.collisionMargin, - continuousCollisionDetection = abstraction.parameters.continuousCollisionDetection, - dt = deltaTime, - }; - return buildAabbs.Schedule(simplexCounts.simplexCount, 32, inputDeps); - } - - protected JobHandle GenerateContacts(JobHandle inputDeps, float deltaTime) - { - // Dispose of previous fluid interactions. - // We need fluid data during interpolation, for anisotropic fluid particles. For this reason, - // we can't dispose of these arrays in ResetForces() at the end of each full step. They must use persistent allocation. - - if (fluidInteractions.IsCreated) - fluidInteractions.Dispose(); - if (fluidBatchData.IsCreated) - fluidBatchData.Dispose(); + burstHandle.jobHandle = FindFluidParticles(burstHandle.jobHandle); burstHandle.jobHandle = GenerateContacts(burstHandle.jobHandle, stepTime); return burstHandle; } protected JobHandle FindFluidParticles(JobHandle inputDeps) { var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; // Update positions: var findFluidJob = new FindFluidParticlesJob() { activeParticles = activeParticles, phases = phases, fluidParticles = d.fluidParticles, }; return findFluidJob.Schedule(inputDeps); } protected JobHandle GenerateContacts(JobHandle inputDeps, float deltaTime) { // Dispose of previous fluid interactions. // We need fluid data during interpolation, for anisotropic fluid particles. For this reason, // we can't dispose of these arrays in ResetForces() at the end of each full step. They must use persistent allocation. if (fluidInteractions.IsCreated) fluidInteractions.Dispose(); if (fluidBatchData.IsCreated) fluidBatchData.Dispose(); + if (particleBatchData.IsCreated) particleBatchData.Dispose(); // get constraint parameters for constraint types that depend on broadphases: - var collisionParameters = m_Solver.GetConstraintParameters(Oni.ConstraintType.Collision); - var particleCollisionParameters = m_Solver.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); - var densityParameters = m_Solver.GetConstraintParameters(Oni.ConstraintType.Density); - - // if no enabled constraints that require broadphase info, skip it entirely. - if (collisionParameters.enabled || - particleCollisionParameters.enabled || - densityParameters.enabled) - { - // update the bounding box of each simplex: - inputDeps = UpdateSimplexBounds(inputDeps, deltaTime); - - + var collisionParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Collision); var particleCollisionParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); var densityParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); // if no enabled constraints that require broadphase info, skip it entirely. if (collisionParameters.enabled || particleCollisionParameters.enabled || densityParameters.enabled) { // generate particle-particle and particle-collider interactions in parallel: - JobHandle generateParticleInteractionsHandle = inputDeps, generateContactsHandle = inputDeps; + JobHandle generateParticleInteractionsHandle = inputDeps, generateContactsHandle = inputDeps; // particle-particle interactions (contacts, fluids) if (particleCollisionParameters.enabled || densityParameters.enabled) { particleGrid.Update(this, inputDeps); generateParticleInteractionsHandle = particleGrid.GenerateContacts(this, deltaTime); } // particle-collider interactions (contacts) if (collisionParameters.enabled) { generateContactsHandle = colliderGrid.GenerateContacts(this, deltaTime, inputDeps); } JobHandle.CombineDependencies(generateParticleInteractionsHandle, generateContactsHandle).Complete(); - // particle-particle interactions (contacts, fluids) - if (particleCollisionParameters.enabled || densityParameters.enabled) - { - particleGrid.Update(this, deltaTime, inputDeps); - generateParticleInteractionsHandle = particleGrid.GenerateContacts(this, deltaTime); - } + // allocate arrays for interactions and batch data: particleBatchData = new NativeArray(maxBatches, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); fluidInteractions = new NativeArray(particleGrid.fluidInteractionQueue.Count, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); fluidBatchData = new NativeArray(maxBatches, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); - // particle-collider interactions (contacts) - if (collisionParameters.enabled) - { - generateContactsHandle = colliderGrid.GenerateContacts(this, deltaTime, inputDeps); - } - - JobHandle.CombineDependencies(generateParticleInteractionsHandle, generateContactsHandle).Complete(); - - // allocate arrays for interactions and batch data: - particleContacts = new NativeArray(particleGrid.particleContactQueue.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); - particleBatchData = new NativeArray(maxBatches, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); - - fluidInteractions = new NativeArray(particleGrid.fluidInteractionQueue.Count, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); - fluidBatchData = new NativeArray(maxBatches, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); - - colliderContacts = new NativeArray(colliderGrid.colliderContactQueue.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); + // allocate effective mass arrays: + abstraction.contactEffectiveMasses.ResizeUninitialized(colliderGrid.colliderContactQueue.Count); + abstraction.particleContactEffectiveMasses.ResizeUninitialized(particleGrid.particleContactQueue.Count); // dequeue contacts/interactions into temporary arrays: - var rawParticleContacts = new NativeArray(particleGrid.particleContactQueue.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); - var sortedParticleContacts = new NativeArray(particleGrid.particleContactQueue.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); - var rawFluidInteractions = new NativeArray(particleGrid.fluidInteractionQueue.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); + var rawParticleContacts = new NativeArray(particleGrid.particleContactQueue.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); var sortedParticleContacts = new NativeArray(particleGrid.particleContactQueue.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); var rawFluidInteractions = new NativeArray(particleGrid.fluidInteractionQueue.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); - DequeueIntoArrayJob dequeueParticleContacts = new DequeueIntoArrayJob() - { - InputQueue = particleGrid.particleContactQueue, - OutputArray = rawParticleContacts - }; + abstraction.particleContacts.ResizeUninitialized(particleGrid.particleContactQueue.Count); DequeueIntoArrayJob dequeueParticleContacts = new DequeueIntoArrayJob { InputQueue = particleGrid.particleContactQueue, OutputArray = rawParticleContacts }; - DequeueIntoArrayJob dequeueFluidInteractions = new DequeueIntoArrayJob() - { - InputQueue = particleGrid.fluidInteractionQueue, - OutputArray = rawFluidInteractions - }; + abstraction.colliderContacts.ResizeUninitialized(colliderGrid.colliderContactQueue.Count); DequeueIntoArrayJob dequeueColliderContacts = new DequeueIntoArrayJob { InputQueue = colliderGrid.colliderContactQueue, OutputArray = abstraction.colliderContacts.AsNativeArray() }; DequeueIntoArrayJob dequeueFluidInteractions = new DequeueIntoArrayJob { InputQueue = particleGrid.fluidInteractionQueue, OutputArray = rawFluidInteractions }; var dequeueHandle = JobHandle.CombineDependencies(dequeueParticleContacts.Schedule(), dequeueFluidInteractions.Schedule(), dequeueColliderContacts.Schedule()); // Sort contacts for jitter-free gauss-seidel (sequential) solving: dequeueHandle = contactSorter.SortConstraints(simplexCounts.simplexCount, rawParticleContacts, ref sortedParticleContacts, dequeueHandle); ContactProvider contactProvider = new ContactProvider() { contacts = sortedParticleContacts, sortedContacts = abstraction.particleContacts.AsNativeArray(), simplices = simplices, simplexCounts = simplexCounts }; FluidInteractionProvider fluidProvider = new FluidInteractionProvider() { interactions = rawFluidInteractions, sortedInteractions = fluidInteractions, }; // batch particle contacts: var activeParticleBatchCount = new NativeArray(1, Allocator.TempJob); var particleBatchHandle = collisionConstraintBatcher.BatchConstraints(ref contactProvider, particleCount, ref particleBatchData, ref activeParticleBatchCount, dequeueHandle); // batch fluid interactions: var activeFluidBatchCount = new NativeArray(1, Allocator.TempJob); var fluidBatchHandle = fluidConstraintBatcher.BatchConstraints(ref fluidProvider, particleCount, ref fluidBatchData, ref activeFluidBatchCount, dequeueHandle); JobHandle.CombineDependencies(particleBatchHandle, fluidBatchHandle).Complete(); // Generate particle contact/friction batches: var pc = constraints[(int)Oni.ConstraintType.ParticleCollision] as BurstParticleCollisionConstraints; var pf = constraints[(int)Oni.ConstraintType.ParticleFriction] as BurstParticleFrictionConstraints; for (int i = 0; i < pc.batches.Count; ++i) pc.batches[i].enabled = false; for (int i = 0; i < pf.batches.Count; ++i) pf.batches[i].enabled = false; for (int i = 0; i < activeParticleBatchCount[0]; ++i) { // create extra batches if not enough: if (i == pc.batches.Count) { pc.CreateConstraintsBatch(); pf.CreateConstraintsBatch(); } pc.batches[i].enabled = true; pf.batches[i].enabled = true; (pc.batches[i] as BurstParticleCollisionConstraintsBatch).batchData = particleBatchData[i]; (pf.batches[i] as BurstParticleFrictionConstraintsBatch ).batchData = particleBatchData[i]; } // Generate fluid interaction batches: var dc = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; for (int i = 0; i < dc.batches.Count; ++i) dc.batches[i].enabled = false; for (int i = 0; i < activeFluidBatchCount[0]; ++i) { // create extra batches if not enough: if (i == dc.batches.Count) dc.CreateConstraintsBatch(); dc.batches[i].enabled = true; (dc.batches[i] as BurstDensityConstraintsBatch).batchData = fluidBatchData[i]; } // dispose of temporary buffers: rawParticleContacts.Dispose(); rawFluidInteractions.Dispose(); sortedParticleContacts.Dispose(); activeParticleBatchCount.Dispose(); activeFluidBatchCount.Dispose(); inputDeps = colliderGrid.ApplyForceZones(this, deltaTime, inputDeps); } return inputDeps; } public IObiJobHandle Substep(IObiJobHandle handle, float stepTime, float substepTime, int steps, float timeLeft) { BurstJobHandle burstHandle = handle as BurstJobHandle; if (burstHandle == null) return handle; - DequeueIntoArrayJob dequeueColliderContacts = new DequeueIntoArrayJob() - { - InputQueue = colliderGrid.colliderContactQueue, - OutputArray = colliderContacts - }; - - var dequeueHandle = JobHandle.CombineDependencies(dequeueParticleContacts.Schedule(), dequeueFluidInteractions.Schedule(), dequeueColliderContacts.Schedule()); - - // Sort contacts for jitter-free gauss-seidel (sequential) solving: - dequeueHandle = contactSorter.SortConstraints(simplexCounts.simplexCount, rawParticleContacts, ref sortedParticleContacts, dequeueHandle); - - ContactProvider contactProvider = new ContactProvider() - { - contacts = sortedParticleContacts, - sortedContacts = particleContacts, - simplices = simplices, - simplexCounts = simplexCounts - }; - - FluidInteractionProvider fluidProvider = new FluidInteractionProvider() - { - interactions = rawFluidInteractions, - sortedInteractions = fluidInteractions, - }; - - // batch particle contacts: - var activeParticleBatchCount = new NativeArray(1, Allocator.TempJob); - var particleBatchHandle = collisionConstraintBatcher.BatchConstraints(ref contactProvider, particleCount, ref particleBatchData, ref activeParticleBatchCount, dequeueHandle); - - // batch fluid interactions: - var activeFluidBatchCount = new NativeArray(1, Allocator.TempJob); - var fluidBatchHandle = fluidConstraintBatcher.BatchConstraints(ref fluidProvider, particleCount, ref fluidBatchData, ref activeFluidBatchCount, dequeueHandle); - - JobHandle.CombineDependencies(particleBatchHandle, fluidBatchHandle).Complete(); - - // Generate particle contact/friction batches: - var pc = constraints[(int)Oni.ConstraintType.ParticleCollision] as BurstParticleCollisionConstraints; - var pf = constraints[(int)Oni.ConstraintType.ParticleFriction] as BurstParticleFrictionConstraints; - - for (int i = 0; i < pc.batches.Count; ++i) - pc.batches[i].enabled = false; - - for (int i = 0; i < pf.batches.Count; ++i) - pf.batches[i].enabled = false; - - for (int i = 0; i < activeParticleBatchCount[0]; ++i) - { - // create extra batches if not enough: - if (i == pc.batches.Count) - { - pc.CreateConstraintsBatch(); - pf.CreateConstraintsBatch(); - } - - pc.batches[i].enabled = true; - pf.batches[i].enabled = true; - - (pc.batches[i] as BurstParticleCollisionConstraintsBatch).batchData = particleBatchData[i]; - (pf.batches[i] as BurstParticleFrictionConstraintsBatch ).batchData = particleBatchData[i]; - } - - // Generate fluid interaction batches: - var dc = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; - - for (int i = 0; i < dc.batches.Count; ++i) - dc.batches[i].enabled = false; - - for (int i = 0; i < activeFluidBatchCount[0]; ++i) - { - // create extra batches if not enough: - if (i == dc.batches.Count) - dc.CreateConstraintsBatch(); - - dc.batches[i].enabled = true; - - (dc.batches[i] as BurstDensityConstraintsBatch).batchData = fluidBatchData[i]; - } - - // dispose of temporary buffers: - rawParticleContacts.Dispose(); - rawFluidInteractions.Dispose(); - sortedParticleContacts.Dispose(); - activeParticleBatchCount.Dispose(); - activeFluidBatchCount.Dispose(); - - } - - return inputDeps; - } - - public IObiJobHandle Substep(float stepTime, float substepTime, int substeps) - { // Apply aerodynamics - JobHandle aerodynamicsHandle = constraints[(int)Oni.ConstraintType.Aerodynamics].Project(new JobHandle(), stepTime, substepTime, substeps); + burstHandle.jobHandle = constraints[(int)Oni.ConstraintType.Aerodynamics].Project(burstHandle.jobHandle, stepTime, substepTime, steps, timeLeft); // Predict positions: - var predictPositions = new PredictPositionsJob() - { - activeParticles = activeParticles, - phases = phases, - buoyancies = buoyancies, - - externalForces = externalForces, - inverseMasses = invMasses, - positions = positions, - previousPositions = prevPositions, - velocities = velocities, - - externalTorques = externalTorques, - inverseRotationalMasses = invRotationalMasses, - orientations = orientations, - previousOrientations = prevOrientations, - angularVelocities = angularVelocities, - - gravity = new float4(m_Solver.parameters.gravity, 0), - deltaTime = substepTime, - is2D = abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D - }; - - JobHandle predictPositionsHandle = predictPositions.Schedule(activeParticles.Length, 128, aerodynamicsHandle); + var predictPositions = new PredictPositionsJob() { activeParticles = activeParticles, phases = phases, buoyancies = fluidInterface, externalForces = externalForces, inverseMasses = invMasses, positions = positions, previousPositions = prevPositions, velocities = velocities, externalTorques = externalTorques, inverseRotationalMasses = invRotationalMasses, orientations = orientations, previousOrientations = prevOrientations, angularVelocities = angularVelocities, gravity = new float4(abstraction.parameters.gravity, 0), deltaTime = substepTime, is2D = abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D }; burstHandle.jobHandle = predictPositions.Schedule(activeParticles.Length, 128, burstHandle.jobHandle); // Project position constraints: - JobHandle projectionHandle = ApplyConstraints(predictPositionsHandle, stepTime, substepTime, substeps); + burstHandle.jobHandle = ApplyConstraints(burstHandle.jobHandle, stepTime, substepTime, steps, timeLeft); - // Update velocities: - var updateVelocitiesJob = new UpdateVelocitiesJob() - { - activeParticles = activeParticles, + // Enforce solver boundary limits: + burstHandle.jobHandle = EnforceLimits(burstHandle.jobHandle); // Update velocities: var updateVelocitiesJob = new UpdateVelocitiesJob { activeParticles = activeParticles, inverseMasses = invMasses, previousPositions = prevPositions, positions = positions, velocities = velocities, inverseRotationalMasses = invRotationalMasses, previousOrientations = prevOrientations, orientations = orientations, angularVelocities = angularVelocities, deltaTime = substepTime, is2D = abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D }; burstHandle.jobHandle = updateVelocitiesJob.Schedule(activeParticles.Length, 128, burstHandle.jobHandle); - inverseMasses = invMasses, - previousPositions = prevPositions, - positions = positions, - velocities = velocities, + // calculate particle velocity correction: + burstHandle.jobHandle = CalculateVelocityCorrections(burstHandle.jobHandle, substepTime); - inverseRotationalMasses = invRotationalMasses, - previousOrientations = prevOrientations, - orientations = orientations, - angularVelocities = angularVelocities, + // Update diffuse particles: + int substepsLeft = (int)math.round(timeLeft / substepTime); + int foamPadding = (int)math.ceil(abstraction.substeps / (float)abstraction.foamSubsteps); - deltaTime = substepTime, - is2D = abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D - }; + if (substepsLeft % foamPadding == 0) + burstHandle.jobHandle = UpdateDiffuseParticles(burstHandle.jobHandle, substepTime * foamPadding); - JobHandle updateVelocitiesHandle = updateVelocitiesJob.Schedule(activeParticles.Length, 128, projectionHandle); - - // velocity constraints: - JobHandle velocityCorrectionsHandle = ApplyVelocityCorrections(updateVelocitiesHandle, substepTime); - - // Update positions: - var updatePositionsJob = new UpdatePositionsJob() - { - activeParticles = activeParticles, - positions = positions, - previousPositions = prevPositions, - velocities = velocities, - orientations = orientations, - previousOrientations = prevOrientations, - angularVelocities = angularVelocities, - velocityScale = math.pow(1 - math.clamp(m_Solver.parameters.damping, 0, 1), substepTime), - sleepThreshold = m_Solver.parameters.sleepThreshold - }; - - JobHandle updatePositionsHandle = updatePositionsJob.Schedule(activeParticles.Length, 128, velocityCorrectionsHandle); - - return jobHandlePool.Borrow().SetHandle(updatePositionsHandle); - } - - private JobHandle ApplyVelocityCorrections(JobHandle inputDeps, float deltaTime) + // correct particle velocities: + burstHandle.jobHandle = ApplyVelocityCorrections(burstHandle.jobHandle, substepTime); // update particle positions: var updatePositionsJob = new UpdatePositionsJob { activeParticles = activeParticles, positions = positions, previousPositions = prevPositions, velocities = velocities, orientations = orientations, previousOrientations = prevOrientations, angularVelocities = angularVelocities, velocityScale = math.pow(1 - math.saturate(abstraction.parameters.damping), substepTime), sleepThreshold = abstraction.parameters.sleepThreshold, maxVelocity = abstraction.parameters.maxVelocity, maxAngularVelocity = abstraction.parameters.maxAngularVelocity }; burstHandle.jobHandle = updatePositionsJob.Schedule(activeParticles.Length, 128, burstHandle.jobHandle); return burstHandle; } private JobHandle CalculateVelocityCorrections(JobHandle inputDeps, float deltaTime) { var densityParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); if (densityParameters.enabled) { var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; if (d != null) { return d.CalculateVelocityCorrections(inputDeps, deltaTime); } } return inputDeps; } private JobHandle ApplyVelocityCorrections(JobHandle inputDeps, float deltaTime) { var densityParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); if (densityParameters.enabled) { var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; if (d != null) { return d.ApplyVelocityCorrections(inputDeps, deltaTime); } } return inputDeps; } private JobHandle ApplyConstraints(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { // calculate max amount of iterations required, and initialize constraints.. int maxIterations = 0; for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { var parameters = abstraction.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled) { maxIterations = math.max(maxIterations, parameters.iterations); inputDeps = constraints[i].Initialize(inputDeps, stepTime, substepTime, steps, timeLeft); } } // calculate iteration paddings: for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { var parameters = abstraction.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled && parameters.iterations > 0) padding[i] = (int)math.ceil(maxIterations / (float)parameters.iterations); else padding[i] = maxIterations; } // perform projection iterations: for (int i = 1; i < maxIterations; ++i) { for (int j = 0; j < Oni.ConstraintTypeCount; ++j) { if (j != (int)Oni.ConstraintType.Aerodynamics) { var parameters = abstraction.GetConstraintParameters((Oni.ConstraintType)j); if (parameters.enabled && i % padding[j] == 0) inputDeps = constraints[j].Project(inputDeps, stepTime, substepTime, steps, timeLeft); } } } // final iteration, all groups together: for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { if (i != (int)Oni.ConstraintType.Aerodynamics) { var parameters = abstraction.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled && parameters.iterations > 0) inputDeps = constraints[i].Project(inputDeps, stepTime, substepTime, steps, timeLeft); } } // Despite friction constraints being applied after collision (since coulomb friction depends on normal impulse) // we perform a collision iteration right at the end to ensure the final state meets the Signorini-Fichera conditions. var param = abstraction.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); if (param.enabled && param.iterations > 0) inputDeps = constraints[(int)Oni.ConstraintType.ParticleCollision].Project(inputDeps, stepTime, substepTime, steps, timeLeft); param = abstraction.GetConstraintParameters(Oni.ConstraintType.Collision); if (param.enabled && param.iterations > 0) inputDeps = constraints[(int)Oni.ConstraintType.Collision].Project(inputDeps, stepTime, substepTime, steps, timeLeft); return inputDeps; } private JobHandle EnforceLimits(JobHandle inputDeps) { - var densityParameters = m_Solver.GetConstraintParameters(Oni.ConstraintType.Density); + if (!abstraction.useLimits) return inputDeps; - if (densityParameters.enabled) - { - var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; - if (d != null) - { - return d.ApplyVelocityCorrections(inputDeps, deltaTime); - } - } - return inputDeps; - } + var boundaryLimits = new EnforceLimitsJob { activeParticles = activeParticles, positions = positions, prevPositions = prevPositions, life = life, phases = phases, boundaryLimits = new BurstAabb(new float4(abstraction.boundaryLimits.min, 0), new float4(abstraction.boundaryLimits.max, 0)), killOffLimits = abstraction.killOffLimitsParticles }; return boundaryLimits.Schedule(activeParticleCount, 64, inputDeps); + } public IObiJobHandle ApplyInterpolation(IObiJobHandle inputDeps, ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) { if (inputDeps == null) inputDeps = new BurstJobHandle(); BurstJobHandle burstHandle = inputDeps as BurstJobHandle; if (burstHandle == null) return inputDeps; // Interpolate particle positions and orientations. var interpolate = new InterpolationJob { positions = positions, endPositions = abstraction.endPositions.AsNativeArray(), startPositions = startPositions.AsNativeArray(), renderablePositions = renderablePositions, orientations = orientations, endOrientations = abstraction.endOrientations.AsNativeArray(), startOrientations = startOrientations.AsNativeArray(), renderableOrientations = renderableOrientations, principalRadii = principalRadii, renderableRadii = renderableRadii, - private JobHandle ApplyConstraints(JobHandle inputDeps, float stepTime, float substepTime, int substeps) + blendFactor = stepTime > 0 ? unsimulatedTime / stepTime : 0, interpolationMode = abstraction.parameters.interpolation }; burstHandle.jobHandle = interpolate.Schedule(abstraction.positions.count, 128, burstHandle.jobHandle); // Update deformable triangle normals var resetNormals = new ResetNormals() { phases = phases, normals = normals, tangents = tangents }; burstHandle.jobHandle = resetNormals.Schedule(normals.Length, 128, burstHandle.jobHandle); // Update deformable triangle normals var updateTriNormals = new UpdateTriangleNormalsJob() { renderPositions = renderablePositions, deformableTriangles = deformableTriangles, deformableTriangleUVs = deformableUVs, normals = normals, tangents = tangents }; burstHandle.jobHandle = updateTriNormals.Schedule(deformableTriangles.Length / 3, 1, burstHandle.jobHandle); + + // Update deformable edge normals + var updateEdgeNormals = new UpdateEdgeNormalsJob() { renderPositions = renderablePositions, velocities = velocities, deformableEdges = deformableEdges, wind = wind, normals = normals, }; burstHandle.jobHandle = updateEdgeNormals.Schedule(deformableEdges.Length / 2, 1, burstHandle.jobHandle); + + // Update deformable triangle orientations + var updateOrientations = new RenderableOrientationFromNormals() { phases = phases, normals = normals, tangents = tangents, renderableOrientations = renderableOrientations }; burstHandle.jobHandle = updateOrientations.Schedule(normals.Length, 128, burstHandle.jobHandle); + + // project renderable position/orientation of pinned particles: + var pinparam = abstraction.GetConstraintParameters(Oni.ConstraintType.Pin); if (pinparam.enabled && pinparam.iterations > 0) + { + var d = constraints[(int)Oni.ConstraintType.Pin] as BurstPinConstraints; + if (Application.isPlaying && d != null) + burstHandle.jobHandle = d.ProjectRenderablePositions(burstHandle.jobHandle); } + + //make sure density constraints are enabled, otherwise particles have no neighbors and neighbor lists will be uninitialized. + var param = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); if (param.enabled && param.iterations > 0) + { + // Fluid laplacian/anisotropy (only if we're in play mode, in-editor we have no particlegrid/sorted data). + var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; + if (Application.isPlaying && d != null) + burstHandle.jobHandle = d.CalculateAnisotropyLaplacianSmoothing(burstHandle.jobHandle); } return burstHandle; } private unsafe JobHandle UpdateDiffuseParticles(JobHandle inputDeps, float deltaTime) { - - // calculate max amount of iterations required, and initialize constraints.. - int maxIterations = 0; - for (int i = 0; i < Oni.ConstraintTypeCount; ++i) + var system = abstraction.GetRenderSystem() as BurstFoamRenderSystem; + if (system != null) { - var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); - if (parameters.enabled) + int* dispatchPtr = (int*)abstraction.foamCount.AddressOfElement(0); + + for (int i = 0; i < system.renderers.Count; ++i) { - maxIterations = math.max(maxIterations, parameters.iterations); - inputDeps = constraints[i].Initialize(inputDeps, substepTime); - } - } + float seed = Time.frameCount % 16535 + UnityEngine.Random.value; - // calculate iteration paddings: - for (int i = 0; i < Oni.ConstraintTypeCount; ++i) - { - var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); - if (parameters.enabled && parameters.iterations > 0) - padding[i] = (int)math.ceil(maxIterations / (float)parameters.iterations); - else - padding[i] = maxIterations; - } - - // perform projection iterations: - for (int i = 1; i < maxIterations; ++i) - { - for (int j = 0; j < Oni.ConstraintTypeCount; ++j) - { - if (j != (int)Oni.ConstraintType.Aerodynamics) + if (system.renderers[i] is ObiFoamEmitter) { - var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)j); - if (parameters.enabled && i % padding[j] == 0) - inputDeps = constraints[j].Project(inputDeps, stepTime, substepTime, substeps); + var emitter = system.renderers[i] as ObiFoamEmitter; + int particlesToEmit = emitter.GetParticleNumberToEmit(deltaTime); + + var emitJob = new EmitParticlesJob + { + outputPositions = abstraction.foamPositions.AsNativeArray(), + outputVelocities = abstraction.foamVelocities.AsNativeArray(), + outputColors = abstraction.foamColors.AsNativeArray(), + outputAttributes = abstraction.foamAttributes.AsNativeArray(), + + dispatchBuffer = abstraction.foamCount.AsNativeArray(), + + emitterShape = (uint)emitter.shape, + emitterPosition = new float4(emitter.shapeTransform != null ? abstraction.transform.InverseTransformPoint(emitter.shapeTransform.position) : Vector3.zero,0), + emitterRotation = emitter.shapeTransform != null ? emitter.shapeTransform.rotation * Quaternion.Inverse(abstraction.transform.rotation) : Quaternion.identity, + emitterSize = new float4(emitter.shapeSize,0), + + randomSeed = seed, + buoyancy = system.renderers[i].buoyancy, + drag = system.renderers[i].drag, + airdrag = math.pow(1 - math.saturate(system.renderers[i].atmosphericDrag), deltaTime), + airAging = system.renderers[i].airAging, + particleSize = system.renderers[i].size, + sizeRandom = system.renderers[i].sizeRandom, + lifetime = system.renderers[i].lifetime, + lifetimeRandom = system.renderers[i].lifetimeRandom, + foamColor = (Vector4)system.renderers[i].color, + + deltaTime = deltaTime + }; + + inputDeps = emitJob.Schedule(particlesToEmit, 128, inputDeps); + } + else + { + var emitJob = new GenerateParticlesJob + { + // when the actor gets removed from solver, solverIndices is destroyed and + // this job may still be running. As a solution, create a temporary copy of the array. + activeParticles = new NativeArray(system.renderers[i].actor.solverIndices.AsNativeArray(), Allocator.TempJob), + positions = positions, + velocities = velocities, + angularVelocities = angularVelocities, + principalRadii = principalRadii, + fluidData = fluidData, + + outputPositions = abstraction.foamPositions.AsNativeArray(), + outputVelocities = abstraction.foamVelocities.AsNativeArray(), + outputColors = abstraction.foamColors.AsNativeArray(), + outputAttributes = abstraction.foamAttributes.AsNativeArray(), + + dispatchBuffer = abstraction.foamCount.AsNativeArray(), + + randomSeed = seed, + vorticityRange = system.renderers[i].vorticityRange, + velocityRange = system.renderers[i].velocityRange, + foamGenerationRate = system.renderers[i].foamGenerationRate, + potentialIncrease = system.renderers[i].foamPotential, + potentialDiffusion = math.pow(1 - math.saturate(system.renderers[i].foamPotentialDiffusion), deltaTime), + buoyancy = system.renderers[i].buoyancy, + drag = system.renderers[i].drag, + airdrag = math.pow(1 - math.saturate(system.renderers[i].atmosphericDrag), deltaTime), + isosurface = system.renderers[i].isosurface, + airAging = system.renderers[i].airAging, + particleSize = system.renderers[i].size, + sizeRandom = system.renderers[i].sizeRandom, + lifetime = system.renderers[i].lifetime, + lifetimeRandom = system.renderers[i].lifetimeRandom, + foamColor = (Vector4)system.renderers[i].color, + + deltaTime = deltaTime + }; + + inputDeps = emitJob.Schedule(system.renderers[i].actor.activeParticleCount, 128, inputDeps); } } - } - // final iteration, all groups together: - for (int i = 0; i < Oni.ConstraintTypeCount; ++i) - { - if (i != (int)Oni.ConstraintType.Aerodynamics) + var updateJob = new UpdateParticlesJob { - var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); - if (parameters.enabled && parameters.iterations > 0) - inputDeps = constraints[i].Project(inputDeps, stepTime, substepTime, substeps); - } + positions = positions, + orientations = renderableOrientations, + principalRadii = renderableRadii, + velocities = velocities, + angularVelocities = angularVelocities, + fluidData = fluidData, + fluidMaterial = fluidMaterials, + + simplices = simplices, + simplexCounts = simplexCounts, + + grid = particleGrid.grid, + gridLevels = particleGrid.grid.populatedLevels.GetKeyArray(Allocator.TempJob), + + densityKernel = new Poly6Kernel(abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), + + inputPositions = abstraction.foamPositions.AsNativeArray(), + inputVelocities = abstraction.foamVelocities.AsNativeArray(), + inputColors = abstraction.foamColors.AsNativeArray(), + inputAttributes = abstraction.foamAttributes.AsNativeArray(), + + outputPositions = auxPositions, + outputVelocities = auxVelocities, + outputColors = auxColors, + outputAttributes = auxAttributes, + + dispatchBuffer = abstraction.foamCount.AsNativeArray(), + + parameters = abstraction.parameters, + + agingOverPopulation = new Vector3(abstraction.foamAccelAgingRange.x, abstraction.foamAccelAgingRange.y, abstraction.foamAccelAging), + minFluidNeighbors = abstraction.foamMinNeighbors, + currentAliveParticles = dispatchPtr[3], + deltaTime = deltaTime + }; + + inputDeps = IJobParallelForDeferExtensions.Schedule(updateJob, &dispatchPtr[3], 64, inputDeps); + + var copyJob = new CopyJob + { + inputPositions = auxPositions, + inputVelocities = auxVelocities, + inputColors = auxColors, + inputAttributes = auxAttributes, + + outputPositions = abstraction.foamPositions.AsNativeArray(), + outputVelocities = abstraction.foamVelocities.AsNativeArray(), + outputColors = abstraction.foamColors.AsNativeArray(), + outputAttributes = abstraction.foamAttributes.AsNativeArray(), + + dispatchBuffer = abstraction.foamCount.AsNativeArray() + }; + + inputDeps = IJobParallelForDeferExtensions.Schedule(copyJob, &dispatchPtr[7], 256, inputDeps); + + activeFoamParticleCount = (uint)dispatchPtr[3]; } - - // Despite friction constraints being applied after collision (since coulomb friction depends on normal impulse) - // we perform a collision iteration right at the end to ensure the final state meets the Signorini-Fichera conditions. - var param = m_Solver.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); - if (param.enabled && param.iterations > 0) - inputDeps = constraints[(int)Oni.ConstraintType.ParticleCollision].Project(inputDeps, stepTime, substepTime, substeps); - param = m_Solver.GetConstraintParameters(Oni.ConstraintType.Collision); - if (param.enabled && param.iterations > 0) - inputDeps = constraints[(int)Oni.ConstraintType.Collision].Project(inputDeps, stepTime, substepTime, substeps); - return inputDeps; - } + } public void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results) { var resultsQueue = new NativeQueue(Allocator.Persistent); particleGrid.SpatialQuery(this, shapes.AsNativeArray(), transforms.AsNativeArray(), resultsQueue).Complete(); int count = resultsQueue.Count; results.ResizeUninitialized(count); var dequeueQueryResults = new DequeueIntoArrayJob() { InputQueue = resultsQueue, OutputArray = results.AsNativeArray() }; dequeueQueryResults.Schedule().Complete(); resultsQueue.Dispose(); } public int GetParticleGridSize() { return particleGrid.grid.usedCells.Length; } public void GetParticleGrid(ObiNativeAabbList cells) { particleGrid.GetCells(cells); } } } +#endif - public void ApplyInterpolation(ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) - { - // Interpolate particle positions and orientations. - var interpolate = new InterpolationJob() - { - positions = positions, - startPositions = startPositions.AsNativeArray(), - renderablePositions = renderablePositions, - - orientations = orientations, - startOrientations = startOrientations.AsNativeArray(), - renderableOrientations = renderableOrientations, - - deltaTime = stepTime, - unsimulatedTime = unsimulatedTime, - interpolationMode = m_Solver.parameters.interpolation - }; - - JobHandle jobHandle = interpolate.Schedule(m_Solver.positions.count, 128); - - // Update deformable triangle normals - var updateNormals = new UpdateNormalsJob() - { - renderPositions = renderablePositions, - deformableTriangles = deformableTriangles, - normals = normals - }; - - jobHandle = updateNormals.Schedule(jobHandle); - - // fluid laplacian/anisotropy: - var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; - if (d != null) - jobHandle = d.CalculateAnisotropyLaplacianSmoothing(jobHandle); - - // update axis: - var updatePrincipalAxis = new UpdatePrincipalAxisJob() - { - activeParticles = activeParticles, - renderableOrientations = renderableOrientations, - phases = phases, - principalRadii = principalRadii, - principalAxis = anisotropies, - }; - - jobHandle = updatePrincipalAxis.Schedule(activeParticles.Length, 128, jobHandle); - - jobHandle.Complete(); - - } - - public void InterpolateDiffuseProperties(ObiNativeVector4List properties, - ObiNativeVector4List diffusePositions, - ObiNativeVector4List diffuseProperties, - ObiNativeIntList neighbourCount, - int diffuseCount) - { - particleGrid.InterpolateDiffuseProperties(this, - properties.AsNativeArray(), - diffusePositions.AsNativeArray(), - diffuseProperties.AsNativeArray(), - neighbourCount.AsNativeArray(), - diffuseCount).Complete(); - } - - public void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results) - { - var resultsQueue = new NativeQueue(Allocator.Persistent); - - particleGrid.SpatialQuery(this, - shapes.AsNativeArray(), - transforms.AsNativeArray(), - resultsQueue).Complete(); - - int count = resultsQueue.Count; - results.ResizeUninitialized(count); - - var dequeueQueryResults = new DequeueIntoArrayJob() - { - InputQueue = resultsQueue, - OutputArray = results.AsNativeArray() - }; - - var dequeueHandle = dequeueQueryResults.Schedule(); - - var distanceJob = new CalculateQueryDistances() - { - prevPositions = prevPositions, - prevOrientations = prevOrientations, - radii = principalRadii, - simplices = simplices, - simplexCounts = simplexCounts, - queryResults = results.AsNativeArray() - }; - - distanceJob.Schedule(count, 16, dequeueHandle).Complete(); - - resultsQueue.Dispose(); - } - - public int GetParticleGridSize() - { - return particleGrid.grid.usedCells.Length; - } - public void GetParticleGrid(ObiNativeAabbList cells) - { - particleGrid.GetCells(cells); - } - } -} -#endif diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs new file mode 100644 index 000000000..b1b57c39a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs @@ -0,0 +1,42 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; + +namespace Obi +{ + [BurstCompile] + struct EnforceLimitsJob : IJobParallelFor + { + [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableParallelForRestriction] public NativeArray prevPositions; + [NativeDisableParallelForRestriction] public NativeArray life; + [ReadOnly] public NativeArray phases; + + [ReadOnly] public NativeArray activeParticles; + [ReadOnly] public bool killOffLimits; + + [ReadOnly] public BurstAabb boundaryLimits; + + public void Execute(int index) + { + int i = activeParticles[index]; + + float4 pos = positions[i]; + float4 prevPos = prevPositions[i]; + + bool outside = math.any(math.step(pos, boundaryLimits.min).xyz + math.step(boundaryLimits.max, pos).xyz); + + if ((phases[i] & (int)ObiUtils.ParticleFlags.Isolated) != 0) + life[i] = outside && killOffLimits ? 0 : life[i]; + + pos.xyz = math.clamp(pos, boundaryLimits.min, boundaryLimits.max).xyz; + prevPos.xyz = math.clamp(prevPos, boundaryLimits.min, boundaryLimits.max).xyz; + + positions[i] = pos; + prevPositions[i] = prevPos; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs.meta new file mode 100644 index 000000000..5e27e1ea8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 354e2117ba6e94ad8afbfe95160a553b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs new file mode 100644 index 000000000..aeb42e47d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs @@ -0,0 +1,361 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; +using Unity.Collections.LowLevel.Unsafe; +using System.Threading; + +namespace Obi +{ + [BurstCompile] + unsafe struct EmitParticlesJob : IJobParallelFor + { + [NativeDisableParallelForRestriction] public NativeArray outputPositions; + [NativeDisableParallelForRestriction] public NativeArray outputVelocities; + [NativeDisableParallelForRestriction] public NativeArray outputColors; + [NativeDisableParallelForRestriction] public NativeArray outputAttributes; + + [NativeDisableParallelForRestriction] public NativeArray dispatchBuffer; + + public uint emitterShape; + public float4 emitterPosition; + public quaternion emitterRotation; + public float4 emitterSize; + + public float lifetime; + public float lifetimeRandom; + public float particleSize; + public float sizeRandom; + public float buoyancy; + public float drag; + public float airdrag; + public float airAging; + public float isosurface; + public float4 foamColor; + + public float randomSeed; + public float deltaTime; + + public void Execute(int i) + { + int* dispatch = (int*)dispatchBuffer.GetUnsafePtr(); + + // atomically increment alive particle counter: + int count = Interlocked.Add(ref dispatch[3], 1) - 1; + + if (count < outputPositions.Length) + { + // initialize foam particle in a random position inside the cylinder spawned by fluid particle: + float3 radialVelocity; + float4 pos; + + if (emitterShape == 0) + BurstMath.RandomInCylinder(randomSeed + i, -new float4(0, 1, 0, 0) * emitterSize.y * 0.5f, new float4(0, 1, 0, 0), emitterSize.y, math.max(emitterSize.x, emitterSize.z) * 0.5f, out pos, out radialVelocity); + else + BurstMath.RandomInBox(randomSeed + i, float4.zero, emitterSize, out pos, out radialVelocity); + + float2 random = BurstMath.Hash21(randomSeed - i); + + // calculate initial life/size/color: + float initialLife = math.max (0, lifetime - lifetime * random.x * lifetimeRandom); + float initialSize = particleSize - particleSize * random.y * sizeRandom; + + outputPositions[count] = new float4(emitterPosition.xyz + math.rotate(emitterRotation, pos.xyz), 0); + outputVelocities[count] = new float4(0,0,0, buoyancy); + outputColors[count] = foamColor; + outputAttributes[count] = new float4(1, 1 / initialLife, initialSize, BurstMath.PackFloatRGBA(new float4(airAging / 50.0f, airdrag, drag, isosurface))); + } + } + } + + [BurstCompile] + unsafe struct GenerateParticlesJob : IJobParallelFor + { + [ReadOnly] [DeallocateOnJobCompletion] public NativeArray activeParticles; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray fluidData; + [NativeDisableParallelForRestriction] public NativeArray angularVelocities; + + [NativeDisableParallelForRestriction] public NativeArray outputPositions; + [NativeDisableParallelForRestriction] public NativeArray outputVelocities; + [NativeDisableParallelForRestriction] public NativeArray outputColors; + [NativeDisableParallelForRestriction] public NativeArray outputAttributes; + + [NativeDisableParallelForRestriction] public NativeArray dispatchBuffer; + + public float2 vorticityRange; + public float2 velocityRange; + public float potentialIncrease; + public float potentialDiffusion; + public float foamGenerationRate; + + public float lifetime; + public float lifetimeRandom; + public float particleSize; + public float sizeRandom; + public float buoyancy; + public float drag; + public float airdrag; + public float airAging; + public float isosurface; + public float4 foamColor; + + public float randomSeed; + public float deltaTime; + + public void Execute(int i) + { + int* dispatch = (int*)dispatchBuffer.GetUnsafePtr(); + + int p = activeParticles[i]; + + float4 angVel = angularVelocities[p]; + float2 potential = BurstMath.UnpackFloatRG(angVel.w); + + // calculate foam potential increase: + float vorticityPotential = BurstMath.Remap01(fluidData[p].z, vorticityRange.x, vorticityRange.y); + float velocityPotential = BurstMath.Remap01(math.length(velocities[p].xyz), velocityRange.x, velocityRange.y); + float potentialDelta = velocityPotential * vorticityPotential * deltaTime * potentialIncrease; + + // update foam potential: + potential.y = math.saturate(potential.y * potentialDiffusion + potentialDelta); + + // calculate amount of emitted particles + potential.x += foamGenerationRate * potential.y * deltaTime; + int emitCount = (int)potential.x; + potential.x -= emitCount; + + for (int j = 0; j < emitCount; ++j) + { + // atomically increment alive particle counter: + int count = Interlocked.Add(ref dispatch[3], 1) - 1; + + if (count < outputPositions.Length) + { + // initialize foam particle in a random position inside the cylinder spawned by fluid particle: + float3 radialVelocity; + float4 pos; + BurstMath.RandomInCylinder(randomSeed + p + j, positions[p], math.normalizesafe(velocities[p]), math.length(velocities[p]) * deltaTime, principalRadii[p].x, out pos, out radialVelocity); + + float2 random = BurstMath.Hash21(randomSeed - p - j); + + // calculate initial life/size/color: + float initialLife = velocityPotential * (lifetime - lifetime * random.x * lifetimeRandom); + float initialSize = particleSize - particleSize * random.y * sizeRandom; + + outputPositions[count] = pos; + outputVelocities[count] = velocities[p] + new float4(radialVelocity, buoyancy); + outputColors[count] = foamColor; + outputAttributes[count] = new float4(1, 1/initialLife, initialSize, BurstMath.PackFloatRGBA(new float4(airAging/50.0f, airdrag, drag, isosurface))); + } + } + + angVel.w = BurstMath.PackFloatRG(potential); + angularVelocities[p] = angVel; + } + } + + [BurstCompile] + unsafe struct UpdateParticlesJob : IJobParallelForDefer + { + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray angularVelocities; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray fluidData; + [ReadOnly] public NativeArray fluidMaterial; + + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [ReadOnly] public NativeMultilevelGrid grid; + [DeallocateOnJobCompletion] + [ReadOnly] public NativeArray gridLevels; + + [ReadOnly] public Poly6Kernel densityKernel; + + [ReadOnly] public NativeArray inputPositions; + [ReadOnly] public NativeArray inputVelocities; + [ReadOnly] public NativeArray inputColors; + [ReadOnly] public NativeArray inputAttributes; + + [NativeDisableParallelForRestriction] public NativeArray outputPositions; + [NativeDisableParallelForRestriction] public NativeArray outputVelocities; + [NativeDisableParallelForRestriction] public NativeArray outputColors; + [NativeDisableParallelForRestriction] public NativeArray outputAttributes; + + [NativeDisableParallelForRestriction] public NativeArray dispatchBuffer; + + [ReadOnly] public Oni.SolverParameters parameters; + + public float3 agingOverPopulation; + public int minFluidNeighbors; + public float deltaTime; + public int currentAliveParticles; + + static readonly int4[] offsets = + { + new int4(0, 0, 0, 1), + new int4(1, 0, 0, 1), + new int4(0, 1, 0, 1), + new int4(1, 1, 0, 1), + new int4(0, 0, 1, 1), + new int4(1, 0, 1, 1), + new int4(0, 1, 1, 1), + new int4(1, 1, 1, 1) + }; + + public void Execute(int i) + { + int* dispatch = (int*)dispatchBuffer.GetUnsafePtr(); + int count = Interlocked.Add(ref dispatch[3], -1); + + if (count < inputPositions.Length && inputAttributes[count].x > 0) + { + int aliveCount = Interlocked.Add(ref dispatch[7], 1) - 1; + + float4 attributes = inputAttributes[count]; + float4 packedData = BurstMath.UnpackFloatRGBA(attributes.w); + + int offsetCount = ((int)parameters.mode == 1) ? 4 : 8; + float4 advectedVelocity = float4.zero; + float4 advectedAngVelocity = float4.zero; + float kernelSum = -packedData.w; + uint neighbourCount = 0; + + float4 diffusePos = inputPositions[count]; + + for (int k = 0; k < gridLevels.Length; ++k) + { + int l = gridLevels[k]; + float radius = NativeMultilevelGrid.CellSizeOfLevel(l); + float interactionDist = radius * 0.5f; + + float4 cellCoords = math.floor(diffusePos / radius); + + cellCoords[3] = 0; + if ((int)parameters.mode == 1) + cellCoords[2] = 0; + + float4 posInCell = diffusePos - (cellCoords * radius + new float4(interactionDist)); + int4 quadrant = (int4)math.sign(posInCell); + + quadrant[3] = l; + + for (int o = 0; o < offsetCount; ++o) + { + int cellIndex; + if (grid.TryGetCellIndex((int4)cellCoords + offsets[o] * quadrant, out cellIndex)) + { + var cell = grid.usedCells[cellIndex]; + for (int n = 0; n < cell.Length; ++n) + { + int simplexStart = simplexCounts.GetSimplexStartAndSize(cell[n], out int simplexSize); + + for (int a = 0; a < simplexSize; ++a) + { + int p = simplices[simplexStart + a]; + float4 normal = diffusePos - positions[p]; + + normal[3] = 0; + if ((int)parameters.mode == 1) + normal[2] = 0; + + float d = math.length(normal); + if (d <= interactionDist) + { + float3 radii = fluidMaterial[p].x * (principalRadii[p].xyz / principalRadii[p].x); + + float4 angVel = new float4(math.cross(angularVelocities[p].xyz, normal.xyz), 0); + advectedAngVelocity += angVel * densityKernel.W(d, radii.x) / densityKernel.W(0, radii.x); + + normal.xyz = math.mul(math.conjugate(orientations[p]), normal.xyz) / radii; + d = math.length(normal) * radii.x; + + // scale by volume (* 1 / normalized density) + float w = densityKernel.W(d, radii.x) / fluidData[p].x; + + kernelSum += w; + advectedVelocity += velocities[p] * w; + neighbourCount++; + } + } + } + } + } + } + + float4 forces = float4.zero; + float velocityScale = 1; + float agingScale = 1 + BurstMath.Remap01(currentAliveParticles / (float)inputPositions.Length, agingOverPopulation.x, agingOverPopulation.y) * (agingOverPopulation.z - 1); + + // foam/bubble particle: + if (kernelSum > BurstMath.epsilon && neighbourCount >= minFluidNeighbors) + { + // advection: + forces = packedData.z / deltaTime * (advectedVelocity / (kernelSum + packedData.w) + advectedAngVelocity - inputVelocities[count]); + + // buoyancy: + forces -= new float4(parameters.gravity * parameters.foamGravityScale * inputVelocities[count].w * math.saturate(kernelSum), 0); + + } + else // ballistic: + { + // gravity: + forces += new float4(parameters.gravity * parameters.foamGravityScale, 0); + + // atmospheric drag/aging: + velocityScale = packedData.y; + agingScale *= packedData.x * 50; + } + + // don't change 4th component, as its used to store buoyancy control parameter. + forces[3] = 0; + + // update particle data: + attributes.x -= attributes.y * deltaTime * agingScale; + outputAttributes[aliveCount] = attributes; + outputColors[aliveCount] = inputColors[count]; + + // integrate: + outputVelocities[aliveCount] = (inputVelocities[count] + forces * deltaTime) * velocityScale; + outputPositions[aliveCount] = new float4((inputPositions[count] + outputVelocities[aliveCount] * deltaTime).xyz,neighbourCount); + } + } + } + + [BurstCompile] + unsafe struct CopyJob : IJobParallelForDefer + { + [ReadOnly] public NativeArray inputPositions; + [ReadOnly] public NativeArray inputVelocities; + [ReadOnly] public NativeArray inputColors; + [ReadOnly] public NativeArray inputAttributes; + + [NativeDisableParallelForRestriction] public NativeArray outputPositions; + [NativeDisableParallelForRestriction] public NativeArray outputVelocities; + [NativeDisableParallelForRestriction] public NativeArray outputColors; + [NativeDisableParallelForRestriction] public NativeArray outputAttributes; + + [NativeDisableParallelForRestriction] public NativeArray dispatchBuffer; + + public void Execute(int i) + { + if (i == 0) + { + dispatchBuffer[3] = dispatchBuffer[7]; + dispatchBuffer[7] = 0; + } + + outputPositions[i] = inputPositions[i]; + outputVelocities[i] = inputVelocities[i]; + outputColors[i] = inputColors[i]; + outputAttributes[i] = inputAttributes[i]; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs.meta new file mode 100644 index 000000000..bdd0b48ee --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54f132d8cdea34935be3c33b0d1ca4d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs index 02625fce0..63fdcd543 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs @@ -3,38 +3,49 @@ using Unity.Jobs; using Unity.Collections; using Unity.Mathematics; using Unity.Burst; +using UnityEngine; namespace Obi { [BurstCompile] struct InterpolationJob : IJobParallelFor { - [ReadOnly] public NativeArray startPositions; [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray startPositions; + [ReadOnly] public NativeArray endPositions; [WriteOnly] public NativeArray renderablePositions; - [ReadOnly] public NativeArray startOrientations; [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray startOrientations; + [ReadOnly] public NativeArray endOrientations; [WriteOnly] public NativeArray renderableOrientations; - [ReadOnly] public float deltaTime; - [ReadOnly] public float unsimulatedTime; + [ReadOnly] public NativeArray principalRadii; + [WriteOnly] public NativeArray renderableRadii; + + [ReadOnly] public float blendFactor; [ReadOnly] public Oni.SolverParameters.Interpolation interpolationMode; // The code actually running on the job public void Execute(int i) { - if (interpolationMode == Oni.SolverParameters.Interpolation.Interpolate && deltaTime > 0) + if (interpolationMode == Oni.SolverParameters.Interpolation.Interpolate) { - float alpha = unsimulatedTime / deltaTime; - - renderablePositions[i] = math.lerp(startPositions[i], positions[i], alpha); - renderableOrientations[i] = math.normalize(math.slerp(startOrientations[i], orientations[i], alpha)); + renderablePositions[i] = math.lerp(startPositions[i], endPositions[i], blendFactor); + renderableOrientations[i] = math.normalize(math.slerp(startOrientations[i], endOrientations[i], blendFactor)); + renderableRadii[i] = principalRadii[i]; + } + else if (interpolationMode == Oni.SolverParameters.Interpolation.Extrapolate) + { + renderablePositions[i] = math.lerp(endPositions[i], positions[i], blendFactor); + renderableOrientations[i] = math.normalize(math.slerp(endOrientations[i], orientations[i], blendFactor)); + renderableRadii[i] = principalRadii[i]; } else { - renderablePositions[i] = positions[i]; - renderableOrientations[i] = math.normalize(orientations[i]); + renderablePositions[i] = endPositions[i]; + renderableOrientations[i] = math.normalize(endOrientations[i]); + renderableRadii[i] = principalRadii[i]; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs index 4c204d7b0..106fa3877 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs @@ -14,7 +14,7 @@ namespace Obi { [ReadOnly] public NativeArray activeParticles; [ReadOnly] public NativeArray phases; - [ReadOnly] public NativeArray buoyancies; + [ReadOnly] public NativeArray buoyancies; // linear/position properties: [ReadOnly] public NativeArray externalForces; @@ -48,7 +48,7 @@ namespace Obi // Adjust gravity for buoyant fluid particles: if ((phases[i] & (int)ObiUtils.ParticleFlags.Fluid) != 0) - effectiveGravity *= -buoyancies[i]; + effectiveGravity *= -buoyancies[i].z; // apply external forces and gravity: float4 vel = velocities[i] + (inverseMasses[i] * externalForces[i] + effectiveGravity) * deltaTime; @@ -63,13 +63,13 @@ namespace Obi if (inverseRotationalMasses[i] > 0) { // apply external torques (simplification: we don't use full inertia tensor here) - float4 angularVel = angularVelocities[i] + inverseRotationalMasses[i] * externalTorques[i] * deltaTime; + float3 angularVel = angularVelocities[i].xyz + inverseRotationalMasses[i] * externalTorques[i].xyz * deltaTime; // project angular velocity to 2D plane normal if needed: if (is2D) - angularVel = angularVel.project(new float4(0, 0, 1, 0)); + angularVel = angularVel.project(new float3(0, 0, 1)); - angularVelocities[i] = angularVel; + angularVelocities[i] = new float4(angularVel, angularVelocities[i].w); } // integrate velocities: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateInertiaTensorsJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateInertiaTensorsJob.cs deleted file mode 100644 index 90cfe23db..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateInertiaTensorsJob.cs +++ /dev/null @@ -1,38 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - [BurstCompile] - struct UpdateInertiaTensorsJob : IJobParallelFor - { - [ReadOnly] public NativeArray activeParticles; - - [ReadOnly] public NativeArray inverseMasses; - [ReadOnly] public NativeArray inverseRotationalMasses; - [ReadOnly] public NativeArray principalRadii; - - [NativeDisableParallelForRestriction] - public NativeArray inverseInertiaTensors; - - public void Execute(int index) - { - int i = activeParticles[index]; - - float4 sqrRadii = principalRadii[i] * principalRadii[i]; - - inverseInertiaTensors[i] = 5 * inverseRotationalMasses[i] * new float4( - 1 / math.max(sqrRadii[1] + sqrRadii[2], BurstMath.epsilon), - 1 / math.max(sqrRadii[0] + sqrRadii[2], BurstMath.epsilon), - 1 / math.max(sqrRadii[0] + sqrRadii[1], BurstMath.epsilon), - 0); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs index a9594ef29..5b568c508 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs @@ -1,43 +1,122 @@ #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; using Unity.Jobs; using Unity.Collections; using Unity.Mathematics; using Unity.Burst; -using System; -using System.Collections; +using UnityEngine; namespace Obi { + [BurstCompile] - struct UpdateNormalsJob : IJob + struct ResetNormals : IJobParallelFor { - [ReadOnly] public NativeList deformableTriangles; - [ReadOnly] public NativeArray renderPositions; + [ReadOnly] public NativeArray phases; public NativeArray normals; + [WriteOnly] public NativeArray tangents; - public void Execute() + public void Execute(int i) { - for (int i = 0; i < normals.Length; ++i) - normals[i] = float4.zero; - - // Accumulate normals: - for (int i = 0; i < deformableTriangles.Length; i += 3) + // leave fluid and softbody normals intact. + if ((phases[i] & (int)ObiUtils.ParticleFlags.Fluid) == 0 && normals[i].w >= 0) { - float4 v1 = renderPositions[deformableTriangles[i]]; - float4 v2 = renderPositions[deformableTriangles[i + 1]]; - float4 v3 = renderPositions[deformableTriangles[i + 2]]; + normals[i] = float4.zero; + tangents[i] = float4.zero; + } + } + } - float4 n = new float4(math.cross((v2 - v1).xyz, (v3 - v1).xyz), 0); + [BurstCompile] + unsafe struct UpdateTriangleNormalsJob : IJobParallelFor + { + [ReadOnly] public NativeArray deformableTriangles; + [ReadOnly] public NativeArray deformableTriangleUVs; + [ReadOnly] public NativeArray renderPositions; - normals[deformableTriangles[i]] += n; - normals[deformableTriangles[i + 1]] += n; - normals[deformableTriangles[i + 2]] += n; + [NativeDisableParallelForRestriction] public NativeArray normals; + [NativeDisableParallelForRestriction] public NativeArray tangents; + + public void Execute(int i) + { + int p1 = deformableTriangles[i*3]; + int p2 = deformableTriangles[i*3 + 1]; + int p3 = deformableTriangles[i*3 + 2]; + + float3 m1 = (renderPositions[p2] - renderPositions[p1]).xyz; + float3 m2 = (renderPositions[p3] - renderPositions[p1]).xyz; + + float2 s = deformableTriangleUVs[i * 3 + 1] - deformableTriangleUVs[i * 3]; + float2 t = deformableTriangleUVs[i * 3 + 2] - deformableTriangleUVs[i * 3]; + + float4 normal = new float4(math.cross(m1, m2), 0); + float4 tangent = float4.zero; + + float area = s.x * t.y - t.x * s.y; + + if (math.abs(area) > BurstMath.epsilon) + { + tangent = new float4(t.y * m1.x - s.y * m2.x, + t.y * m1.y - s.y * m2.y, + t.y * m1.z - s.y * m2.z, 0) / area; } - for (int i = 0; i < normals.Length; ++i) + BurstMath.AtomicAdd(normals, p1, normal); + BurstMath.AtomicAdd(normals, p2, normal); + BurstMath.AtomicAdd(normals, p3, normal); + + BurstMath.AtomicAdd(tangents, p1, tangent); + BurstMath.AtomicAdd(tangents, p2, tangent); + BurstMath.AtomicAdd(tangents, p3, tangent); + } + } + + [BurstCompile] + unsafe struct UpdateEdgeNormalsJob : IJobParallelFor + { + [ReadOnly] public NativeArray deformableEdges; + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray wind; + [ReadOnly] public NativeArray renderPositions; + + [NativeDisableParallelForRestriction] public NativeArray normals; + + public void Execute(int i) + { + int p1 = deformableEdges[i * 2]; + int p2 = deformableEdges[i * 2 + 1]; + + float4 edge = renderPositions[p2] - renderPositions[p1]; + float4 avgWind = (velocities[p1] + velocities[p2]) * 0.5f - (wind[p1] + wind[p2]) * 0.5f; + float4 normal = avgWind - math.projectsafe(avgWind, edge); + + BurstMath.AtomicAdd(normals, p1, normal); + BurstMath.AtomicAdd(normals, p2, normal); + } + } + + [BurstCompile] + struct RenderableOrientationFromNormals : IJobParallelFor + { + [ReadOnly] public NativeArray phases; + + public NativeArray normals; + public NativeArray tangents; + + [WriteOnly] public NativeArray renderableOrientations; + + public void Execute(int i) + { + if (((phases[i] & (int)ObiUtils.ParticleFlags.Fluid) == 0 && normals[i].w >= 0) && // not fluid or softbody (no SDF stored) + math.lengthsq(normals[i]) > BurstMath.epsilon && + math.lengthsq(tangents[i]) > BurstMath.epsilon) + { normals[i] = math.normalizesafe(normals[i]); + tangents[i] = math.normalizesafe(tangents[i]); + + // particle orientation from normal/tangent: + renderableOrientations[i] = quaternion.LookRotation(normals[i].xyz, tangents[i].xyz); + } } } } -#endif \ No newline at end of file +#endif diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs new file mode 100644 index 000000000..dd65527ab --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs @@ -0,0 +1,41 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Jobs; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using Unity.Burst; +using System; +using System.Collections; +using System.Threading; + +namespace Obi +{ + [BurstCompile] + unsafe struct UpdateParticleLifetimesJob : IJobParallelFor + { + [ReadOnly] public NativeArray activeParticles; + [NativeDisableParallelForRestriction] public NativeArray life; + + [NativeDisableParallelForRestriction] public NativeArray deadParticles; + [NativeDisableContainerSafetyRestriction] public NativeReference deadParticleCount; + + [ReadOnly] public float dt; + + public void Execute(int i) + { + int p = activeParticles[i]; + + life[p] -= dt; + + if (life[p] <= 0) + { + int* countRef = (int*)deadParticleCount.GetUnsafePtr(); + int count = Interlocked.Increment(ref countRef[0]) - 1; + deadParticles[count] = p; + life[p] = 0; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs.meta new file mode 100644 index 000000000..460f21027 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2ac6f480787440e7bd2610e4545bd9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs index ff7d6590a..9401d9bc9 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs @@ -26,25 +26,42 @@ namespace Obi [ReadOnly] public float velocityScale; [ReadOnly] public float sleepThreshold; + [ReadOnly] public float maxVelocity; + [ReadOnly] public float maxAngularVelocity; // The code actually running on the job public void Execute(int index) { int i = activeParticles[index]; + float4 velocity = velocities[i]; + float4 angVelocity = angularVelocities[i]; + // damp velocities: - velocities[i] *= velocityScale; - angularVelocities[i] *= velocityScale; + velocity *= velocityScale; + angVelocity.xyz *= velocityScale; + + // clamp velocities: + float velMagnitude = math.length(velocity); + float angularVelMagnitude = math.length(angVelocity.xyz); + + if (velMagnitude > BurstMath.epsilon) + velocity *= math.min(maxVelocity, velMagnitude) / velMagnitude; + + if (angularVelMagnitude > BurstMath.epsilon) + angVelocity.xyz *= math.min(maxAngularVelocity, angularVelMagnitude) / angularVelMagnitude; // if the kinetic energy is below the sleep threshold, keep the particle at its previous position. - if (math.lengthsq(velocities[i]) * 0.5f + math.lengthsq(angularVelocities[i]) * 0.5f <= sleepThreshold) + if (velMagnitude * velMagnitude * 0.5f + angularVelMagnitude * angularVelMagnitude * 0.5f <= sleepThreshold) { positions[i] = previousPositions[i]; orientations[i] = previousOrientations[i]; - velocities[i] = float4.zero; - angularVelocities[i] = float4.zero; + velocity = float4.zero; + angVelocity.xyz = float3.zero; } + velocities[i] = velocity; + angularVelocities[i] = angVelocity; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePrincipalAxisJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePrincipalAxisJob.cs deleted file mode 100644 index 09a537194..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePrincipalAxisJob.cs +++ /dev/null @@ -1,50 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - [BurstCompile] - struct UpdatePrincipalAxisJob : IJobParallelFor - { - [ReadOnly] public NativeArray activeParticles; - [ReadOnly] public NativeArray renderableOrientations; - [ReadOnly] public NativeArray phases; - [ReadOnly] public NativeArray principalRadii; - - [NativeDisableParallelForRestriction] - public NativeArray principalAxis; - - public void Execute(int index) - { - int i = activeParticles[index]; - - // fluid particles get their principal axes from the neighborhood matrix, so skip them. - if ((phases[i] & (int)ObiUtils.ParticleFlags.Fluid) == 0) - { - int i3 = i * 3; - float4x4 rot = renderableOrientations[i].toMatrix(); - - // set axis direction: - float4 pAxis1 = rot.c0; - float4 pAxis2 = rot.c1; - float4 pAxis3 = rot.c2; - - // set axis length: - pAxis1[3] = principalRadii[i][0]; - pAxis2[3] = principalRadii[i][1]; - pAxis3[3] = principalRadii[i][2]; - - principalAxis[i3] = pAxis1; - principalAxis[i3+1] = pAxis2; - principalAxis[i3+2] = pAxis3; - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePrincipalAxisJob.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePrincipalAxisJob.cs.meta deleted file mode 100644 index 711a4fc8c..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePrincipalAxisJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 22028834877974573b3b29b8a2b8f6cc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs index 1d6159fca..32a189640 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs @@ -24,7 +24,7 @@ namespace Obi [ReadOnly] public NativeArray inverseRotationalMasses; [ReadOnly] public NativeArray previousOrientations; [NativeDisableParallelForRestriction] public NativeArray orientations; - [NativeDisableParallelForRestriction] [WriteOnly] public NativeArray angularVelocities; + [NativeDisableParallelForRestriction] public NativeArray angularVelocities; [ReadOnly] public float deltaTime; [ReadOnly] public bool is2D; @@ -49,7 +49,7 @@ namespace Obi velocities[i] = float4.zero; if (inverseRotationalMasses[i] > 0) - angularVelocities[i] = BurstIntegration.DifferentiateAngular(orientations[i], previousOrientations[i], deltaTime); + angularVelocities[i] = new float4(BurstIntegration.DifferentiateAngular(orientations[i], previousOrientations[i], deltaTime).xyz, angularVelocities[i].w); else angularVelocities[i] = float4.zero; } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute.meta new file mode 100644 index 000000000..18db0ca74 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4e491460f88fa4ee49cdb796a0b8a923 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions.meta new file mode 100644 index 000000000..bd5f862e3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1816ef976b3b64da7bf7a71a91e97d0f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs new file mode 100644 index 000000000..c79f40e3c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeBox + { + private ComputeShader shader; + private int kernel; + + public ComputeBox() + { + shader = GameObject.Instantiate(Resources.Load("Compute/BoxShape")); + kernel = shader.FindKernel("GenerateContacts"); + } + + public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", world.transformsBuffer); + shader.SetBuffer(kernel, "shapes", world.shapesBuffer); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.Box); + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs.meta new file mode 100644 index 000000000..d5d5809e7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 669f5cb47192b4a08864250bd4ba3872 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs new file mode 100644 index 000000000..576fe40e6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeCapsule + { + private ComputeShader shader; + private int kernel; + + public ComputeCapsule() + { + shader = GameObject.Instantiate(Resources.Load("Compute/CapsuleShape")); + kernel = shader.FindKernel("GenerateContacts"); + } + + public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", world.transformsBuffer); + shader.SetBuffer(kernel, "shapes", world.shapesBuffer); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.Capsule); + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs.meta new file mode 100644 index 000000000..13e33af82 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8577fc7696f14a5bad666ce7bdbd424 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs new file mode 100644 index 000000000..96b57bd12 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs @@ -0,0 +1,479 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + public class ComputeColliderWorld : MonoBehaviour, IColliderWorldImpl + { + public int referenceCount { get; private set; } = 0; + + public int colliderCount { get; private set; } = 0; + public int rigidbodyCount { get; private set; } = -1; // make sure the buffer is created even if there's 0. + public int forceZoneCount { get; private set; } = -1; // make sure the buffer is created even if there's 0. + public int materialCount { get; private set; } = -1; // make sure the buffer is created even if there's 0. + + public int triangleMeshCount { get; private set; } = -1; + public int edgeMeshCount { get; private set; } = -1; + public int distanceFieldCount { get; private set; } = -1; + public int heightFieldCount { get; private set; } = -1; + + private ComputePrefixSum prefixSum; + + private ComputeShader gridShader; + private int buildKernel; + private int gridPopulationKernel; + private int sortKernel; + private int contactsKernel; + private int clearKernel; + private int prefixSumPairsKernel; + private int sortPairsKernel; + private int applyForceZonesKernel; + private int writeForceZoneResultsKernel; + + public GraphicsBuffer materialsBuffer; + public GraphicsBuffer aabbsBuffer; + public GraphicsBuffer transformsBuffer; + public GraphicsBuffer shapesBuffer; + public GraphicsBuffer forceZonesBuffer; + public GraphicsBuffer rigidbodiesBuffer; + public GraphicsBuffer sortedColliderIndicesBuffer; + + public GraphicsBuffer cellIndicesBuffer; //for each collider, the IDs of the 8 cells it covers. + public GraphicsBuffer cellOffsetsBuffer; //for each cell, start offset in the sorted span indices buffer. + + public GraphicsBuffer cellCountsBuffer; // for each cell, how many colliders in it. + public GraphicsBuffer offsetInCells; // for each collider, its offset in each of the 8 cells. + public GraphicsBuffer levelPopulation; // buffer storing amount of entries in each grid level + + private GraphicsBuffer colliderTypeCounts; // amount of contacts against each collider type. + public GraphicsBuffer unsortedContactPairs; // unsorted contact pairs. + public GraphicsBuffer contactPairs; // list of contact pairs. + public GraphicsBuffer contactOffsetsPerType; // offset in the contact pairs array for each collider type. + + public GraphicsBuffer dispatchBuffer; // dispatch info for iterating trough contacts. + + public GraphicsBuffer heightFieldHeaders; + public GraphicsBuffer heightFieldSamples; + + public GraphicsBuffer distanceFieldHeaders; + public GraphicsBuffer dfNodes; + + public GraphicsBuffer edgeMeshHeaders; + public GraphicsBuffer edgeBihNodes; + public GraphicsBuffer edges; + public GraphicsBuffer edgeVertices; + + public GraphicsBuffer triangleMeshHeaders; + public GraphicsBuffer bihNodes; + public GraphicsBuffer triangles; + public GraphicsBuffer vertices; + + public const int maxContacts = 512 * 512; + public const int maxCells = 512 * 512; + public const int cellsPerCollider = 8; + private const int maxGridLevels = 24; + private uint[] colliderCountClear = new uint[Oni.ColliderShapeTypeCount]; + private uint[] dispatchClear = { 0, 1, 1, 0, // contacts + 0, 1, 1, 0, // pairs + 0, 1, 1, 0, // spheres + 0, 1, 1, 0, // boxes + 0, 1, 1, 0, // capsules + 0, 1, 1, 0, // heighmaps + 0, 1, 1, 0, // tri mesh + 0, 1, 1, 0, // edge mesh + 0, 1, 1, 0, // distance field + }; + + private ComputeSphere spheres; + private ComputeBox boxes; + private ComputeCapsule capsules; + private ComputeTriangleMesh triangleMeshes; + private ComputeEdgeMesh edgeMeshes; + private ComputeDistanceField distanceFields; + private ComputeHeightField heightFields; + + // for each particle in parallel: + // determine its cell span in the collider grid. + // iterate over all of them, generating contacts. + + // we just need to get collider indices from each cell. + // sort by cell, store offset for each cell. + + // each collider keeps track of 8 uints: IDs of the cells it overlaps. unused are invalid. + // each collider must know offset within each cell: another 8 units per collider. + // we can keep using the same system as we did with particles. + + + public void Awake() + { + ObiColliderWorld.GetInstance().RegisterImplementation(this); + + prefixSum = new ComputePrefixSum(maxCells); + + gridShader = Resources.Load("Compute/ColliderGrid"); + buildKernel = gridShader.FindKernel("BuildUnsortedList"); + gridPopulationKernel = gridShader.FindKernel("FindPopulatedLevels"); + sortKernel = gridShader.FindKernel("SortList"); + contactsKernel = gridShader.FindKernel("BuildContactList"); + clearKernel = gridShader.FindKernel("Clear"); + prefixSumPairsKernel = gridShader.FindKernel("PrefixSumColliderCounts"); + sortPairsKernel = gridShader.FindKernel("SortContactPairs"); + applyForceZonesKernel = gridShader.FindKernel("ApplyForceZones"); + writeForceZoneResultsKernel = gridShader.FindKernel("WriteForceZoneResults"); + + gridShader.SetInt("shapeTypeCount", Oni.ColliderShapeTypeCount); + gridShader.SetInt("maxContacts", maxContacts); + gridShader.SetInt("colliderCount", colliderCount); + gridShader.SetInt("cellsPerCollider", cellsPerCollider); + gridShader.SetInt("maxCells", maxCells); + + cellOffsetsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxCells, 4); + cellCountsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxCells, 4); + + // first entry is amount of non-empty levels in the grid. + // next maxGridLevels entries hold the indices of the non-empty levels. + // final maxGridLevels entries hold the population of each level. + levelPopulation = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxGridLevels + 1, 4); + + colliderTypeCounts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, Oni.ColliderShapeTypeCount, 4); + contactOffsetsPerType = new GraphicsBuffer(GraphicsBuffer.Target.Structured, Oni.ColliderShapeTypeCount + 1, 4); + unsortedContactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxContacts, 8); + + contactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxContacts, 8); + dispatchBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, dispatchClear.Length, sizeof(uint)); + + spheres = new ComputeSphere(); + boxes = new ComputeBox(); + capsules = new ComputeCapsule(); + triangleMeshes = new ComputeTriangleMesh(); + edgeMeshes = new ComputeEdgeMesh(); + distanceFields = new ComputeDistanceField(); + heightFields = new ComputeHeightField(); + } + + public void OnDestroy() + { + ObiColliderWorld.GetInstance().UnregisterImplementation(this); + + prefixSum.Dispose(); + + cellOffsetsBuffer.Dispose(); + cellCountsBuffer.Dispose(); + levelPopulation.Dispose(); + + contactPairs.Dispose(); + dispatchBuffer.Dispose(); + + colliderTypeCounts.Dispose(); + contactOffsetsPerType.Dispose(); + unsortedContactPairs.Dispose(); + + if (cellIndicesBuffer != null) + cellIndicesBuffer.Dispose(); + if (offsetInCells != null) + offsetInCells.Dispose(); + if (sortedColliderIndicesBuffer != null) + sortedColliderIndicesBuffer.Dispose(); + } + + public void IncreaseReferenceCount() + { + referenceCount++; + } + public void DecreaseReferenceCount() + { + if (--referenceCount <= 0 && gameObject != null) + DestroyImmediate(gameObject); + } + + public void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms) + { + if (colliderCount != shapes.count || aabbsBuffer == null || !aabbsBuffer.IsValid()) + aabbsBuffer = bounds.AsComputeBuffer(); + else + bounds.Upload(); + + if (colliderCount != shapes.count || shapesBuffer == null || !shapesBuffer.IsValid()) + shapesBuffer = shapes.AsComputeBuffer(); + else + shapes.Upload(); + + if (colliderCount != shapes.count || transformsBuffer == null || !transformsBuffer.IsValid()) + transformsBuffer = transforms.AsComputeBuffer(); + else + transforms.Upload(); + + // Only update in case the amount of colliders has changed: + if (colliderCount != shapes.count) + { + colliderCount = shapes.count; + gridShader.SetInt("colliderCount", colliderCount); + + if (cellIndicesBuffer != null) + { + cellIndicesBuffer.Release(); + cellIndicesBuffer = null; + } + if (offsetInCells != null) + { + offsetInCells.Release(); + offsetInCells = null; + } + if (sortedColliderIndicesBuffer != null) + { + sortedColliderIndicesBuffer.Release(); + sortedColliderIndicesBuffer = null; + } + + if (colliderCount > 0) + { + cellIndicesBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, colliderCount * cellsPerCollider, 4); + offsetInCells = new GraphicsBuffer(GraphicsBuffer.Target.Structured, colliderCount * cellsPerCollider, 4); + sortedColliderIndicesBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, colliderCount * cellsPerCollider, 4); + } + } + } + + public void SetForceZones(ObiNativeForceZoneList forceZones) + { + // Changing the count of a NativeList should not invalidate compute buffer. Only need to invalidate if *capacity* changes, it's up to the user to + // regenerate the compute buffer in case it is needed, or Uplodad() the new data in case it is not (because our compute buffer maps full capacity, instead of only up to count) + if (forceZoneCount != forceZones.count || forceZonesBuffer == null || !forceZonesBuffer.IsValid()) + { + forceZoneCount = forceZones.count; + forceZonesBuffer = forceZones.SafeAsComputeBuffer(); + } + else + forceZones.Upload(); + } + + public void SetRigidbodies(ObiNativeRigidbodyList rigidbody) + { + if (rigidbodyCount != rigidbody.count || rigidbodiesBuffer == null || !rigidbodiesBuffer.IsValid()) + { + rigidbodyCount = rigidbody.count; + rigidbodiesBuffer = rigidbody.SafeAsComputeBuffer(); + } + else + rigidbody.Upload(); + } + + public void SetCollisionMaterials(ObiNativeCollisionMaterialList materials) + { + if (materialCount != materials.count || materialsBuffer == null || !materialsBuffer.IsValid()) + { + materialCount = materials.count; + materialsBuffer = materials.SafeAsComputeBuffer(); + } + else + materials.Upload(); + } + + public void SetTriangleMeshData(ObiNativeTriangleMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeTriangleList triangles, ObiNativeVector3List vertices) + { + if (triangleMeshCount != headers.count || triangleMeshHeaders == null || !triangleMeshHeaders.IsValid()) + { + triangleMeshCount = headers.count; + triangleMeshHeaders = headers.SafeAsComputeBuffer(); + bihNodes = nodes.SafeAsComputeBuffer(); + this.triangles = triangles.SafeAsComputeBuffer(); + this.vertices = vertices.SafeAsComputeBuffer(); + } + } + + public void SetEdgeMeshData(ObiNativeEdgeMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeEdgeList edges, ObiNativeVector2List vertices) + { + if (edgeMeshCount != headers.count || edgeMeshHeaders == null || !edgeMeshHeaders.IsValid()) + { + edgeMeshCount = headers.count; + edgeMeshHeaders = headers.SafeAsComputeBuffer(); + edgeBihNodes = nodes.SafeAsComputeBuffer(); + this.edges = edges.SafeAsComputeBuffer(); + edgeVertices = vertices.SafeAsComputeBuffer(); + } + } + + public void SetDistanceFieldData(ObiNativeDistanceFieldHeaderList headers, ObiNativeDFNodeList nodes) + { + if (distanceFieldCount != headers.count || distanceFieldHeaders == null || !distanceFieldHeaders.IsValid()) + { + distanceFieldCount = headers.count; + distanceFieldHeaders = headers.SafeAsComputeBuffer(); + dfNodes = nodes.SafeAsComputeBuffer(); + } + } + + public void SetHeightFieldData(ObiNativeHeightFieldHeaderList headers, ObiNativeFloatList samples) + { + if (heightFieldCount != headers.count || heightFieldHeaders == null || !heightFieldHeaders.IsValid()) + { + heightFieldCount = headers.count; + heightFieldHeaders = headers.SafeAsComputeBuffer(); + heightFieldSamples = samples.SafeAsComputeBuffer(); + } + } + + public void UpdateWorld(float deltaTime) + { + if (colliderCount > 0) + { + + int colliderThreadGroups = ComputeMath.ThreadGroupCount(colliderCount, 128); + int capacityThreadGroups = ComputeMath.ThreadGroupCount(colliderCount * 8, 128); + int cellThreadGroups = ComputeMath.ThreadGroupCount(maxCells, 128); + + // clear grid: + gridShader.SetBuffer(clearKernel, "cellOffsets", cellOffsetsBuffer); + gridShader.SetBuffer(clearKernel, "cellIndices", cellIndicesBuffer); + gridShader.SetBuffer(clearKernel, "cellCounts", cellCountsBuffer); + gridShader.SetBuffer(clearKernel, "levelPopulation", levelPopulation); + gridShader.Dispatch(clearKernel, Mathf.Max(cellThreadGroups, capacityThreadGroups), 1, 1); + + // build cell list: + gridShader.SetBuffer(buildKernel, "aabbs", aabbsBuffer); + gridShader.SetBuffer(buildKernel, "shapes", shapesBuffer); + gridShader.SetBuffer(buildKernel, "rigidbodies", rigidbodiesBuffer); + gridShader.SetBuffer(buildKernel, "collisionMaterials", materialsBuffer); + gridShader.SetBuffer(buildKernel, "cellIndices", cellIndicesBuffer); + gridShader.SetBuffer(buildKernel, "cellCounts", cellCountsBuffer); + gridShader.SetBuffer(buildKernel, "offsetInCells", offsetInCells); + gridShader.SetBuffer(buildKernel, "levelPopulation", levelPopulation); + gridShader.Dispatch(buildKernel, colliderThreadGroups, 1, 1); + + // find populated grid levels: + gridShader.SetBuffer(gridPopulationKernel, "levelPopulation", levelPopulation); + gridShader.Dispatch(gridPopulationKernel, 1, 1, 1); + + // prefix sum: + prefixSum.Sum(cellCountsBuffer, cellOffsetsBuffer); + + // sort particle indices: + gridShader.SetBuffer(sortKernel, "sortedColliderIndices", sortedColliderIndicesBuffer); + gridShader.SetBuffer(sortKernel, "offsetInCells", offsetInCells); + gridShader.SetBuffer(sortKernel, "cellIndices", cellIndicesBuffer); + gridShader.SetBuffer(sortKernel, "cellOffsets", cellOffsetsBuffer); + gridShader.Dispatch(sortKernel, capacityThreadGroups, 1, 1); + } + } + + public void ApplyForceZones(ComputeSolverImpl solver, float deltaTime) + { + if (colliderCount > 0) + { + if (solver.activeParticlesBuffer != null && solver.simplices != null && forceZonesBuffer != null) + { + gridShader.SetInt("pointCount", solver.simplexCounts.pointCount); + gridShader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + gridShader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + gridShader.SetFloat("deltaTime", deltaTime); + + gridShader.SetBuffer(applyForceZonesKernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "dispatchBuffer", dispatchBuffer); + + gridShader.SetBuffer(applyForceZonesKernel, "simplices", solver.simplices); + gridShader.SetBuffer(applyForceZonesKernel, "positions", solver.positionsBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "velocities", solver.velocitiesBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "colors", solver.colorsBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "invMasses", solver.invMassesBuffer); + + gridShader.SetBuffer(applyForceZonesKernel, "transforms", transformsBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "shapes", shapesBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "forceZones", forceZonesBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "deltasAsInt", solver.positionDeltasIntBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "orientationDeltasAsInt", solver.orientationDeltasIntBuffer); + gridShader.SetBuffer(applyForceZonesKernel, "worldToSolver", solver.worldToSolverBuffer); + + gridShader.DispatchIndirect(applyForceZonesKernel, dispatchBuffer); + + int threadGroups = ComputeMath.ThreadGroupCount(solver.activeParticleCount, 128); + gridShader.SetInt("particleCount", solver.activeParticleCount); + + gridShader.SetBuffer(writeForceZoneResultsKernel, "activeParticles", solver.activeParticlesBuffer); + gridShader.SetBuffer(writeForceZoneResultsKernel, "externalForces", solver.externalForcesBuffer); + gridShader.SetBuffer(writeForceZoneResultsKernel, "life", solver.lifeBuffer); + gridShader.SetBuffer(writeForceZoneResultsKernel, "wind", solver.windBuffer); + gridShader.SetBuffer(writeForceZoneResultsKernel, "deltasAsInt", solver.positionDeltasIntBuffer); + gridShader.SetBuffer(writeForceZoneResultsKernel, "orientationDeltasAsInt", solver.orientationDeltasIntBuffer); + + gridShader.Dispatch(writeForceZoneResultsKernel, threadGroups, 1, 1); + } + } + } + + public void GenerateContacts(ComputeSolverImpl solver, float deltaTime) + { + if (colliderCount > 0) + { + int particleThreadGroups = ComputeMath.ThreadGroupCount(solver.simplexCounts.simplexCount, 128); + + colliderTypeCounts.SetData(colliderCountClear); + dispatchBuffer.SetData(dispatchClear); + + if (solver.activeParticlesBuffer != null && solver.simplices != null) + { + solver.abstraction.colliderContacts.computeBuffer.SetCounterValue(0); + + gridShader.SetInt("pointCount", solver.simplexCounts.pointCount); + gridShader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + gridShader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + + gridShader.SetFloat("colliderCCD", solver.abstraction.parameters.colliderCCD); + gridShader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + gridShader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + gridShader.SetInt("mode", (int)solver.abstraction.parameters.mode); + gridShader.SetFloat("deltaTime", deltaTime); + + gridShader.SetBuffer(contactsKernel, "simplices", solver.simplices); + gridShader.SetBuffer(contactsKernel, "simplexBounds", solver.simplexBounds); + gridShader.SetBuffer(contactsKernel, "positions", solver.positionsBuffer); + gridShader.SetBuffer(contactsKernel, "orientations", solver.orientationsBuffer); + gridShader.SetBuffer(contactsKernel, "principalRadii", solver.principalRadiiBuffer); + gridShader.SetBuffer(contactsKernel, "filters", solver.filtersBuffer); + gridShader.SetBuffer(contactsKernel, "sortedColliderIndices", sortedColliderIndicesBuffer); + gridShader.SetBuffer(contactsKernel, "aabbs", aabbsBuffer); + gridShader.SetBuffer(contactsKernel, "transforms", transformsBuffer); + gridShader.SetBuffer(contactsKernel, "shapes", shapesBuffer); + gridShader.SetBuffer(contactsKernel, "rigidbodies", rigidbodiesBuffer); + gridShader.SetBuffer(contactsKernel, "collisionMaterials", materialsBuffer); + gridShader.SetBuffer(contactsKernel, "collisionMaterialIndices", solver.collisionMaterialIndexBuffer); + gridShader.SetBuffer(contactsKernel, "cellIndices", cellIndicesBuffer); + gridShader.SetBuffer(contactsKernel, "cellOffsets", cellOffsetsBuffer); + gridShader.SetBuffer(contactsKernel, "cellCounts", cellCountsBuffer); + gridShader.SetBuffer(contactsKernel, "levelPopulation", levelPopulation); + + gridShader.SetBuffer(contactsKernel, "solverToWorld", solver.solverToWorldBuffer); + gridShader.SetBuffer(contactsKernel, "colliderTypeCounts", colliderTypeCounts); + gridShader.SetBuffer(contactsKernel, "unsortedContactPairs", unsortedContactPairs); + gridShader.SetBuffer(contactsKernel, "dispatchBuffer", dispatchBuffer); + + gridShader.Dispatch(contactsKernel, particleThreadGroups, 1, 1); + + gridShader.SetBuffer(prefixSumPairsKernel, "colliderTypeCounts", colliderTypeCounts); + gridShader.SetBuffer(prefixSumPairsKernel, "contactOffsetsPerType", contactOffsetsPerType); + gridShader.SetBuffer(prefixSumPairsKernel, "dispatchBuffer", dispatchBuffer); + + gridShader.Dispatch(prefixSumPairsKernel, 1, 1, 1); + + gridShader.SetBuffer(sortPairsKernel, "shapes", shapesBuffer); + gridShader.SetBuffer(sortPairsKernel, "unsortedContactPairs", unsortedContactPairs); + gridShader.SetBuffer(sortPairsKernel, "contactPairs", contactPairs); + gridShader.SetBuffer(sortPairsKernel, "colliderTypeCounts", colliderTypeCounts); + gridShader.SetBuffer(sortPairsKernel, "contactOffsetsPerType", contactOffsetsPerType); + gridShader.SetBuffer(sortPairsKernel, "dispatchBuffer", dispatchBuffer); + + gridShader.DispatchIndirect(sortPairsKernel, dispatchBuffer, 16); + + boxes.GenerateContacts(solver, this); + spheres.GenerateContacts(solver, this); + capsules.GenerateContacts(solver, this); + triangleMeshes.GenerateContacts(solver, this, deltaTime); + edgeMeshes.GenerateContacts(solver, this, deltaTime); + distanceFields.GenerateContacts(solver, this, deltaTime); + heightFields.GenerateContacts(solver, this, deltaTime); + } + } + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs.meta new file mode 100644 index 000000000..54b57c22d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce0ddc77554954cd78643d83b0505396 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs new file mode 100644 index 000000000..2c6214afa --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs @@ -0,0 +1,50 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeDistanceField + { + private ComputeShader shader; + private int kernel; + + public ComputeDistanceField() + { + shader = GameObject.Instantiate(Resources.Load("Compute/DistanceFieldShape")); + kernel = shader.FindKernel("GenerateContacts"); + } + + public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world, float deltaTime) + { + if (world.distanceFieldHeaders != null) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + shader.SetFloat("deltaTime", deltaTime); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", world.transformsBuffer); + shader.SetBuffer(kernel, "shapes", world.shapesBuffer); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + + shader.SetBuffer(kernel, "distanceFieldHeaders", world.distanceFieldHeaders); + shader.SetBuffer(kernel, "dfNodes", world.dfNodes); + + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.SignedDistanceField); + } + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs.meta new file mode 100644 index 000000000..578a29d2d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e43826d84a91b447c88f6d65a6e329ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs new file mode 100644 index 000000000..c36045c54 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeEdgeMesh + { + private ComputeShader shader; + private int kernel; + + public ComputeEdgeMesh() + { + shader = GameObject.Instantiate(Resources.Load("Compute/EdgeMeshShape")); + kernel = shader.FindKernel("GenerateContacts"); + } + + public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world, float deltaTime) + { + if (world.edgeMeshHeaders != null) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + shader.SetFloat("deltaTime", deltaTime); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "simplexBounds", solver.simplexBounds); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", world.transformsBuffer); + shader.SetBuffer(kernel, "shapes", world.shapesBuffer); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + + shader.SetBuffer(kernel, "edgeMeshHeaders", world.edgeMeshHeaders); + shader.SetBuffer(kernel, "edgeBihNodes", world.edgeBihNodes); + shader.SetBuffer(kernel, "edges", world.edges); + shader.SetBuffer(kernel, "edgeVertices", world.edgeVertices); + + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.EdgeMesh); + } + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs.meta new file mode 100644 index 000000000..a2552e67d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6191dad6170694a7c8f9eca0cd733e7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs new file mode 100644 index 000000000..2e8cd1442 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeHeightField + { + private ComputeShader shader; + private int kernel; + + public ComputeHeightField() + { + shader = GameObject.Instantiate(Resources.Load("Compute/HeightfieldShape")); + kernel = shader.FindKernel("GenerateContacts"); + } + + public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world, float deltaTime) + { + if (world.heightFieldHeaders != null) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + shader.SetFloat("deltaTime", deltaTime); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "simplexBounds", solver.simplexBounds); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", world.transformsBuffer); + shader.SetBuffer(kernel, "shapes", world.shapesBuffer); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + + shader.SetBuffer(kernel, "heightFieldHeaders", world.heightFieldHeaders); + shader.SetBuffer(kernel, "heightFieldSamples", world.heightFieldSamples); + + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.Heightmap); + } + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs.meta new file mode 100644 index 000000000..f97c873ae --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c209374faec0f47adacedb911e8582fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs new file mode 100644 index 000000000..aa4a272ae --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeSphere + { + private ComputeShader shader; + private int kernel; + + public ComputeSphere() + { + shader = GameObject.Instantiate(Resources.Load("Compute/SphereShape")); + kernel = shader.FindKernel("GenerateContacts"); + } + + public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", world.transformsBuffer); + shader.SetBuffer(kernel, "shapes", world.shapesBuffer); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.Sphere); + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs.meta new file mode 100644 index 000000000..3a907d4a4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8994093c1331f405b92c10a6401791d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs new file mode 100644 index 000000000..5dd29a772 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeTriangleMesh + { + private ComputeShader shader; + private int kernel; + + public ComputeTriangleMesh() + { + shader = GameObject.Instantiate(Resources.Load("Compute/TriangleMeshShape")); + kernel = shader.FindKernel("GenerateContacts"); + } + + public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world, float deltaTime) + { + if (world.triangleMeshHeaders != null) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + shader.SetFloat("deltaTime", deltaTime); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "simplexBounds", solver.simplexBounds); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", world.transformsBuffer); + shader.SetBuffer(kernel, "shapes", world.shapesBuffer); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + + shader.SetBuffer(kernel, "triangleMeshHeaders", world.triangleMeshHeaders); + shader.SetBuffer(kernel, "bihNodes", world.bihNodes); + shader.SetBuffer(kernel, "triangles", world.triangles); + shader.SetBuffer(kernel, "vertices", world.vertices); + + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.TriangleMesh); + } + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs.meta new file mode 100644 index 000000000..5de323c83 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f52cda7e406964ef4bf980e6ff1f91ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs new file mode 100644 index 000000000..2f93cc574 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs @@ -0,0 +1,245 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + + public class SpatialQueries + { + private ComputePrefixSum prefixSum; + + private ComputeShader gridShader; + private int buildKernel; + private int gridPopulationKernel; + private int sortKernel; + private int contactsKernel; + private int clearKernel; + private int prefixSumPairsKernel; + private int sortPairsKernel; + + public GraphicsBuffer sortedShapeIndicesBuffer; + + public GraphicsBuffer cellIndicesBuffer; //for each collider, the IDs of the 8 cells it covers. + public GraphicsBuffer cellOffsetsBuffer; //for each cell, start offset in the sorted span indices buffer. + + public GraphicsBuffer cellCountsBuffer; // for each cell, how many colliders in it. + public GraphicsBuffer offsetInCells; // for each collider, its offset in each of the 8 cells. + public GraphicsBuffer levelPopulation; // buffer storing the lowest and highest populated level. + + private GraphicsBuffer queryTypeCounts; // amount of contacts against each collider type. + public GraphicsBuffer unsortedContactPairs; // unsorted contact pairs. + public GraphicsBuffer contactPairs; // list of contact pairs. + public GraphicsBuffer contactOffsetsPerType; // offset in the contact pairs array for each collider type. + + public GraphicsBuffer dispatchBuffer; // dispatch info for iterating trough contacts. + + private const int maxCells = 512 * 512; + private const int cellsPerShape = 8; + private const int maxGridLevels = 24; + private uint[] queryCountClear = new uint[Oni.QueryTypeCount]; + private uint[] dispatchClear = { 0, 1, 1, 0, // contacts + 0, 1, 1, 0, // pairs + 0, 1, 1, 0, // spheres + 0, 1, 1, 0, // boxes + 0, 1, 1, 0 // rays + }; + + private ComputeSphereQuery spheres; + private ComputeBoxQuery boxes; + private ComputeRayQuery rays; + + public SpatialQueries(uint capacity) + { + gridShader = Resources.Load("Compute/SpatialQueries"); + buildKernel = gridShader.FindKernel("BuildUnsortedList"); + gridPopulationKernel = gridShader.FindKernel("FindPopulatedLevels"); + sortKernel = gridShader.FindKernel("SortList"); + contactsKernel = gridShader.FindKernel("BuildContactList"); + clearKernel = gridShader.FindKernel("Clear"); + prefixSumPairsKernel = gridShader.FindKernel("PrefixSumColliderCounts"); + sortPairsKernel = gridShader.FindKernel("SortContactPairs"); + + gridShader.SetInt("shapeTypeCount", Oni.QueryTypeCount); + gridShader.SetInt("cellsPerShape", cellsPerShape); + gridShader.SetInt("maxCells", (int)maxCells); + + cellOffsetsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxCells, 4); + cellCountsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxCells, 4); + levelPopulation = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxGridLevels + 1, 4); + dispatchBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, dispatchClear.Length, sizeof(uint)); + + queryTypeCounts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, Oni.QueryTypeCount, 4); + contactOffsetsPerType = new GraphicsBuffer(GraphicsBuffer.Target.Structured, Oni.QueryTypeCount + 1, 4); + + prefixSum = new ComputePrefixSum(maxCells); + spheres = new ComputeSphereQuery(); + boxes = new ComputeBoxQuery(); + rays = new ComputeRayQuery(); + + SetCapacity(capacity); + } + + public void Dispose() + { + prefixSum?.Dispose(); + + cellOffsetsBuffer?.Dispose(); + cellCountsBuffer?.Dispose(); + levelPopulation?.Dispose(); + dispatchBuffer?.Dispose(); + + queryTypeCounts?.Dispose(); + contactOffsetsPerType?.Dispose(); + + DisposeOfResultsData(); + DisposeOfQueryData(); + } + + private void DisposeOfResultsData() + { + contactPairs?.Dispose(); + unsortedContactPairs?.Dispose(); + } + + private void DisposeOfQueryData() + { + cellIndicesBuffer?.Dispose(); + offsetInCells?.Dispose(); + sortedShapeIndicesBuffer?.Dispose(); + } + + private void SetCapacity(uint capacity) + { + DisposeOfResultsData(); + + gridShader.SetInt("maxResults", (int)capacity); + + if (capacity > 0) + { + unsortedContactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)capacity, 8); + contactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)capacity, 8); + } + } + + public void SpatialQuery(ComputeSolverImpl solver, + GraphicsBuffer shapes, + GraphicsBuffer transforms, + GraphicsBuffer results) + { + results.SetCounterValue(0); + + if (solver.activeParticlesBuffer == null || solver.simplices == null) + return; + + // If the maximum amount of query results has changed, set capacity: + if (contactPairs == null || !contactPairs.IsValid() || contactPairs.count != solver.abstraction.maxQueryResults) + SetCapacity(solver.abstraction.maxQueryResults); + + // In case we still have zero capacity, just bail out. + if (contactPairs == null || !contactPairs.IsValid()) + return; + + // Check whether we need to reallocate space for queries: + if (cellIndicesBuffer == null || !cellIndicesBuffer.IsValid() || shapes.count * cellsPerShape >= cellIndicesBuffer.count) + { + DisposeOfQueryData(); + + cellIndicesBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, shapes.count * cellsPerShape * 2, 4); + offsetInCells = new GraphicsBuffer(GraphicsBuffer.Target.Structured, shapes.count * cellsPerShape * 2, 4); + sortedShapeIndicesBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, shapes.count * cellsPerShape * 2, 4); + } + + gridShader.SetInt("queryCount", shapes.count); + + int particleThreadGroups = ComputeMath.ThreadGroupCount(solver.simplexCounts.simplexCount, 128); + int shapeThreadGroups = ComputeMath.ThreadGroupCount(shapes.count, 128); + int capacityThreadGroups = ComputeMath.ThreadGroupCount(shapes.count * 8, 128); + int cellThreadGroups = ComputeMath.ThreadGroupCount(maxCells, 128); + + queryTypeCounts.SetData(queryCountClear); + dispatchBuffer.SetData(dispatchClear); + + // clear grid: + gridShader.SetBuffer(clearKernel, "cellOffsets", cellOffsetsBuffer); + gridShader.SetBuffer(clearKernel, "cellIndices", cellIndicesBuffer); + gridShader.SetBuffer(clearKernel, "cellCounts", cellCountsBuffer); + gridShader.SetBuffer(clearKernel, "levelPopulation", levelPopulation); + gridShader.Dispatch(clearKernel, Mathf.Max(cellThreadGroups, capacityThreadGroups), 1, 1); + + // build cell list: + gridShader.SetBuffer(buildKernel, "shapes", shapes); + gridShader.SetBuffer(buildKernel, "transforms", transforms); + gridShader.SetBuffer(buildKernel, "cellIndices", cellIndicesBuffer); + gridShader.SetBuffer(buildKernel, "cellCounts", cellCountsBuffer); + gridShader.SetBuffer(buildKernel, "offsetInCells", offsetInCells); + gridShader.SetBuffer(buildKernel, "levelPopulation", levelPopulation); + gridShader.SetBuffer(buildKernel, "worldToSolver", solver.worldToSolverBuffer); + gridShader.Dispatch(buildKernel, shapeThreadGroups, 1, 1); + + // find populated grid levels: + gridShader.SetBuffer(gridPopulationKernel, "levelPopulation", levelPopulation); + gridShader.Dispatch(gridPopulationKernel, 1, 1, 1); + + // prefix sum: + prefixSum.Sum(cellCountsBuffer, cellOffsetsBuffer); + + // sort query indices: + gridShader.SetBuffer(sortKernel, "sortedColliderIndices", sortedShapeIndicesBuffer); + gridShader.SetBuffer(sortKernel, "offsetInCells", offsetInCells); + gridShader.SetBuffer(sortKernel, "cellIndices", cellIndicesBuffer); + gridShader.SetBuffer(sortKernel, "cellOffsets", cellOffsetsBuffer); + gridShader.Dispatch(sortKernel, capacityThreadGroups, 1, 1); + + + gridShader.SetInt("pointCount", solver.simplexCounts.pointCount); + gridShader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + gridShader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + gridShader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + gridShader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + gridShader.SetInt("mode", (int)solver.abstraction.parameters.mode); + + gridShader.SetBuffer(contactsKernel, "simplices", solver.simplices); + gridShader.SetBuffer(contactsKernel, "simplexBounds", solver.simplexBounds); + gridShader.SetBuffer(contactsKernel, "positions", solver.positionsBuffer); + gridShader.SetBuffer(contactsKernel, "orientations", solver.orientationsBuffer); + gridShader.SetBuffer(contactsKernel, "principalRadii", solver.principalRadiiBuffer); + gridShader.SetBuffer(contactsKernel, "filters", solver.filtersBuffer); + gridShader.SetBuffer(contactsKernel, "sortedColliderIndices", sortedShapeIndicesBuffer); + gridShader.SetBuffer(contactsKernel, "transforms", transforms); + gridShader.SetBuffer(contactsKernel, "shapes", shapes); + gridShader.SetBuffer(contactsKernel, "collisionMaterialIndices", solver.collisionMaterialIndexBuffer); + gridShader.SetBuffer(contactsKernel, "cellIndices", cellIndicesBuffer); + gridShader.SetBuffer(contactsKernel, "cellOffsets", cellOffsetsBuffer); + gridShader.SetBuffer(contactsKernel, "cellCounts", cellCountsBuffer); + gridShader.SetBuffer(contactsKernel, "levelPopulation", levelPopulation); + + gridShader.SetBuffer(contactsKernel, "solverToWorld", solver.solverToWorldBuffer); + gridShader.SetBuffer(contactsKernel, "worldToSolver", solver.worldToSolverBuffer); + gridShader.SetBuffer(contactsKernel, "colliderTypeCounts", queryTypeCounts); + gridShader.SetBuffer(contactsKernel, "unsortedContactPairs", unsortedContactPairs); + gridShader.SetBuffer(contactsKernel, "dispatchBuffer", dispatchBuffer); + + gridShader.Dispatch(contactsKernel, particleThreadGroups, 1, 1); + + gridShader.SetBuffer(prefixSumPairsKernel, "colliderTypeCounts", queryTypeCounts); + gridShader.SetBuffer(prefixSumPairsKernel, "contactOffsetsPerType", contactOffsetsPerType); + gridShader.SetBuffer(prefixSumPairsKernel, "dispatchBuffer", dispatchBuffer); + + gridShader.Dispatch(prefixSumPairsKernel, 1, 1, 1); + + gridShader.SetBuffer(sortPairsKernel, "shapes", shapes); + gridShader.SetBuffer(sortPairsKernel, "unsortedContactPairs", unsortedContactPairs); + gridShader.SetBuffer(sortPairsKernel, "contactPairs", contactPairs); + gridShader.SetBuffer(sortPairsKernel, "colliderTypeCounts", queryTypeCounts); + gridShader.SetBuffer(sortPairsKernel, "contactOffsetsPerType", contactOffsetsPerType); + gridShader.SetBuffer(sortPairsKernel, "dispatchBuffer", dispatchBuffer); + + gridShader.DispatchIndirect(sortPairsKernel, dispatchBuffer, 16); + + boxes.GetResults(solver, this, transforms, shapes, results); + spheres.GetResults(solver, this, transforms, shapes, results); + rays.GetResults(solver, this, transforms, shapes, results); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs.meta new file mode 100644 index 000000000..6edfb4372 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01c4905e2f6964e7b91a3262bbd54229 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs new file mode 100644 index 000000000..4ca52c2c5 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs @@ -0,0 +1,17 @@ +namespace Obi +{ + public class ComputeBackend : IObiBackend + { + #region Solver + public ISolverImpl CreateSolver(ObiSolver solver, int capacity) + { + return new ComputeSolverImpl(solver); + } + public void DestroySolver(ISolverImpl solver) + { + if (solver != null) + solver.Destroy(); + } + #endregion + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs.meta new file mode 100644 index 000000000..af17c5d58 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c68d8c4a741f459ea53d69f8eddbfef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs new file mode 100644 index 000000000..e60292901 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs @@ -0,0 +1,15 @@ +using System; + +namespace Obi +{ + public class ComputeJobHandle : IObiJobHandle + { + public void Complete() + { + } + + public void Release() + { + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs.meta new file mode 100644 index 000000000..0b145fa5d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dc5d7005f3f2458bbdc5c1756153cac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs new file mode 100644 index 000000000..7ec820cbd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs @@ -0,0 +1,16 @@ + +namespace Obi +{ + public static class ComputeMath + { + public static int ThreadGroupCount(int elements, int numThreads) + { + return elements / numThreads + 1; + } + + public static int NextMultiple(int baseNumber, int number) + { + return ((baseNumber / number) + 1) * number; + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs.meta new file mode 100644 index 000000000..62890efdd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0df3a211b1614ebbb0f5144e868546e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints.meta index 6443434bf..d57b2cf13 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 97b02df45f4844e32a90f2f5d93de422 +guid: 0040fe7f7368047d29f179b7d7bf4d1a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta index f3e2fd42e..783357514 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ac58d86bbc15740a98fd45e796e43034 +guid: 5b92b6684fbd249cd9732bf9b3303e03 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs new file mode 100644 index 000000000..9d3c6b7e8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs @@ -0,0 +1,30 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeAerodynamicConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + + public ComputeAerodynamicConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Aerodynamics) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/AerodynamicConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeAerodynamicConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeAerodynamicConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs.meta new file mode 100644 index 000000000..ec3d6752e --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5bb44136361b4a2d948bf85825e53b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs new file mode 100644 index 000000000..a5f725462 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs @@ -0,0 +1,52 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeAerodynamicConstraintsBatch : ComputeConstraintsBatchImpl, IAerodynamicConstraintsBatchImpl + { + GraphicsBuffer aerodynamicCoeffs; + + public ComputeAerodynamicConstraintsBatch(ComputeAerodynamicConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Aerodynamics; + } + + public void SetAerodynamicConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList aerodynamicCoeffs, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.aerodynamicCoeffs = aerodynamicCoeffs.AsComputeBuffer(); + + m_ConstraintCount = count; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeAerodynamicConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeAerodynamicConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "aerodynamicCoeffs", aerodynamicCoeffs); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "normals", solverImplementation.normalsBuffer); + shader.SetBuffer(projectKernel, "wind", solverImplementation.windBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "velocities", solverImplementation.velocitiesBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs.meta new file mode 100644 index 000000000..d19b18bc4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84f8c85144ba84d59bdf603d907ae5fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta index be125343c..d595c99fa 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 64ac30003117243aba84fc4298f84eb7 +guid: d16c953a082614e88bd02d0f99035c3a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs new file mode 100644 index 000000000..29de0b6fc --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeBendConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeBendConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Bending) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/BendConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeBendConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeBendConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs.meta new file mode 100644 index 000000000..cca007683 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac9c52f073f794c47a6cbb7b41cf023c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs new file mode 100644 index 000000000..7c0f7da7b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs @@ -0,0 +1,75 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeBendConstraintsBatch : ComputeConstraintsBatchImpl, IBendConstraintsBatchImpl + { + GraphicsBuffer restBends; + GraphicsBuffer stiffnesses; + + public ComputeBendConstraintsBatch(ComputeBendConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Bending; + } + + public void SetBendConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restBends, ObiNativeVector2List bendingStiffnesses, ObiNativeVector2List plasticity, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.restBends = restBends.AsComputeBuffer(); + this.stiffnesses = bendingStiffnesses.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + this.lambdasList = lambdas; + + m_ConstraintCount = count; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeBendConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeBendConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "restBends", restBends); + shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float deltaTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeBendConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeBendConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs.meta new file mode 100644 index 000000000..3c5bc0d66 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49d201b7a15f44e17b27019b972e9844 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta index 761171833..230c84ffb 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cdbe2ed97af924bb9ba78bac0fc122c7 +guid: 253f34729aa7d4bbabe8eca30fdb88af folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs new file mode 100644 index 000000000..3d51f9465 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeBendTwistConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeBendTwistConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.BendTwist) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/BendTwistConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeBendTwistConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeBendTwistConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs.meta new file mode 100644 index 000000000..1ca860429 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 442edc2bc0aec4bf181b4332f0c8dd46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs new file mode 100644 index 000000000..3efed6f5f --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs @@ -0,0 +1,81 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeBendTwistConstraintsBatch : ComputeConstraintsBatchImpl, IBendTwistConstraintsBatchImpl + { + GraphicsBuffer orientationIndices; + GraphicsBuffer restDarboux; + GraphicsBuffer stiffnesses; + GraphicsBuffer plasticity; + + public ComputeBendTwistConstraintsBatch(ComputeBendTwistConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.BendTwist; + } + + public void SetBendTwistConstraints(ObiNativeIntList orientationIndices, ObiNativeQuaternionList restDarboux, ObiNativeVector3List stiffnesses, ObiNativeVector2List plasticity, ObiNativeFloatList lambdas, int count) + { + this.orientationIndices = orientationIndices.AsComputeBuffer(); + this.restDarboux = restDarboux.AsComputeBuffer(); + this.stiffnesses = stiffnesses.AsComputeBuffer(); + this.plasticity = plasticity.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + this.lambdasList = lambdas; + + m_ConstraintCount = count; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeBendTwistConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeBendTwistConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "orientationIndices", orientationIndices); + shader.SetBuffer(projectKernel, "restDarboux", restDarboux); + shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); + shader.SetBuffer(projectKernel, "plasticity", plasticity); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + + shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeBendTwistConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeBendTwistConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "orientationIndices", orientationIndices); + shader.SetBuffer(applyKernel, "orientations", solverImplementation.orientationsBuffer); + + shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs.meta new file mode 100644 index 000000000..10707e48a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5806beebf896460d87156df3e045b57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta index 976f69717..e9b29a821 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1a6c548d46acc4e88a31b3bf6b0a9ea8 +guid: 06d157d45e7fd46f08b501d67d3d632b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs new file mode 100644 index 000000000..354112192 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeChainConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeChainConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Chain) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ChainConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeChainConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeChainConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs.meta new file mode 100644 index 000000000..923342584 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c28cd2bd740f4bebb4c8559b395ed0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs new file mode 100644 index 000000000..2009f6ac9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs @@ -0,0 +1,97 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeChainConstraintsBatch : ComputeConstraintsBatchImpl, IChainConstraintsBatchImpl + { + GraphicsBuffer firstIndex; + GraphicsBuffer numIndices; + GraphicsBuffer restLengths; + + GraphicsBuffer ni; + GraphicsBuffer diagonals; + + public ComputeChainConstraintsBatch(ComputeChainConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Chain; + } + + public void SetChainConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List restLengths, ObiNativeIntList firstIndex, ObiNativeIntList numIndex, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.firstIndex = firstIndex.AsComputeBuffer(); + this.numIndices = numIndex.AsComputeBuffer(); + this.restLengths = restLengths.AsComputeBuffer(); + + int numEdges = 0; + for (int i = 0; i < numIndex.count; ++i) + numEdges += numIndex[i] - 1; + + ni = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numEdges, 16); + diagonals = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numEdges, 12); + + m_ConstraintCount = count; + } + + public override void Destroy() + { + ni.Dispose(); + diagonals.Dispose(); + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeChainConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeChainConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "firstIndex", firstIndex); + shader.SetBuffer(projectKernel, "numIndices", numIndices); + shader.SetBuffer(projectKernel, "restLengths", restLengths); + + shader.SetBuffer(projectKernel, "ni", ni); + shader.SetBuffer(projectKernel, "diagonals", diagonals); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeChainConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeChainConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "firstIndex", firstIndex); + shader.SetBuffer(applyKernel, "numIndices", numIndices); + + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs.meta new file mode 100644 index 000000000..e659564bd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d067c1d8b1e94c51bbb85f0f81754ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision.meta new file mode 100644 index 000000000..2da8691e7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff5938de5299c42278caf6e3181426ed +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs new file mode 100644 index 000000000..9b0515e2a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeColliderCollisionConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int clearKernel; + public int initializeKernel; + public int projectKernel; + public int applyKernel; + + public ComputeColliderCollisionConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Collision) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ColliderCollisionConstraints")); + clearKernel = constraintsShader.FindKernel("Clear"); + initializeKernel = constraintsShader.FindKernel("Initialize"); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeColliderCollisionConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeColliderCollisionConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs.meta new file mode 100644 index 000000000..9aa02e508 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a86d11bb25f6409a95e22186e98474c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs new file mode 100644 index 000000000..a0b598f82 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs @@ -0,0 +1,126 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeColliderCollisionConstraintsBatch : ComputeConstraintsBatchImpl, IColliderCollisionConstraintsBatchImpl + { + + public ComputeColliderCollisionConstraintsBatch(ComputeColliderCollisionConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Collision; + } + + public override void Initialize(float stepTime, float substepTime, int steps, float timeLeft) + { + if (solverAbstraction.simplexCounts.simplexCount > 0 && solverImplementation.colliderGrid.colliderCount > 0) + { + var shader = ((ComputeColliderCollisionConstraints)m_Constraints).constraintsShader; + int initializeKernel = ((ComputeColliderCollisionConstraints)m_Constraints).initializeKernel; + int clearKernel = ((ComputeColliderCollisionConstraints)m_Constraints).clearKernel; + + shader.SetInt("pointCount", solverAbstraction.simplexCounts.pointCount); + shader.SetInt("edgeCount", solverAbstraction.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solverAbstraction.simplexCounts.triangleCount); + + shader.SetBuffer(clearKernel, "contacts", solverAbstraction.colliderContacts.computeBuffer); + shader.SetBuffer(clearKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(clearKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + shader.SetBuffer(clearKernel, "dispatchBuffer", this.solverImplementation.colliderGrid.dispatchBuffer); + + shader.SetBuffer(initializeKernel, "contacts", solverAbstraction.colliderContacts.computeBuffer); + shader.SetBuffer(initializeKernel, "effectiveMasses", solverAbstraction.contactEffectiveMasses.computeBuffer); + shader.SetBuffer(initializeKernel, "dispatchBuffer", this.solverImplementation.colliderGrid.dispatchBuffer); + shader.SetBuffer(initializeKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); + + shader.SetBuffer(initializeKernel, "simplices", this.solverImplementation.simplices); + shader.SetBuffer(initializeKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); + shader.SetBuffer(initializeKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(initializeKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + shader.SetBuffer(initializeKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(initializeKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(initializeKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(initializeKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); + shader.SetBuffer(initializeKernel, "velocities", solverImplementation.velocitiesBuffer); + shader.SetBuffer(initializeKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + shader.SetBuffer(initializeKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); + shader.SetBuffer(initializeKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(initializeKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(initializeKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(initializeKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + + shader.SetBuffer(initializeKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); + shader.SetBuffer(initializeKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); + + shader.SetBuffer(initializeKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); + + shader.SetFloat("substepTime", substepTime); + + shader.DispatchIndirect(clearKernel, this.solverImplementation.colliderGrid.dispatchBuffer); + shader.DispatchIndirect(initializeKernel, this.solverImplementation.colliderGrid.dispatchBuffer); + } + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (solverAbstraction.simplexCounts.simplexCount > 0 && solverImplementation.colliderGrid.colliderCount > 0) + { + var shader = ((ComputeColliderCollisionConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeColliderCollisionConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "contacts", solverAbstraction.colliderContacts.computeBuffer); + shader.SetBuffer(projectKernel, "effectiveMasses", this.solverAbstraction.contactEffectiveMasses.computeBuffer); + shader.SetBuffer(projectKernel, "dispatchBuffer", this.solverImplementation.colliderGrid.dispatchBuffer); + shader.SetBuffer(projectKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); + + shader.SetBuffer(projectKernel, "simplices", this.solverImplementation.simplices); + shader.SetBuffer(projectKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); + shader.SetBuffer(projectKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(projectKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(projectKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); + shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + shader.SetBuffer(projectKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + + shader.SetBuffer(projectKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); + shader.SetBuffer(projectKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); + + shader.SetBuffer(projectKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); + shader.SetFloat("substepTime", substepTime); + shader.SetFloat("stepTime", stepTime); + shader.SetInt("steps", steps); + shader.SetFloat("timeLeft", timeLeft); + shader.SetFloat("maxDepenetration", solverAbstraction.parameters.maxDepenetration); + + shader.DispatchIndirect(projectKernel, this.solverImplementation.colliderGrid.dispatchBuffer); + } + } + + public override void Apply(float substepTime) + { + var shader = ((ComputeColliderCollisionConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeColliderCollisionConstraints)m_Constraints).applyKernel; + + if (solverImplementation.activeParticleCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + shader.SetBuffer(applyKernel, "particleIndices", this.solverImplementation.activeParticlesBuffer); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + + shader.SetInt("particleCount", this.solverAbstraction.activeParticleCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(this.solverAbstraction.activeParticleCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs.meta new file mode 100644 index 000000000..aea17db9b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d33af332861d148229253e82497aa0df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs new file mode 100644 index 000000000..1aeff4016 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeColliderFrictionConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeColliderFrictionConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Friction) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ColliderFrictionConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeColliderFrictionConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeColliderFrictionConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs.meta new file mode 100644 index 000000000..5bf1233ad --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b15312c6313124df298754c7654b62bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs new file mode 100644 index 000000000..a144d81e9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs @@ -0,0 +1,86 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeColliderFrictionConstraintsBatch : ComputeConstraintsBatchImpl, IColliderCollisionConstraintsBatchImpl + { + + public ComputeColliderFrictionConstraintsBatch(ComputeColliderFrictionConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Friction; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (solverAbstraction.simplexCounts.simplexCount > 0 && solverImplementation.colliderGrid.colliderCount > 0) + { + var shader = ((ComputeColliderFrictionConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeColliderFrictionConstraints)m_Constraints).projectKernel; + + shader.SetInt("pointCount", solverAbstraction.simplexCounts.pointCount); + shader.SetInt("edgeCount", solverAbstraction.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solverAbstraction.simplexCounts.triangleCount); + + shader.SetBuffer(projectKernel, "contacts", solverAbstraction.colliderContacts.computeBuffer); + shader.SetBuffer(projectKernel, "effectiveMasses", solverAbstraction.contactEffectiveMasses.computeBuffer); + shader.SetBuffer(projectKernel, "dispatchBuffer", this.solverImplementation.colliderGrid.dispatchBuffer); + shader.SetBuffer(projectKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); + + shader.SetBuffer(projectKernel, "simplices", this.solverImplementation.simplices); + shader.SetBuffer(projectKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); + shader.SetBuffer(projectKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(projectKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); + shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(projectKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); + shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + + shader.SetBuffer(projectKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); + shader.SetBuffer(projectKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); + + shader.SetBuffer(projectKernel, "solverToWorld", solverImplementation.solverToWorldBuffer); + shader.SetBuffer(projectKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); + shader.SetFloat("stepTime", stepTime); + shader.SetFloat("substepTime", substepTime); + + shader.DispatchIndirect(projectKernel, this.solverImplementation.colliderGrid.dispatchBuffer); + } + } + + public override void Apply(float substepTime) + { + var shader = ((ComputeColliderFrictionConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeColliderFrictionConstraints)m_Constraints).applyKernel; + + if (solverImplementation.activeParticleCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + shader.SetBuffer(applyKernel, "particleIndices", this.solverImplementation.activeParticlesBuffer); + shader.SetBuffer(applyKernel, "RW_positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "RW_orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + + shader.SetInt("particleCount", this.solverAbstraction.activeParticleCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(this.solverAbstraction.activeParticleCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs.meta new file mode 100644 index 000000000..2950234a2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24cfbad987ca74ec696ec132558f6103 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs new file mode 100644 index 000000000..f2a168f03 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs @@ -0,0 +1,82 @@ +using UnityEngine; + +namespace Obi +{ + public abstract class ComputeConstraintsBatchImpl : IConstraintsBatchImpl + { + protected IComputeConstraintsImpl m_Constraints; + protected Oni.ConstraintType m_ConstraintType; + + protected bool m_Enabled = true; + protected int m_ConstraintCount = 0; + + public Oni.ConstraintType constraintType + { + get { return m_ConstraintType; } + } + + public bool enabled + { + set + { + if (m_Enabled != value) + m_Enabled = value; + } + get { return m_Enabled; } + } + + public IConstraints constraints + { + get { return m_Constraints; } + } + + public ObiSolver solverAbstraction + { + get { return ((ComputeSolverImpl)m_Constraints.solver).abstraction; } + } + + public ComputeSolverImpl solverImplementation + { + get { return (ComputeSolverImpl)m_Constraints.solver; } + } + + protected GraphicsBuffer particleIndices; + protected GraphicsBuffer lambdas; + + protected ObiNativeFloatList lambdasList; + + public virtual void Initialize(float stepTime, float substepTime, int steps, float timeLeft) + { + if (lambdasList != null) + { + lambdasList.WipeToZero(); + lambdasList.Upload(); + } + } + + // implemented by concrete constraint subclasses. + public abstract void Evaluate(float stepTime, float substepTime, int steps, float timeLeft); + public abstract void Apply(float substepTime); + + public ComputeConstraintsBatchImpl() { } + + public virtual void Destroy() + { + // clean resources allocated by the batch, no need for a default implementation. + } + + public void SetDependency(IConstraintsBatchImpl batch) + { + // no need to implement. + } + + public void SetConstraintCount(int constraintCount) + { + m_ConstraintCount = constraintCount; + } + public int GetConstraintCount() + { + return m_ConstraintCount; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs.meta new file mode 100644 index 000000000..d6da30fdb --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01e582f7ad8544beca43dac2f3af8b37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs new file mode 100644 index 000000000..e58340325 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs @@ -0,0 +1,126 @@ +using UnityEngine; +using Unity.Jobs; +using Unity.Collections; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + public interface IComputeConstraintsImpl : IConstraints + { + void Initialize(float stepTime, float substepTime, int steps, float timeLeft); + void Project(float stepTime, float substepTime, int substeps, float timeLeft); + void Dispose(); + + IConstraintsBatchImpl CreateConstraintsBatch(); + void RemoveBatch(IConstraintsBatchImpl batch); + } + + public abstract class ComputeConstraintsImpl : IComputeConstraintsImpl where T : ComputeConstraintsBatchImpl + { + protected ComputeSolverImpl m_Solver; + public List batches = new List(); + + protected Oni.ConstraintType m_ConstraintType; + + public Oni.ConstraintType constraintType + { + get { return m_ConstraintType; } + } + + public ISolverImpl solver + { + get { return m_Solver; } + } + + public ComputeConstraintsImpl(ComputeSolverImpl solver, Oni.ConstraintType constraintType) + { + this.m_ConstraintType = constraintType; + this.m_Solver = solver; + } + + public virtual void Dispose() + { + + } + + public abstract IConstraintsBatchImpl CreateConstraintsBatch(); + + public abstract void RemoveBatch(IConstraintsBatchImpl batch); + + public virtual int GetConstraintCount() + { + int count = 0; + if (batches == null) return count; + + foreach (T batch in batches) + if (batch != null) + count += batch.GetConstraintCount(); + + return count; + } + + public void Initialize(float stepTime, float substepTime, int steps, float timeLeft) + { + // initialize all batches in parallel: + if (batches.Count > 0) + { + for (int i = 0; i < batches.Count; ++i) + if (batches[i].enabled) batches[i].Initialize(stepTime, substepTime, steps, timeLeft); + } + + } + + public void Project(float stepTime, float substepTime, int substeps, float timeLeft) + { + UnityEngine.Profiling.Profiler.BeginSample("Project"); + + var parameters = m_Solver.abstraction.GetConstraintParameters(m_ConstraintType); + + switch(parameters.evaluationOrder) + { + case Oni.ConstraintParameters.EvaluationOrder.Sequential: + EvaluateSequential(stepTime, substepTime, substeps, timeLeft); + break; + + case Oni.ConstraintParameters.EvaluationOrder.Parallel: + EvaluateParallel(stepTime, substepTime, substeps, timeLeft); + break; + } + + UnityEngine.Profiling.Profiler.EndSample(); + + } + + protected virtual void EvaluateSequential(float stepTime, float substepTime, int substeps, float timeLeft) + { + // evaluate and apply all batches: + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + batches[i].Evaluate(stepTime, substepTime, substeps, timeLeft); + batches[i].Apply(substepTime); + } + } + } + + protected virtual void EvaluateParallel(float stepTime, float substepTime, int substeps, float timeLeft) + { + // evaluate all batches: + for (int i = 0; i < batches.Count; ++i) + if (batches[i].enabled) + { + batches[i].Evaluate(stepTime, substepTime, substeps, timeLeft); + } + + // then apply them: + for (int i = 0; i < batches.Count; ++i) + if (batches[i].enabled) + { + batches[i].Apply(substepTime); + } + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs.meta new file mode 100644 index 000000000..f703dbebb --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36bc3e2333033489782d3f9f7781f967 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density.meta new file mode 100644 index 000000000..afcb33290 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6f9b81a4e3934d66a7268e686756750 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs new file mode 100644 index 000000000..5091b97f0 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs @@ -0,0 +1,187 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeDensityConstraints : ComputeConstraintsImpl + { + public ComputeShader sortParticlesShader; + public int sortDataKernel; + + public ComputeShader constraintsShader; + public int updateDensitiesKernel; + public int applyKernel; + public int applyPositionDeltaKernel; + public int calculateAtmosphereKernel; + public int applyAtmosphereKernel; + + public int accumSmoothPositionsKernel; + public int accumAnisotropyKernel; + public int averageAnisotropyKernel; + + public ComputeDensityConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Density) + { + sortParticlesShader = GameObject.Instantiate(Resources.Load("Compute/SortParticleData")); + sortDataKernel = sortParticlesShader.FindKernel("SortData"); + + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/DensityConstraints")); + updateDensitiesKernel = constraintsShader.FindKernel("UpdateDensities"); + applyKernel = constraintsShader.FindKernel("Apply"); + applyPositionDeltaKernel = constraintsShader.FindKernel("ApplyPositionDeltas"); + calculateAtmosphereKernel = constraintsShader.FindKernel("CalculateAtmosphere"); + applyAtmosphereKernel = constraintsShader.FindKernel("ApplyAtmosphere"); + + accumSmoothPositionsKernel = constraintsShader.FindKernel("AccumulateSmoothPositions"); + accumAnisotropyKernel = constraintsShader.FindKernel("AccumulateAnisotropy"); + averageAnisotropyKernel = constraintsShader.FindKernel("AverageAnisotropy"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeDensityConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeDensityConstraintsBatch); + batch.Destroy(); + } + + public void CopyDataInSortedOrder(bool renderable = false) + { + sortParticlesShader.SetBuffer(sortDataKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); + + if (renderable) + { + sortParticlesShader.SetBuffer(sortDataKernel, "positions", m_Solver.renderablePositionsBuffer); + sortParticlesShader.SetBuffer(sortDataKernel, "principalRadii", m_Solver.renderableRadiiBuffer); + } + else + { + sortParticlesShader.SetBuffer(sortDataKernel, "positions", m_Solver.positionsBuffer); + sortParticlesShader.SetBuffer(sortDataKernel, "principalRadii", m_Solver.principalRadiiBuffer); + } + + sortParticlesShader.SetBuffer(sortDataKernel, "prevPositions", m_Solver.prevPositionsBuffer); + sortParticlesShader.SetBuffer(sortDataKernel, "userData", m_Solver.userDataBuffer); + + sortParticlesShader.SetBuffer(sortDataKernel, "sortedPositions", m_Solver.particleGrid.sortedPositions); + sortParticlesShader.SetBuffer(sortDataKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); + sortParticlesShader.SetBuffer(sortDataKernel, "sortedPrevPositions", m_Solver.particleGrid.sortedPrevPosOrientations); + sortParticlesShader.SetBuffer(sortDataKernel, "sortedUserData", m_Solver.particleGrid.sortedUserDataColor); + + sortParticlesShader.SetBuffer(sortDataKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); + sortParticlesShader.DispatchIndirect(sortDataKernel, m_Solver.fluidDispatchBuffer); + } + + public void CalculateVelocityCorrections(float deltaTime) + { + if (m_Solver.particleGrid.sortedFluidIndices != null && m_Solver.cellCoordsBuffer != null) + { + constraintsShader.SetFloat("deltaTime", deltaTime); + + constraintsShader.SetBuffer(calculateAtmosphereKernel, "neighborCounts", m_Solver.particleGrid.neighborCounts); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "neighbors", m_Solver.particleGrid.neighbors); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); + + constraintsShader.SetBuffer(calculateAtmosphereKernel, "invMasses", m_Solver.invMassesBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "velocities_RO", m_Solver.velocitiesBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "angularVelocities_RO", m_Solver.angularVelocitiesBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "vorticity_RO", m_Solver.restOrientationsBuffer); // restOrientations are unused for fluid particles, so we reuse them here. + constraintsShader.SetBuffer(calculateAtmosphereKernel, "vorticityAccelerations", m_Solver.orientationDeltasIntBuffer); // restPositions are unused for fluid particles, so we reuse them here. + constraintsShader.SetBuffer(calculateAtmosphereKernel, "linearAccelerations", m_Solver.positionDeltasIntBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "angularDiffusion", m_Solver.anisotropiesBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "linearFromAngular", m_Solver.restPositionsBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "normals", m_Solver.normalsBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "userData", m_Solver.userDataBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedPositions", m_Solver.particleGrid.sortedPositions); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedFluidData_RO", m_Solver.particleGrid.sortedFluidData); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedFluidMaterials", m_Solver.particleGrid.sortedFluidMaterials); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedFluidInterface", m_Solver.particleGrid.sortedFluidInterface); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedUserData", m_Solver.particleGrid.sortedUserDataColor); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "fluidData", m_Solver.fluidDataBuffer); + constraintsShader.SetBuffer(calculateAtmosphereKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); + + constraintsShader.DispatchIndirect(calculateAtmosphereKernel, m_Solver.fluidDispatchBuffer); + } + } + + public void ApplyVelocityCorrections(float deltaTime) + { + if (m_Solver.particleGrid.sortedFluidIndices != null && m_Solver.cellCoordsBuffer != null) + { + constraintsShader.SetFloat("deltaTime", deltaTime); + + constraintsShader.SetBuffer(applyAtmosphereKernel, "positions", m_Solver.positionsBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "prevPositions", m_Solver.prevPositionsBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "wind", m_Solver.windBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "normals_RO", m_Solver.normalsBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "fluidMaterials2", m_Solver.fluidMaterials2Buffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedFluidInterface", m_Solver.particleGrid.sortedFluidInterface); + constraintsShader.SetBuffer(applyAtmosphereKernel, "fluidData_RO", m_Solver.fluidDataBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "linearAccelerations", m_Solver.positionDeltasIntBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "angularDiffusion", m_Solver.anisotropiesBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "vorticity", m_Solver.restOrientationsBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "vorticityAccelerations", m_Solver.orientationDeltasIntBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "linearFromAngular_RO", m_Solver.restPositionsBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "velocities", m_Solver.velocitiesBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "angularVelocities", m_Solver.angularVelocitiesBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); + constraintsShader.SetBuffer(applyAtmosphereKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); + + constraintsShader.DispatchIndirect(applyAtmosphereKernel, m_Solver.fluidDispatchBuffer); + } + } + + public void CalculateAnisotropyLaplacianSmoothing() + { + int pcount = ((ComputeSolverImpl)solver).particleCount; + if (pcount > 0 && m_Solver.particleGrid.sortedFluidIndices != null && m_Solver.cellCoordsBuffer != null) + { + if (m_Solver.abstraction.parameters.maxAnisotropy <= 1) + return; + + constraintsShader.SetFloat("maxAnisotropy", m_Solver.abstraction.parameters.maxAnisotropy); + constraintsShader.SetInt("simplexCount", m_Solver.simplexCounts.simplexCount); + + // copy render data (renderablePositions / radii) in sorted order: + CopyDataInSortedOrder(true); + + // accumulate smoothed positions: + constraintsShader.SetBuffer(accumSmoothPositionsKernel, "neighborCounts", m_Solver.particleGrid.neighborCounts); + constraintsShader.SetBuffer(accumSmoothPositionsKernel, "neighbors", m_Solver.particleGrid.neighbors); + constraintsShader.SetBuffer(accumSmoothPositionsKernel, "sortedFluidMaterials", m_Solver.particleGrid.sortedFluidMaterials); + constraintsShader.SetBuffer(accumSmoothPositionsKernel, "renderablePositions", m_Solver.particleGrid.sortedPositions); + constraintsShader.SetBuffer(accumSmoothPositionsKernel, "anisotropies", m_Solver.anisotropiesBuffer); + constraintsShader.SetBuffer(accumSmoothPositionsKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); + constraintsShader.DispatchIndirect(accumSmoothPositionsKernel, m_Solver.fluidDispatchBuffer); + + // accumulate anisotropy: + constraintsShader.SetBuffer(accumAnisotropyKernel, "neighborCounts", m_Solver.particleGrid.neighborCounts); + constraintsShader.SetBuffer(accumAnisotropyKernel, "neighbors", m_Solver.particleGrid.neighbors); + constraintsShader.SetBuffer(accumAnisotropyKernel, "anisotropies", m_Solver.anisotropiesBuffer); + constraintsShader.SetBuffer(accumAnisotropyKernel, "renderablePositions", m_Solver.particleGrid.sortedPositions); + constraintsShader.SetBuffer(accumAnisotropyKernel, "sortedFluidMaterials", m_Solver.particleGrid.sortedFluidMaterials); + constraintsShader.SetBuffer(accumAnisotropyKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); + constraintsShader.DispatchIndirect(accumAnisotropyKernel, m_Solver.fluidDispatchBuffer); + + // average anisotropies: + constraintsShader.SetBuffer(averageAnisotropyKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); + constraintsShader.SetBuffer(averageAnisotropyKernel, "anisotropies", m_Solver.anisotropiesBuffer); + constraintsShader.SetBuffer(averageAnisotropyKernel, "renderablePositions", m_Solver.renderablePositionsBuffer); + constraintsShader.SetBuffer(averageAnisotropyKernel, "renderableOrientations", m_Solver.renderableOrientationsBuffer); + constraintsShader.SetBuffer(averageAnisotropyKernel, "renderableRadii", m_Solver.renderableRadiiBuffer); + constraintsShader.SetBuffer(averageAnisotropyKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); + constraintsShader.SetBuffer(averageAnisotropyKernel, "fluidData", m_Solver.fluidDataBuffer); + constraintsShader.SetBuffer(averageAnisotropyKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); + constraintsShader.SetBuffer(averageAnisotropyKernel, "life", m_Solver.lifeBuffer); + constraintsShader.DispatchIndirect(averageAnisotropyKernel, m_Solver.fluidDispatchBuffer); + } + + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs.meta new file mode 100644 index 000000000..181e12e45 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e1927f3839c94d8e806b2ba446e2797 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs new file mode 100644 index 000000000..bd0ebab47 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs @@ -0,0 +1,93 @@ + +using UnityEngine; + +namespace Obi +{ + public class ComputeDensityConstraintsBatch : ComputeConstraintsBatchImpl, IDensityConstraintsBatchImpl + { + + public ComputeDensityConstraintsBatch(ComputeDensityConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Density; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (solverImplementation.particleGrid.sortedFluidIndices != null && solverImplementation.cellCoordsBuffer != null) + { + var shader = ((ComputeDensityConstraints)m_Constraints).constraintsShader; + int densitiesKernel = ((ComputeDensityConstraints)m_Constraints).updateDensitiesKernel; + + // Need to do this at least every simulation step, since fluid meshing reuses sorted arrays. + ((ComputeDensityConstraints)m_Constraints).CopyDataInSortedOrder(); + + shader.SetInt("maxNeighbors", solverImplementation.particleGrid.maxParticleNeighbors); + shader.SetInt("mode", (int)solverImplementation.abstraction.parameters.mode); + shader.SetFloat("deltaTime", substepTime); + shader.SetVector("diffusionMask", solverAbstraction.parameters.diffusionMask); + + // calculate densities: + shader.SetBuffer(densitiesKernel, "neighborCounts", this.solverImplementation.particleGrid.neighborCounts); + shader.SetBuffer(densitiesKernel, "neighbors", this.solverImplementation.particleGrid.neighbors); + + shader.SetBuffer(densitiesKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(densitiesKernel, "sortedFluidData", solverImplementation.particleGrid.sortedFluidData); + shader.SetBuffer(densitiesKernel, "sortedPositions", solverImplementation.particleGrid.sortedPositions); + shader.SetBuffer(densitiesKernel, "sortedPrevPositions", solverImplementation.particleGrid.sortedPrevPosOrientations); + shader.SetBuffer(densitiesKernel, "sortedFluidMaterials", solverImplementation.particleGrid.sortedFluidMaterials); + shader.SetBuffer(densitiesKernel, "sortedPrincipalRadii", solverImplementation.particleGrid.sortedPrincipalRadii); + shader.SetBuffer(densitiesKernel, "renderableOrientations", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(densitiesKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(densitiesKernel, "massCenters", solverImplementation.normalsBuffer); + shader.SetBuffer(densitiesKernel, "prevMassCenters", solverImplementation.renderablePositionsBuffer); + shader.SetBuffer(densitiesKernel, "dispatchBuffer", solverImplementation.fluidDispatchBuffer); + + shader.DispatchIndirect(densitiesKernel, solverImplementation.fluidDispatchBuffer); + } + } + + public override void Apply(float substepTime) + { + if (solverImplementation.particleGrid.sortedFluidIndices != null && solverImplementation.cellCoordsBuffer != null) + { + var shader = ((ComputeDensityConstraints)m_Constraints).constraintsShader; + var applyPositionDeltaKernel = ((ComputeDensityConstraints)m_Constraints).applyPositionDeltaKernel; + var applyKernel = ((ComputeDensityConstraints)m_Constraints).applyKernel; + + // calculate deltas: + shader.SetBuffer(applyKernel, "neighborCounts", this.solverImplementation.particleGrid.neighborCounts); + shader.SetBuffer(applyKernel, "neighbors", this.solverImplementation.particleGrid.neighbors); + + shader.SetBuffer(applyKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(applyKernel, "sortedPositions", solverImplementation.particleGrid.sortedPositions); + shader.SetBuffer(applyKernel, "sortedPrevPositions", solverImplementation.particleGrid.sortedPrevPosOrientations); + shader.SetBuffer(applyKernel, "sortedFluidMaterials", solverImplementation.particleGrid.sortedFluidMaterials); + shader.SetBuffer(applyKernel, "sortedPrincipalRadii", solverImplementation.particleGrid.sortedPrincipalRadii); + shader.SetBuffer(applyKernel, "renderableOrientations", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(applyKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(applyKernel, "massCenters", solverImplementation.normalsBuffer); + shader.SetBuffer(applyKernel, "prevMassCenters", solverImplementation.renderablePositionsBuffer); + shader.SetBuffer(applyKernel, "sortedFluidData", solverImplementation.particleGrid.sortedFluidData); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(applyKernel, "sortedToOriginal", solverImplementation.particleGrid.sortedFluidIndices); + shader.SetBuffer(applyKernel, "dispatchBuffer", solverImplementation.fluidDispatchBuffer); + + shader.DispatchIndirect(applyKernel, solverImplementation.fluidDispatchBuffer); + + // apply position deltas + shader.SetBuffer(applyPositionDeltaKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyPositionDeltaKernel, "fluidData", solverImplementation.fluidDataBuffer); + shader.SetBuffer(applyPositionDeltaKernel, "sortedFluidData", solverImplementation.particleGrid.sortedFluidData); + shader.SetBuffer(applyPositionDeltaKernel, "renderableOrientations", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(applyPositionDeltaKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyPositionDeltaKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(applyPositionDeltaKernel, "sortedToOriginal", solverImplementation.particleGrid.sortedFluidIndices); + shader.SetBuffer(applyPositionDeltaKernel, "dispatchBuffer", solverImplementation.fluidDispatchBuffer); + + shader.DispatchIndirect(applyPositionDeltaKernel, solverImplementation.fluidDispatchBuffer); + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs.meta new file mode 100644 index 000000000..144708642 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 277bb45dfcd314cdd8e9d917bcc05955 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta index 9cf2006c0..6db3da332 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ffe3dc0008b2b461d80dab10f72f50ee +guid: beca9bcaa99b64d8188c2ac127314259 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs new file mode 100644 index 000000000..50c2ab4cc --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs @@ -0,0 +1,44 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeDistanceConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeDistanceConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Distance) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/DistanceConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeDistanceConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeDistanceConstraintsBatch); + batch.Destroy(); + } + + public void RequestDataReadback() + { + foreach (var batch in batches) + batch.RequestDataReadback(); + } + + public void WaitForReadback() + { + foreach (var batch in batches) + batch.WaitForReadback(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs.meta new file mode 100644 index 000000000..8a98a0c39 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c56c65d479be44432ba437d871d4892d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs new file mode 100644 index 000000000..0982c29bd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs @@ -0,0 +1,85 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeDistanceConstraintsBatch : ComputeConstraintsBatchImpl, IDistanceConstraintsBatchImpl + { + + GraphicsBuffer restLengthsBuffer; + GraphicsBuffer stiffnessesBuffer; + + public ComputeDistanceConstraintsBatch(ComputeDistanceConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Distance; + } + + public void SetDistanceConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restLengths, ObiNativeVector2List stiffnesses, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.restLengthsBuffer = restLengths.AsComputeBuffer(); + this.stiffnessesBuffer = stiffnesses.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + this.lambdasList = lambdas; + + m_ConstraintCount = count; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeDistanceConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeDistanceConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "restLengths", restLengthsBuffer); + shader.SetBuffer(projectKernel, "stiffnesses", stiffnessesBuffer); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float deltaTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeDistanceConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeDistanceConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + public void RequestDataReadback() + { + lambdasList.Readback(); + } + + public void WaitForReadback() + { + lambdasList.WaitForReadback(); + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs.meta new file mode 100644 index 000000000..19d57d427 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e197e97b0c8b94a84bce0a448e62e5fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision.meta new file mode 100644 index 000000000..3ee25521b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da310e9f3c6a84350b6e00bda41d8a90 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs new file mode 100644 index 000000000..9c3d62d6e --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs @@ -0,0 +1,34 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeParticleCollisionConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int initializeKernel; + public int projectKernel; + public int applyKernel; + + public ComputeParticleCollisionConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.ParticleCollision) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ParticleCollisionConstraints")); + initializeKernel = constraintsShader.FindKernel("Initialize"); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeParticleCollisionConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeParticleCollisionConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs.meta new file mode 100644 index 000000000..3049cbd7b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0039bc61ce4bc4aaa952b7bf1463c8b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs new file mode 100644 index 000000000..4af5838ed --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs @@ -0,0 +1,112 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeParticleCollisionConstraintsBatch : ComputeConstraintsBatchImpl, IParticleCollisionConstraintsBatchImpl + { + + public ComputeParticleCollisionConstraintsBatch(ComputeParticleCollisionConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.ParticleCollision; + } + + public override void Initialize(float stepTime, float substepTime, int steps, float timeLeft) + { + var shader = ((ComputeParticleCollisionConstraints)m_Constraints).constraintsShader; + int initializeKernel = ((ComputeParticleCollisionConstraints)m_Constraints).initializeKernel; + + if (solverImplementation.simplexCounts.simplexCount > 0) + { + shader.SetInt("pointCount", solverAbstraction.simplexCounts.pointCount); + shader.SetInt("edgeCount", solverAbstraction.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solverAbstraction.simplexCounts.triangleCount); + shader.SetFloat("shockPropagation", solverAbstraction.parameters.shockPropagation); + shader.SetVector("gravity", solverAbstraction.parameters.gravity); + + shader.SetBuffer(initializeKernel, "simplices", this.solverImplementation.simplices); + shader.SetBuffer(initializeKernel, "particleContacts", solverAbstraction.particleContacts.computeBuffer); + shader.SetBuffer(initializeKernel, "effectiveMasses", solverAbstraction.particleContactEffectiveMasses.computeBuffer); + shader.SetBuffer(initializeKernel, "dispatchBuffer", this.solverImplementation.particleGrid.dispatchBuffer); + shader.SetBuffer(initializeKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); + + shader.SetBuffer(initializeKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(initializeKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(initializeKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(initializeKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); + shader.SetBuffer(initializeKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + shader.SetBuffer(initializeKernel, "velocities", solverImplementation.velocitiesBuffer); + shader.SetBuffer(initializeKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(initializeKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); + shader.SetBuffer(initializeKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(initializeKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(initializeKernel, "invRotationalMasses", solverImplementation.invMassesBuffer); + + shader.SetFloat("substepTime", substepTime); + + shader.DispatchIndirect(initializeKernel, this.solverImplementation.particleGrid.dispatchBuffer); + } + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (solverImplementation.simplexCounts.simplexCount > 0) + { + var shader = ((ComputeParticleCollisionConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeParticleCollisionConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleContacts", solverAbstraction.particleContacts.computeBuffer); + shader.SetBuffer(projectKernel, "effectiveMasses", solverAbstraction.particleContactEffectiveMasses.computeBuffer); + shader.SetBuffer(projectKernel, "dispatchBuffer", this.solverImplementation.particleGrid.dispatchBuffer); + shader.SetBuffer(projectKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); + + shader.SetBuffer(projectKernel, "simplices", this.solverImplementation.simplices); + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(projectKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); + shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + shader.SetBuffer(projectKernel, "fluidInterface", solverImplementation.fluidInterfaceBuffer); + shader.SetBuffer(projectKernel, "userData", solverImplementation.userDataBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + shader.SetBuffer(projectKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + + shader.SetFloat("maxDepenetration", solverAbstraction.parameters.maxDepenetration); + shader.SetFloat("collisionMargin", solverAbstraction.parameters.collisionMargin); + shader.SetVector("diffusionMask", solverAbstraction.parameters.diffusionMask); + shader.SetFloat("substepTime", substepTime); + + shader.DispatchIndirect(projectKernel, this.solverImplementation.particleGrid.dispatchBuffer); + } + } + + public override void Apply(float substepTime) + { + var shader = ((ComputeParticleCollisionConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeParticleCollisionConstraints)m_Constraints).applyKernel; + + if (solverImplementation.activeParticleCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + shader.SetBuffer(applyKernel, "particleIndices", this.solverImplementation.activeParticlesBuffer); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "userData", solverImplementation.userDataBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + + shader.SetInt("particleCount", this.solverAbstraction.activeParticleCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(this.solverAbstraction.activeParticleCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs.meta new file mode 100644 index 000000000..5075a5759 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 425e2aa73a5f746039203ce1c0ac3a00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs new file mode 100644 index 000000000..aaec1e79f --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeParticleFrictionConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeParticleFrictionConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.ParticleFriction) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ParticleFrictionConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeParticleFrictionConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeParticleFrictionConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs.meta new file mode 100644 index 000000000..7ca80b7a3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41b95f7aa768148b38a09f35bee8efce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs new file mode 100644 index 000000000..64743ef60 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs @@ -0,0 +1,79 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeParticleFrictionConstraintsBatch : ComputeConstraintsBatchImpl, IParticleCollisionConstraintsBatchImpl + { + + public ComputeParticleFrictionConstraintsBatch(ComputeParticleFrictionConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.ParticleFriction; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + //if (m_ConstraintCount > 0) + if (solverImplementation.simplexCounts.simplexCount > 0 && solverImplementation.activeParticleCount > 0) + { + var shader = ((ComputeParticleFrictionConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeParticleFrictionConstraints)m_Constraints).projectKernel; + + shader.SetInt("pointCount", solverAbstraction.simplexCounts.pointCount); + shader.SetInt("edgeCount", solverAbstraction.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solverAbstraction.simplexCounts.triangleCount); + + shader.SetBuffer(projectKernel, "particleContacts", solverAbstraction.particleContacts.computeBuffer); + shader.SetBuffer(projectKernel, "effectiveMasses", solverAbstraction.particleContactEffectiveMasses.computeBuffer); + shader.SetBuffer(projectKernel, "dispatchBuffer", solverImplementation.particleGrid.dispatchBuffer); + shader.SetBuffer(projectKernel, "collisionMaterials", solverImplementation.colliderGrid.materialsBuffer); + + shader.SetBuffer(projectKernel, "simplices", solverImplementation.simplices); + shader.SetBuffer(projectKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(projectKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); + shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + + shader.SetFloat("stepTime", stepTime); + shader.SetFloat("substepTime", substepTime); + + shader.DispatchIndirect(projectKernel, this.solverImplementation.particleGrid.dispatchBuffer); + } + + } + + public override void Apply(float substepTime) + { + var shader = ((ComputeParticleFrictionConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeParticleFrictionConstraints)m_Constraints).applyKernel; + + if (solverImplementation.activeParticleCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + shader.SetBuffer(applyKernel, "particleIndices", this.solverImplementation.activeParticlesBuffer); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + + shader.SetInt("particleCount", this.solverAbstraction.activeParticleCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(this.solverAbstraction.activeParticleCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs.meta new file mode 100644 index 000000000..214b031dc --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12275bbeff9604bb393a365d8442161a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta index 0f363d04e..c21a5f4f4 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 303dd45caa88c4cd2bb03c65bbb0309c +guid: b03d5abd353fb4064bf5677d949196a1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs new file mode 100644 index 000000000..3ac729cc8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs @@ -0,0 +1,61 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputePinConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int clearKernel; + public int initializeKernel; + public int projectKernel; + public int applyKernel; + public int projectRenderableKernel; + + public ComputePinConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Pin) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/PinConstraints")); + clearKernel = constraintsShader.FindKernel("Clear"); + initializeKernel = constraintsShader.FindKernel("Initialize"); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + projectRenderableKernel = constraintsShader.FindKernel("ProjectRenderable"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputePinConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputePinConstraintsBatch); + batch.Destroy(); + } + + public void RequestDataReadback() + { + foreach (var batch in batches) + batch.RequestDataReadback(); + } + + public void WaitForReadback() + { + foreach (var batch in batches) + batch.WaitForReadback(); + } + + public void ProjectRenderablePositions() + { + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + batches[i].ProjectRenderablePositions(); + } + } + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs.meta new file mode 100644 index 000000000..5f50419cf --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fcd123efb9af486783fa2eca750d731 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs new file mode 100644 index 000000000..f5e92220c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs @@ -0,0 +1,167 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputePinConstraintsBatch : ComputeConstraintsBatchImpl, IPinConstraintsBatchImpl + { + GraphicsBuffer colliderIndices; + GraphicsBuffer offsets; + GraphicsBuffer restDarboux; + GraphicsBuffer stiffnesses; + + public ComputePinConstraintsBatch(ComputePinConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Pin; + } + + public void SetPinConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeQuaternionList restDarbouxVectors, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.colliderIndices = colliderIndices.AsComputeBuffer(); + this.offsets = offsets.AsComputeBuffer(); + this.restDarboux = restDarbouxVectors.AsComputeBuffer(); + this.stiffnesses = stiffnesses.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + this.lambdasList = lambdas; + + m_ConstraintCount = count; + } + + public override void Initialize(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputePinConstraints)m_Constraints).constraintsShader; + int clearKernel = ((ComputePinConstraints)m_Constraints).clearKernel; + int initializeKernel = ((ComputePinConstraints)m_Constraints).initializeKernel; + + shader.SetBuffer(clearKernel, "colliderIndices", colliderIndices); + shader.SetBuffer(clearKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(clearKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + + shader.SetBuffer(initializeKernel, "colliderIndices", colliderIndices); + shader.SetBuffer(initializeKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(initializeKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(clearKernel, threadGroups, 1, 1); + shader.Dispatch(initializeKernel, threadGroups, 1, 1); + } + + // clear lambdas: + base.Initialize(stepTime, substepTime, steps, timeLeft); + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputePinConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputePinConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "colliderIndices", colliderIndices); + shader.SetBuffer(projectKernel, "offsets", offsets); + shader.SetBuffer(projectKernel, "restDarboux", restDarboux); + shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); + shader.SetBuffer(projectKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(projectKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + + shader.SetBuffer(projectKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); + shader.SetBuffer(projectKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); + + shader.SetBuffer(projectKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("stepTime", stepTime); + shader.SetFloat("substepTime", substepTime); + shader.SetInt("steps", steps); + shader.SetFloat("timeLeft", timeLeft); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputePinConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputePinConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + + shader.SetBuffer(applyKernel, "RW_positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetBuffer(applyKernel, "RW_orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + public void ProjectRenderablePositions() + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputePinConstraints)m_Constraints).constraintsShader; + int projectRenderableKernel = ((ComputePinConstraints)m_Constraints).projectRenderableKernel; + + shader.SetBuffer(projectRenderableKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectRenderableKernel, "colliderIndices", colliderIndices); + shader.SetBuffer(projectRenderableKernel, "offsets", offsets); + shader.SetBuffer(projectRenderableKernel, "restDarboux", restDarboux); + shader.SetBuffer(projectRenderableKernel, "stiffnesses", stiffnesses); + + shader.SetBuffer(projectRenderableKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); + + shader.SetBuffer(projectRenderableKernel, "RW_positions", solverImplementation.renderablePositionsBuffer); + shader.SetBuffer(projectRenderableKernel, "RW_orientations", solverImplementation.renderableOrientationsBuffer); + + shader.SetBuffer(projectRenderableKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectRenderableKernel, threadGroups, 1, 1); + } + } + + public void RequestDataReadback() + { + lambdasList.Readback(); + } + + public void WaitForReadback() + { + lambdasList.WaitForReadback(); + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs.meta new file mode 100644 index 000000000..365b01ba0 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf8b3fc4b0e8f4ab3ab1f4418e053a8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole.meta new file mode 100644 index 000000000..f134edc5c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67d3689a6a1a94c8b88ec9d27a88963f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs new file mode 100644 index 000000000..141ad279a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs @@ -0,0 +1,48 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputePinholeConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int clearKernel; + public int initializeKernel; + public int projectKernel; + public int applyKernel; + + public ComputePinholeConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Pinhole) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/PinholeConstraints")); + clearKernel = constraintsShader.FindKernel("Clear"); + initializeKernel = constraintsShader.FindKernel("Initialize"); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputePinholeConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputePinholeConstraintsBatch); + batch.Destroy(); + } + + public void RequestDataReadback() + { + foreach (var batch in batches) + batch.RequestDataReadback(); + } + + public void WaitForReadback() + { + foreach (var batch in batches) + batch.WaitForReadback(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs.meta new file mode 100644 index 000000000..cc3dae1ce --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac5087fe6e43f4ffc8b73089fd3f96b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs new file mode 100644 index 000000000..4930295f8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs @@ -0,0 +1,165 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputePinholeConstraintsBatch : ComputeConstraintsBatchImpl, IPinholeConstraintsBatchImpl + { + GraphicsBuffer colliderIndices; + GraphicsBuffer offsets; + GraphicsBuffer edgeMus; + GraphicsBuffer edgeRanges; + GraphicsBuffer edgeRangeMus; + GraphicsBuffer relativeVelocities; + GraphicsBuffer parameters; + + public ComputePinholeConstraintsBatch(ComputePinholeConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Pinhole; + } + + public void SetPinholeConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeFloatList edgeMus, ObiNativeIntList edgeRanges, ObiNativeFloatList edgeRangeMus, ObiNativeFloatList parameters, ObiNativeFloatList relativeVelocities, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.colliderIndices = colliderIndices.AsComputeBuffer(); + this.offsets = offsets.AsComputeBuffer(); + this.edgeMus = edgeMus.AsComputeBuffer(); + this.edgeRanges = edgeRanges.AsComputeBuffer(); + this.edgeRangeMus = edgeRangeMus.AsComputeBuffer(); + this.parameters = parameters.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + this.relativeVelocities = relativeVelocities.AsComputeBuffer(); + this.lambdasList = lambdas; + + m_ConstraintCount = count; + } + + public override void Initialize(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputePinholeConstraints)m_Constraints).constraintsShader; + int clearKernel = ((ComputePinholeConstraints)m_Constraints).clearKernel; + int initializeKernel = ((ComputePinholeConstraints)m_Constraints).initializeKernel; + + shader.SetBuffer(clearKernel, "colliderIndices", colliderIndices); + shader.SetBuffer(clearKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(clearKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + + shader.SetBuffer(initializeKernel, "particleIndices", particleIndices); + shader.SetBuffer(initializeKernel, "colliderIndices", colliderIndices); + shader.SetBuffer(initializeKernel, "offsets", offsets); + shader.SetBuffer(initializeKernel, "edgeMus", edgeMus); + shader.SetBuffer(initializeKernel, "edgeRanges", edgeRanges); + shader.SetBuffer(initializeKernel, "edgeRangeMus", edgeRangeMus); + shader.SetBuffer(initializeKernel, "relativeVelocities", relativeVelocities); + shader.SetBuffer(initializeKernel, "parameters", parameters); + + shader.SetBuffer(initializeKernel, "deformableEdges", solverImplementation.deformableEdgesBuffer); + shader.SetBuffer(initializeKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(initializeKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(initializeKernel, "invMasses", solverImplementation.invMassesBuffer); + + shader.SetBuffer(initializeKernel, "colliderIndices", colliderIndices); + shader.SetBuffer(initializeKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); + shader.SetBuffer(initializeKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(initializeKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + shader.SetBuffer(initializeKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + + shader.SetBuffer(initializeKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); + shader.SetBuffer(initializeKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); + + shader.SetBuffer(initializeKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("stepTime", stepTime); + shader.SetFloat("substepTime", substepTime); + shader.SetInt("steps", steps); + shader.SetFloat("timeLeft", timeLeft); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(clearKernel, threadGroups, 1, 1); + shader.Dispatch(initializeKernel, threadGroups, 1, 1); + } + + // clear lambdas: + base.Initialize(stepTime, substepTime, steps, timeLeft); + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputePinholeConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputePinholeConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "colliderIndices", colliderIndices); + shader.SetBuffer(projectKernel, "offsets", offsets); + shader.SetBuffer(projectKernel, "edgeMus", edgeMus); + shader.SetBuffer(projectKernel, "parameters", parameters); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); + shader.SetBuffer(projectKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); + shader.SetBuffer(projectKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); + + shader.SetBuffer(projectKernel, "deformableEdges", solverImplementation.deformableEdgesBuffer); + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetBuffer(projectKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); + shader.SetBuffer(projectKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); + + shader.SetBuffer(projectKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("stepTime", stepTime); + shader.SetFloat("substepTime", substepTime); + shader.SetInt("steps", steps); + shader.SetFloat("timeLeft", timeLeft); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var param = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputePinholeConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputePinholeConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "deformableEdges", solverImplementation.deformableEdgesBuffer); + + shader.SetBuffer(applyKernel, "RW_positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", param.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + public void RequestDataReadback() + { + lambdasList.Readback(); + } + + public void WaitForReadback() + { + lambdasList.WaitForReadback(); + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs.meta new file mode 100644 index 000000000..1bb2cbb73 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 262e3b75b5b53406b92eaed391db8114 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta index 0e27557d0..ac46a10b7 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 76aa6338faa6b4855a36b8ad4c1985bf +guid: 21c4f0318a4dd4112aeb7065a1251e2a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs new file mode 100644 index 000000000..87856a1a2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs @@ -0,0 +1,48 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeShapeMatchingConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int plasticityKernel; + public int restStateKernel; + public int applyKernel; + + public ComputeShapeMatchingConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.ShapeMatching) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ShapeMatchingConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + plasticityKernel = constraintsShader.FindKernel("PlasticDeformation"); + restStateKernel = constraintsShader.FindKernel("CalculateRestShapeMatching"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeShapeMatchingConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeShapeMatchingConstraintsBatch); + batch.Destroy(); + } + + public void RequestDataReadback() + { + foreach(var batch in batches) + batch.RequestDataReadback(); + } + + public void WaitForReadback() + { + foreach (var batch in batches) + batch.WaitForReadback(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs.meta new file mode 100644 index 000000000..c6df3eebc --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2c02ccc8463d4650b854a7a374ac0d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs new file mode 100644 index 000000000..ae5534206 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs @@ -0,0 +1,204 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeShapeMatchingConstraintsBatch : ComputeConstraintsBatchImpl, IShapeMatchingConstraintsBatchImpl + { + private GraphicsBuffer firstIndexBuffer; + private GraphicsBuffer numIndicesBuffer; + private GraphicsBuffer explicitGroupBuffer; + private GraphicsBuffer shapeMaterialParametersBuffer; + private GraphicsBuffer restComsBuffer; + private GraphicsBuffer comsBuffer; + private GraphicsBuffer constraintOrientationsBuffer; + + private GraphicsBuffer AqqBuffer; + private GraphicsBuffer linearTransformsBuffer; + private GraphicsBuffer plasticDeformationsBuffer; + + private ObiNativeVector4List m_RestComs; + private ObiNativeVector4List m_Coms; + private ObiNativeQuaternionList m_ConstraintOrientations; + + private bool m_RecalculateRestShape = false; + public ComputeShapeMatchingConstraintsBatch(ComputeShapeMatchingConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.ShapeMatching; + } + + public void SetShapeMatchingConstraints(ObiNativeIntList particleIndices, + ObiNativeIntList firstIndex, + ObiNativeIntList numIndices, + ObiNativeIntList explicitGroup, + ObiNativeFloatList shapeMaterialParameters, + ObiNativeVector4List restComs, + ObiNativeVector4List coms, + ObiNativeQuaternionList constraintOrientations, + ObiNativeMatrix4x4List linearTransforms, + ObiNativeMatrix4x4List plasticDeformations, + ObiNativeFloatList lambdas, + int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.firstIndexBuffer = firstIndex.AsComputeBuffer(); + this.numIndicesBuffer = numIndices.AsComputeBuffer(); + this.explicitGroupBuffer = explicitGroup.AsComputeBuffer(); + this.shapeMaterialParametersBuffer = shapeMaterialParameters.AsComputeBuffer(); + this.restComsBuffer = restComs.AsComputeBuffer(); + this.comsBuffer = coms.AsComputeBuffer(); + this.constraintOrientationsBuffer = constraintOrientations.AsComputeBuffer(); + this.linearTransformsBuffer = linearTransforms.AsComputeBuffer(); + this.plasticDeformationsBuffer = plasticDeformations.AsComputeBuffer(); + + if (AqqBuffer != null) + AqqBuffer.Dispose(); + + AqqBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, count, 64); // float4x4 + + m_RestComs = restComs; + m_Coms = coms; + m_ConstraintOrientations = constraintOrientations; + + m_ConstraintCount = count; + } + + public override void Destroy() + { + if (AqqBuffer != null) + AqqBuffer.Dispose(); + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeShapeMatchingConstraints)m_Constraints).constraintsShader; + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + if (m_RecalculateRestShape) + { + m_RecalculateRestShape = false; + + int restKernel = ((ComputeShapeMatchingConstraints)m_Constraints).restStateKernel; + + shader.SetBuffer(restKernel, "particleIndices", particleIndices); + shader.SetBuffer(restKernel, "firstIndex", firstIndexBuffer); + shader.SetBuffer(restKernel, "numIndices", numIndicesBuffer); + shader.SetBuffer(restKernel, "RW_restComs", restComsBuffer); + + shader.SetBuffer(restKernel, "RW_Aqq", AqqBuffer); + shader.SetBuffer(restKernel, "RW_deformation", plasticDeformationsBuffer); + + shader.SetBuffer(restKernel, "restPositions", solverImplementation.restPositionsBuffer); + shader.SetBuffer(restKernel, "restOrientations", solverImplementation.restOrientationsBuffer); + shader.SetBuffer(restKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(restKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + shader.SetBuffer(restKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + + shader.Dispatch(restKernel, threadGroups, 1, 1); + + m_RestComs.Readback(); + m_RestComs.WaitForReadback(); + } + + //var shader = ((ComputeShapeMatchingConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeShapeMatchingConstraints)m_Constraints).projectKernel; + int plasticityKernel = ((ComputeShapeMatchingConstraints)m_Constraints).plasticityKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "firstIndex", firstIndexBuffer); + shader.SetBuffer(projectKernel, "numIndices", numIndicesBuffer); + shader.SetBuffer(projectKernel, "explicitGroup", explicitGroupBuffer); + shader.SetBuffer(projectKernel, "shapeMaterialParameters", shapeMaterialParametersBuffer); + + shader.SetBuffer(projectKernel, "restComs", restComsBuffer); + shader.SetBuffer(projectKernel, "coms", comsBuffer); + shader.SetBuffer(projectKernel, "constraintOrientations", constraintOrientationsBuffer); + + shader.SetBuffer(projectKernel, "Aqq", AqqBuffer); + shader.SetBuffer(projectKernel, "RW_linearTransforms", linearTransformsBuffer); + shader.SetBuffer(projectKernel, "deformation", plasticDeformationsBuffer); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "restPositions", solverImplementation.restPositionsBuffer); + shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(projectKernel, "restOrientations", solverImplementation.restOrientationsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.Dispatch(projectKernel, threadGroups, 1, 1); + + shader.SetBuffer(plasticityKernel, "particleIndices", particleIndices); + shader.SetBuffer(plasticityKernel, "firstIndex", firstIndexBuffer); + shader.SetBuffer(plasticityKernel, "numIndices", numIndicesBuffer); + shader.SetBuffer(plasticityKernel, "shapeMaterialParameters", shapeMaterialParametersBuffer); + + shader.SetBuffer(plasticityKernel, "RW_restComs", restComsBuffer); + shader.SetBuffer(plasticityKernel, "constraintOrientations", constraintOrientationsBuffer); + + shader.SetBuffer(plasticityKernel, "RW_Aqq", AqqBuffer); + shader.SetBuffer(plasticityKernel, "linearTransforms", linearTransformsBuffer); + shader.SetBuffer(plasticityKernel, "RW_deformation", plasticDeformationsBuffer); + + shader.SetBuffer(plasticityKernel, "restPositions", solverImplementation.restPositionsBuffer); + shader.SetBuffer(plasticityKernel, "restOrientations", solverImplementation.restOrientationsBuffer); + shader.SetBuffer(plasticityKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(plasticityKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + shader.SetBuffer(plasticityKernel, "principalRadii", solverImplementation.principalRadiiBuffer); + + shader.Dispatch(plasticityKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeShapeMatchingConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeShapeMatchingConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "firstIndex", firstIndexBuffer); + shader.SetBuffer(applyKernel, "numIndices", numIndicesBuffer); + shader.SetBuffer(applyKernel, "RW_positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + public void CalculateRestShapeMatching() + { + // just set a flag and do the actual calculation at the start of Evaluate(). + // This ensures GPu data of both particles and constraints is up to date when calculating the rest shape. + m_RecalculateRestShape = true; + } + + public void RequestDataReadback() + { + m_Coms.Readback(); + m_ConstraintOrientations.Readback(); + } + + public void WaitForReadback() + { + m_Coms.WaitForReadback(); + m_ConstraintOrientations.WaitForReadback(); + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs.meta new file mode 100644 index 000000000..82b0d2be8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efcebc6a8ed1446fe8216d7656fe7462 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta index a65025811..afbbedb2d 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e9fde13a2a0dc426892c122badd434c7 +guid: e3f96b782e06d47d699bad2fbd4712e1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs new file mode 100644 index 000000000..7a41a9a26 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeSkinConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeSkinConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Skin) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/SkinConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeSkinConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeSkinConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs.meta new file mode 100644 index 000000000..ffce2d875 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df84869cc78e04bb895be2db5e398cc3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs new file mode 100644 index 000000000..53cf5e820 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs @@ -0,0 +1,81 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeSkinConstraintsBatch : ComputeConstraintsBatchImpl, ISkinConstraintsBatchImpl + { + GraphicsBuffer skinPoints; + GraphicsBuffer skinNormalsBuffer; + GraphicsBuffer skinRadiiBackstopBuffer; + GraphicsBuffer skinComplianceBuffer; + + public ComputeSkinConstraintsBatch(ComputeSkinConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Skin; + } + + public void SetSkinConstraints(ObiNativeIntList particleIndices, ObiNativeVector4List skinPoints, ObiNativeVector4List skinNormals, ObiNativeFloatList skinRadiiBackstop, ObiNativeFloatList skinCompliance, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.skinPoints = skinPoints.AsComputeBuffer(); + this.skinNormalsBuffer = skinNormals.AsComputeBuffer(); + this.skinRadiiBackstopBuffer = skinRadiiBackstop.AsComputeBuffer(); + this.skinComplianceBuffer = skinCompliance.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + this.lambdasList = lambdas; + + m_ConstraintCount = count; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeSkinConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeSkinConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "skinPoints", skinPoints); + shader.SetBuffer(projectKernel, "skinNormals", skinNormalsBuffer); + shader.SetBuffer(projectKernel, "skinRadiiBackstop", skinRadiiBackstopBuffer); + shader.SetBuffer(projectKernel, "skinCompliance", skinComplianceBuffer); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeSkinConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeSkinConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs.meta new file mode 100644 index 000000000..6a56a4f0d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 935a9038a35be4d21aa06057f83040a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta index 3d17e2188..72b5b7083 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 091666a5c10624749b5604db5c75a83d +guid: 8fd1b55deaf68449f9fc2f037f032b4c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs new file mode 100644 index 000000000..e5f48a8f2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeStitchConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeStitchConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Stitch) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/StitchConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeStitchConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeStitchConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs.meta new file mode 100644 index 000000000..296677c85 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35350420ce5c24323abc6770d4de9655 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs new file mode 100644 index 000000000..ba09e5113 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs @@ -0,0 +1,71 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeStitchConstraintsBatch : ComputeConstraintsBatchImpl, IStitchConstraintsBatchImpl + { + GraphicsBuffer stiffnesses; + + public ComputeStitchConstraintsBatch(ComputeStitchConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Stitch; + } + + public void SetStitchConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.stiffnesses = stiffnesses.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + + m_ConstraintCount = count; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeStitchConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeStitchConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeStitchConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeStitchConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs.meta new file mode 100644 index 000000000..03b6837ef --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d82f622203a3d402dbbd5f47dd78fed3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta index 00ef8484f..d29894d3a 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 10bea9144cdb54c7ca268e71727ba816 +guid: 8cc7d1795a6bd4f75927ef02b05e44e7 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs new file mode 100644 index 000000000..d5116e659 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeStretchShearConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeStretchShearConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.StretchShear) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/StretchShearConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeStretchShearConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeStretchShearConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs.meta new file mode 100644 index 000000000..e91936fa3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7b820e9c187947bf8c31d04d72c402d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs new file mode 100644 index 000000000..991733151 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs @@ -0,0 +1,91 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeStretchShearConstraintsBatch : ComputeConstraintsBatchImpl, IStretchShearConstraintsBatchImpl + { + GraphicsBuffer orientationIndices; + GraphicsBuffer restLengths; + GraphicsBuffer restOrientations; + GraphicsBuffer stiffnesses; + + public ComputeStretchShearConstraintsBatch(ComputeStretchShearConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.StretchShear; + } + + public void SetStretchShearConstraints(ObiNativeIntList particleIndices, ObiNativeIntList orientationIndices, ObiNativeFloatList restLengths, ObiNativeQuaternionList restOrientations, ObiNativeVector3List stiffnesses, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.orientationIndices = orientationIndices.AsComputeBuffer(); + this.restLengths = restLengths.AsComputeBuffer(); + this.restOrientations = restOrientations.AsComputeBuffer(); + this.stiffnesses = stiffnesses.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + this.lambdasList = lambdas; + + m_ConstraintCount = count; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeStretchShearConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeStretchShearConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "orientationIndices", orientationIndices); + shader.SetBuffer(projectKernel, "restLengths", restLengths); + shader.SetBuffer(projectKernel, "restOrientations", restOrientations); + shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); + + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeStretchShearConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeStretchShearConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "orientationIndices", orientationIndices); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "orientations", solverImplementation.orientationsBuffer); + + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs.meta new file mode 100644 index 000000000..062a0cfcc --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2d0b5dfba06143f5b0a9939a3a2364b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta index 57c58c094..4c0427c6e 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f170479298b9f47a39047b37d4d124f0 +guid: 4ee9753d7b4f7422b9057618aa73476b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs new file mode 100644 index 000000000..a1ddceefe --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs @@ -0,0 +1,32 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeTetherConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int projectKernel; + public int applyKernel; + + public ComputeTetherConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Tether) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/TetherConstraints")); + projectKernel = constraintsShader.FindKernel("Project"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeTetherConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeTetherConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs.meta new file mode 100644 index 000000000..f663b0e3e --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56470001140924abea4d2589db0863ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs new file mode 100644 index 000000000..d482a917c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs @@ -0,0 +1,75 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeTetherConstraintsBatch : ComputeConstraintsBatchImpl, ITetherConstraintsBatchImpl + { + GraphicsBuffer maxLengthScale; + GraphicsBuffer stiffnesses; + + public ComputeTetherConstraintsBatch(ComputeTetherConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Tether; + } + + public void SetTetherConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List maxLengthScale, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsComputeBuffer(); + this.maxLengthScale = maxLengthScale.AsComputeBuffer(); + this.stiffnesses = stiffnesses.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + this.lambdasList = lambdas; + + m_ConstraintCount = count; + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + if (m_ConstraintCount > 0) + { + var shader = ((ComputeTetherConstraints)m_Constraints).constraintsShader; + int projectKernel = ((ComputeTetherConstraints)m_Constraints).projectKernel; + + shader.SetBuffer(projectKernel, "particleIndices", particleIndices); + shader.SetBuffer(projectKernel, "maxLengthScale", maxLengthScale); + shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("deltaTime", substepTime); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(projectKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeTetherConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeTetherConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "particleIndices", particleIndices); + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs.meta new file mode 100644 index 000000000..93feeaa45 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b68d976ed2b5c48d191ee9d067a164de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta index 2775f8143..ef341e7a8 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 15ac90acb12cf47928ff5732c87d2f08 +guid: b0eea52c14b4b4e7698c65a183951102 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs new file mode 100644 index 000000000..e673c5ed3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs @@ -0,0 +1,40 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ComputeVolumeConstraints : ComputeConstraintsImpl + { + public ComputeShader constraintsShader; + public int gradientsKernel; + public int volumeKernel; + public int denominatorsKernel; + public int constraintKernel; + public int deltasKernel; + public int applyKernel; + + public ComputeVolumeConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Volume) + { + constraintsShader = GameObject.Instantiate(Resources.Load("Compute/VolumeConstraints")); + gradientsKernel = constraintsShader.FindKernel("Gradients"); + volumeKernel = constraintsShader.FindKernel("CalculateVolume"); + denominatorsKernel = constraintsShader.FindKernel("Denominators"); + constraintKernel = constraintsShader.FindKernel("Constraint"); + deltasKernel = constraintsShader.FindKernel("AccumulateDeltas"); + applyKernel = constraintsShader.FindKernel("Apply"); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new ComputeVolumeConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as ComputeVolumeConstraintsBatch); + batch.Destroy(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs.meta new file mode 100644 index 000000000..e01c6e26e --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2266fb2819d84335874a8110cdacb76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs new file mode 100644 index 000000000..8f7e9b5eb --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs @@ -0,0 +1,223 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace Obi +{ + public class ComputeVolumeConstraintsBatch : ComputeConstraintsBatchImpl, IVolumeConstraintsBatchImpl + { + GraphicsBuffer firstTriangle; + GraphicsBuffer numTriangles; + GraphicsBuffer restVolumes; + GraphicsBuffer pressureStiffness; + + GraphicsBuffer volumes; + GraphicsBuffer denominators; + GraphicsBuffer triangleConstraintIndex; // for each triangle, its constraint index. + GraphicsBuffer particles; // indices of particles involved in each constraint. + GraphicsBuffer particleConstraintIndex; // for each particle, its constraint index. + + public ComputeVolumeConstraintsBatch(ComputeVolumeConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Volume; + } + + public void SetVolumeConstraints(ObiNativeIntList triangles, + ObiNativeIntList firstTriangle, + ObiNativeIntList numTriangles, + ObiNativeFloatList restVolumes, + ObiNativeVector2List pressureStiffness, + ObiNativeFloatList lambdas, + int count) + { + // store volume and denominator per constraint: + volumes = new GraphicsBuffer(GraphicsBuffer.Target.Structured, count, 4); + denominators = new GraphicsBuffer(GraphicsBuffer.Target.Structured, count, 4); + + + // get particles involved in each constraint: + List partic = new List(); + List partConstIndex = new List(); + List triConstIndex = new List(); + for (int i = 0; i < numTriangles.count; ++i) + { + List parts = new List(); + for (int j = 0; j < numTriangles[i]; ++j) + { + int tri = firstTriangle[i] + j; + + parts.Add(triangles[tri * 3]); + parts.Add(triangles[tri * 3+1]); + parts.Add(triangles[tri * 3+2]); + + partConstIndex.Add(i); + partConstIndex.Add(i); + partConstIndex.Add(i); + + triConstIndex.Add(i); + } + + // make them unique: + parts.Sort(); + int resultIndex = parts.Unique((int x, int y) => { return x == y; }); + + // remove excess at the end of the list: + if (resultIndex < parts.Count) + { + int removeCount = parts.Count - resultIndex; + + parts.RemoveRange(resultIndex, removeCount); + partConstIndex.RemoveRange(partConstIndex.Count - removeCount, removeCount); + } + + partic.AddRange(parts); + } + + particles = new GraphicsBuffer(GraphicsBuffer.Target.Structured, partic.Count, 4); + particleConstraintIndex = new GraphicsBuffer(GraphicsBuffer.Target.Structured, partConstIndex.Count, 4); + triangleConstraintIndex = new GraphicsBuffer(GraphicsBuffer.Target.Structured, triConstIndex.Count, 4); + + particles.SetData(partic); + particleConstraintIndex.SetData(partConstIndex); + triangleConstraintIndex.SetData(triConstIndex); + + this.particleIndices = triangles.AsComputeBuffer(); + this.firstTriangle = firstTriangle.AsComputeBuffer(); + this.numTriangles = numTriangles.AsComputeBuffer(); + this.restVolumes = restVolumes.AsComputeBuffer(); + this.pressureStiffness = pressureStiffness.AsComputeBuffer(); + this.lambdas = lambdas.AsComputeBuffer(); + + m_ConstraintCount = count; + } + + public override void Destroy() + { + volumes.Dispose(); + denominators.Dispose(); + particles.Dispose(); + particleConstraintIndex.Dispose(); + triangleConstraintIndex.Dispose(); + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + // 1: parallel over all triangles, atomic accumulate gradient on orientationDeltasInt + // 2: reduction over triangles, sum volume. + // 3: reduction over particles, sum denominator. + // 4: parallel over constraints: lambda + // 5: parallel over triangles, atomic accumulate delta. + + if (m_ConstraintCount > 0) + { + var shader = ((ComputeVolumeConstraints)m_Constraints).constraintsShader; + int gradientsKernel = ((ComputeVolumeConstraints)m_Constraints).gradientsKernel; + int volumeKernel = ((ComputeVolumeConstraints)m_Constraints).volumeKernel; + int denominatorsKernel = ((ComputeVolumeConstraints)m_Constraints).denominatorsKernel; + int constraintKernel = ((ComputeVolumeConstraints)m_Constraints).constraintKernel; + int deltasKernel = ((ComputeVolumeConstraints)m_Constraints).deltasKernel; + + /*shader.SetBuffer(projectKernel, "triangles", particleIndices); + shader.SetBuffer(projectKernel, "firstTriangle", firstTriangle); + shader.SetBuffer(projectKernel, "numTriangles", numTriangles); + shader.SetBuffer(projectKernel, "restVolumes", restVolumes); + shader.SetBuffer(projectKernel, "pressureStiffness", pressureStiffness); + shader.SetBuffer(projectKernel, "lambdas", lambdas); + + shader.SetBuffer(projectKernel, "denominators", denominators); + shader.SetBuffer(projectKernel, "volumes", volumes); + shader.SetBuffer(projectKernel, "gradients", solverImplementation.fluidDataBuffer); + + shader.SetBuffer(projectKernel, "particles", particles); + shader.SetBuffer(projectKernel, "particleConstraintIndex", particleConstraintIndex); + shader.SetBuffer(projectKernel, "triangleConstraintIndex", triangleConstraintIndex); + + shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer);*/ + + int trianglesCount = particleIndices.count / 3; + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetInt("trianglesCount", trianglesCount); + shader.SetInt("particlesCount", particles.count); + shader.SetFloat("deltaTime", substepTime); + + // Gradients: + shader.SetBuffer(gradientsKernel, "triangles", particleIndices); + shader.SetBuffer(gradientsKernel, "gradients", solverImplementation.fluidDataBuffer); + shader.SetBuffer(gradientsKernel, "positions", solverImplementation.positionsBuffer); + + int threadGroups = ComputeMath.ThreadGroupCount(trianglesCount, 128); + shader.Dispatch(gradientsKernel, threadGroups, 1, 1); + + // Volume: + shader.SetBuffer(volumeKernel, "triangles", particleIndices); + shader.SetBuffer(volumeKernel, "gradients", solverImplementation.fluidDataBuffer); + shader.SetBuffer(volumeKernel, "volumes", volumes); + shader.SetBuffer(volumeKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(volumeKernel, "triangleConstraintIndex", triangleConstraintIndex); + + shader.Dispatch(volumeKernel, threadGroups, 1, 1); + + // Denominators: + shader.SetBuffer(denominatorsKernel, "particles", particles); + shader.SetBuffer(denominatorsKernel, "particleConstraintIndex", particleConstraintIndex); + shader.SetBuffer(denominatorsKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(denominatorsKernel, "gradients", solverImplementation.fluidDataBuffer); + shader.SetBuffer(denominatorsKernel, "denominators", denominators); + + threadGroups = ComputeMath.ThreadGroupCount(particles.count, 128); + shader.Dispatch(denominatorsKernel, threadGroups, 1, 1); + + // Constraint: + shader.SetBuffer(constraintKernel, "denominators", denominators); + shader.SetBuffer(constraintKernel, "volumes", volumes); + shader.SetBuffer(constraintKernel, "restVolumes", restVolumes); + shader.SetBuffer(constraintKernel, "pressureStiffness", pressureStiffness); + shader.SetBuffer(constraintKernel, "lambdas", lambdas); + + threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(constraintKernel, threadGroups, 1, 1); + + // Deltas: + shader.SetBuffer(deltasKernel, "particles", particles); + shader.SetBuffer(deltasKernel, "particleConstraintIndex", particleConstraintIndex); + shader.SetBuffer(deltasKernel, "lambdas", lambdas); + shader.SetBuffer(deltasKernel, "invMasses", solverImplementation.invMassesBuffer); + shader.SetBuffer(deltasKernel, "gradients", solverImplementation.fluidDataBuffer); + shader.SetBuffer(deltasKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(deltasKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + threadGroups = ComputeMath.ThreadGroupCount(particles.count, 128); + shader.Dispatch(deltasKernel, threadGroups, 1, 1); + } + } + + public override void Apply(float substepTime) + { + if (m_ConstraintCount > 0) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var shader = ((ComputeVolumeConstraints)m_Constraints).constraintsShader; + int applyKernel = ((ComputeVolumeConstraints)m_Constraints).applyKernel; + + shader.SetBuffer(applyKernel, "triangles", particleIndices); + shader.SetBuffer(applyKernel, "firstTriangle", firstTriangle); + shader.SetBuffer(applyKernel, "numTriangles", numTriangles); + + shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); + shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + + shader.SetInt("activeConstraintCount", m_ConstraintCount); + shader.SetFloat("sorFactor", parameters.SORFactor); + + int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); + shader.Dispatch(applyKernel, threadGroups, 1, 1); + } + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs.meta new file mode 100644 index 000000000..d661247b3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf26bec1336ef46c6a92b8d8b0e0cc5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures.meta new file mode 100644 index 000000000..e93da584f --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1787c55de187458bb78941ba68adf09 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs new file mode 100644 index 000000000..6ebd4976a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs @@ -0,0 +1,424 @@ +using UnityEngine; +using System; + +namespace Obi +{ + public class ComputeParticleGrid : IDisposable + { + public ComputeShader gridShader; + public int clearKernel; + public int insertSimplicesKernel; + public int gridPopulationKernel; + public int sortSimplicesKernel; + public int buildFluidDispatchKernel; + public int buildMortonKernel; + public int mortonSortKernel; + public int sortFluidSimplicesKernel; + + public int sameLevelNeighborsKernel; + public int upperLevelsNeighborsKernel; + public int buildFluidIndexBufferKernel; + public int contactsKernel; + + public ComputePrefixSum cellsPrefixSum; + private ComputePrefixSum fluidPrefixSum; + + public GraphicsBuffer cellCounts; // for each cell, how many simplices in it. + public GraphicsBuffer cellOffsets; // index of the first simplex in the cell (on gridToMorton buffer). + public GraphicsBuffer offsetInCell; // for each simplex, offset within its cell. + public GraphicsBuffer levelPopulation; // buffer storing amount of entries in each grid level + + public GraphicsBuffer neighbors; // neighbor indices for all particles. (maxNeighbors * simplexCount in size) + public GraphicsBuffer neighborCounts; // amount of neighbors for each particle. (simplexCount in size) + + public GraphicsBuffer contactPairs; // list of particle pairs. + public GraphicsBuffer dispatchBuffer; // dispatch info for iterating trough contacts. + + public GraphicsBuffer cellHashToMortonIndex; + public GraphicsBuffer mortonSortedCellHashes; // contains all cell hashes sorted according to their morton index. + public GraphicsBuffer sortedSimplexIndices; // maps from grid index to simplex index. + + public GraphicsBuffer sortedFluidIndices; // contains compacted sorted indices of fluid simplices *only*. Eg, entry 0 contains the index of the first fluid simplex along the morton curve. + public GraphicsBuffer sortedSimplexToFluid; // maps from sorted simplex index to sorted fluid index, or -1 if the simplex is not fluid. + + public GraphicsBuffer sortedPrincipalRadii; // Used by Density constraints: needs to be sorted once per step (not changed by constraints) + public GraphicsBuffer sortedFluidMaterials; // Used by Density constraints: needs to be sorted once per step (not changed by constraints) + public GraphicsBuffer sortedFluidInterface; // Used by Density constraints: needs to be sorted once per step (not changed by constraints) + public GraphicsBuffer sortedFluidData; // Used by Density constraints: no need to be sorted (constraints output). + + public GraphicsBuffer sortedLinearVel; // Not used by density constraints: used for foam advection and mesher. + public GraphicsBuffer sortedAngularVel; // Not used by density constraints: used for foam advection. + + public GraphicsBuffer sortedPositions; // Used by Density constraints: needs to be sorted once per iteration. + public GraphicsBuffer sortedPrevPosOrientations; // Used by Density constraints: needs to be sorted once per iteration. Reuse for orientations (foam advection and mesher). + public GraphicsBuffer sortedUserDataColor; // Used by Density constraints: needs to be sorted once per iteration. Reuse for colors (mesher). + + private const int maxGridLevels = 24; + private uint[] clearDispatch = { 0, 1, 1, 0 }; + + public int maxParticleNeighbors { get; private set; } = 128; + public int maxParticleContacts { get; private set; } = 4; + + public int maxCells{ + get { return cellCounts != null ? cellCounts.count : 0; } + } + + public ComputeParticleGrid() + { + gridShader = GameObject.Instantiate(Resources.Load("Compute/ParticleGrid")); + clearKernel = gridShader.FindKernel("Clear"); + insertSimplicesKernel = gridShader.FindKernel("InsertSimplices"); + gridPopulationKernel = gridShader.FindKernel("FindPopulatedLevels"); + sortSimplicesKernel = gridShader.FindKernel("SortSimplices"); + buildFluidDispatchKernel = gridShader.FindKernel("BuildFluidDispatch"); + buildMortonKernel = gridShader.FindKernel("BuildMortonIndices"); + mortonSortKernel = gridShader.FindKernel("MortonSort"); + sortFluidSimplicesKernel = gridShader.FindKernel("SortFluidSimplices"); + sameLevelNeighborsKernel = gridShader.FindKernel("FindFluidNeighborsInSameLevel"); + upperLevelsNeighborsKernel = gridShader.FindKernel("FindFluidNeighborsInUpperLevels"); + buildFluidIndexBufferKernel = gridShader.FindKernel("BuildFluidParticleIndexBuffer"); + contactsKernel = gridShader.FindKernel("BuildContactList"); + + levelPopulation = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxGridLevels + 1, 4); + dispatchBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 4, sizeof(uint)); + } + + private void Clear() + { + cellsPrefixSum?.Dispose(); + fluidPrefixSum?.Dispose(); + + if (cellCounts != null) + cellCounts.Dispose(); + if (cellOffsets != null) + cellOffsets.Dispose(); + if (offsetInCell != null) + offsetInCell.Dispose(); + + if (contactPairs != null) + contactPairs.Dispose(); + + if (neighbors != null) + neighbors.Dispose(); + if (neighborCounts != null) + neighborCounts.Dispose(); + + if (cellHashToMortonIndex != null) + cellHashToMortonIndex.Dispose(); + if (mortonSortedCellHashes != null) + mortonSortedCellHashes.Dispose(); + if (sortedSimplexIndices != null) + sortedSimplexIndices.Dispose(); + if (sortedFluidIndices != null) + sortedFluidIndices.Dispose(); + if (sortedSimplexToFluid != null) + sortedSimplexToFluid.Dispose(); + + if (sortedPositions != null) + sortedPositions.Dispose(); + if (sortedPrevPosOrientations != null) + sortedPrevPosOrientations.Dispose(); + if (sortedPrincipalRadii != null) + sortedPrincipalRadii.Dispose(); + if (sortedFluidMaterials != null) + sortedFluidMaterials.Dispose(); + if (sortedFluidInterface != null) + sortedFluidInterface.Dispose(); + if (sortedUserDataColor != null) + sortedUserDataColor.Dispose(); + if (sortedFluidData != null) + sortedFluidData.Dispose(); + + if (sortedLinearVel != null) + sortedLinearVel.Dispose(); + if (sortedAngularVel != null) + sortedAngularVel.Dispose(); + + cellsPrefixSum = null; + fluidPrefixSum = null; + cellCounts = null; + cellOffsets = null; + offsetInCell = null; + contactPairs = null; + neighbors = null; + neighborCounts = null; + sortedSimplexIndices = null; + cellHashToMortonIndex = null; + sortedFluidIndices = null; + sortedSimplexToFluid = null; + sortedPositions = null; + sortedPrevPosOrientations = null; + sortedPrincipalRadii = null; + sortedFluidMaterials = null; + sortedFluidInterface = null; + sortedUserDataColor = null; + sortedFluidData = null; + sortedLinearVel = null; + sortedAngularVel = null; + } + + public void Dispose() + { + if (levelPopulation != null) + levelPopulation.Dispose(); + + if (dispatchBuffer != null) + dispatchBuffer.Dispose(); + + levelPopulation = null; + dispatchBuffer = null; + + Clear(); + } + + // Sets the maximum amount of items that can be stored in the grid. + public bool SetCapacity(int capacity, uint maxParticleContacts, uint maxParticleNeighbors) + { + if (offsetInCell == null || capacity > offsetInCell.count || + maxParticleNeighbors != this.maxParticleNeighbors || + maxParticleContacts != this.maxParticleContacts) + { + Clear(); + + this.maxParticleNeighbors = (int)maxParticleNeighbors; + this.maxParticleContacts = (int)maxParticleContacts; + + capacity *= 2; + int hashtableSize = (int)(capacity * 1.5f); + + // hashtable data: + cellCounts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, hashtableSize, 4); + cellOffsets = new GraphicsBuffer(GraphicsBuffer.Target.Structured, hashtableSize, 4); + mortonSortedCellHashes = new GraphicsBuffer(GraphicsBuffer.Target.Structured, hashtableSize, 4); + cellHashToMortonIndex = new GraphicsBuffer(GraphicsBuffer.Target.Structured, hashtableSize, 4); + cellsPrefixSum = new ComputePrefixSum(hashtableSize); + + // per simplex data: + offsetInCell = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); + sortedSimplexIndices = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); + sortedFluidIndices = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); + sortedSimplexToFluid = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); + + // contact pairs and neighbor lists: + contactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity * (int)maxParticleContacts, 8); + neighbors = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity * (int)maxParticleNeighbors, 4); + neighborCounts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); + + // sorted fluid simplex data: + fluidPrefixSum = new ComputePrefixSum(capacity); + sortedPrincipalRadii = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + sortedFluidMaterials = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + sortedFluidInterface = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + sortedPositions = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + sortedPrevPosOrientations = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + sortedUserDataColor = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + sortedFluidData = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + sortedLinearVel = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + sortedAngularVel = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); + + return true; + } + return false; + } + + public void BuildGrid(ComputeSolverImpl solver, float deltaTime) + { + dispatchBuffer.SetData(clearDispatch); + solver.fluidDispatchBuffer.SetData(clearDispatch); + + if (solver.simplexCounts.simplexCount > 0) + { + gridShader.SetInt("pointCount", solver.simplexCounts.pointCount); + gridShader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + gridShader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + gridShader.SetInt("maxContacts", contactPairs.count); + gridShader.SetInt("maxCells", cellCounts.count); + gridShader.SetInt("maxNeighbors", maxParticleNeighbors); + gridShader.SetFloat("deltaTime", deltaTime); + gridShader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + gridShader.SetFloat("particleCCD", solver.abstraction.parameters.particleCCD); + int cellThreadGroups = ComputeMath.ThreadGroupCount(cellCounts.count, 128); + + solver.abstraction.particleContacts.computeBuffer.SetCounterValue(0); + + int simplexThreadGroups = ComputeMath.ThreadGroupCount(solver.simplexCounts.simplexCount, 128); + + // clear grid: + gridShader.SetBuffer(clearKernel, "cellCounts", cellCounts); + gridShader.SetBuffer(clearKernel, "cellOffsets", cellOffsets); + gridShader.SetBuffer(clearKernel, "levelPopulation", levelPopulation); + gridShader.SetBuffer(clearKernel, "mortonSortedCellHashes", mortonSortedCellHashes); + gridShader.Dispatch(clearKernel, cellThreadGroups, 1, 1); + + // insert simplices in grid and flag fluid simplices: + gridShader.SetBuffer(insertSimplicesKernel, "solverBounds", solver.reducedBounds); + gridShader.SetBuffer(insertSimplicesKernel, "simplexBounds", solver.simplexBounds); + gridShader.SetBuffer(insertSimplicesKernel, "simplices", solver.simplices); + gridShader.SetBuffer(insertSimplicesKernel, "phases", solver.phasesBuffer); + gridShader.SetBuffer(insertSimplicesKernel, "neighborCounts", neighborCounts); + gridShader.SetBuffer(insertSimplicesKernel, "levelPopulation", levelPopulation); + gridShader.SetBuffer(insertSimplicesKernel, "cellCoords", solver.cellCoordsBuffer); + gridShader.SetBuffer(insertSimplicesKernel, "cellCounts", cellCounts); + gridShader.SetBuffer(insertSimplicesKernel, "offsetInCell", offsetInCell); + gridShader.SetBuffer(insertSimplicesKernel, "cellOffsets", cellOffsets); + gridShader.Dispatch(insertSimplicesKernel, simplexThreadGroups, 1, 1); + + // find populated grid levels: + gridShader.SetBuffer(gridPopulationKernel, "levelPopulation", levelPopulation); + gridShader.Dispatch(gridPopulationKernel, 1, 1, 1); + + // sort cells along morton curve: + gridShader.SetBuffer(mortonSortKernel, "mortonSortedCellHashes", mortonSortedCellHashes); + gridShader.SetBuffer(mortonSortKernel, "cellOffsets", cellOffsets); + gridShader.SetBuffer(mortonSortKernel, "cellCounts", cellCounts); + + int numPairs = ObiUtils.CeilToPowerOfTwo(maxCells) / 2; + int numStages = (int)Mathf.Log(numPairs * 2, 2); + int groups = ComputeMath.ThreadGroupCount(numPairs, 128); + + for (int stageIndex = 0; stageIndex < numStages; stageIndex++) + { + for (int stepIndex = 0; stepIndex < stageIndex + 1; stepIndex++) + { + int groupWidth = 1 << (stageIndex - stepIndex); + int groupHeight = 2 * groupWidth - 1; + gridShader.SetInt("groupWidth", groupWidth); + gridShader.SetInt("groupHeight", groupHeight); + gridShader.SetInt("stepIndex", stepIndex); + gridShader.Dispatch(mortonSortKernel, groups, 1, 1); + } + } + + // build morton indices: + gridShader.SetBuffer(buildMortonKernel, "mortonSortedCellHashes", mortonSortedCellHashes); + gridShader.SetBuffer(buildMortonKernel, "cellHashToMortonIndex", cellHashToMortonIndex); + gridShader.Dispatch(buildMortonKernel, cellThreadGroups, 1, 1); + + // prefix sum to build cell start array: + cellsPrefixSum.Sum(cellCounts, cellOffsets); + + // sort simplex indices and compact fluid simplex indices: + gridShader.SetBuffer(sortSimplicesKernel, "phases", solver.phasesBuffer); + gridShader.SetBuffer(sortSimplicesKernel, "cellHashToMortonIndex", cellHashToMortonIndex); + gridShader.SetBuffer(sortSimplicesKernel, "sortedSimplexIndices", sortedSimplexIndices); + gridShader.SetBuffer(sortSimplicesKernel, "sortedFluidIndices", sortedFluidIndices); + gridShader.SetBuffer(sortSimplicesKernel, "R_offsetInCell", offsetInCell); + gridShader.SetBuffer(sortSimplicesKernel, "R_cellOffsets", cellOffsets); + gridShader.SetBuffer(sortSimplicesKernel, "R_cellCoords", solver.cellCoordsBuffer); + gridShader.SetBuffer(sortSimplicesKernel, "simplices", solver.simplices); + gridShader.Dispatch(sortSimplicesKernel, simplexThreadGroups, 1, 1); + + // prefix sum of fluid flags: + fluidPrefixSum.Sum(sortedFluidIndices, sortedSimplexToFluid); + + // build fluid dispatch buffer: + gridShader.SetBuffer(buildFluidDispatchKernel, "fluidDispatchBuffer", solver.fluidDispatchBuffer); + gridShader.SetBuffer(buildFluidDispatchKernel, "sortedFluidIndices", sortedFluidIndices); + gridShader.SetBuffer(buildFluidDispatchKernel, "sortedSimplexToFluid", sortedSimplexToFluid); + gridShader.Dispatch(buildFluidDispatchKernel, 1, 1, 1); + + // sort fluid data: + gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedFluidIndices", sortedFluidIndices); + gridShader.SetBuffer(sortFluidSimplicesKernel, "cellHashToMortonIndex", cellHashToMortonIndex); + gridShader.SetBuffer(sortFluidSimplicesKernel, "positions", solver.positionsBuffer); + gridShader.SetBuffer(sortFluidSimplicesKernel, "fluidInterface", solver.fluidInterfaceBuffer); + gridShader.SetBuffer(sortFluidSimplicesKernel, "principalRadii", solver.principalRadiiBuffer); + gridShader.SetBuffer(sortFluidSimplicesKernel, "phases", solver.phasesBuffer); + gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedPositions", sortedPositions); + gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedFluidMaterials", sortedFluidMaterials); + gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedFluidInterface", sortedFluidInterface); + gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedPrincipalRadii", sortedPrincipalRadii); + gridShader.SetBuffer(sortFluidSimplicesKernel, "fluidMaterials", solver.fluidMaterialsBuffer); + gridShader.SetBuffer(sortFluidSimplicesKernel, "R_offsetInCell", offsetInCell); + gridShader.SetBuffer(sortFluidSimplicesKernel, "R_cellOffsets", cellOffsets); + gridShader.SetBuffer(sortFluidSimplicesKernel, "R_cellCoords", solver.cellCoordsBuffer); + gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedSimplexToFluid", sortedSimplexToFluid); + gridShader.SetBuffer(sortFluidSimplicesKernel, "simplices", solver.simplices); + gridShader.SetBuffer(sortFluidSimplicesKernel, "fluidDispatchBuffer", solver.fluidDispatchBuffer); + gridShader.Dispatch(sortFluidSimplicesKernel, simplexThreadGroups, 1, 1); + } + } + + public void GenerateContacts(ComputeSolverImpl solver) + { + if (solver.simplexCounts.simplexCount > 0) + { + int simplexThreadGroups = ComputeMath.ThreadGroupCount(solver.simplexCounts.simplexCount, 128); + + // generate contacts list: + gridShader.SetBuffer(contactsKernel, "simplices", solver.simplices); + gridShader.SetBuffer(contactsKernel, "sortedSimplexIndices", sortedSimplexIndices); + gridShader.SetBuffer(contactsKernel, "sortedPositions", sortedPositions); + gridShader.SetBuffer(contactsKernel, "sortedFluidMaterials", sortedFluidMaterials); + gridShader.SetBuffer(contactsKernel, "positions", solver.positionsBuffer); + + gridShader.SetBuffer(contactsKernel, "cellHashToMortonIndex", cellHashToMortonIndex); + gridShader.SetBuffer(contactsKernel, "restPositions", solver.restPositionsBuffer); + gridShader.SetBuffer(contactsKernel, "orientations", solver.orientationsBuffer); + gridShader.SetBuffer(contactsKernel, "restOrientations", solver.restOrientationsBuffer); + gridShader.SetBuffer(contactsKernel, "velocities", solver.velocitiesBuffer); + gridShader.SetBuffer(contactsKernel, "invMasses", solver.invMassesBuffer); + gridShader.SetBuffer(contactsKernel, "phases", solver.phasesBuffer); + gridShader.SetBuffer(contactsKernel, "filters", solver.filtersBuffer); + gridShader.SetBuffer(contactsKernel, "principalRadii", solver.principalRadiiBuffer); + gridShader.SetBuffer(contactsKernel, "normals", solver.normalsBuffer); + gridShader.SetBuffer(contactsKernel, "R_cellCoords", solver.cellCoordsBuffer); + gridShader.SetBuffer(contactsKernel, "R_cellOffsets", cellOffsets); + gridShader.SetBuffer(contactsKernel, "R_cellCounts", cellCounts); + gridShader.SetBuffer(contactsKernel, "R_offsetInCell", offsetInCell); + gridShader.SetBuffer(contactsKernel, "R_levelPopulation", levelPopulation); + gridShader.SetBuffer(contactsKernel, "particleContacts", solver.abstraction.particleContacts.computeBuffer); + gridShader.SetBuffer(contactsKernel, "contactPairs", contactPairs); + gridShader.SetBuffer(contactsKernel, "dispatchBuffer", dispatchBuffer); + gridShader.Dispatch(contactsKernel, simplexThreadGroups, 1, 1); + } + } + + public void GenerateFluidNeighborhoods(ComputeSolverImpl solver) + { + if (solver.simplexCounts.simplexCount > 0) + { + // generate fluid neighbors list: + gridShader.SetBuffer(sameLevelNeighborsKernel, "solverBounds", solver.reducedBounds); + gridShader.SetBuffer(sameLevelNeighborsKernel, "cellHashToMortonIndex", cellHashToMortonIndex); + gridShader.SetBuffer(sameLevelNeighborsKernel, "sortedFluidIndices", sortedFluidIndices); + gridShader.SetBuffer(sameLevelNeighborsKernel, "sortedPositions", sortedPositions); + gridShader.SetBuffer(sameLevelNeighborsKernel, "sortedFluidMaterials", sortedFluidMaterials); + gridShader.SetBuffer(sameLevelNeighborsKernel, "R_cellCoords", solver.cellCoordsBuffer); + gridShader.SetBuffer(sameLevelNeighborsKernel, "R_cellOffsets", cellOffsets); + gridShader.SetBuffer(sameLevelNeighborsKernel, "R_cellCounts", cellCounts); + gridShader.SetBuffer(sameLevelNeighborsKernel, "R_offsetInCell", offsetInCell); + gridShader.SetBuffer(sameLevelNeighborsKernel, "R_levelPopulation", levelPopulation); + gridShader.SetBuffer(sameLevelNeighborsKernel, "sortedSimplexToFluid", sortedSimplexToFluid); + gridShader.SetBuffer(sameLevelNeighborsKernel, "simplices", solver.simplices); + gridShader.SetBuffer(sameLevelNeighborsKernel, "neighbors", neighbors); + gridShader.SetBuffer(sameLevelNeighborsKernel, "neighborCounts", neighborCounts); + gridShader.SetBuffer(sameLevelNeighborsKernel, "dispatchBuffer", solver.fluidDispatchBuffer); + gridShader.DispatchIndirect(sameLevelNeighborsKernel, solver.fluidDispatchBuffer); + + gridShader.SetBuffer(upperLevelsNeighborsKernel, "solverBounds", solver.reducedBounds); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "cellHashToMortonIndex", cellHashToMortonIndex); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "sortedPositions", sortedPositions); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "sortedFluidIndices", sortedFluidIndices); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "mortonSortedSimplexIndices", mortonSortedCellHashes); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "sortedFluidMaterials", sortedFluidMaterials); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_cellCoords", solver.cellCoordsBuffer); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_cellOffsets", cellOffsets); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_cellCounts", cellCounts); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_offsetInCell", offsetInCell); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_levelPopulation", levelPopulation); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "sortedSimplexToFluid", sortedSimplexToFluid); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "simplices", solver.simplices); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "neighbors", neighbors); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "neighborCounts", neighborCounts); + gridShader.SetBuffer(upperLevelsNeighborsKernel, "dispatchBuffer", solver.fluidDispatchBuffer); + gridShader.DispatchIndirect(upperLevelsNeighborsKernel, solver.fluidDispatchBuffer); + + gridShader.SetBuffer(buildFluidIndexBufferKernel, "sortedFluidIndices", sortedFluidIndices); + gridShader.SetBuffer(buildFluidIndexBufferKernel, "simplices", solver.simplices); + gridShader.SetBuffer(buildFluidIndexBufferKernel, "dispatchBuffer", solver.fluidDispatchBuffer); + gridShader.DispatchIndirect(buildFluidIndexBufferKernel, solver.fluidDispatchBuffer); + } + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs.meta new file mode 100644 index 000000000..3316aef4d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4965240eebe4141968c02c8af6c340ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs new file mode 100644 index 000000000..4f29ab9f3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs @@ -0,0 +1,82 @@ +using System.Collections; +using System.Collections.Generic; +using Obi; +using UnityEngine; + +namespace Obi +{ + public class ComputePrefixSum + { + private ComputeShader scanShader; + private int scanInBucketKernel; + private int scanAddBucketResult; + + private List blockSums = new List(); + private List prefixBlockSums = new List(); + private int inputSize; + private const int threadsPerGroup = 512; + + public ComputePrefixSum(int inputSize) + { + scanShader = Resources.Load("Compute/Scan"); + scanInBucketKernel = scanShader.FindKernel("ScanInBucketExclusive"); + scanAddBucketResult = scanShader.FindKernel("ScanAddBucketResult"); + + this.inputSize = inputSize; + + // intermediate auxiliary buffers to store prefix sum of partial block sums: + int c = inputSize; + while (c > 1) + { + c = (c + threadsPerGroup - 1) / threadsPerGroup; + blockSums.Add(new GraphicsBuffer(GraphicsBuffer.Target.Structured, c, 4)); + prefixBlockSums.Add(new GraphicsBuffer(GraphicsBuffer.Target.Structured, c, 4)); + } + } + + public void Dispose() + { + foreach (var sums in blockSums) + if (sums != null && sums.IsValid()) + sums.Dispose(); + blockSums.Clear(); + + foreach (var sums in prefixBlockSums) + if (sums != null && sums.IsValid()) + sums.Dispose(); + prefixBlockSums.Clear(); + } + + public void Sum(GraphicsBuffer input, GraphicsBuffer result) + { + if (input.count != inputSize) + return; + Sum(input, result, input.count, 0); + } + + private void Sum(GraphicsBuffer input, GraphicsBuffer result, int count, int level) + { + int groups = (count + threadsPerGroup - 1) / threadsPerGroup; + + // calculate partial prefix sums, one per block: + scanShader.SetInt("count", count); + scanShader.SetBuffer(scanInBucketKernel, "_Input", input); + scanShader.SetBuffer(scanInBucketKernel, "_Result", result); + scanShader.SetBuffer(scanInBucketKernel, "_BlockSum", blockSums[level]); + scanShader.Dispatch(scanInBucketKernel, groups, 1, 1); + + if (groups <= 1) + return; + + // recursively calculate prefix sum of the partial block sums: + Sum(blockSums[level], prefixBlockSums[level], groups, level + 1); + + // add the scanned partial block sums to the result: + // (it's important to set the count again, as we just returned from a recursive call). + scanShader.SetInt("count", count); + scanShader.SetBuffer(scanAddBucketResult, "_Input", prefixBlockSums[level]); + scanShader.SetBuffer(scanAddBucketResult, "_Result", result); + scanShader.Dispatch(scanAddBucketResult, groups, 1, 1); + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs.meta new file mode 100644 index 000000000..09aece2e8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7909b2c7733204ec39181859400b780e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs new file mode 100644 index 000000000..26c6af2bf --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs @@ -0,0 +1,46 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeSort + { + private ComputeShader sortShader; + private int sortKernel; + + public ComputeSort() + { + sortShader = Resources.Load("Compute/BitonicSort"); + sortKernel = sortShader.FindKernel("BitonicSort"); + } + + public void Sort(GraphicsBuffer keys, GraphicsBuffer values) + { + if (keys.count != values.count) + return; + + sortShader.SetInt("numEntries", keys.count); + sortShader.SetBuffer(sortKernel, "Keys", keys); + sortShader.SetBuffer(sortKernel, "Values", values); + + // Launch each step of the sorting algorithm (once the previous step is complete) + // Number of steps = [log2(n) * (log2(n) + 1)] / 2 + // where n = nearest power of 2 that is greater or equal to the number of inputs + int numPairs = ObiUtils.CeilToPowerOfTwo(keys.count) / 2; + int numStages = (int)Mathf.Log(numPairs * 2, 2); + int groups = ComputeMath.ThreadGroupCount(numPairs, 128); + + for (int stageIndex = 0; stageIndex < numStages; stageIndex++) + { + for (int stepIndex = 0; stepIndex < stageIndex + 1; stepIndex++) + { + int groupWidth = 1 << (stageIndex - stepIndex); + int groupHeight = 2 * groupWidth - 1; + sortShader.SetInt("groupWidth", groupWidth); + sortShader.SetInt("groupHeight", groupHeight); + sortShader.SetInt("stepIndex", stepIndex); + sortShader.Dispatch(sortKernel, groups,1,1); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs.meta new file mode 100644 index 000000000..4705d4209 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bda407cc694ed4b438cfea3d847ee85f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries.meta new file mode 100644 index 000000000..ae5d9ccff --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 720d0f7e26a9d46039d564d1d98f08c9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs new file mode 100644 index 000000000..9e40726a3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeBoxQuery + { + private ComputeShader shader; + private int kernel; + + public ComputeBoxQuery() + { + shader = GameObject.Instantiate(Resources.Load("Compute/BoxShapeQuery")); + kernel = shader.FindKernel("GenerateResults"); + } + + public void GetResults(ComputeSolverImpl solver, SpatialQueries world, GraphicsBuffer transforms, GraphicsBuffer shapes, GraphicsBuffer results) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", transforms); + shader.SetBuffer(kernel, "shapes", shapes); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "results", results); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)QueryShape.QueryType.Box); + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs.meta new file mode 100644 index 000000000..1236be060 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8956fcafa2f984a80a9448fb71a11c7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs new file mode 100644 index 000000000..4fe96fd1d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeRayQuery + { + private ComputeShader shader; + private int kernel; + + public ComputeRayQuery() + { + shader = GameObject.Instantiate(Resources.Load("Compute/RayShapeQuery")); + kernel = shader.FindKernel("GenerateResults"); + } + + public void GetResults(ComputeSolverImpl solver, SpatialQueries world, GraphicsBuffer transforms, GraphicsBuffer shapes, GraphicsBuffer results) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", transforms); + shader.SetBuffer(kernel, "shapes", shapes); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "results", results); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)QueryShape.QueryType.Ray); + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs.meta new file mode 100644 index 000000000..a075d168c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df812762d482f4e8c86a698f8062b99a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs new file mode 100644 index 000000000..3c53dfb59 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace Obi +{ + public class ComputeSphereQuery + { + private ComputeShader shader; + private int kernel; + + public ComputeSphereQuery() + { + shader = GameObject.Instantiate(Resources.Load("Compute/SphereShapeQuery")); + kernel = shader.FindKernel("GenerateResults"); + } + + public void GetResults(ComputeSolverImpl solver, SpatialQueries world, GraphicsBuffer transforms, GraphicsBuffer shapes, GraphicsBuffer results) + { + shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); + shader.SetInt("pointCount", solver.simplexCounts.pointCount); + shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); + shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); + shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); + shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); + shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); + + shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); + shader.SetBuffer(kernel, "simplices", solver.simplices); + shader.SetBuffer(kernel, "positions", solver.positionsBuffer); + shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); + shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); + shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); + shader.SetBuffer(kernel, "transforms", transforms); + shader.SetBuffer(kernel, "shapes", shapes); + shader.SetBuffer(kernel, "contactPairs", world.contactPairs); + shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); + shader.SetBuffer(kernel, "results", results); + shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); + shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)QueryShape.QueryType.Sphere); + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs.meta new file mode 100644 index 000000000..5eb442cca --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c65e1510ca8a54514b0a6a06c37a48fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering.meta new file mode 100644 index 000000000..a6090f8a3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 452c2c7555bce40d1bff65cc65686668 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common.meta new file mode 100644 index 000000000..3fc9d9a39 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17503ab71a29b454ab068ea80d5f203c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs new file mode 100644 index 000000000..dea63a81c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs @@ -0,0 +1,155 @@ +using UnityEngine; +using UnityEngine.Rendering; +#if (SRP_UNIVERSAL) +using UnityEngine.Rendering.Universal; +#endif + +namespace Obi +{ + + public class ComputeFoamRenderSystem : ObiFoamRenderSystem + { + + private ComputeShader foamShader; + private int sortKernel; + private int clearMeshKernel; + private int buildMeshKernel; + + protected Material thickness_Material; + protected Material color_Material; + protected LocalKeyword shader2DFeature; + + public ComputeFoamRenderSystem(ObiSolver solver) : base (solver) + { + foamShader = GameObject.Instantiate(Resources.Load("Compute/FluidFoam")); + sortKernel = foamShader.FindKernel("Sort"); + clearMeshKernel = foamShader.FindKernel("ClearMesh"); + buildMeshKernel = foamShader.FindKernel("BuildMesh"); + +#if (SRP_UNIVERSAL) + if (GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset) + renderBatch = new ProceduralRenderBatch(0, Resources.Load("ObiMaterials/URP/Fluid/FoamParticlesURP"), new RenderBatchParams(true)); + else +#endif + renderBatch = new ProceduralRenderBatch(0, Resources.Load("ObiMaterials/Fluid/FoamParticles"), new RenderBatchParams(true)); + + renderBatch.vertexCount = (int)m_Solver.maxFoamParticles * 4; + renderBatch.triangleCount = (int)m_Solver.maxFoamParticles * 2; + renderBatch.Initialize(layout, true); + } + + private void ReallocateParticleBuffers() + { + // in case the amount of particles allocated does not match + // the amount requested by the solver, reallocate + if (m_Solver.foamPositions.count * 4 != renderBatch.vertexCount) + { + renderBatch.Dispose(); + renderBatch.vertexCount = m_Solver.foamPositions.count * 4; + renderBatch.triangleCount = m_Solver.foamPositions.count * 2; + renderBatch.Initialize(layout, true); + } + } + + public override void Setup() + { + using (m_SetupRenderMarker.Auto()) + { + for (int i = 0; i < renderers.Count; ++i) + { + renderers[i].actor.solverIndices.AsComputeBuffer(); + } + } + } + + public override void Step() + { + // update solver indices, since particles may have died while updating the emitter. + for (int i = 0; i < renderers.Count; ++i) + { + renderers[i].actor.solverIndices.Upload(); + } + } + + public override void Render() + { + var solver = m_Solver.implementation as ComputeSolverImpl; + + if (!Application.isPlaying) + return; + + ReallocateParticleBuffers(); + + if (solver.activeParticlesBuffer == null || solver.abstraction.foamPositions.computeBuffer == null) + return; + + foreach (Camera camera in cameras) + { + if (camera == null) + continue; + + // sort by distance to camera: + foamShader.SetVector("sortAxis", solver.abstraction.transform.InverseTransformDirection(camera.transform.forward)); + foamShader.SetBuffer(sortKernel, "outputPositions", solver.abstraction.foamPositions.computeBuffer); + foamShader.SetBuffer(sortKernel, "outputVelocities", solver.abstraction.foamVelocities.computeBuffer); + foamShader.SetBuffer(sortKernel, "outputColors", solver.abstraction.foamColors.computeBuffer); + foamShader.SetBuffer(sortKernel, "outputAttributes", solver.abstraction.foamAttributes.computeBuffer); + foamShader.SetBuffer(sortKernel, "dispatch", solver.abstraction.foamCount.computeBuffer); + + int numPairs = ObiUtils.CeilToPowerOfTwo(m_Solver.foamPositions.count) / 2; + int numStages = (int)Mathf.Log(numPairs * 2, 2); + int groups = ComputeMath.ThreadGroupCount(numPairs, 128); + + for (int stageIndex = 0; stageIndex < numStages; stageIndex++) + { + for (int stepIndex = 0; stepIndex < stageIndex + 1; stepIndex++) + { + int groupWidth = 1 << (stageIndex - stepIndex); + int groupHeight = 2 * groupWidth - 1; + foamShader.SetInt("groupWidth", groupWidth); + foamShader.SetInt("groupHeight", groupHeight); + foamShader.SetInt("stepIndex", stepIndex); + foamShader.Dispatch(sortKernel, groups, 1, 1); + } + } + + // build mesh: + int threadGroups = ComputeMath.ThreadGroupCount(m_Solver.foamPositions.count, 128); + foamShader.SetInt("maxFoamParticles", m_Solver.foamPositions.count); + foamShader.SetBuffer(clearMeshKernel, "indices", renderBatch.gpuIndexBuffer); + foamShader.Dispatch(clearMeshKernel, threadGroups, 1, 1); + + foamShader.SetBuffer(buildMeshKernel, "inputPositions", solver.abstraction.foamPositions.computeBuffer); + foamShader.SetBuffer(buildMeshKernel, "inputVelocities", solver.abstraction.foamVelocities.computeBuffer); + foamShader.SetBuffer(buildMeshKernel, "inputColors", solver.abstraction.foamColors.computeBuffer); + foamShader.SetBuffer(buildMeshKernel, "inputAttributes", solver.abstraction.foamAttributes.computeBuffer); + + foamShader.SetBuffer(buildMeshKernel, "vertices", renderBatch.gpuVertexBuffer); + foamShader.SetBuffer(buildMeshKernel, "indices", renderBatch.gpuIndexBuffer); + foamShader.SetBuffer(buildMeshKernel, "dispatch", solver.abstraction.foamCount.computeBuffer); + + foamShader.DispatchIndirect(buildMeshKernel, solver.abstraction.foamCount.computeBuffer); + + matProps.SetFloat("_FadeDepth", 0); + matProps.SetFloat("_VelocityStretching", m_Solver.maxFoamVelocityStretch); + matProps.SetFloat("_RadiusScale", m_Solver.foamRadiusScale); + matProps.SetFloat("_FadeIn", m_Solver.foamFade.x); + matProps.SetFloat("_FadeOut", m_Solver.foamFade.y); + matProps.SetFloat("_ScatterDensity", m_Solver.foamVolumeDensity); + matProps.SetFloat("_AmbientDensity", m_Solver.foamAmbientDensity); + matProps.SetColor("_ScatterColor", m_Solver.foamScatterColor); + matProps.SetColor("_AmbientColor", m_Solver.foamAmbientColor); + + var rp = renderBatch.renderParams; + rp.worldBounds = m_Solver.bounds; + rp.camera = camera; + rp.matProps = matProps; + rp.shadowCastingMode = ShadowCastingMode.Off; + + Graphics.RenderMesh(rp, renderBatch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs.meta new file mode 100644 index 000000000..07ab5673a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79b1bf3bc315944669288e5529915a5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs new file mode 100644 index 000000000..08e235cb7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs @@ -0,0 +1,104 @@ +using UnityEngine; +using UnityEngine.Rendering; + +using Unity.Profiling; +using System.Collections.Generic; +using Unity.Collections; + +namespace Obi +{ + public class ComputeInstancedParticleRenderSystem : ObiInstancedParticleRenderSystem + { + + private ComputeShader instanceShader; + private int updateKernel; + private uint[] args = new uint[5] { 0, 0, 0, 0, 0 }; + + public ComputeInstancedParticleRenderSystem(ObiSolver solver) : base(solver) + { + instanceShader = GameObject.Instantiate(Resources.Load("Compute/InstancedParticleRendering")); + updateKernel = instanceShader.FindKernel("UpdateParticleInstances"); + } + + protected override void CloseBatches() + { + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(true); + } + + public override void Setup() + { + base.Setup(); + + activeParticles.AsComputeBuffer(); + rendererData.AsComputeBuffer(); + rendererIndex.AsComputeBuffer(); + + instanceTransforms.AsComputeBuffer(); + invInstanceTransforms.AsComputeBuffer(); + instanceColors.AsComputeBuffer(); + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + + var computeSolver = m_Solver.implementation as ComputeSolverImpl; + + if (computeSolver.renderablePositionsBuffer != null && computeSolver.renderablePositionsBuffer.count > 0 && activeParticles.count > 0) + { + instanceShader.SetBuffer(updateKernel, "activeParticles", activeParticles.computeBuffer); + instanceShader.SetBuffer(updateKernel, "rendererData", rendererData.computeBuffer); + instanceShader.SetBuffer(updateKernel, "rendererIndex", rendererIndex.computeBuffer); + + instanceShader.SetBuffer(updateKernel, "renderablePositions", computeSolver.renderablePositionsBuffer); + instanceShader.SetBuffer(updateKernel, "renderableOrientations", computeSolver.renderableOrientationsBuffer); + instanceShader.SetBuffer(updateKernel, "renderableRadii", computeSolver.renderableRadiiBuffer); + instanceShader.SetBuffer(updateKernel, "colors", computeSolver.colorsBuffer); + + instanceShader.SetBuffer(updateKernel, "instanceTransforms", instanceTransforms.computeBuffer); + instanceShader.SetBuffer(updateKernel, "invInstanceTransforms", invInstanceTransforms.computeBuffer); + instanceShader.SetBuffer(updateKernel, "instanceColors", instanceColors.computeBuffer); + + instanceShader.SetMatrix("solverToWorld", m_Solver.transform.localToWorldMatrix); + + instanceShader.SetInt("particleCount", activeParticles.count); + int threadGroups = ComputeMath.ThreadGroupCount(activeParticles.count, 128); + + instanceShader.Dispatch(updateKernel, threadGroups, 1, 1); + + MaterialPropertyBlock mpb = new MaterialPropertyBlock(); + mpb.SetBuffer("_InstanceTransforms", instanceTransforms.computeBuffer); + mpb.SetBuffer("_InvInstanceTransforms", invInstanceTransforms.computeBuffer); + mpb.SetBuffer("_Colors", instanceColors.computeBuffer); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + if (batch.mesh == null) + continue; + + args[0] = (uint)batch.mesh.GetIndexCount(0); + args[1] = (uint)batch.instanceCount; + args[2] = (uint)batch.mesh.GetIndexStart(0); + args[3] = (uint)batch.mesh.GetBaseVertex(0); + args[4] = (uint)batch.firstInstance; + batch.argsBuffer.SetData(args); + + var rp = batch.renderParams; + rp.material = batch.material; + rp.worldBounds = m_Solver.bounds; + rp.matProps = mpb; + + Graphics.RenderMeshIndirect(rp, batch.mesh, batch.argsBuffer); + } + } + } + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs.meta new file mode 100644 index 000000000..39147cf50 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8b509404001c45aba2b5d70bed9ad1f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs new file mode 100644 index 000000000..1508f19cd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs @@ -0,0 +1,71 @@ +using UnityEngine; + +namespace Obi +{ + + public class ComputeParticleRenderSystem : ObiParticleRenderSystem + { + public ComputeShader meshComputeShader; + private int buildMeshKernel; + + public ComputeParticleRenderSystem(ObiSolver solver) : base(solver) + { + meshComputeShader = GameObject.Instantiate(Resources.Load("Compute/ParticleMeshBuilding")); + buildMeshKernel = meshComputeShader.FindKernel("BuildMesh"); + } + + protected override void CloseBatches() + { + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(layout, true); + + activeParticles.AsComputeBuffer(); + rendererIndex.AsComputeBuffer(); + rendererData.AsComputeBuffer(); + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + var solver = m_Solver.implementation as ComputeSolverImpl; + + if (solver.renderablePositionsBuffer != null && + activeParticles.computeBuffer != null && + solver.renderablePositionsBuffer.count > 0) + { + meshComputeShader.SetBuffer(buildMeshKernel, "particleIndices", activeParticles.computeBuffer); + + meshComputeShader.SetBuffer(buildMeshKernel, "positions", solver.renderablePositionsBuffer); + meshComputeShader.SetBuffer(buildMeshKernel, "orientations", solver.renderableOrientationsBuffer); + meshComputeShader.SetBuffer(buildMeshKernel, "radii", solver.renderableRadiiBuffer); + meshComputeShader.SetBuffer(buildMeshKernel, "colors", solver.colorsBuffer); + + meshComputeShader.SetBuffer(buildMeshKernel, "rendererIndices", rendererIndex.computeBuffer); + meshComputeShader.SetBuffer(buildMeshKernel, "rendererData", rendererData.computeBuffer); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + int threadGroups = ComputeMath.ThreadGroupCount(batch.vertexCount / 4, 128); + + meshComputeShader.SetInt("firstParticle", batch.firstParticle); + meshComputeShader.SetInt("particleCount", batch.vertexCount / 4); + + meshComputeShader.SetBuffer(buildMeshKernel, "vertices", batch.gpuVertexBuffer); + meshComputeShader.SetBuffer(buildMeshKernel, "indices", batch.gpuIndexBuffer); + + meshComputeShader.Dispatch(buildMeshKernel, threadGroups, 1, 1); + + var rp = batch.renderParams; + rp.worldBounds = m_Solver.bounds; + + Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + } + } + } + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs.meta new file mode 100644 index 000000000..ac29d03b4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a636d056cf9924c4b9d569058fa42d31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod.meta new file mode 100644 index 000000000..3242dc7fa --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9c226d9f8a58648e789dbd116881847d +labels: +- ObiRope +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs new file mode 100644 index 000000000..3c73db958 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs @@ -0,0 +1,107 @@ +using UnityEngine; +using UnityEngine.Rendering; + +using Unity.Profiling; +using System.Collections.Generic; +using Unity.Collections; + +namespace Obi +{ + public class ComputeChainRopeRenderSystem : ObiChainRopeRenderSystem + { + + private ComputeShader ropeShader; + private int updateKernel; + private uint[] args = new uint[5] { 0, 0, 0, 0, 0 }; + + public ComputeChainRopeRenderSystem(ObiSolver solver) : base(solver) + { + ropeShader = GameObject.Instantiate(Resources.Load("Compute/RopeChainRendering")); + updateKernel = ropeShader.FindKernel("UpdateChainMesh"); + } + + protected override void CloseBatches() + { + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(true); + } + + public override void Setup() + { + base.Setup(); + + rendererData.AsComputeBuffer(); + chunkData.AsComputeBuffer(); + modifiers.SafeAsComputeBuffer(); + elements.AsComputeBuffer(); + + instanceTransforms.AsComputeBuffer(); + invInstanceTransforms.AsComputeBuffer(); + instanceColors.AsComputeBuffer(); + + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + + var computeSolver = m_Solver.implementation as ComputeSolverImpl; + + if (computeSolver.renderablePositionsBuffer != null && computeSolver.renderablePositionsBuffer.count > 0 && elements.count > 0) + { + ropeShader.SetBuffer(updateKernel, "rendererData", rendererData.computeBuffer); + ropeShader.SetBuffer(updateKernel, "chunksData", chunkData.computeBuffer); + ropeShader.SetBuffer(updateKernel, "modifiers", modifiers.computeBuffer); + ropeShader.SetBuffer(updateKernel, "elements", elements.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "renderablePositions", computeSolver.renderablePositionsBuffer); + ropeShader.SetBuffer(updateKernel, "renderableOrientations", computeSolver.renderableOrientationsBuffer); + ropeShader.SetBuffer(updateKernel, "principalRadii", computeSolver.renderableRadiiBuffer); + ropeShader.SetBuffer(updateKernel, "colors", computeSolver.colorsBuffer); + + ropeShader.SetBuffer(updateKernel, "instanceTransforms", instanceTransforms.computeBuffer); + ropeShader.SetBuffer(updateKernel, "invInstanceTransforms", invInstanceTransforms.computeBuffer); + ropeShader.SetBuffer(updateKernel, "instanceColors", instanceColors.computeBuffer); + + ropeShader.SetMatrix("solverToWorld", m_Solver.transform.localToWorldMatrix); + + ropeShader.SetInt("chunkCount", chunkData.count); + int threadGroups = ComputeMath.ThreadGroupCount(chunkData.count, 32); + + ropeShader.Dispatch(updateKernel, threadGroups, 1, 1); + + MaterialPropertyBlock mpb = new MaterialPropertyBlock(); + mpb.SetBuffer("_InstanceTransforms", instanceTransforms.computeBuffer); + mpb.SetBuffer("_InvInstanceTransforms", invInstanceTransforms.computeBuffer); + mpb.SetBuffer("_Colors", instanceColors.computeBuffer); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + if (batch.mesh == null) + continue; + + args[0] = (uint)batch.mesh.GetIndexCount(0); + args[1] = (uint)batch.instanceCount; + args[2] = (uint)batch.mesh.GetIndexStart(0); + args[3] = (uint)batch.mesh.GetBaseVertex(0); + args[4] = (uint)batch.firstInstance; + batch.argsBuffer.SetData(args); + + var rp = batch.renderParams; + rp.material = batch.material; + rp.worldBounds = m_Solver.bounds; + rp.matProps = mpb; + + Graphics.RenderMeshIndirect(rp, batch.mesh, batch.argsBuffer); + } + } + } + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs.meta new file mode 100644 index 000000000..40dadbaf6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe4c45599ea584be2a1b122fbe7d0ec6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs new file mode 100644 index 000000000..423db6459 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs @@ -0,0 +1,101 @@ +using UnityEngine; +using UnityEngine.Rendering; + +namespace Obi +{ + public class ComputeExtrudedRopeRenderSystem : ObiExtrudedRopeRenderSystem + { + + private ComputeShader ropeShader; + private int updateKernel; + + public ComputeExtrudedRopeRenderSystem(ObiSolver solver) : base(solver) + { + ropeShader = GameObject.Instantiate(Resources.Load("Compute/RopeExtrudedRendering")); + updateKernel = ropeShader.FindKernel("UpdateRopeMesh"); + } + + + public override void Setup() + { + base.Setup(); + + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(layout, true); + + sectionData.AsComputeBuffer(); + sectionOffsets.AsComputeBuffer(); + sectionIndices.AsComputeBuffer(); + + vertexOffsets.AsComputeBuffer(); + triangleOffsets.AsComputeBuffer(); + triangleCounts.AsComputeBuffer(); + + pathSmootherIndices.AsComputeBuffer(); + rendererData.AsComputeBuffer(); + + pathSmootherSystem.chunkOffsets.AsComputeBuffer(); + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + if (pathSmootherSystem == null) + return; + + // Single array: Cannot merge into a single vertices array, otherwise we would need to bring back to CPU for passing indices to each mesh. + // Individual meshes: Cannot do each renderer independently (like we do with cloth) since each rope is done sequentially, would not parallelize at all. + // Batches: 1 mesh per batch: best approach, but 1) bounds must be calculated per or solver, so we can only cull entire solver. Culling happens on the CPU, cannot bring back bounds from the CPU. + // Cloth and Softbodies are rendered manually, particles are too. So Ropes could too. + + // In Burst, we need merge all cloth mesh data into array for parallel processing, without using one schedule() per mesh. + // So instead of writing slices of mesh data back to their original meshes, let's create one mesh per batch and draw it ourselves. + // Basically the same as with ropes. + + if (pathSmootherSystem.chunkOffsets != null && pathSmootherSystem.chunkOffsets.count > 0) + { + ropeShader.SetBuffer(updateKernel, "pathSmootherIndices", pathSmootherIndices.computeBuffer); + ropeShader.SetBuffer(updateKernel, "chunkOffsets", pathSmootherSystem.chunkOffsets.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "frames", pathSmootherSystem.smoothFrames.computeBuffer); + ropeShader.SetBuffer(updateKernel, "frameOffsets", pathSmootherSystem.smoothFrameOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "frameCounts", pathSmootherSystem.smoothFrameCounts.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "sectionData", sectionData.computeBuffer); + ropeShader.SetBuffer(updateKernel, "sectionOffsets", sectionOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "sectionIndices", sectionIndices.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "vertexOffsets", vertexOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "triangleOffsets", triangleOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "triangleCounts", triangleCounts.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "extrudedData", rendererData.computeBuffer); + ropeShader.SetBuffer(updateKernel, "pathData", pathSmootherSystem.pathData.computeBuffer); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + int threadGroups = ComputeMath.ThreadGroupCount(batch.rendererCount, 128); + + ropeShader.SetInt("firstRenderer", batch.firstRenderer); + ropeShader.SetInt("rendererCount", batch.rendererCount); + + ropeShader.SetBuffer(updateKernel, "vertices", batch.gpuVertexBuffer); + ropeShader.SetBuffer(updateKernel, "tris", batch.gpuIndexBuffer); + + ropeShader.Dispatch(updateKernel, threadGroups, 1, 1); + + var rp = batch.renderParams; + rp.worldBounds = m_Solver.bounds; + + Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + } + } + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs.meta new file mode 100644 index 000000000..d02481a39 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8977537c032b46c680d6b11b587e949 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs new file mode 100644 index 000000000..4e1606715 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs @@ -0,0 +1,103 @@ +using UnityEngine; +using UnityEngine.Rendering; + +using Unity.Profiling; +using System.Collections.Generic; +using Unity.Collections; + +namespace Obi +{ + public class ComputeLineRopeRenderSystem : ObiLineRopeRenderSystem + { + + private ComputeShader ropeShader; + private int updateKernel; + + public ComputeLineRopeRenderSystem(ObiSolver solver) : base(solver) + { + ropeShader = GameObject.Instantiate(Resources.Load("Compute/RopeLineRendering")); + updateKernel = ropeShader.FindKernel("UpdateLineMesh"); + } + + + public override void Setup() + { + base.Setup(); + + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(layout, true); + + vertexOffsets.AsComputeBuffer(); + triangleOffsets.AsComputeBuffer(); + triangleCounts.AsComputeBuffer(); + + pathSmootherIndices.AsComputeBuffer(); + rendererData.AsComputeBuffer(); + + pathSmootherSystem.chunkOffsets.AsComputeBuffer(); + + } + + public override void Render() { } + + public override void RenderFromCamera(Camera camera) + { + using (m_RenderMarker.Auto()) + { + if (pathSmootherSystem == null) + return; + + // Single array: Cannot merge into a single vertices array, otherwise we would need to bring back to CPU for passing indices to each mesh. + // Individual meshes: Cannot do each renderer independently (like we do with cloth) since each rope is done sequentially, would not parallelize at all. + // Batches: 1 mesh per batch: best approach, but 1) bounds must be calculated per or solver, so we can only cull entire solver. Culling happens on the CPU, cannot bring back bounds from the CPU. + // Cloth and Softbodies are rendered manually, particles are too. So Ropes could too. + + // In Burst, we need merge all cloth mesh data into array for parallel processing, without using one schedule() per mesh. + // So instead of writing slices of mesh data back to their original meshes, let's create one mesh per batch and draw it ourselves. + // Basically the same as with ropes. + + if (pathSmootherSystem.chunkOffsets != null && pathSmootherSystem.chunkOffsets.count > 0) + { + ropeShader.SetBuffer(updateKernel, "pathSmootherIndices", pathSmootherIndices.computeBuffer); + ropeShader.SetBuffer(updateKernel, "chunkOffsets", pathSmootherSystem.chunkOffsets.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "frames", pathSmootherSystem.smoothFrames.computeBuffer); + ropeShader.SetBuffer(updateKernel, "frameOffsets", pathSmootherSystem.smoothFrameOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "frameCounts", pathSmootherSystem.smoothFrameCounts.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "vertexOffsets", vertexOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "triangleOffsets", triangleOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "triangleCounts", triangleCounts.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "rendererData", rendererData.computeBuffer); + ropeShader.SetBuffer(updateKernel, "pathData", pathSmootherSystem.pathData.computeBuffer); + + ropeShader.SetVector("localSpaceCamera", m_Solver.transform.InverseTransformPoint(camera.transform.position)); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + int threadGroups = ComputeMath.ThreadGroupCount(batch.rendererCount, 128); + + ropeShader.SetInt("firstRenderer", batch.firstRenderer); + ropeShader.SetInt("rendererCount", batch.rendererCount); + + ropeShader.SetBuffer(updateKernel, "vertices", batch.gpuVertexBuffer); + ropeShader.SetBuffer(updateKernel, "tris", batch.gpuIndexBuffer); + + ropeShader.Dispatch(updateKernel, threadGroups, 1, 1); + + var rp = batch.renderParams; + rp.worldBounds = m_Solver.bounds; + rp.camera = camera; + + Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + } + } + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs.meta new file mode 100644 index 000000000..b737e7d32 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1de4576d2ba2b4966af730ac7a09e224 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs new file mode 100644 index 000000000..2abb1191d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs @@ -0,0 +1,108 @@ +using UnityEngine; +using UnityEngine.Rendering; + +namespace Obi +{ + + public class ComputeMeshRopeRenderSystem : ObiMeshRopeRenderSystem + { + private ComputeShader ropeShader; + private int updateKernel; + + public ComputeMeshRopeRenderSystem(ObiSolver solver) : base(solver) + { + ropeShader = GameObject.Instantiate(Resources.Load("Compute/RopeMeshRendering")); + updateKernel = ropeShader.FindKernel("UpdateRopeMesh"); + } + + protected override void CloseBatches() + { + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(sortedRenderers, meshData, meshIndices, layout, true); + + meshData.PrepareForCompute(); + meshIndices.AsComputeBuffer(); + + sortedIndices.AsComputeBuffer(); + sortedOffsets.AsComputeBuffer(); + + vertexOffsets.AsComputeBuffer(); + + pathSmootherIndices.AsComputeBuffer(); + rendererData.AsComputeBuffer(); + + pathSmootherSystem.chunkOffsets.AsComputeBuffer(); + + base.CloseBatches(); + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + if (pathSmootherSystem == null) + return; + + // Single array: Cannot merge into a single vertices array, otherwise we would need to bring back to CPU for passing indices to each mesh. + // Individual meshes: Cannot do each renderer independently (like we do with cloth) since each rope is done sequentially, would not parallelize at all. + // Batches: 1 mesh per batch: best approach, but 1) bounds must be calculated per or solver, so we can only cull entire solver. Culling happens on the CPU, cannot bring back bounds from the CPU. + // Cloth and Softbodies are rendered manually, particles are too. So Ropes could too. + + // In Burst, we need merge all cloth mesh data into array for parallel processing, without using one schedule() per mesh. + // So instead of writing slices of mesh data back to their original meshes, let's create one mesh per batch and draw it ourselves. + // Basically the same as with ropes. + + if (pathSmootherSystem.chunkOffsets != null && pathSmootherSystem.chunkOffsets.count > 0) + { + ropeShader.SetBuffer(updateKernel, "chunkOffsets", pathSmootherSystem.chunkOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "pathSmootherIndices", pathSmootherIndices.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "frames", pathSmootherSystem.smoothFrames.computeBuffer); + ropeShader.SetBuffer(updateKernel, "frameOffsets", pathSmootherSystem.smoothFrameOffsets.computeBuffer); + ropeShader.SetBuffer(updateKernel, "frameCounts", pathSmootherSystem.smoothFrameCounts.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "vertexOffsets", vertexOffsets.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "meshIndices", meshIndices.computeBuffer); + ropeShader.SetBuffer(updateKernel, "meshData", meshData.meshData.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "rendererData", rendererData.computeBuffer); + ropeShader.SetBuffer(updateKernel, "pathData", pathSmootherSystem.pathData.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "sortedIndices", sortedIndices.computeBuffer); + ropeShader.SetBuffer(updateKernel, "sortedOffsets", sortedOffsets.computeBuffer); + + ropeShader.SetBuffer(updateKernel, "positions", meshData.restPositions.computeBuffer); + ropeShader.SetBuffer(updateKernel, "normals", meshData.restNormals.computeBuffer); + ropeShader.SetBuffer(updateKernel, "tangents", meshData.restTangents.computeBuffer); + ropeShader.SetBuffer(updateKernel, "colors", meshData.restColors.computeBuffer); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + int threadGroups = ComputeMath.ThreadGroupCount(batch.rendererCount, 16); + + ropeShader.SetInt("firstRenderer", batch.firstRenderer); + ropeShader.SetInt("rendererCount", batch.rendererCount); + + ropeShader.SetBuffer(updateKernel, "vertices", batch.gpuVertexBuffer); + + ropeShader.Dispatch(updateKernel, threadGroups, 1, 1); + + var rp = batch.renderParams; + rp.worldBounds = m_Solver.bounds; + + for (int m = 0; m < batch.materials.Length; ++m) + { + rp.material = batch.materials[m]; + Graphics.RenderMesh(rp, batch.mesh, m, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); + } + } + } + } + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs.meta new file mode 100644 index 000000000..eb2668678 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f880620ed267d4cb4a701183bcadfe15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs new file mode 100644 index 000000000..9f363f237 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs @@ -0,0 +1,94 @@ +using UnityEngine; + +namespace Obi +{ + + public class ComputePathSmootherRenderSystem : ObiPathSmootherRenderSystem + { + + private ComputeShader pathShader; + private int parallelTransportKernel; + private int decimateKernel; + private int smoothKernel; + + public ComputePathSmootherRenderSystem(ObiSolver solver) : base(solver) + { + pathShader = GameObject.Instantiate(Resources.Load("Compute/PathSmoothing")); + parallelTransportKernel = pathShader.FindKernel("ParallelTransport"); + decimateKernel = pathShader.FindKernel("Decimate"); + smoothKernel = pathShader.FindKernel("ChaikinSmooth"); + } + + public override void Setup() + { + base.Setup(); + + particleIndices.AsComputeBuffer(); + rawFrameOffsets.AsComputeBuffer(); + pathData.AsComputeBuffer(); + rawFrames.AsComputeBuffer(); + decimatedFrameCounts.AsComputeBuffer(); + + smoothFrames.AsComputeBuffer(); + smoothFrameOffsets.AsComputeBuffer(); + smoothFrameCounts.AsComputeBuffer(); + } + + public override void Render() + { + using (m_RenderMarker.Auto()) + { + //base.Render(); + + var computeSolver = m_Solver.implementation as ComputeSolverImpl; + + if (computeSolver.renderablePositionsBuffer != null && computeSolver.renderablePositionsBuffer.count > 0) + { + // wait for gpu data to be transferred: + pathData.WaitForReadback(); + smoothFrames.WaitForReadback(); + + // update rest lenghts and upload to gpu: + base.Render(); + pathData.Upload(); + + int threadGroups = ComputeMath.ThreadGroupCount(rawFrameOffsets.count, 128); + pathShader.SetInt("chunkCount", rawFrameOffsets.count); + + pathShader.SetBuffer(parallelTransportKernel, "frameOffsets", rawFrameOffsets.computeBuffer); + pathShader.SetBuffer(parallelTransportKernel, "particleIndices", particleIndices.computeBuffer); + pathShader.SetBuffer(parallelTransportKernel, "renderablePositions", computeSolver.renderablePositionsBuffer); + pathShader.SetBuffer(parallelTransportKernel, "renderableOrientations", computeSolver.renderableOrientationsBuffer); + pathShader.SetBuffer(parallelTransportKernel, "principalRadii", computeSolver.principalRadiiBuffer); + pathShader.SetBuffer(parallelTransportKernel, "colors", computeSolver.colorsBuffer); + pathShader.SetBuffer(parallelTransportKernel, "pathData", pathData.computeBuffer); + pathShader.SetBuffer(parallelTransportKernel, "pathFrames", rawFrames.computeBuffer); + + pathShader.Dispatch(parallelTransportKernel, threadGroups, 1, 1); + + pathShader.SetBuffer(decimateKernel, "pathFrames", rawFrames.computeBuffer); + pathShader.SetBuffer(decimateKernel, "frameOffsets", rawFrameOffsets.computeBuffer); + pathShader.SetBuffer(decimateKernel, "decimatedFrameCounts", decimatedFrameCounts.computeBuffer); + pathShader.SetBuffer(decimateKernel, "pathData", pathData.computeBuffer); + + pathShader.Dispatch(decimateKernel, threadGroups, 1, 1); + + pathShader.SetBuffer(smoothKernel, "pathFrames", rawFrames.computeBuffer); + pathShader.SetBuffer(smoothKernel, "frameOffsets", rawFrameOffsets.computeBuffer); + pathShader.SetBuffer(smoothKernel, "decimatedFrameCounts", decimatedFrameCounts.computeBuffer); + pathShader.SetBuffer(smoothKernel, "smoothFrames", smoothFrames.computeBuffer); + pathShader.SetBuffer(smoothKernel, "smoothFrameOffsets", smoothFrameOffsets.computeBuffer); + pathShader.SetBuffer(smoothKernel, "smoothFrameCounts", smoothFrameCounts.computeBuffer); + pathShader.SetBuffer(smoothKernel, "pathData", pathData.computeBuffer); + + pathShader.Dispatch(smoothKernel, threadGroups, 1, 1); + + pathData.Readback(); + smoothFrames.Readback(); + } + } + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs.meta new file mode 100644 index 000000000..acdff97c5 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ed459657fb054e7b8e0c806e8e5016e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver.meta similarity index 77% rename from Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver.meta index aa7f2cd0d..3c8e3c2f1 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e2f8381840ff54c2f9122f2329cf9366 +guid: e6a74baa6b875488ea6366478aece6a3 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs new file mode 100644 index 000000000..ad4cf37f3 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs @@ -0,0 +1,1438 @@ +using UnityEngine; +using UnityEngine.Rendering; + +namespace Obi +{ + public class ComputeSolverImpl : ISolverImpl + { + ObiSolver m_Solver; + + public ObiSolver abstraction + { + get { return m_Solver; } + } + + public int particleCount + { + get { return m_Solver.positions.count; } + } + + public int activeParticleCount + { + get { return m_Solver.activeParticles.count; } + } + + public int deformableTriangleCount + { + get { return m_Solver.deformableTriangles.count / 3; } + } + + public int deformableEdgeCount + { + get { return m_Solver.deformableEdges.count / 2; } + } + + public InertialFrame inertialFrame + { + get { return m_InertialFrame; } + } + + public uint activeFoamParticleCount { private set; get; } + + // Per-type constraints array: + IComputeConstraintsImpl[] constraints; + + // Per-type iteration padding array: + private int[] padding = new int[Oni.ConstraintTypeCount]; + + // job handle: + private ComputeJobHandle jobHandle; + + // particle contact generation: + public ComputeParticleGrid particleGrid; + + // collider contact generation: + public ComputeColliderWorld colliderGrid; + + // spatial queries: + public SpatialQueries spatialQueries; + + // misc data: + private InertialFrame m_InertialFrame; + + // cached particle data arrays (just wrappers over raw unmanaged data held by the abstract solver) + public GraphicsBuffer deadIndicesBuffer; + public GraphicsBuffer positionsBuffer; + public GraphicsBuffer orientationsBuffer; + public GraphicsBuffer startPositionsBuffer; + public GraphicsBuffer endPositionsBuffer; + public GraphicsBuffer startOrientationsBuffer; + public GraphicsBuffer endOrientationsBuffer; + public GraphicsBuffer restPositionsBuffer; + public GraphicsBuffer prevPositionsBuffer; + public GraphicsBuffer restOrientationsBuffer; + public GraphicsBuffer prevOrientationsBuffer; + public GraphicsBuffer renderablePositionsBuffer; + public GraphicsBuffer renderableOrientationsBuffer; + public GraphicsBuffer renderableRadiiBuffer; + public GraphicsBuffer colorsBuffer; + public GraphicsBuffer collisionMaterialIndexBuffer; + + public GraphicsBuffer principalRadiiBuffer; + public GraphicsBuffer velocitiesBuffer; + public GraphicsBuffer invMassesBuffer; + public GraphicsBuffer phasesBuffer; + public GraphicsBuffer filtersBuffer; + + public GraphicsBuffer angularVelocitiesBuffer; + public GraphicsBuffer invRotationalMassesBuffer; + public GraphicsBuffer externalForcesBuffer; + public GraphicsBuffer externalTorquesBuffer; + public GraphicsBuffer windBuffer; + + public GraphicsBuffer lifeBuffer; + public GraphicsBuffer fluidDataBuffer; + public GraphicsBuffer userDataBuffer; + public GraphicsBuffer fluidMaterialsBuffer; + public GraphicsBuffer fluidMaterials2Buffer; + public GraphicsBuffer fluidInterfaceBuffer; + public GraphicsBuffer anisotropiesBuffer; + + public GraphicsBuffer auxPositions; + public GraphicsBuffer auxVelocities; + public GraphicsBuffer auxColors; + public GraphicsBuffer auxAttributes; + public GraphicsBuffer auxOffsetInCell; + public GraphicsBuffer auxSortedToOriginal; + + public GraphicsBuffer normalsBuffer; + public GraphicsBuffer cellCoordsBuffer; + + public GraphicsBuffer positionDeltasIntBuffer; + public GraphicsBuffer orientationDeltasIntBuffer; + + public GraphicsBuffer positionConstraintCountBuffer; + public GraphicsBuffer orientationConstraintCountBuffer; + + public GraphicsBuffer activeParticlesBuffer; + public GraphicsBuffer fluidDispatchBuffer; + + public GraphicsBuffer tangentsIntBuffer; + + public GraphicsBuffer deformableEdgesBuffer; + public GraphicsBuffer deformableTrianglesBuffer; + + public GraphicsBuffer solverToWorldBuffer; + public GraphicsBuffer worldToSolverBuffer; + public GraphicsBuffer inertialFrameBuffer; + private AffineTransform[] solverToWorldArray; + private AffineTransform[] worldToSolverArray; + private InertialFrame[] inertialFrameArray; + + public GraphicsBuffer rigidbodyLinearDeltasBuffer; + public GraphicsBuffer rigidbodyAngularDeltasBuffer; + + public GraphicsBuffer rigidbodyLinearDeltasIntBuffer; + public GraphicsBuffer rigidbodyAngularDeltasIntBuffer; + + public GraphicsBuffer reducedBounds; + + // simplices: + public SimplexCounts simplexCounts; + public GraphicsBuffer simplices; + public GraphicsBuffer simplexBounds; + + public Aabb solverBounds; + private AsyncGPUReadbackRequest boundsRequest; + + private ComputeShader solverShader; + private int applyInertialForcesKernel; + private int applyRigidbodyDeltasKernel; + private int predictPositionsKernel; + private int updateVelocitiesKernel; + private int updatePositionsKernel; + private int updateLifetimesKernel; + private int enforceLimitsKernel; + private int interpolateKernel; + + private ComputeShader boundsShader; + private int simplexBoundsKernel; + private int editSimplexBoundsKernel; + private int boundsReductionKernel; + + private ComputeShader deformableTrisShader; + private int resetNormalsKernel; + private int updateNormalsKernel; + private int updateEdgeNormalsKernel; + private int orientationFromNormalsKernel; + + private ComputeShader foamShader; + private int sortDataKernel; + private int emitShapeFoamKernel; + private int emitFoamKernel; + private int copyAliveKernel; + private int updateFoamKernel; + private int integrateFoamKernel; + private int copyKernel; + + private ComputeShader foamDensityShader; + private int clearGridKernel; + private int insertGridKernel; + private int sortByGridKernel; + private int computeDensityKernel; + private int applyDensityKernel; + + private ComputeShader foamCollisionShader; + private int solveDiffuseContactsKernel; + + public ComputeSolverImpl(ObiSolver solver) + { + this.m_Solver = solver; + + jobHandle = new ComputeJobHandle(); + solverBounds = new Aabb(solver.transform.position - Vector3.one, solver.transform.position + Vector3.one); + + solver.queryResults.ResizeUninitialized((int)abstraction.maxQueryResults); + solver.queryResults.SafeAsComputeBuffer(GraphicsBuffer.Target.Counter); + + solver.foamCount.AsComputeBuffer(GraphicsBuffer.Target.IndirectArguments); + solver.foamPositions.AsComputeBuffer(); + solver.foamVelocities.AsComputeBuffer(); + solver.foamColors.AsComputeBuffer(); + solver.foamAttributes.AsComputeBuffer(); + + solverShader = GameObject.Instantiate(Resources.Load("Compute/Solver")); + applyInertialForcesKernel = solverShader.FindKernel("ApplyInertialForces"); + applyRigidbodyDeltasKernel = solverShader.FindKernel("ApplyRigidbodyDeltas"); + updateLifetimesKernel = solverShader.FindKernel("UpdateLifetimes"); + predictPositionsKernel = solverShader.FindKernel("PredictPositions"); + updateVelocitiesKernel = solverShader.FindKernel("UpdateVelocities"); + updatePositionsKernel = solverShader.FindKernel("UpdatePositions"); + enforceLimitsKernel = solverShader.FindKernel("EnforceLimits"); + interpolateKernel = solverShader.FindKernel("Interpolate"); + + boundsShader = GameObject.Instantiate(Resources.Load("Compute/BoundsReduction")); + simplexBoundsKernel = boundsShader.FindKernel("RuntimeSimplexBounds"); + editSimplexBoundsKernel = boundsShader.FindKernel("EditSimplexBounds"); + boundsReductionKernel = boundsShader.FindKernel("Reduce"); + + deformableTrisShader = GameObject.Instantiate(Resources.Load("Compute/DeformableTriangles")); + resetNormalsKernel = deformableTrisShader.FindKernel("ResetNormals"); + updateNormalsKernel = deformableTrisShader.FindKernel("UpdateNormals"); + updateEdgeNormalsKernel = deformableTrisShader.FindKernel("UpdateEdgeNormals"); + orientationFromNormalsKernel = deformableTrisShader.FindKernel("OrientationFromNormals"); + + foamShader = GameObject.Instantiate(Resources.Load("Compute/FluidFoam")); + sortDataKernel = foamShader.FindKernel("SortFluidData"); + emitShapeFoamKernel = foamShader.FindKernel("EmitShape"); + emitFoamKernel = foamShader.FindKernel("Emit"); + copyAliveKernel = foamShader.FindKernel("CopyAliveCount"); + updateFoamKernel = foamShader.FindKernel("Update"); + copyKernel = foamShader.FindKernel("Copy"); + integrateFoamKernel = foamShader.FindKernel("Integrate"); + + foamDensityShader = GameObject.Instantiate(Resources.Load("Compute/FluidFoamDensity")); + clearGridKernel = foamDensityShader.FindKernel("Clear"); + insertGridKernel = foamDensityShader.FindKernel("InsertInGrid"); + sortByGridKernel = foamDensityShader.FindKernel("SortByGrid"); + computeDensityKernel = foamDensityShader.FindKernel("ComputeDensity"); + applyDensityKernel = foamDensityShader.FindKernel("ApplyDensity"); + + foamCollisionShader = GameObject.Instantiate(Resources.Load("Compute/FluidFoamCollisions")); + solveDiffuseContactsKernel = foamCollisionShader.FindKernel("SolveDiffuseContacts"); + + solverToWorldBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, 48); + solverToWorldArray = new AffineTransform[1]; + worldToSolverBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, 48); + worldToSolverArray = new AffineTransform[1]; + inertialFrameBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, 160); + inertialFrameArray = new InertialFrame[1]; + + fluidDispatchBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 4, sizeof(uint)); + + // Initialize collision world: + GetOrCreateColliderWorld(); + colliderGrid.IncreaseReferenceCount(); + + // Initialize contact generation acceleration structure: + particleGrid = new ComputeParticleGrid(); + + // Initialize spatial query system. + spatialQueries = new SpatialQueries(solver.maxQueryResults); + + // Initialize constraint arrays: + constraints = new IComputeConstraintsImpl[Oni.ConstraintTypeCount]; + constraints[(int)Oni.ConstraintType.Tether] = new ComputeTetherConstraints(this); + constraints[(int)Oni.ConstraintType.Volume] = new ComputeVolumeConstraints(this); + constraints[(int)Oni.ConstraintType.Chain] = new ComputeChainConstraints(this); + constraints[(int)Oni.ConstraintType.Bending] = new ComputeBendConstraints(this); + constraints[(int)Oni.ConstraintType.Distance] = new ComputeDistanceConstraints(this); + constraints[(int)Oni.ConstraintType.ShapeMatching] = new ComputeShapeMatchingConstraints(this); + constraints[(int)Oni.ConstraintType.BendTwist] = new ComputeBendTwistConstraints(this); + constraints[(int)Oni.ConstraintType.StretchShear] = new ComputeStretchShearConstraints(this); + constraints[(int)Oni.ConstraintType.Pin] = new ComputePinConstraints(this); + constraints[(int)Oni.ConstraintType.Pinhole] = new ComputePinholeConstraints(this); + constraints[(int)Oni.ConstraintType.Skin] = new ComputeSkinConstraints(this); + constraints[(int)Oni.ConstraintType.Aerodynamics] = new ComputeAerodynamicConstraints(this); + constraints[(int)Oni.ConstraintType.Stitch] = new ComputeStitchConstraints(this); + + constraints[(int)Oni.ConstraintType.ParticleCollision] = new ComputeParticleCollisionConstraints(this); + constraints[(int)Oni.ConstraintType.ParticleCollision].CreateConstraintsBatch(); + + constraints[(int)Oni.ConstraintType.Collision] = new ComputeColliderCollisionConstraints(this); + constraints[(int)Oni.ConstraintType.Collision].CreateConstraintsBatch(); + + constraints[(int)Oni.ConstraintType.ParticleFriction] = new ComputeParticleFrictionConstraints(this); + constraints[(int)Oni.ConstraintType.ParticleFriction].CreateConstraintsBatch(); + + constraints[(int)Oni.ConstraintType.Friction] = new ComputeColliderFrictionConstraints(this); + constraints[(int)Oni.ConstraintType.Friction].CreateConstraintsBatch(); + + constraints[(int)Oni.ConstraintType.Density] = new ComputeDensityConstraints(this); + constraints[(int)Oni.ConstraintType.Density].CreateConstraintsBatch(); + } + + public void Destroy() + { + + reducedBounds?.Dispose(); + solverToWorldBuffer?.Dispose(); + worldToSolverBuffer?.Dispose(); + inertialFrameBuffer?.Dispose(); + fluidDispatchBuffer?.Dispose(); + + for (int i = 0; i < constraints.Length; ++i) + if (constraints[i] != null) + constraints[i].Dispose(); + + // Get rid of particle and collider grids/queries: + particleGrid?.Dispose(); + + // cannot use null-coalescing because this is a GameObject, and Unity overrides != + if (colliderGrid != null) + colliderGrid.DecreaseReferenceCount(); + + spatialQueries?.Dispose(); + + positionDeltasIntBuffer?.Dispose(); + orientationDeltasIntBuffer?.Dispose(); + + rigidbodyLinearDeltasIntBuffer?.Dispose(); + rigidbodyAngularDeltasIntBuffer?.Dispose(); + + tangentsIntBuffer?.Dispose(); + + simplexBounds?.Dispose(); + + auxPositions?.Dispose(); + auxVelocities?.Dispose(); + auxColors?.Dispose(); + auxAttributes?.Dispose(); + auxOffsetInCell?.Dispose(); + auxSortedToOriginal?.Dispose(); + } + + private void GetOrCreateColliderWorld() + { + colliderGrid = GameObject.FindObjectOfType(); + if (colliderGrid == null) + { + var world = new GameObject("ComputeCollisionWorld", typeof(ComputeColliderWorld)); + colliderGrid = world.GetComponent(); + } + } + + public void PushData() + { + // Send data to the GPU: + abstraction.positions.Upload(); + abstraction.orientations.Upload(); + abstraction.velocities.Upload(); + abstraction.angularVelocities.Upload(); + abstraction.colors.Upload(); + + abstraction.startPositions.Upload(); + abstraction.startOrientations.Upload(); + abstraction.endPositions.Upload(); + abstraction.endOrientations.Upload(); + + abstraction.restPositions.Upload(); + abstraction.restOrientations.Upload(); + abstraction.normals.Upload(); + abstraction.principalRadii.Upload(); + abstraction.invMasses.Upload(); + abstraction.invRotationalMasses.Upload(); + abstraction.phases.Upload(); + abstraction.filters.Upload(); + abstraction.externalForces.Upload(); + abstraction.externalTorques.Upload(); + abstraction.wind.Upload(); + + abstraction.life.Upload(); + abstraction.fluidData.Upload(); + abstraction.userData.Upload(); + abstraction.fluidInterface.Upload(); + abstraction.fluidMaterials.Upload(); + abstraction.fluidMaterials2.Upload(); + + rigidbodyLinearDeltasIntBuffer.SetData(abstraction.rigidbodyLinearDeltas.AsNativeArray()); + rigidbodyAngularDeltasIntBuffer.SetData(abstraction.rigidbodyAngularDeltas.AsNativeArray()); + } + + public void RequestReadback() + { + // Copy rigidbody deltas (int) to output buffers (float), then request readback: + solverShader.SetBuffer(applyRigidbodyDeltasKernel, "linearDeltasAsInt", rigidbodyLinearDeltasIntBuffer); + solverShader.SetBuffer(applyRigidbodyDeltasKernel, "angularDeltasAsInt", rigidbodyAngularDeltasIntBuffer); + solverShader.SetBuffer(applyRigidbodyDeltasKernel, "linearDeltas", rigidbodyLinearDeltasBuffer); + solverShader.SetBuffer(applyRigidbodyDeltasKernel, "angularDeltas", rigidbodyAngularDeltasBuffer); + + solverShader.SetInt("particleCount", abstraction.rigidbodyLinearDeltas.count); + + int threadGroups = ComputeMath.ThreadGroupCount(abstraction.rigidbodyLinearDeltas.count, 128); + solverShader.Dispatch(applyRigidbodyDeltasKernel, threadGroups, 1, 1); + + abstraction.rigidbodyLinearDeltas.Readback(); + abstraction.rigidbodyAngularDeltas.Readback(); + + // begin particle data async GPU -> CPU transfer. + // by default, only positions and velocities are read back. + // ObiActors can request whatever data they need in RequestReadback, + // then wait for it in SimulationEnd. + abstraction.positions.Readback(); + abstraction.velocities.Readback(); + + // begin constraint data async GPU -> CPU transfer. + var sm = constraints[(int)Oni.ConstraintType.ShapeMatching] as ComputeShapeMatchingConstraints; + if (sm != null) + sm.RequestDataReadback(); + + // needed for tearing. + var dm = constraints[(int)Oni.ConstraintType.Distance] as ComputeDistanceConstraints; + if (dm != null) + dm.RequestDataReadback(); + + var pm = constraints[(int)Oni.ConstraintType.Pin] as ComputePinConstraints; + if (pm != null) + pm.RequestDataReadback(); + + var phm = constraints[(int)Oni.ConstraintType.Pinhole] as ComputePinholeConstraints; + if (phm != null) + phm.RequestDataReadback(); + } + + public void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation) + { + m_InertialFrame = new InertialFrame(translation, scale, rotation); + } + + public void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, float deltaTime) + { + m_InertialFrame.Update(translation, scale, rotation, deltaTime); + + solverToWorldArray[0] = m_InertialFrame.frame; + solverToWorldBuffer.SetData(solverToWorldArray); + + worldToSolverArray[0] = m_InertialFrame.frame.Inverse(); + worldToSolverBuffer.SetData(worldToSolverArray); + + inertialFrameArray[0] = m_InertialFrame; + inertialFrameBuffer.SetData(inertialFrameArray); + } + + public IObiJobHandle ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) + { + if (activeParticleCount > 0) + { + // inverse linear part: + Matrix4x4 linear = Matrix4x4.TRS(Vector3.zero, inertialFrame.frame.rotation, new Vector3(1 / inertialFrame.frame.scale.x, 1 / inertialFrame.frame.scale.y, 1 / inertialFrame.frame.scale.z)); + Matrix4x4 linearInv = Matrix4x4.Transpose(linear); + + // non-inertial frame accelerations: + Vector4 angularVel = (linearInv * Matrix4x4.Scale(inertialFrame.angularVelocity) * linear).Diagonal(); + Vector4 eulerAccel = (linearInv * Matrix4x4.Scale(inertialFrame.angularAcceleration) * linear).Diagonal(); + Vector4 inertialAccel = linearInv * inertialFrame.acceleration; + + int threadGroups = ComputeMath.ThreadGroupCount(activeParticleCount, 128); + solverShader.SetInt("particleCount", activeParticleCount); + + solverShader.SetFloat("deltaTime", deltaTime); + solverShader.SetFloat("worldLinearInertiaScale", abstraction.worldLinearInertiaScale); + solverShader.SetFloat("worldAngularInertiaScale", abstraction.worldAngularInertiaScale); + solverShader.SetVector("angularVel", angularVel); + solverShader.SetVector("eulerAccel", eulerAccel); + solverShader.SetVector("inertialAccel", inertialAccel); + solverShader.SetVector("ambientWind", abstraction.parameters.ambientWind); + solverShader.SetBool("inertialWind", abstraction.windSpace == Space.World); + + solverShader.SetBuffer(applyInertialForcesKernel, "activeParticles", activeParticlesBuffer); + solverShader.SetBuffer(applyInertialForcesKernel, "positions", positionsBuffer); + solverShader.SetBuffer(applyInertialForcesKernel, "velocities", velocitiesBuffer); + solverShader.SetBuffer(applyInertialForcesKernel, "invMasses", invMassesBuffer); + solverShader.SetBuffer(applyInertialForcesKernel, "wind", windBuffer); + solverShader.SetBuffer(applyInertialForcesKernel, "inertialSolverFrame", inertialFrameBuffer); + + solverShader.Dispatch(applyInertialForcesKernel, threadGroups, 1, 1); + } + + return jobHandle; + } + + public void SetDeformableTriangles(ObiNativeIntList indices, ObiNativeVector2List uvs) + { + if (indices.count > 0) + { + deformableTrianglesBuffer = indices.AsComputeBuffer(); + var deformableUVsBuffer = uvs.AsComputeBuffer(); + + deformableTrisShader.SetBuffer(updateNormalsKernel, "deformableTriangles", deformableTrianglesBuffer); + deformableTrisShader.SetBuffer(updateNormalsKernel, "deformableTriangleUVs", deformableUVsBuffer); + deformableTrisShader.SetInt("triangleCount", deformableTriangleCount); + } + } + + public void SetDeformableEdges(ObiNativeIntList indices) + { + if (indices.count > 0) + { + deformableEdgesBuffer = indices.AsComputeBuffer(); + + deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "deformableEdges", deformableEdgesBuffer); + deformableTrisShader.SetInt("edgeCount", deformableEdgeCount); + } + } + + public void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts) + { + this.simplexCounts = counts; + + if (simplices.count > 0) + { + boundsShader.SetInt("pointCount", simplexCounts.pointCount); + boundsShader.SetInt("edgeCount", simplexCounts.edgeCount); + boundsShader.SetInt("triangleCount", simplexCounts.triangleCount); + + this.simplices = simplices.AsComputeBuffer(); + cellCoordsBuffer = abstraction.cellCoords.AsComputeBuffer(); + + if (simplexBounds == null || counts.simplexCount > simplexBounds.count) + { + simplexBounds?.Dispose(); + simplexBounds = new GraphicsBuffer(GraphicsBuffer.Target.Structured, counts.simplexCount * 2, 32); + + reducedBounds?.Dispose(); + reducedBounds = new GraphicsBuffer(GraphicsBuffer.Target.Structured, ComputeMath.NextMultiple(counts.simplexCount * 2, 256), 32); + } + + // Even though we usually store simplices for collision detection, the grid is reused for fluid meshing + // so the capacity we set should be at least the total amount of particles in the solver. + if (particleGrid != null) + { + if (particleGrid.SetCapacity(Mathf.Max(counts.simplexCount, particleCount), + (uint)Mathf.Max(1, abstraction.maxParticleContacts), + (uint)Mathf.Max(1, abstraction.maxParticleNeighbors))) + { + // resize to maximum number of contacts: + abstraction.colliderContacts.ResizeUninitialized(particleGrid.contactPairs.count); + abstraction.colliderContacts.SafeAsComputeBuffer(GraphicsBuffer.Target.Counter); + + abstraction.particleContacts.ResizeUninitialized(particleGrid.contactPairs.count); + abstraction.particleContacts.SafeAsComputeBuffer(GraphicsBuffer.Target.Counter); + + abstraction.contactEffectiveMasses.ResizeUninitialized(particleGrid.contactPairs.count); + abstraction.contactEffectiveMasses.SafeAsComputeBuffer(); + + abstraction.particleContactEffectiveMasses.ResizeUninitialized(particleGrid.contactPairs.count); + abstraction.particleContactEffectiveMasses.SafeAsComputeBuffer(); + } + } + } + else + this.simplices = null; + } + + public void SetActiveParticles(ObiNativeIntList indices) + { + // TODO: indices.computebuffer has been deleted when adding an item. We now need to + // update the compute buffer if needed. + if (indices.computeBuffer == null || indices.computeBuffer.count != indices.capacity) + { + //Debug.Log("create"); + activeParticlesBuffer = indices.AsComputeBuffer(indices.capacity); + } + else + { + //Debug.Log("update"); + indices.UploadFullCapacity(); //unmaps the entire memory buffer up to capacity. + } + + if (activeParticlesBuffer != null) + { + solverShader.SetBuffer(predictPositionsKernel, "activeParticles", activeParticlesBuffer); + solverShader.SetBuffer(updateVelocitiesKernel, "activeParticles", activeParticlesBuffer); + solverShader.SetBuffer(updatePositionsKernel, "activeParticles", activeParticlesBuffer); + solverShader.SetBuffer(enforceLimitsKernel, "activeParticles", activeParticlesBuffer); + } + } + + public IObiJobHandle UpdateBounds(IObiJobHandle inputDeps, float stepTime) + { + if (activeParticleCount > 0 && reducedBounds != null) + { + boundsShader.SetFloat("deltaTime", stepTime); + boundsShader.SetFloat("collisionMargin", abstraction.parameters.collisionMargin); + boundsShader.SetFloat("particleCCD", abstraction.parameters.particleCCD); + + int boundsCount = simplexCounts.simplexCount; + int threadGroups = ComputeMath.ThreadGroupCount(boundsCount, 256); + + // at edit time, the collision materials buffer will be null since + // the collider world is not updated. + if (colliderGrid.materialsBuffer != null) + { + boundsShader.SetBuffer(simplexBoundsKernel, "simplexBounds", simplexBounds); + boundsShader.SetBuffer(simplexBoundsKernel, "simplices", simplices); + boundsShader.SetBuffer(simplexBoundsKernel, "reducedBounds", reducedBounds); + boundsShader.SetBuffer(simplexBoundsKernel, "activeParticles", activeParticlesBuffer); + boundsShader.SetBuffer(simplexBoundsKernel, "positions", positionsBuffer); + boundsShader.SetBuffer(simplexBoundsKernel, "velocities", velocitiesBuffer); + boundsShader.SetBuffer(simplexBoundsKernel, "principalRadii", principalRadiiBuffer); + boundsShader.SetBuffer(simplexBoundsKernel, "fluidMaterials", fluidMaterialsBuffer); + boundsShader.SetBuffer(simplexBoundsKernel, "collisionMaterials", colliderGrid.materialsBuffer); + boundsShader.SetBuffer(simplexBoundsKernel, "collisionMaterialIndices", collisionMaterialIndexBuffer); + boundsShader.Dispatch(simplexBoundsKernel, threadGroups, 1, 1); + } + else + { + boundsShader.SetBuffer(editSimplexBoundsKernel, "simplexBounds", simplexBounds); + boundsShader.SetBuffer(editSimplexBoundsKernel, "simplices", simplices); + boundsShader.SetBuffer(editSimplexBoundsKernel, "reducedBounds", reducedBounds); + boundsShader.SetBuffer(editSimplexBoundsKernel, "activeParticles", activeParticlesBuffer); + boundsShader.SetBuffer(editSimplexBoundsKernel, "positions", positionsBuffer); + boundsShader.SetBuffer(editSimplexBoundsKernel, "velocities", velocitiesBuffer); + boundsShader.SetBuffer(editSimplexBoundsKernel, "principalRadii", principalRadiiBuffer); + boundsShader.SetBuffer(editSimplexBoundsKernel, "fluidMaterials", fluidMaterialsBuffer); + boundsShader.Dispatch(editSimplexBoundsKernel, threadGroups, 1, 1); + } + + boundsShader.SetBuffer(boundsReductionKernel, "reducedBounds", reducedBounds); + do + { + boundsShader.Dispatch(boundsReductionKernel, threadGroups, 1, 1); + threadGroups = ComputeMath.ThreadGroupCount(boundsCount, 256); + boundsCount /= 256; + } + while (threadGroups > 1); + + boundsRequest = AsyncGPUReadback.Request(reducedBounds, 32, 0); + + // update lifetimes: + solverShader.SetFloat("deltaTime",stepTime); + solverShader.SetBuffer(updateLifetimesKernel, "activeParticles", activeParticlesBuffer); + solverShader.SetBuffer(updateLifetimesKernel, "life", lifeBuffer); + solverShader.SetBuffer(updateLifetimesKernel, "deadParticles", deadIndicesBuffer); + solverShader.Dispatch(updateLifetimesKernel, ComputeMath.ThreadGroupCount(activeParticleCount, 128), 1, 1); + } + + return inputDeps; + } + + public void GetBounds(ref Vector3 min, ref Vector3 max) + { + // wait for last pending bounds async request: + boundsRequest.WaitForCompletion(); + if (boundsRequest.done && !boundsRequest.hasError) + solverBounds = boundsRequest.GetData(0)[0]; + + min = solverBounds.min; + max = solverBounds.max; + } + + public int GetConstraintCount(Oni.ConstraintType type) + { + /*if ((int)type > 0 && (int)type < constraints.Length) + { + int count = 0; + for (int i = 0; i < constraints[(int)type].Count; ++i) + { + count += constraints[(int)type][i].GetConstraintCount(); + } + return count; + } + return 0;*/ + return 0; + } + + public void SetParameters(Oni.SolverParameters parameters) + { + // These should be better passed using a constant buffer, but constant buffers do not work in 2021 :( + //https://issuetracker.unity3d.com/issues/compute-shader-is-not-using-defined-constants-when-setting-data-with-setconstantbuffer + + solverShader.SetInt("mode", (int)parameters.mode); + solverShader.SetInt("interpolation", (int)parameters.interpolation); + solverShader.SetVector("gravity", parameters.gravity); + solverShader.SetFloat("damping", parameters.damping); + solverShader.SetFloat("sleepThreshold", parameters.sleepThreshold); + solverShader.SetFloat("collisionMargin", parameters.collisionMargin); + solverShader.SetFloat("maxVelocity", parameters.maxVelocity); + solverShader.SetFloat("maxAngularVelocity", parameters.maxAngularVelocity); + } + + public void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters) + { + // No need to implement. This backend grabs parameters from the abstraction when it needs them. + } + + public void ParticleCountChanged(ObiSolver solver) + { + deadIndicesBuffer = abstraction.deadParticles.AsComputeBuffer(abstraction.deadParticles.capacity, GraphicsBuffer.Target.Counter); + colorsBuffer = abstraction.colors.AsComputeBuffer(); + positionsBuffer = abstraction.positions.AsComputeBuffer(); + orientationsBuffer = abstraction.orientations.AsComputeBuffer(); + startPositionsBuffer = abstraction.startPositions.AsComputeBuffer(); + endPositionsBuffer = abstraction.endPositions.AsComputeBuffer(); + startOrientationsBuffer = abstraction.startOrientations.AsComputeBuffer(); + endOrientationsBuffer = abstraction.endOrientations.AsComputeBuffer(); + restPositionsBuffer = abstraction.restPositions.AsComputeBuffer(); + restOrientationsBuffer = abstraction.restOrientations.AsComputeBuffer(); + prevPositionsBuffer = abstraction.prevPositions.AsComputeBuffer(); + prevOrientationsBuffer = abstraction.prevOrientations.AsComputeBuffer(); + renderablePositionsBuffer = abstraction.renderablePositions.AsComputeBuffer(); + renderableOrientationsBuffer = abstraction.renderableOrientations.AsComputeBuffer(); + renderableRadiiBuffer = abstraction.renderableRadii.AsComputeBuffer(); + collisionMaterialIndexBuffer = abstraction.collisionMaterials.AsComputeBuffer(); + + angularVelocitiesBuffer = abstraction.angularVelocities.AsComputeBuffer(); + invRotationalMassesBuffer = abstraction.invRotationalMasses.AsComputeBuffer(); + externalForcesBuffer = abstraction.externalForces.AsComputeBuffer(); + externalTorquesBuffer = abstraction.externalTorques.AsComputeBuffer(); + windBuffer = abstraction.wind.AsComputeBuffer(); + + velocitiesBuffer = abstraction.velocities.AsComputeBuffer(); + principalRadiiBuffer = abstraction.principalRadii.AsComputeBuffer(); + invMassesBuffer = abstraction.invMasses.AsComputeBuffer(); + phasesBuffer = abstraction.phases.AsComputeBuffer(); + filtersBuffer = abstraction.filters.AsComputeBuffer(); + + lifeBuffer = abstraction.life.AsComputeBuffer(); + fluidDataBuffer = abstraction.fluidData.AsComputeBuffer(); + userDataBuffer = abstraction.userData.AsComputeBuffer(); + fluidInterfaceBuffer = abstraction.fluidInterface.AsComputeBuffer(); + fluidMaterialsBuffer = abstraction.fluidMaterials.AsComputeBuffer(); + fluidMaterials2Buffer = abstraction.fluidMaterials2.AsComputeBuffer(); + anisotropiesBuffer = abstraction.anisotropies.AsComputeBuffer(); + + normalsBuffer = abstraction.normals.AsComputeBuffer(); + positionConstraintCountBuffer = abstraction.positionConstraintCounts.AsComputeBuffer(); + orientationConstraintCountBuffer = abstraction.orientationConstraintCounts.AsComputeBuffer(); + + if (positionDeltasIntBuffer != null) + { + positionDeltasIntBuffer.Dispose(); + positionDeltasIntBuffer = null; + } + + if (abstraction.positionDeltas.count > 0) + { + positionDeltasIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, abstraction.positionDeltas.count, abstraction.positionDeltas.stride); + positionDeltasIntBuffer.SetData(new Vector4[abstraction.positionDeltas.count]); + } + + if (orientationDeltasIntBuffer != null) + { + orientationDeltasIntBuffer.Dispose(); + orientationDeltasIntBuffer = null; + } + + if (abstraction.orientationDeltas.count > 0) + { + orientationDeltasIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, abstraction.orientationDeltas.count, abstraction.orientationDeltas.stride); + orientationDeltasIntBuffer.SetData(new Vector4[abstraction.orientationDeltas.count]); + } + + if (tangentsIntBuffer != null) + { + tangentsIntBuffer.Dispose(); + tangentsIntBuffer = null; + } + + if (abstraction.normals.count > 0) + { + tangentsIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, abstraction.normals.count, abstraction.normals.stride); + tangentsIntBuffer.SetData(new VInt4[abstraction.normals.count]); + } + + if (positionsBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "positions", positionsBuffer); + if (prevPositionsBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "prevPositions", prevPositionsBuffer); + if (orientationsBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "orientations", orientationsBuffer); + if (prevOrientationsBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "prevOrientations", prevOrientationsBuffer); + if (velocitiesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "velocities", velocitiesBuffer); + if (invMassesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "invMasses", invMassesBuffer); + if (angularVelocitiesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "angularVelocities", angularVelocitiesBuffer); + if (invRotationalMassesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "invRotationalMasses", invRotationalMassesBuffer); + if (externalForcesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "externalForces", externalForcesBuffer); + if (externalTorquesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "externalTorques", externalTorquesBuffer); + if (phasesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "phases", phasesBuffer); + if (fluidInterfaceBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "buoyancies", fluidInterfaceBuffer); + + if (positionsBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "positions", positionsBuffer); + if (prevPositionsBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "prevPositions", prevPositionsBuffer); + if (orientationsBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "orientations", orientationsBuffer); + if (prevOrientationsBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "prevOrientations", prevOrientationsBuffer); + if (velocitiesBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "velocities", velocitiesBuffer); + if (angularVelocitiesBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "angularVelocities", angularVelocitiesBuffer); + if (invMassesBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "invMasses", invMassesBuffer); + if (invRotationalMassesBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "invRotationalMasses", invRotationalMassesBuffer); + + if (positionsBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "positions", positionsBuffer); + if (prevPositionsBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "prevPositions", prevPositionsBuffer); + if (orientationsBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "orientations", orientationsBuffer); + if (prevOrientationsBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "prevOrientations", prevOrientationsBuffer); + if (velocitiesBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "velocities", velocitiesBuffer); + if (angularVelocitiesBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "angularVelocities", angularVelocitiesBuffer); + + if (positionsBuffer != null) solverShader.SetBuffer(enforceLimitsKernel, "positions", positionsBuffer); + if (prevPositionsBuffer != null) solverShader.SetBuffer(enforceLimitsKernel, "prevPositions", prevPositionsBuffer); + if (lifeBuffer != null) solverShader.SetBuffer(enforceLimitsKernel, "life", lifeBuffer); + if (phasesBuffer != null) solverShader.SetBuffer(enforceLimitsKernel, "phases", phasesBuffer); + + if (positionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "positions", positionsBuffer); + if (startPositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "startPositions", startPositionsBuffer); + if (endPositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "endPositions", endPositionsBuffer); + if (renderablePositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "renderablePositions", renderablePositionsBuffer); + if (orientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "orientations", orientationsBuffer); + if (startOrientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "startOrientations", startOrientationsBuffer); + if (endOrientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "endOrientations", endOrientationsBuffer); + if (renderableOrientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "renderableOrientations", renderableOrientationsBuffer); + if (principalRadiiBuffer != null) solverShader.SetBuffer(interpolateKernel, "principalRadii", principalRadiiBuffer); + if (renderableRadiiBuffer != null) solverShader.SetBuffer(interpolateKernel, "renderableRadii", renderableRadiiBuffer); + } + + public void MaxFoamParticleCountChanged(ObiSolver solver) + { + auxPositions?.Dispose(); + auxVelocities?.Dispose(); + auxColors?.Dispose(); + auxAttributes?.Dispose(); + auxOffsetInCell?.Dispose(); + auxSortedToOriginal?.Dispose(); + + if (m_Solver.maxFoamParticles > 0) + { + solver.foamPositions.AsComputeBuffer(); + solver.foamVelocities.AsComputeBuffer(); + solver.foamColors.AsComputeBuffer(); + solver.foamAttributes.AsComputeBuffer(); + + auxPositions = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 16); + auxVelocities = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 16); + auxColors = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 16); + auxAttributes = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 16); + auxOffsetInCell = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 4); + auxSortedToOriginal = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 4); + } + } + + public void SetRigidbodyArrays(ObiSolver solver) + { + rigidbodyLinearDeltasBuffer = solver.rigidbodyLinearDeltas.SafeAsComputeBuffer(); + rigidbodyAngularDeltasBuffer = solver.rigidbodyAngularDeltas.SafeAsComputeBuffer(); + + if (rigidbodyLinearDeltasIntBuffer != null) + { + rigidbodyLinearDeltasIntBuffer.Dispose(); + rigidbodyLinearDeltasIntBuffer = null; + } + + if (rigidbodyAngularDeltasIntBuffer != null) + { + rigidbodyAngularDeltasIntBuffer.Dispose(); + rigidbodyAngularDeltasIntBuffer = null; + } + + rigidbodyLinearDeltasIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, rigidbodyLinearDeltasBuffer.count, solver.rigidbodyLinearDeltas.stride); + rigidbodyLinearDeltasIntBuffer.SetData(new Vector4[rigidbodyLinearDeltasBuffer.count]); + + rigidbodyAngularDeltasIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, rigidbodyAngularDeltasBuffer.count, solver.rigidbodyAngularDeltas.stride); + rigidbodyAngularDeltasIntBuffer.SetData(new Vector4[rigidbodyAngularDeltasBuffer.count]); + } + + public IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType type) + { + if (constraints[(int)type] != null) + return constraints[(int)type].CreateConstraintsBatch(); + return null; + } + + public void DestroyConstraintsBatch(IConstraintsBatchImpl batch) + { + if (batch != null && constraints[(int)batch.constraintType] != null) + constraints[(int)batch.constraintType].RemoveBatch(batch); + } + + public void FinishSimulation() + { + // Make sure GPU->CPU readbacks have finished. + // by default, only positions and velocities are read back. + // ObiActors can request whatever data they need in RequestData, + // then wait for it in SimulationEnd. + abstraction.positions.WaitForReadback(); + abstraction.velocities.WaitForReadback(); + + abstraction.rigidbodyLinearDeltas.WaitForReadback(); + abstraction.rigidbodyAngularDeltas.WaitForReadback(); + + var sm = constraints[(int)Oni.ConstraintType.ShapeMatching] as ComputeShapeMatchingConstraints; + if (sm != null) + sm.WaitForReadback(); + + var dm = constraints[(int)Oni.ConstraintType.Distance] as ComputeDistanceConstraints; + if (dm != null) + dm.WaitForReadback(); + + var pm = constraints[(int)Oni.ConstraintType.Pin] as ComputePinConstraints; + if (pm != null) + pm.WaitForReadback(); + + var phm = constraints[(int)Oni.ConstraintType.Pinhole] as ComputePinholeConstraints; + if (phm != null) + phm.WaitForReadback(); + + abstraction.externalForces.WipeToZero(); + abstraction.externalTorques.WipeToZero(); + abstraction.externalForces.Upload(); + abstraction.externalTorques.Upload(); + + // copy end to start positions. + abstraction.startPositions.CopyFrom(abstraction.endPositions); abstraction.startOrientations.CopyFrom(abstraction.endOrientations); + + // now that we got position / orientation data in the CPU set them as this step's end positions / orientations. + abstraction.endPositions.CopyFrom(abstraction.positions); abstraction.endOrientations.CopyFrom(abstraction.orientations); + + abstraction.startPositions.Upload(true); + abstraction.startOrientations.Upload(true); + abstraction.endPositions.Upload(true); + abstraction.endOrientations.Upload(true); + } + + public IObiJobHandle CollisionDetection(IObiJobHandle inputDeps, float stepTime) + { + var collisionParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Collision); var particleCollisionParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); var densityParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); + + if (particleCollisionParameters.enabled || + densityParameters.enabled) { + UpdateDiffuseDensity(stepTime); + + UnityEngine.Profiling.Profiler.BeginSample("Build Simplex Grid"); + particleGrid.BuildGrid(this, stepTime); + UnityEngine.Profiling.Profiler.EndSample(); + + if (densityParameters.enabled) { + UnityEngine.Profiling.Profiler.BeginSample("Generate Fluid Neighborhoods"); + particleGrid.GenerateFluidNeighborhoods(this); + UnityEngine.Profiling.Profiler.EndSample(); + } + + if (particleCollisionParameters.enabled) { + UnityEngine.Profiling.Profiler.BeginSample("Generate Particle Contacts"); + particleGrid.GenerateContacts(this); + UnityEngine.Profiling.Profiler.EndSample(); + } + } + + if (collisionParameters.enabled) + { + UnityEngine.Profiling.Profiler.BeginSample("Generate Collider Contacts"); + colliderGrid.GenerateContacts(this, stepTime); + UnityEngine.Profiling.Profiler.EndSample(); + + UnityEngine.Profiling.Profiler.BeginSample("Apply Force Zones"); + colliderGrid.ApplyForceZones(this, stepTime); + UnityEngine.Profiling.Profiler.EndSample(); + } + + return inputDeps; + } + + public IObiJobHandle Substep(IObiJobHandle handle, float stepTime, float substepTime, int steps, float timeLeft) + { + int threadGroups = ComputeMath.ThreadGroupCount(activeParticleCount, 128); + solverShader.SetInt("particleCount", activeParticleCount); + + // if there's no active particles yet, don't do anything: + if (activeParticleCount > 0) + { + solverShader.SetFloat("deltaTime", substepTime); + solverShader.SetFloat("velocityScale", Mathf.Pow(1 - Mathf.Clamp(m_Solver.parameters.damping, 0, 1), substepTime)); + + // Predict positions: + solverShader.Dispatch(predictPositionsKernel, threadGroups, 1, 1); + + ApplyConstraints(stepTime, substepTime, steps, timeLeft); + + EnforceLimits(threadGroups); + + // Update velocities: + solverShader.Dispatch(updateVelocitiesKernel, threadGroups, 1, 1); + + // Calculate velocity adjustments (forces, etc): + CalculateVelocityCorrections(stepTime, substepTime, steps, timeLeft); + } + + // Update diffuse particles: (need to have calculated velocity corrections first, to measure vorticity/velocity) + int substepsLeft = Mathf.RoundToInt(timeLeft / substepTime); + int foamPadding = Mathf.CeilToInt(abstraction.substeps / (float)abstraction.foamSubsteps); + + if (substepsLeft % foamPadding == 0) + { + UpdateDiffuseParticles(substepTime * foamPadding); + UpdateDiffuseCollisions(substepTime * foamPadding); + IntegrateDiffuseParticles(substepTime * foamPadding); + } + + // Update particle positions: + if (activeParticleCount > 0) + { + UpdatePositions(substepTime, threadGroups); + } + + return handle; + } + + private void CalculateVelocityCorrections(float stepTime, float substepTime, int steps, float timeLeft) + { + // Apply aerodynamic constraints: + constraints[(int)Oni.ConstraintType.Aerodynamics].Project(stepTime, substepTime, steps, timeLeft); + + var densityParameters = m_Solver.GetConstraintParameters(Oni.ConstraintType.Density); + + if (densityParameters.enabled) + { + var d = constraints[(int)Oni.ConstraintType.Density] as ComputeDensityConstraints; + if (d != null) + d.CalculateVelocityCorrections(substepTime); + } + } + + private void UpdatePositions(float deltaTime, int threadGroups) + { + var densityParameters = m_Solver.GetConstraintParameters(Oni.ConstraintType.Density); + + if (densityParameters.enabled) + { + var d = constraints[(int)Oni.ConstraintType.Density] as ComputeDensityConstraints; + if (d != null) + d.ApplyVelocityCorrections(deltaTime); + } + + // Update positions: + solverShader.Dispatch(updatePositionsKernel, threadGroups, 1, 1); + } + + private void ApplyConstraints(float stepTime, float substepTime, int steps, float timeLeft) + { + // calculate max amount of iterations required, and initialize constraints.. + int maxIterations = 0; for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled) { maxIterations = Mathf.Max(maxIterations, parameters.iterations); constraints[i].Initialize(stepTime, substepTime, steps, timeLeft); } } + + // calculate iteration paddings: + for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled && parameters.iterations > 0) padding[i] = Mathf.CeilToInt(maxIterations / (float)parameters.iterations); else padding[i] = maxIterations; } + + // perform projection iterations: + for (int i = 1; i < maxIterations; ++i) { for (int j = 0; j < Oni.ConstraintTypeCount; ++j) { if (j != (int)Oni.ConstraintType.Aerodynamics) { var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)j); if (parameters.enabled && i % padding[j] == 0) constraints[j].Project(stepTime, substepTime, steps, timeLeft); } } } + + // final iteration, all groups together: + for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { if (i != (int)Oni.ConstraintType.Aerodynamics) { var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled && parameters.iterations > 0) constraints[i].Project(stepTime, substepTime, steps, timeLeft); } } + + // Despite friction constraints being applied after collision (since coulomb friction depends on normal impulse) + // we perform a collision iteration right at the end to ensure the final state meets the Signorini-Fichera conditions. + var param = m_Solver.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); if (param.enabled && param.iterations > 0) constraints[(int)Oni.ConstraintType.ParticleCollision].Project(stepTime, substepTime, steps, timeLeft); param = m_Solver.GetConstraintParameters(Oni.ConstraintType.Collision); if (param.enabled && param.iterations > 0) constraints[(int)Oni.ConstraintType.Collision].Project(stepTime, substepTime, steps, timeLeft); + } + + private void EnforceLimits(int threadGroups) + { + if (abstraction.useLimits) + { + // keep particles within bounds: + solverShader.SetBool("killOffLimits", abstraction.killOffLimitsParticles); + solverShader.SetVector("boundaryLimitsMin", abstraction.boundaryLimits.min); + solverShader.SetVector("boundaryLimitsMax", abstraction.boundaryLimits.max); + solverShader.Dispatch(enforceLimitsKernel, threadGroups, 1, 1); + } + } + + public IObiJobHandle ApplyInterpolation(IObiJobHandle inputDeps, ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) + { + if (particleCount <= 0) + return inputDeps; + + int threadGroups = ComputeMath.ThreadGroupCount(particleCount, 128); + solverShader.SetInt("particleCount", particleCount); + + solverShader.SetFloat("deltaTime", stepTime); + solverShader.SetFloat("blendFactor", stepTime > 0 ? unsimulatedTime / stepTime : 0); + solverShader.SetInt("interpolate", (int)m_Solver.parameters.interpolation); + + // Interpolate particle state: + solverShader.Dispatch(interpolateKernel, threadGroups, 1, 1); + + // Reset normals: + if ((deformableTriangleCount > 0 || deformableEdgeCount > 0) && normalsBuffer != null) + { + threadGroups = ComputeMath.ThreadGroupCount(normalsBuffer.count, 128); + deformableTrisShader.SetInt("normalsCount", normalsBuffer.count); + deformableTrisShader.SetBuffer(resetNormalsKernel, "phases", phasesBuffer); + deformableTrisShader.SetBuffer(resetNormalsKernel, "normals", normalsBuffer); + deformableTrisShader.SetBuffer(resetNormalsKernel, "tangentsInt", tangentsIntBuffer); + + deformableTrisShader.Dispatch(resetNormalsKernel, threadGroups, 1, 1); + + // Update deformable triangle normals + if (deformableTriangleCount > 0) + { + threadGroups = ComputeMath.ThreadGroupCount(deformableTriangleCount, 128); + deformableTrisShader.SetBuffer(updateNormalsKernel, "renderablePositions", renderablePositionsBuffer); + deformableTrisShader.SetBuffer(updateNormalsKernel, "normalsInt", normalsBuffer); + deformableTrisShader.SetBuffer(updateNormalsKernel, "tangentsInt", tangentsIntBuffer); + + deformableTrisShader.Dispatch(updateNormalsKernel, threadGroups, 1, 1); + } + + // Update deformable edge normals + if (deformableEdgeCount > 0) + { + threadGroups = ComputeMath.ThreadGroupCount(deformableEdgeCount, 128); + deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "renderablePositions", renderablePositionsBuffer); + deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "velocities", velocitiesBuffer); + deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "wind", windBuffer); + deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "normalsInt", normalsBuffer); + + deformableTrisShader.Dispatch(updateEdgeNormalsKernel, threadGroups, 1, 1); + } + + // Update particle orientations + threadGroups = ComputeMath.ThreadGroupCount(normalsBuffer.count, 128); + deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "phases", phasesBuffer); + deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "renderableOrientations", renderableOrientationsBuffer); + deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "normals", normalsBuffer); + deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "tangentsInt", tangentsIntBuffer); + + deformableTrisShader.Dispatch(orientationFromNormalsKernel, threadGroups, 1, 1); + } + + // project renderable position/orientation of pinned particles: + var pinparam = abstraction.GetConstraintParameters(Oni.ConstraintType.Pin); if (pinparam.enabled && pinparam.iterations > 0) + { + var d = constraints[(int)Oni.ConstraintType.Pin] as ComputePinConstraints; + if (Application.isPlaying && d != null) + d.ProjectRenderablePositions(); } + + //make sure density constraints are enabled, otherwise particles have no neighbors and neighbor lists will be uninitialized. + var param = m_Solver.GetConstraintParameters(Oni.ConstraintType.Density); if (param.enabled && param.iterations > 0) + { + // Fluid laplacian/anisotropy (only if we're in play mode, in-editor we have no particlegrid/sorted data). + var d = constraints[(int)Oni.ConstraintType.Density] as ComputeDensityConstraints; + if (Application.isPlaying && d != null) + d.CalculateAnisotropyLaplacianSmoothing(); + } + + return inputDeps; + } + + private void UpdateDiffuseDensity(float deltaTime) + { + var system = abstraction.GetRenderSystem() as ComputeFoamRenderSystem; + if (system != null && m_Solver.maxFoamParticles > 0 && particleGrid.cellCounts != null) + { + for (int i = 0; i < system.renderers.Count; ++i) + { + // solver indices compute buffer may be null + if (system.renderers[i].pressure > 0 && + system.renderers[i].actor.solverIndices?.computeBuffer != null) + { + float scale = 0.01f + Mathf.Clamp01(1 - system.renderers[i].density); + float radius = system.renderers[i].size * scale; + + int cellThreadGroups = ComputeMath.ThreadGroupCount(particleGrid.cellCounts.count, 128); + foamDensityShader.SetFloat("deltaTime", deltaTime); + foamDensityShader.SetInt("maxCells", particleGrid.cellCounts.count); + foamDensityShader.SetInt("maxFoamParticles", abstraction.foamPositions.computeBuffer.count); + foamDensityShader.SetInt("mode", (int)abstraction.parameters.mode); + foamDensityShader.SetFloat("pressure", system.renderers[i].pressure); + foamDensityShader.SetFloat("particleRadius", radius); + foamDensityShader.SetFloat("smoothingRadius", radius * 2 * system.renderers[i].smoothingRadius); + foamDensityShader.SetFloat("surfaceTension", system.renderers[i].surfaceTension); + foamDensityShader.SetFloat("viscosity", system.renderers[i].viscosity); + foamDensityShader.SetVector("volumeLightDirection", system.renderers[i].volumeLight != null ? abstraction.transform.InverseTransformDirection(system.renderers[i].volumeLight.transform.forward) : Vector3.down); + + foamDensityShader.SetBuffer(clearGridKernel, "cellStart", particleGrid.cellOffsets); + foamDensityShader.SetBuffer(clearGridKernel, "cellCounts", particleGrid.cellCounts); + foamDensityShader.Dispatch(clearGridKernel, cellThreadGroups, 1, 1); + + foamDensityShader.SetBuffer(insertGridKernel, "inputPositions", abstraction.foamPositions.computeBuffer); + foamDensityShader.SetBuffer(insertGridKernel, "offsetInCell", auxOffsetInCell); + foamDensityShader.SetBuffer(insertGridKernel, "cellCounts", particleGrid.cellCounts); + foamDensityShader.SetBuffer(insertGridKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamDensityShader.DispatchIndirect(insertGridKernel, abstraction.foamCount.computeBuffer); + + // prefix sum + particleGrid.cellsPrefixSum.Sum(particleGrid.cellCounts, particleGrid.cellOffsets); + + foamDensityShader.SetBuffer(sortByGridKernel, "inputPositions", abstraction.foamPositions.computeBuffer); + foamDensityShader.SetBuffer(sortByGridKernel, "inputVelocities", abstraction.foamVelocities.computeBuffer); + foamDensityShader.SetBuffer(sortByGridKernel, "sortedPositions", auxPositions); + foamDensityShader.SetBuffer(sortByGridKernel, "sortedVelocities", auxVelocities); + foamDensityShader.SetBuffer(sortByGridKernel, "sortedToOriginal", auxSortedToOriginal); + foamDensityShader.SetBuffer(sortByGridKernel, "offsetInCell", auxOffsetInCell); + foamDensityShader.SetBuffer(sortByGridKernel, "cellStart", particleGrid.cellOffsets); + foamDensityShader.SetBuffer(sortByGridKernel, "cellCounts", particleGrid.cellCounts); + foamDensityShader.SetBuffer(sortByGridKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamDensityShader.DispatchIndirect(sortByGridKernel, abstraction.foamCount.computeBuffer); + + foamDensityShader.SetBuffer(computeDensityKernel, "inputPositions", abstraction.foamPositions.computeBuffer); + foamDensityShader.SetBuffer(computeDensityKernel, "sortedPositions", auxPositions); + foamDensityShader.SetBuffer(computeDensityKernel, "fluidData", auxColors); + foamDensityShader.SetBuffer(computeDensityKernel, "cellStart", particleGrid.cellOffsets); + foamDensityShader.SetBuffer(computeDensityKernel, "cellCounts", particleGrid.cellCounts); + foamDensityShader.SetBuffer(computeDensityKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamDensityShader.DispatchIndirect(computeDensityKernel, abstraction.foamCount.computeBuffer); + + foamDensityShader.SetBuffer(applyDensityKernel, "inputPositions", abstraction.foamPositions.computeBuffer); + foamDensityShader.SetBuffer(applyDensityKernel, "inputVelocities", abstraction.foamVelocities.computeBuffer); + foamDensityShader.SetBuffer(applyDensityKernel, "sortedPositions", auxPositions); + foamDensityShader.SetBuffer(applyDensityKernel, "sortedVelocities", auxVelocities); + foamDensityShader.SetBuffer(applyDensityKernel, "sortedToOriginal", auxSortedToOriginal); + foamDensityShader.SetBuffer(applyDensityKernel, "fluidData", auxColors); + foamDensityShader.SetBuffer(applyDensityKernel, "cellStart", particleGrid.cellOffsets); + foamDensityShader.SetBuffer(applyDensityKernel, "cellCounts", particleGrid.cellCounts); + foamDensityShader.SetBuffer(applyDensityKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamDensityShader.DispatchIndirect(applyDensityKernel, abstraction.foamCount.computeBuffer); + } + } + } + else + activeFoamParticleCount = 0; + } + + private void UpdateDiffuseCollisions(float deltaTime) + { + if (!abstraction.foamCollisions) return; + + foamCollisionShader.SetFloat("radiusScale", 0.3f); + foamCollisionShader.SetFloat("colliderCount", colliderGrid.colliderCount); + foamCollisionShader.SetInt("maxCells", ComputeColliderWorld.maxCells); + foamCollisionShader.SetInt("cellsPerCollider", ComputeColliderWorld.cellsPerCollider); + foamCollisionShader.SetInt("shapeTypeCount", Oni.ColliderShapeTypeCount); + foamCollisionShader.SetFloat("deltaTime", deltaTime); + + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "inputPositions", abstraction.foamPositions.computeBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "inputVelocities", abstraction.foamVelocities.computeBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "inputAttributes", abstraction.foamAttributes.computeBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "aabbs", colliderGrid.aabbsBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "transforms", colliderGrid.transformsBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "shapes", colliderGrid.shapesBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "rigidbodies", colliderGrid.rigidbodiesBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "sortedColliderIndices", colliderGrid.sortedColliderIndicesBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "levelPopulation", colliderGrid.levelPopulation); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "cellOffsets", colliderGrid.cellOffsetsBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "cellCounts", colliderGrid.cellCountsBuffer); + + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "triangleMeshHeaders", colliderGrid.triangleMeshHeaders); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "bihNodes", colliderGrid.bihNodes); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "triangles", colliderGrid.triangles); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "vertices", colliderGrid.vertices); + + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "edgeMeshHeaders", colliderGrid.edgeMeshHeaders); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "edgeBihNodes", colliderGrid.edgeBihNodes); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "edges", colliderGrid.edges); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "edgeVertices", colliderGrid.edgeVertices); + + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "distanceFieldHeaders", colliderGrid.distanceFieldHeaders); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "dfNodes", colliderGrid.dfNodes); + + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "heightFieldHeaders", colliderGrid.heightFieldHeaders); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "heightFieldSamples", colliderGrid.heightFieldSamples); + + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "worldToSolver", worldToSolverBuffer); + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "solverToWorld", solverToWorldBuffer); + + foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamCollisionShader.DispatchIndirect(solveDiffuseContactsKernel, abstraction.foamCount.computeBuffer); + } + + private void UpdateDiffuseParticles(float deltaTime) + { + var system = abstraction.GetRenderSystem() as ComputeFoamRenderSystem; + if (system != null && m_Solver.maxFoamParticles > 0 && particleGrid.sortedLinearVel != null) + { + foamShader.SetFloat("deltaTime", deltaTime); + foamShader.SetFloat("randomSeed", Time.frameCount % 16535 + Random.value); + foamShader.SetVector("gravity", m_Solver.parameters.gravity * m_Solver.parameters.foamGravityScale); + foamShader.SetVector("agingOverPopulation", new Vector3(m_Solver.foamAccelAgingRange.x, m_Solver.foamAccelAgingRange.y, m_Solver.foamAccelAging)); + foamShader.SetInt("maxFoamParticles", abstraction.foamPositions.computeBuffer.count); + foamShader.SetInt("minFluidNeighbors", abstraction.foamMinNeighbors); + foamShader.SetInt("maxCells", particleGrid.maxCells); + + foamShader.SetInt("pointCount", simplexCounts.pointCount); + foamShader.SetInt("edgeCount", simplexCounts.edgeCount); + foamShader.SetInt("triangleCount", simplexCounts.triangleCount); + + foamShader.SetBuffer(sortDataKernel, "positions", positionsBuffer); + foamShader.SetBuffer(sortDataKernel, "velocities", velocitiesBuffer); + foamShader.SetBuffer(sortDataKernel, "angularVelocities", angularVelocitiesBuffer); + foamShader.SetBuffer(sortDataKernel, "orientations", renderableOrientationsBuffer); + foamShader.SetBuffer(sortDataKernel, "principalRadii", renderableRadiiBuffer); + foamShader.SetBuffer(sortDataKernel, "sortedPositions", particleGrid.sortedPositions); + foamShader.SetBuffer(sortDataKernel, "sortedVelocities", particleGrid.sortedLinearVel); + foamShader.SetBuffer(sortDataKernel, "sortedAngularVelocities", particleGrid.sortedAngularVel); + foamShader.SetBuffer(sortDataKernel, "sortedOrientations", particleGrid.sortedPrevPosOrientations); + foamShader.SetBuffer(sortDataKernel, "sortedRadii", particleGrid.sortedPrincipalRadii); + foamShader.SetBuffer(sortDataKernel, "sortedToOriginal", particleGrid.sortedFluidIndices); + foamShader.SetBuffer(sortDataKernel, "dispatch", fluidDispatchBuffer); + foamShader.DispatchIndirect(sortDataKernel, fluidDispatchBuffer); + + int threadGroups; + foamShader.SetBuffer(emitFoamKernel, "positions", positionsBuffer); + foamShader.SetBuffer(emitFoamKernel, "velocities", velocitiesBuffer); + foamShader.SetBuffer(emitFoamKernel, "angularVelocities", angularVelocitiesBuffer); + foamShader.SetBuffer(emitFoamKernel, "fluidData", fluidDataBuffer); + foamShader.SetBuffer(emitFoamKernel, "principalRadii", principalRadiiBuffer); + foamShader.SetBuffer(emitFoamKernel, "outputPositions", abstraction.foamPositions.computeBuffer); + foamShader.SetBuffer(emitFoamKernel, "outputVelocities", abstraction.foamVelocities.computeBuffer); + foamShader.SetBuffer(emitFoamKernel, "outputColors", abstraction.foamColors.computeBuffer); + foamShader.SetBuffer(emitFoamKernel, "outputAttributes", abstraction.foamAttributes.computeBuffer); + foamShader.SetBuffer(emitFoamKernel, "dispatch", abstraction.foamCount.computeBuffer); + + foamShader.SetBuffer(emitShapeFoamKernel, "outputPositions", abstraction.foamPositions.computeBuffer); + foamShader.SetBuffer(emitShapeFoamKernel, "outputVelocities", abstraction.foamVelocities.computeBuffer); + foamShader.SetBuffer(emitShapeFoamKernel, "outputColors", abstraction.foamColors.computeBuffer); + foamShader.SetBuffer(emitShapeFoamKernel, "outputAttributes", abstraction.foamAttributes.computeBuffer); + foamShader.SetBuffer(emitShapeFoamKernel, "dispatch", abstraction.foamCount.computeBuffer); + for (int i = 0; i < system.renderers.Count; ++i) + { + // solver indices compute buffer may be null + if (system.renderers[i].actor.solverIndices?.computeBuffer != null) + { + threadGroups = ComputeMath.ThreadGroupCount(system.renderers[i].actor.activeParticleCount, 128); + foamShader.SetInt("activeParticleCount", system.renderers[i].actor.activeParticleCount); + foamShader.SetVector("vorticityRange", system.renderers[i].vorticityRange); + foamShader.SetVector("velocityRange", system.renderers[i].velocityRange); + foamShader.SetFloat("foamGenerationRate", system.renderers[i].foamGenerationRate); + foamShader.SetFloat("potentialIncrease", system.renderers[i].foamPotential); + foamShader.SetFloat("potentialDiffusion", Mathf.Pow(1 - Mathf.Clamp01(system.renderers[i].foamPotentialDiffusion), deltaTime)); + foamShader.SetFloat("buoyancy", system.renderers[i].buoyancy); + foamShader.SetFloat("drag", system.renderers[i].drag); + foamShader.SetFloat("airDrag", Mathf.Pow(1 - Mathf.Clamp01(system.renderers[i].atmosphericDrag), deltaTime)); + foamShader.SetFloat("airAging", system.renderers[i].airAging); + foamShader.SetFloat("isosurface", system.renderers[i].isosurface); + + foamShader.SetFloat("particleSize", system.renderers[i].size); + foamShader.SetFloat("sizeRandom", system.renderers[i].sizeRandom); + foamShader.SetFloat("lifetime", system.renderers[i].lifetime); + foamShader.SetFloat("lifetimeRandom", system.renderers[i].lifetimeRandom); + foamShader.SetVector("foamColor", system.renderers[i].color); + + if (system.renderers[i] is ObiFoamEmitter) + { + var emitter = system.renderers[i] as ObiFoamEmitter; + int particlesToEmit = emitter.GetParticleNumberToEmit(deltaTime); + threadGroups = ComputeMath.ThreadGroupCount(particlesToEmit, 128); + foamShader.SetInt("particlesToEmit", particlesToEmit); + foamShader.SetInt("emitterShape", (int)emitter.shape); + foamShader.SetVector("emitterPosition", emitter.shapeTransform != null? abstraction.transform.InverseTransformPoint(emitter.shapeTransform.position) : Vector3.zero); + foamShader.SetVector("emitterRotation", (emitter.shapeTransform != null ? emitter.shapeTransform.rotation * Quaternion.Inverse(abstraction.transform.rotation): Quaternion.identity).AsVector4()); + foamShader.SetVector("emitterSize", emitter.shapeSize); + foamShader.Dispatch(emitShapeFoamKernel, threadGroups, 1, 1); + } + else // generator + { + foamShader.SetBuffer(emitFoamKernel, "activeParticles", system.renderers[i].actor.solverIndices.computeBuffer); + foamShader.Dispatch(emitFoamKernel, threadGroups, 1, 1); + } + } + } + + foamShader.SetBuffer(copyAliveKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamShader.Dispatch(copyAliveKernel, 1, 1, 1); + + foamShader.SetBuffer(updateFoamKernel, "cellOffsets", particleGrid.cellOffsets); + foamShader.SetBuffer(updateFoamKernel, "cellCounts", particleGrid.cellCounts); + foamShader.SetBuffer(updateFoamKernel, "gridHashToSortedIndex", particleGrid.cellHashToMortonIndex); + foamShader.SetBuffer(updateFoamKernel, "levelPopulation", particleGrid.levelPopulation); + foamShader.SetBuffer(updateFoamKernel, "solverBounds", reducedBounds); + + foamShader.SetBuffer(updateFoamKernel, "positions", particleGrid.sortedPositions); + foamShader.SetBuffer(updateFoamKernel, "orientations", particleGrid.sortedPrevPosOrientations); + foamShader.SetBuffer(updateFoamKernel, "principalRadii", particleGrid.sortedPrincipalRadii); + foamShader.SetBuffer(updateFoamKernel, "velocities", particleGrid.sortedLinearVel); + foamShader.SetBuffer(updateFoamKernel, "angularVelocities", particleGrid.sortedAngularVel); + foamShader.SetBuffer(updateFoamKernel, "fluidMaterial", particleGrid.sortedFluidMaterials); + foamShader.SetBuffer(updateFoamKernel, "fluidData", particleGrid.sortedFluidData); + foamShader.SetBuffer(updateFoamKernel, "fluidSimplices", particleGrid.sortedSimplexToFluid); + foamShader.SetBuffer(updateFoamKernel, "sortedToOriginal", particleGrid.sortedFluidIndices); + foamShader.SetBuffer(updateFoamKernel, "inputPositions", abstraction.foamPositions.computeBuffer); + foamShader.SetBuffer(updateFoamKernel, "inputVelocities", abstraction.foamVelocities.computeBuffer); + foamShader.SetBuffer(updateFoamKernel, "inputColors", abstraction.foamColors.computeBuffer); + foamShader.SetBuffer(updateFoamKernel, "inputAttributes", abstraction.foamAttributes.computeBuffer); + foamShader.SetBuffer(updateFoamKernel, "outputPositions", auxPositions); + foamShader.SetBuffer(updateFoamKernel, "outputVelocities", auxVelocities); + foamShader.SetBuffer(updateFoamKernel, "outputColors", auxColors); + foamShader.SetBuffer(updateFoamKernel, "outputAttributes", auxAttributes); + foamShader.SetBuffer(updateFoamKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamShader.DispatchIndirect(updateFoamKernel, abstraction.foamCount.computeBuffer); + + // copy aux buffers to solver buffers: + foamShader.SetBuffer(copyKernel, "inputPositions", auxPositions); + foamShader.SetBuffer(copyKernel, "inputVelocities", auxVelocities); + foamShader.SetBuffer(copyKernel, "inputColors", auxColors); + foamShader.SetBuffer(copyKernel, "inputAttributes", auxAttributes); + foamShader.SetBuffer(copyKernel, "outputPositions", abstraction.foamPositions.computeBuffer); + foamShader.SetBuffer(copyKernel, "outputVelocities", abstraction.foamVelocities.computeBuffer); + foamShader.SetBuffer(copyKernel, "outputColors", abstraction.foamColors.computeBuffer); + foamShader.SetBuffer(copyKernel, "outputAttributes", abstraction.foamAttributes.computeBuffer); + foamShader.SetBuffer(copyKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamShader.DispatchIndirect(copyKernel, abstraction.foamCount.computeBuffer, 16); + + AsyncGPUReadback.Request(abstraction.foamCount.computeBuffer, 4, 12, (AsyncGPUReadbackRequest obj) => + { + if (obj.done && !obj.hasError) + this.activeFoamParticleCount = obj.GetData()[0]; + }); + } + else + activeFoamParticleCount = 0; + } + + private void IntegrateDiffuseParticles(float deltaTime) + { + foamShader.SetFloat("deltaTime", deltaTime); + + foamShader.SetBuffer(integrateFoamKernel, "outputPositions", abstraction.foamPositions.computeBuffer); + foamShader.SetBuffer(integrateFoamKernel, "outputVelocities", abstraction.foamVelocities.computeBuffer); + + foamShader.SetBuffer(integrateFoamKernel, "dispatch", abstraction.foamCount.computeBuffer); + foamShader.DispatchIndirect(integrateFoamKernel, abstraction.foamCount.computeBuffer); + } + + public void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results) { + if (abstraction.queryResults.count != abstraction.maxQueryResults) + { + abstraction.queryResults.ResizeUninitialized((int)abstraction.maxQueryResults); + abstraction.queryResults.SafeAsComputeBuffer(GraphicsBuffer.Target.Counter); + } + + spatialQueries.SpatialQuery(this, shapes.SafeAsComputeBuffer(), + transforms.SafeAsComputeBuffer(), + results.computeBuffer); + } + + public int GetParticleGridSize() + { + //return particleGrid.grid.usedCells.Length; + return 0; + } + public void GetParticleGrid(ObiNativeAabbList cells) + { + //particleGrid.GetCells(cells); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs.meta new file mode 100644 index 000000000..53995cd7a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9bd37b35dc8b04d69bd0c88ac12b2c5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs index cce5b3afd..56a124c12 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs @@ -10,7 +10,8 @@ namespace Obi void UpdateWorld(float deltaTime); - void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms, int count); + void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms); + void SetForceZones(ObiNativeForceZoneList forceZones); void SetRigidbodies(ObiNativeRigidbodyList rigidbody); void SetCollisionMaterials(ObiNativeCollisionMaterialList materials); diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs new file mode 100644 index 000000000..24652e5f8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs @@ -0,0 +1,8 @@ + +namespace Obi +{ + public interface IPinholeConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetPinholeConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeFloatList edgeMus, ObiNativeIntList edgeRanges, ObiNativeFloatList edgeRangeMus, ObiNativeFloatList parameters, ObiNativeFloatList relativeVelocities, ObiNativeFloatList lambdas, int count); + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs.meta new file mode 100644 index 000000000..0cc8e50df --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22a8bac3a0d2747b8ba78f201d67476a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering.meta new file mode 100644 index 000000000..a168ded5e --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9bb708333a524266935df041ba30a42 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs new file mode 100644 index 000000000..16aff0175 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; + +namespace Obi +{ + public interface IRenderSystem + { + void Setup(); // build meshes, prepare render state, etc. + void Step(); // update constraints (currently only used by skinned cloth) + void Render(); // do the actual rendering. + + void Dispose(); + + uint tier { get { return 1; } } + Oni.RenderingSystemType typeEnum { get; } + + bool isEmpty { get; } + Type GetRendererType(); + } + + public class RendererSet where T : ObiRenderer + { + private List list = new List(); + + public T this[int i] + { + get { return list[i]; } + set { list[i] = value; } + } + + public int Count + { + get { return list.Count; } + } + + public bool AddRenderer(T renderer) + { + // Even though using a HashSet would keep us from checking for + // duplicates in O(n), the only way to iterate trough a set + // causes GC. Since we iterate trough renderers every frame, + // but we only add new renderers once in a blue moon, + // it's preferable to use a list instead. + + if (!list.Contains(renderer)) + { + list.Add(renderer); + return true; + } + return false; + } + + public bool RemoveRenderer(T renderer) + { + return list.Remove(renderer); + } + + public void RemoveAt(int i) + { + if (i >= 0 && i < list.Count) + list.RemoveAt(i); + } + + public int IndexOf(T renderer) + { + return list.IndexOf(renderer); + } + + public IReadOnlyList AsReadOnly() + { + return list.AsReadOnly(); + } + + public void Clear() + { + list.Clear(); + } + } + + public interface RenderSystem : IRenderSystem where T : ObiRenderer + { + RendererSet renderers { get; } + + Type IRenderSystem.GetRendererType() { return typeof(T); } + + bool IRenderSystem.isEmpty + { + get { return renderers.Count == 0; } + } + + public virtual bool AddRenderer(T renderer) + { + return renderers.AddRenderer(renderer); + } + public virtual bool RemoveRenderer(T renderer) + { + return renderers.RemoveRenderer(renderer); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs.meta new file mode 100644 index 000000000..2828c5355 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd2ee05999916460aa9ee269dc8136e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs index d99359509..fb40d70f8 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; namespace Obi { @@ -11,13 +11,14 @@ namespace Obi #region Inertial Frame void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation); void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, float deltaTime); - void ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime); + IObiJobHandle ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime); #endregion #region Particles void ParticleCountChanged(ObiSolver solver); + void MaxFoamParticleCountChanged(ObiSolver solver); void SetActiveParticles(ObiNativeIntList indices); - void InterpolateDiffuseProperties(ObiNativeVector4List properties, ObiNativeVector4List diffusePositions, ObiNativeVector4List diffuseProperties, ObiNativeIntList neighbourCount, int diffuseCount); + uint activeFoamParticleCount { get; } #endregion #region Rigidbodies @@ -28,33 +29,36 @@ namespace Obi IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType type); void DestroyConstraintsBatch(IConstraintsBatchImpl batch); int GetConstraintCount(Oni.ConstraintType type); - void GetCollisionContacts(Oni.Contact[] contacts, int count); - void GetParticleCollisionContacts(Oni.Contact[] contacts, int count); void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters); #endregion #region Update - IObiJobHandle CollisionDetection(float stepTime); - IObiJobHandle Substep(float stepTime, float substepTime, int substeps); - void ApplyInterpolation(ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime); + IObiJobHandle UpdateBounds(IObiJobHandle inputDeps, float stepTime); + IObiJobHandle CollisionDetection(IObiJobHandle inputDeps, float stepTime); + IObiJobHandle Substep(IObiJobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft); + IObiJobHandle ApplyInterpolation(IObiJobHandle inputDeps, ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime); + + void FinishSimulation(); + void PushData(); + void RequestReadback(); + #endregion + + #region Deformable shapes + void SetDeformableTriangles(ObiNativeIntList indices, ObiNativeVector2List uvs); + void SetDeformableEdges(ObiNativeIntList indices); #endregion #region Simplices - int GetDeformableTriangleCount(); - void SetDeformableTriangles(int[] indices, int num, int destOffset); - int RemoveDeformableTriangles(int num, int sourceOffset); - void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts); #endregion #region Utils void SetParameters(Oni.SolverParameters parameters); void GetBounds(ref Vector3 min, ref Vector3 max); - void ResetForces(); int GetParticleGridSize(); void GetParticleGrid(ObiNativeAabbList cells); void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results); - void ReleaseJobHandles(); #endregion + } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Null/NullBackend.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Null/NullBackend.cs index 0badd2fee..10cc2d691 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Null/NullBackend.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Null/NullBackend.cs @@ -11,6 +11,5 @@ { } #endregion - } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs index 37dfe52e1..9e21824d9 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs @@ -1,15 +1,23 @@ -using UnityEngine; +using UnityEngine; using System; namespace Obi { public class NullSolverImpl : ISolverImpl { + public uint activeFoamParticleCount { private set; get; } public void Destroy() { } + public void PushData() + { + } + public void RequestReadback() + { + } + public void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation) { } @@ -18,21 +26,24 @@ namespace Obi { } - public void ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) + public IObiJobHandle ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) { + return null; } - public int GetDeformableTriangleCount() + public IObiJobHandle ApplyForceZones(ObiNativeForceZoneList zones, ObiNativeAffineTransformList transforms) { - return 0; + return null; } - public void SetDeformableTriangles(int[] indices, int num, int destOffset) + + public void SetDeformableTriangles(ObiNativeIntList indices, ObiNativeVector2List uvs) { } - public int RemoveDeformableTriangles(int num, int sourceOffset) + + public void SetDeformableEdges(ObiNativeIntList indices) { - return 0; + } public void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts) @@ -43,6 +54,11 @@ namespace Obi { } + public void MaxFoamParticleCountChanged(ObiSolver solver) + { + + } + public void SetRigidbodyArrays(ObiSolver solver) { } @@ -51,10 +67,6 @@ namespace Obi { } - public void ResetForces() - { - } - public void GetBounds(ref Vector3 min, ref Vector3 max) { } @@ -68,14 +80,6 @@ namespace Obi return 0; } - public void GetCollisionContacts(Oni.Contact[] contacts, int count) - { - } - - public void GetParticleCollisionContacts(Oni.Contact[] contacts, int count) - { - } - public void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters) { } @@ -89,22 +93,29 @@ namespace Obi { } - public IObiJobHandle CollisionDetection(float stepTime) + public void FinishSimulation() + { + + } + + public IObiJobHandle UpdateBounds(IObiJobHandle inputDeps, float stepTime) { return null; } - public IObiJobHandle Substep(float stepTime, float substepTime, int index) + public IObiJobHandle CollisionDetection(IObiJobHandle inputDeps, float stepTime) { return null; } - public void ApplyInterpolation(ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) + public IObiJobHandle Substep(IObiJobHandle inputDeps, float stepTime, float substepTime, int index, float timeLeft) { + return null; } - public void InterpolateDiffuseProperties(ObiNativeVector4List properties, ObiNativeVector4List diffusePositions, ObiNativeVector4List diffuseProperties, ObiNativeIntList neighbourCount, int diffuseCount) + public IObiJobHandle ApplyInterpolation(IObiJobHandle inputDeps, ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) { + return null; } public int GetParticleGridSize() @@ -119,10 +130,5 @@ namespace Obi public void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results) { } - - public void ReleaseJobHandles() - { - - } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni.meta deleted file mode 100644 index bcd65f30c..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 681a7c364e05c483f85cad1eb07018fd -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsBatchImpl.cs deleted file mode 100644 index 068dafad6..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniAerodynamicConstraintsBatchImpl : OniConstraintsBatchImpl, IAerodynamicConstraintsBatchImpl - { - public OniAerodynamicConstraintsBatchImpl(OniAerodynamicConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Aerodynamics) - { - } - - public void SetAerodynamicConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList aerodynamicCoeffs, int count) - { - Oni.SetAerodynamicConstraints(oniBatch, particleIndices.GetIntPtr(), aerodynamicCoeffs.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsBatchImpl.cs.meta deleted file mode 100644 index 093d4d364..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2eaf9121855a4484d8f5765d4ad9d974 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsImpl.cs deleted file mode 100644 index f50bf5650..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniAerodynamicConstraintsImpl : OniConstraintsImpl - { - - public OniAerodynamicConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Aerodynamics) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniAerodynamicConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsImpl.cs.meta deleted file mode 100644 index a5a5b519f..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Aerodynamics/OniAerodynamicConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 990162413cc804203a6ca5d7d90e1ae3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsBatchImpl.cs deleted file mode 100644 index 05fd5d83c..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniBendConstraintsBatchImpl : OniConstraintsBatchImpl, IBendConstraintsBatchImpl - { - public OniBendConstraintsBatchImpl(OniBendConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Bending) - { - } - - public void SetBendConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restBends, ObiNativeVector2List bendingStiffnesses, ObiNativeVector2List plasticity, ObiNativeFloatList lambdas, int count) - { - Oni.SetBendingConstraints(oniBatch, particleIndices.GetIntPtr(), restBends.GetIntPtr(), bendingStiffnesses.GetIntPtr(), plasticity.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsBatchImpl.cs.meta deleted file mode 100644 index a3260da5b..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e465799aa3593428ebabdef6d97f2b4a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsImpl.cs deleted file mode 100644 index 6c33c9fe3..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniBendConstraintsImpl : OniConstraintsImpl - { - - public OniBendConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Bending) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniBendConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsImpl.cs.meta deleted file mode 100644 index 7175df868..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Bend/OniBendConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: abf82a5f5548d41feaaa9fa141461c4c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsBatchImpl.cs deleted file mode 100644 index 11ff42861..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniBendTwistConstraintsBatchImpl : OniConstraintsBatchImpl, IBendTwistConstraintsBatchImpl - { - public OniBendTwistConstraintsBatchImpl(OniBendTwistConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.BendTwist) - { - } - - public void SetBendTwistConstraints(ObiNativeIntList orientationIndices, ObiNativeQuaternionList restOrientations, ObiNativeVector3List stiffnesses, ObiNativeVector2List plasticity, ObiNativeFloatList lambdas, int count) - { - Oni.SetBendTwistConstraints(oniBatch, orientationIndices.GetIntPtr(), restOrientations.GetIntPtr(), stiffnesses.GetIntPtr(), plasticity.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsBatchImpl.cs.meta deleted file mode 100644 index 5e06b79bd..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ba36c80996a534178a1db381ccbc8949 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsImpl.cs deleted file mode 100644 index d84eb3989..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniBendTwistConstraintsImpl : OniConstraintsImpl - { - - public OniBendTwistConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.BendTwist) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniBendTwistConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsImpl.cs.meta deleted file mode 100644 index 0bd43da19..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/BendTwist/OniBendTwistConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c6be6b2551afe45508d996dd67d1b710 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsBatchImpl.cs deleted file mode 100644 index df76bc01d..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniChainConstraintsBatchImpl : OniConstraintsBatchImpl, IChainConstraintsBatchImpl - { - public OniChainConstraintsBatchImpl(OniChainConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Chain) - { - } - - public void SetChainConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List restLengths, ObiNativeIntList firstIndex, ObiNativeIntList numIndices, int count) - { - Oni.SetChainConstraints(oniBatch, particleIndices.GetIntPtr(), restLengths.GetIntPtr(), firstIndex.GetIntPtr(), numIndices.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsBatchImpl.cs.meta deleted file mode 100644 index 26a1a272a..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 315f0420a391e43b3a3e255fce157f2a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsImpl.cs deleted file mode 100644 index 0ce503c32..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniChainConstraintsImpl : OniConstraintsImpl - { - - public OniChainConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Chain) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniChainConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsImpl.cs.meta deleted file mode 100644 index 78596a21d..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Chain/OniChainConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5730de157a60b46e9b258ac099ff1980 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsBatchImpl.cs deleted file mode 100644 index 3c12fdc83..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniDistanceConstraintsBatchImpl : OniConstraintsBatchImpl, IDistanceConstraintsBatchImpl - { - public OniDistanceConstraintsBatchImpl(OniDistanceConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Distance) - { - } - - public void SetDistanceConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restLengths, ObiNativeVector2List stiffnesses, ObiNativeFloatList lambdas, int count) - { - Oni.SetDistanceConstraints(oniBatch, particleIndices.GetIntPtr(), restLengths.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsBatchImpl.cs.meta deleted file mode 100644 index 01b5bdd79..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e2e6ffc02968643a7a530f931b92f948 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsImpl.cs deleted file mode 100644 index 1ceae3345..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniDistanceConstraintsImpl : OniConstraintsImpl - { - - public OniDistanceConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Distance) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniDistanceConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsImpl.cs.meta deleted file mode 100644 index e622b8d43..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Distance/OniDistanceConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1317284f320be48c7be4a294d253fc95 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsBatchImpl.cs deleted file mode 100644 index 39e0a53b6..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsBatchImpl.cs +++ /dev/null @@ -1,73 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniConstraintsBatchImpl : IConstraintsBatchImpl - { - protected IConstraints m_Constraints; - protected Oni.ConstraintType m_ConstraintType; - protected IntPtr m_OniBatch; - protected bool m_Enabled; - - public IntPtr oniBatch - { - get { return m_OniBatch; } - } - - public Oni.ConstraintType constraintType - { - get { return m_ConstraintType; } - } - - public IConstraints constraints - { - get { return m_Constraints; } - } - - public bool enabled - { - set - { - if (m_Enabled != value) - { - m_Enabled = value; - Oni.EnableBatch(m_OniBatch, m_Enabled); - } - } - get { return m_Enabled; } - } - - public OniConstraintsBatchImpl(IConstraints constraints, Oni.ConstraintType type) - { - this.m_Constraints = constraints; - this.m_ConstraintType = type; - - m_OniBatch = Oni.CreateBatch((int)type); - } - - public void Destroy() - { - //Oni.DestroyBatch(m_OniBatch); - - // remove the constraint batch from the solver - // (no need to destroy it as its destruction is managed by the solver) - // just reset the reference. - m_OniBatch = IntPtr.Zero; - } - - public void SetConstraintCount(int constraintCount) - { - Oni.SetBatchConstraintCount(m_OniBatch, constraintCount); - } - - public int GetConstraintCount() - { - return Oni.GetBatchConstraintCount(m_OniBatch); - } - - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsBatchImpl.cs.meta deleted file mode 100644 index bc3d8d946..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1f2c339d89f1144ea82e9763963f897d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsImpl.cs deleted file mode 100644 index 61a86b1e5..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsImpl.cs +++ /dev/null @@ -1,45 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public interface IOniConstraintsImpl : IConstraints - { - IConstraintsBatchImpl CreateConstraintsBatch(); - void RemoveBatch(IConstraintsBatchImpl batch); - } - - public abstract class OniConstraintsImpl : IOniConstraintsImpl - { - protected OniSolverImpl m_Solver; - protected Oni.ConstraintType m_ConstraintType; - - public ISolverImpl solver - { - get { return m_Solver; } - } - - public Oni.ConstraintType constraintType - { - get { return m_ConstraintType; } - } - - public OniConstraintsImpl(OniSolverImpl solver, Oni.ConstraintType constraintType) - { - m_ConstraintType = constraintType; - m_Solver = solver; - } - - public abstract IConstraintsBatchImpl CreateConstraintsBatch(); - - public abstract void RemoveBatch(IConstraintsBatchImpl batch); - - public int GetConstraintCount() - { - return Oni.GetConstraintCount(m_Solver.oniSolver, (int)m_ConstraintType); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsImpl.cs.meta deleted file mode 100644 index 7d45f51b0..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/OniConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7855ae746662942f2b61f01cda77cd71 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsBatchImpl.cs deleted file mode 100644 index c6db3b8d7..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsBatchImpl.cs +++ /dev/null @@ -1,21 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniPinConstraintsBatchImpl : OniConstraintsBatchImpl, IPinConstraintsBatchImpl - { - public OniPinConstraintsBatchImpl(OniPinConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Pin) - { - } - - public void SetPinConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeQuaternionList restDarbouxVectors, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) - { - Oni.SetPinConstraints(oniBatch, particleIndices.GetIntPtr() ,offsets.GetIntPtr(), restDarbouxVectors.GetIntPtr(), colliderIndices.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsBatchImpl.cs.meta deleted file mode 100644 index 01264c16e..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7027ecb8259ee445bb7280c585d5b401 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsImpl.cs deleted file mode 100644 index 95ee95bf5..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniPinConstraintsImpl : OniConstraintsImpl - { - - public OniPinConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Pin) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniPinConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsImpl.cs.meta deleted file mode 100644 index a71ebc301..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Pin/OniPinConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 80f6683022e124b7ab5f002abb8df42a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsBatchImpl.cs deleted file mode 100644 index b20dd1ff3..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsBatchImpl.cs +++ /dev/null @@ -1,39 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniShapeMatchingConstraintsBatchImpl : OniConstraintsBatchImpl, IShapeMatchingConstraintsBatchImpl - { - public OniShapeMatchingConstraintsBatchImpl(OniShapeMatchingConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.ShapeMatching) - { - } - - public void SetShapeMatchingConstraints(ObiNativeIntList particleIndices, - ObiNativeIntList firstIndex, - ObiNativeIntList numIndices, - ObiNativeIntList explicitGroup, - ObiNativeFloatList shapeMaterialParameters, - ObiNativeVector4List restComs, - ObiNativeVector4List coms, - ObiNativeQuaternionList orientations, - ObiNativeMatrix4x4List linearTransforms, - ObiNativeMatrix4x4List plasticDeformations, - ObiNativeFloatList lambdas, - int count) - { - Oni.SetShapeMatchingConstraints(oniBatch, particleIndices.GetIntPtr(), firstIndex.GetIntPtr(), numIndices.GetIntPtr(), explicitGroup.GetIntPtr(), - shapeMaterialParameters.GetIntPtr(),restComs.GetIntPtr(), coms.GetIntPtr(), orientations.GetIntPtr(), linearTransforms.GetIntPtr(), - plasticDeformations.GetIntPtr(), count); - } - - public void CalculateRestShapeMatching() - { - Oni.RecalculateInertiaTensors(((OniSolverImpl)this.constraints.solver).oniSolver); - Oni.CalculateRestShapeMatching(((OniSolverImpl)this.constraints.solver).oniSolver, oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsBatchImpl.cs.meta deleted file mode 100644 index 3fb2c1bf0..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2d8b27a2b5372453881109f4d30710aa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsImpl.cs deleted file mode 100644 index 846ab6899..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniShapeMatchingConstraintsImpl : OniConstraintsImpl - { - - public OniShapeMatchingConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.ShapeMatching) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniShapeMatchingConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsImpl.cs.meta deleted file mode 100644 index 46b7bd743..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/ShapeMatching/OniShapeMatchingConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3179c27ebcc34455aa7967691f6987f3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsBatchImpl.cs deleted file mode 100644 index 622e6cdb7..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniSkinConstraintsBatchImpl : OniConstraintsBatchImpl, ISkinConstraintsBatchImpl - { - public OniSkinConstraintsBatchImpl(OniSkinConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Skin) - { - } - - public void SetSkinConstraints(ObiNativeIntList particleIndices, ObiNativeVector4List skinPoints, ObiNativeVector4List skinNormals, ObiNativeFloatList skinRadiiBackstop, ObiNativeFloatList skinCompliance, ObiNativeFloatList lambdas, int count) - { - Oni.SetSkinConstraints(oniBatch, particleIndices.GetIntPtr(), skinPoints.GetIntPtr(), skinNormals.GetIntPtr(), skinRadiiBackstop.GetIntPtr(), skinCompliance.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsBatchImpl.cs.meta deleted file mode 100644 index 93af2c035..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 52429ca8e52974c47811bb3da9a6d0d6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsImpl.cs deleted file mode 100644 index fbf0e5b93..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniSkinConstraintsImpl : OniConstraintsImpl - { - - public OniSkinConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Skin) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniSkinConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsImpl.cs.meta deleted file mode 100644 index 6db8a1710..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Skin/OniSkinConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4125254438ad247e39a54527a1efb809 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsBatchImpl.cs deleted file mode 100644 index ae0f953bd..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniStitchConstraintsBatchImpl : OniConstraintsBatchImpl, IStitchConstraintsBatchImpl - { - public OniStitchConstraintsBatchImpl(OniStitchConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Stitch) - { - } - - public void SetStitchConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) - { - Oni.SetStitchConstraints(oniBatch, particleIndices.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsBatchImpl.cs.meta deleted file mode 100644 index 799abfaef..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4b6e4637dbd2c4bffbcc8924a90ab7f1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsImpl.cs deleted file mode 100644 index 0209eda55..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniStitchConstraintsImpl : OniConstraintsImpl - { - - public OniStitchConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Stitch) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniStitchConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsImpl.cs.meta deleted file mode 100644 index dc799f6c6..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Stitch/OniStitchConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8666f111d21594650832fc663f618da9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsBatchImpl.cs deleted file mode 100644 index 995732e6e..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniStretchShearConstraintsBatchImpl : OniConstraintsBatchImpl, IStretchShearConstraintsBatchImpl - { - public OniStretchShearConstraintsBatchImpl(OniStretchShearConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.StretchShear) - { - } - - public void SetStretchShearConstraints(ObiNativeIntList particleIndices, ObiNativeIntList orientationIndices, ObiNativeFloatList restLengths, ObiNativeQuaternionList restOrientations, ObiNativeVector3List stiffnesses, ObiNativeFloatList lambdas, int count) - { - Oni.SetStretchShearConstraints(oniBatch, particleIndices.GetIntPtr(), orientationIndices.GetIntPtr(), restLengths.GetIntPtr(), restOrientations.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsBatchImpl.cs.meta deleted file mode 100644 index e5f998b85..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8239fa7b75a3a4f9087095a893f26ecc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsImpl.cs deleted file mode 100644 index 23f870904..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniStretchShearConstraintsImpl : OniConstraintsImpl - { - - public OniStretchShearConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.StretchShear) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniStretchShearConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsImpl.cs.meta deleted file mode 100644 index ed0457b87..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/StretchShear/OniStretchShearConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2e074bd8c876f4a26b870b1bb6338857 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsBatchImpl.cs deleted file mode 100644 index 47e6500a4..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniTetherConstraintsBatchImpl : OniConstraintsBatchImpl, ITetherConstraintsBatchImpl - { - public OniTetherConstraintsBatchImpl(OniTetherConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Tether) - { - } - - public void SetTetherConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List maxLengthScale, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) - { - Oni.SetTetherConstraints(oniBatch, particleIndices.GetIntPtr(), maxLengthScale.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsBatchImpl.cs.meta deleted file mode 100644 index f723e8829..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8d972dca9090340739b46bfce8769234 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsImpl.cs deleted file mode 100644 index 5299af2e6..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniTetherConstraintsImpl : OniConstraintsImpl - { - - public OniTetherConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Tether) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniTetherConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsImpl.cs.meta deleted file mode 100644 index 3fb2ce97a..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Tether/OniTetherConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6922281fd02e54bc2907d3327e602daf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsBatchImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsBatchImpl.cs deleted file mode 100644 index 8b808fbc7..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsBatchImpl.cs +++ /dev/null @@ -1,26 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniVolumeConstraintsBatchImpl : OniConstraintsBatchImpl, IVolumeConstraintsBatchImpl - { - public OniVolumeConstraintsBatchImpl(OniVolumeConstraintsImpl constraints) : base(constraints, Oni.ConstraintType.Volume) - { - } - - public void SetVolumeConstraints(ObiNativeIntList triangles, - ObiNativeIntList firstTriangle, - ObiNativeIntList numTriangles, - ObiNativeFloatList restVolumes, - ObiNativeVector2List pressureStiffness, - ObiNativeFloatList lambdas, - int count) - { - Oni.SetVolumeConstraints(oniBatch, triangles.GetIntPtr(), firstTriangle.GetIntPtr(), numTriangles.GetIntPtr(), restVolumes.GetIntPtr(), pressureStiffness.GetIntPtr(), lambdas.GetIntPtr(), count); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsBatchImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsBatchImpl.cs.meta deleted file mode 100644 index 002cbeb9f..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1af520b0f02a347c4b1d36842ee90910 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsImpl.cs deleted file mode 100644 index 7693a3df9..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsImpl.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniVolumeConstraintsImpl : OniConstraintsImpl - { - - public OniVolumeConstraintsImpl(OniSolverImpl solver) : base(solver, Oni.ConstraintType.Volume) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var batch = new OniVolumeConstraintsBatchImpl(this); - Oni.AddBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - return batch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - Oni.RemoveBatch(((OniSolverImpl)solver).oniSolver, ((OniConstraintsBatchImpl)batch).oniBatch); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsImpl.cs.meta deleted file mode 100644 index 739d47b6a..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Constraints/Volume/OniVolumeConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: db1478edc2f6b48928e2ba97aafd9bad -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniBackend.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniBackend.cs deleted file mode 100644 index 1c9a0ec27..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniBackend.cs +++ /dev/null @@ -1,43 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using UnityEngine; -using System; -using System.Collections; - -namespace Obi -{ - public class OniBackend : IObiBackend - { - private OniColliderWorld colliderGrid; - - #region Solver - public ISolverImpl CreateSolver(ObiSolver solver, int capacity) - { - GetOrCreateColliderWorld(); - colliderGrid.IncreaseReferenceCount(); - return new OniSolverImpl(Oni.CreateSolver(capacity)); - } - public void DestroySolver(ISolverImpl solver) - { - if (solver != null) - { - if (colliderGrid != null) - colliderGrid.DecreaseReferenceCount(); - solver.Destroy(); - } - } - - // Single type of collision world. Each solver implementation should manage the data as it can. - private void GetOrCreateColliderWorld() - { - colliderGrid = GameObject.FindObjectOfType(); - if (colliderGrid == null) - { - var world = new GameObject("OniCollisionWorld", typeof(OniColliderWorld)); - colliderGrid = world.GetComponent(); - } - } - #endregion - - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniBackend.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniBackend.cs.meta deleted file mode 100644 index 11d4d33b8..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniBackend.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b205c5ca9755442b186b1d93df7d7dc6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniColliderWorld.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniColliderWorld.cs deleted file mode 100644 index e1af2010b..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniColliderWorld.cs +++ /dev/null @@ -1,75 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; -using UnityEngine; - -namespace Obi -{ - public class OniColliderWorld : MonoBehaviour, IColliderWorldImpl - { - private int refCount = 0; - - public int referenceCount { get { return refCount; } } - - public void Awake() - { - ObiColliderWorld.GetInstance().RegisterImplementation(this); - } - - public void OnDestroy() - { - ObiColliderWorld.GetInstance().UnregisterImplementation(this); - } - - public void IncreaseReferenceCount() - { - refCount++; - } - public void DecreaseReferenceCount() - { - if (--refCount <= 0 && gameObject != null) - DestroyImmediate(gameObject); - } - - public void UpdateWorld(float deltaTime) - { - Oni.UpdateColliderGrid(deltaTime); - } - - public void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms, int count) - { - Oni.SetColliders(shapes.GetIntPtr(), bounds.GetIntPtr(), transforms.GetIntPtr(), count); - } - - public void SetRigidbodies(ObiNativeRigidbodyList rigidbody) - { - Oni.SetRigidbodies(rigidbody.GetIntPtr()); - } - - public void SetCollisionMaterials(ObiNativeCollisionMaterialList materials) - { - Oni.SetCollisionMaterials(materials.GetIntPtr()); - } - - public void SetTriangleMeshData(ObiNativeTriangleMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeTriangleList triangles, ObiNativeVector3List vertices) - { - Oni.SetTriangleMeshData(headers.GetIntPtr(), nodes.GetIntPtr(), triangles.GetIntPtr(), vertices.GetIntPtr()); - } - - public void SetEdgeMeshData(ObiNativeEdgeMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeEdgeList edges, ObiNativeVector2List vertices) - { - Oni.SetEdgeMeshData(headers.GetIntPtr(), nodes.GetIntPtr(), edges.GetIntPtr(), vertices.GetIntPtr()); - } - - public void SetDistanceFieldData(ObiNativeDistanceFieldHeaderList headers, ObiNativeDFNodeList nodes) - { - Oni.SetDistanceFieldData(headers.GetIntPtr(), nodes.GetIntPtr()); - } - - public void SetHeightFieldData(ObiNativeHeightFieldHeaderList headers, ObiNativeFloatList samples) - { - Oni.SetHeightFieldData(headers.GetIntPtr(), samples.GetIntPtr()); - } - } - -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniColliderWorld.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniColliderWorld.cs.meta deleted file mode 100644 index 2961feff3..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniColliderWorld.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d02d25c24c8574316883c920912e4fdb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniJobHandle.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniJobHandle.cs deleted file mode 100644 index 5acf0bb62..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniJobHandle.cs +++ /dev/null @@ -1,27 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using System; - -namespace Obi -{ - public class OniJobHandle : IObiJobHandle - { - private IntPtr pointer = IntPtr.Zero; - - public OniJobHandle SetPointer(IntPtr newPtr) - { - pointer = newPtr; - return this; - } - - public void Complete() - { - Oni.Complete(pointer); - } - - public void Release() - { - pointer = IntPtr.Zero; - } - } -} -#endif diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniJobHandle.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniJobHandle.cs.meta deleted file mode 100644 index 3030ce29b..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/OniJobHandle.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 502f41bdafa70468985a879d9ffc67d9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver/OniSolverImpl.cs b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver/OniSolverImpl.cs deleted file mode 100644 index e6b7f8948..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver/OniSolverImpl.cs +++ /dev/null @@ -1,226 +0,0 @@ -#if (OBI_ONI_SUPPORTED) -using UnityEngine; -using System; -using System.Collections; -using System.Runtime.InteropServices; - -namespace Obi -{ - public class OniSolverImpl : ISolverImpl - { - private IntPtr m_OniSolver; - - // Per-type constraints array: - private IOniConstraintsImpl[] constraints; - - // Pool job handles to avoid runtime alloc: - private JobHandlePool jobHandlePool; - - public IntPtr oniSolver - { - get { return m_OniSolver; } - } - - public OniSolverImpl(IntPtr solver) - { - m_OniSolver = solver; - - jobHandlePool = new JobHandlePool(4); - - constraints = new IOniConstraintsImpl[Oni.ConstraintTypeCount]; - constraints[(int)Oni.ConstraintType.Tether] = new OniTetherConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.Volume] = new OniVolumeConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.Chain] = new OniChainConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.Bending] = new OniBendConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.Distance] = new OniDistanceConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.ShapeMatching] = new OniShapeMatchingConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.BendTwist] = new OniBendTwistConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.StretchShear] = new OniStretchShearConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.Pin] = new OniPinConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.Skin] = new OniSkinConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.Aerodynamics] = new OniAerodynamicConstraintsImpl(this); - constraints[(int)Oni.ConstraintType.Stitch] = new OniStitchConstraintsImpl(this); - } - - public void Destroy() - { - Oni.DestroySolver(m_OniSolver); - m_OniSolver = IntPtr.Zero; - } - - public void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation) - { - Oni.InitializeFrame(oniSolver, ref translation, ref scale, ref rotation); - } - - public void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, float deltaTime) - { - Oni.UpdateFrame(oniSolver, ref translation, ref scale, ref rotation, deltaTime); - } - - public void ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) - { - Oni.ApplyFrame(oniSolver, 0, 0, worldLinearInertiaScale, worldAngularInertiaScale, deltaTime); - } - - public int GetDeformableTriangleCount() - { - return Oni.GetDeformableTriangleCount(m_OniSolver); - } - public void SetDeformableTriangles(int[] indices, int num, int destOffset) - { - Oni.SetDeformableTriangles(m_OniSolver, indices, num, destOffset); - } - public int RemoveDeformableTriangles(int num, int sourceOffset) - { - return Oni.RemoveDeformableTriangles(m_OniSolver, num, sourceOffset); - } - - public void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts) - { - Oni.SetSimplices(m_OniSolver, simplices.AsNativeArray().ToArray(), counts.pointCount, counts.edgeCount, counts.triangleCount); - } - - public void ParticleCountChanged(ObiSolver solver) - { - Oni.SetParticlePositions(m_OniSolver, solver.positions.GetIntPtr()); - Oni.SetParticlePreviousPositions(m_OniSolver, solver.prevPositions.GetIntPtr()); - Oni.SetRestPositions(m_OniSolver, solver.restPositions.GetIntPtr()); - Oni.SetParticleOrientations(m_OniSolver, solver.orientations.GetIntPtr()); - Oni.SetParticlePreviousOrientations(m_OniSolver, solver.prevOrientations.GetIntPtr()); - Oni.SetRestOrientations(m_OniSolver, solver.restOrientations.GetIntPtr()); - Oni.SetParticleVelocities(m_OniSolver, solver.velocities.GetIntPtr()); - Oni.SetParticleAngularVelocities(m_OniSolver, solver.angularVelocities.GetIntPtr()); - Oni.SetParticleInverseMasses(m_OniSolver, solver.invMasses.GetIntPtr()); - Oni.SetParticleInverseRotationalMasses(m_OniSolver, solver.invRotationalMasses.GetIntPtr()); - Oni.SetParticlePrincipalRadii(m_OniSolver, solver.principalRadii.GetIntPtr()); - Oni.SetParticleCollisionMaterials(m_OniSolver, solver.collisionMaterials.GetIntPtr()); - Oni.SetParticlePhases(m_OniSolver, solver.phases.GetIntPtr()); - Oni.SetParticleFilters(m_OniSolver, solver.filters.GetIntPtr()); - Oni.SetRenderableParticlePositions(m_OniSolver, solver.renderablePositions.GetIntPtr()); - Oni.SetRenderableParticleOrientations(m_OniSolver, solver.renderableOrientations.GetIntPtr()); - Oni.SetParticleAnisotropies(m_OniSolver, solver.anisotropies.GetIntPtr()); - Oni.SetParticleSmoothingRadii(m_OniSolver, solver.smoothingRadii.GetIntPtr()); - Oni.SetParticleBuoyancy(m_OniSolver, solver.buoyancies.GetIntPtr()); - Oni.SetParticleRestDensities(m_OniSolver, solver.restDensities.GetIntPtr()); - Oni.SetParticleViscosities(m_OniSolver, solver.viscosities.GetIntPtr()); - Oni.SetParticleSurfaceTension(m_OniSolver, solver.surfaceTension.GetIntPtr()); - Oni.SetParticleVorticityConfinement(m_OniSolver, solver.vortConfinement.GetIntPtr()); - Oni.SetParticleAtmosphericDragPressure(m_OniSolver, solver.atmosphericDrag.GetIntPtr(), solver.atmosphericPressure.GetIntPtr()); - Oni.SetParticleDiffusion(m_OniSolver, solver.diffusion.GetIntPtr()); - Oni.SetParticleVorticities(m_OniSolver, solver.vorticities.GetIntPtr()); - Oni.SetParticleFluidData(m_OniSolver, solver.fluidData.GetIntPtr()); - Oni.SetParticleUserData(m_OniSolver, solver.userData.GetIntPtr()); - Oni.SetParticleExternalForces(m_OniSolver, solver.externalForces.GetIntPtr()); - Oni.SetParticleExternalTorques(m_OniSolver, solver.externalTorques.GetIntPtr()); - Oni.SetParticleWinds(m_OniSolver, solver.wind.GetIntPtr()); - Oni.SetParticlePositionDeltas(m_OniSolver, solver.positionDeltas.GetIntPtr()); - Oni.SetParticleOrientationDeltas(m_OniSolver, solver.orientationDeltas.GetIntPtr()); - Oni.SetParticlePositionConstraintCounts(m_OniSolver, solver.positionConstraintCounts.GetIntPtr()); - Oni.SetParticleOrientationConstraintCounts(m_OniSolver, solver.orientationConstraintCounts.GetIntPtr()); - Oni.SetParticleNormals(m_OniSolver, solver.normals.GetIntPtr()); - Oni.SetParticleInverseInertiaTensors(m_OniSolver, solver.invInertiaTensors.GetIntPtr()); - - Oni.SetCapacity(m_OniSolver, solver.positions.capacity); - } - - public void SetRigidbodyArrays(ObiSolver solver) - { - Oni.SetRigidbodyLinearDeltas(m_OniSolver, solver.rigidbodyLinearDeltas.GetIntPtr()); - Oni.SetRigidbodyAngularDeltas(m_OniSolver, solver.rigidbodyAngularDeltas.GetIntPtr()); - } - - public void SetActiveParticles(ObiNativeIntList indices) - { - Oni.SetActiveParticles(oniSolver, indices.AsNativeArray().ToArray(), indices.count); - } - - public void ResetForces() - { - Oni.ResetForces(oniSolver); - } - - public void GetBounds(ref Vector3 min, ref Vector3 max) - { - Oni.GetBounds(oniSolver, ref min, ref max); - } - - public void SetParameters(Oni.SolverParameters parameters) - { - Oni.SetSolverParameters(m_OniSolver, ref parameters); - } - - public int GetConstraintCount(Oni.ConstraintType type) - { - return Oni.GetConstraintCount(m_OniSolver, (int)type); - } - - public void GetCollisionContacts(Oni.Contact[] contacts, int count) - { - Oni.GetCollisionContacts(m_OniSolver, contacts, count); - } - - public void GetParticleCollisionContacts(Oni.Contact[] contacts, int count) - { - Oni.GetParticleCollisionContacts(m_OniSolver, contacts, count); - } - - public void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters) - { - Oni.SetConstraintGroupParameters(m_OniSolver, (int)type, ref parameters); - } - - public IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType constraintType) - { - return constraints[(int)constraintType].CreateConstraintsBatch(); - } - - public void DestroyConstraintsBatch(IConstraintsBatchImpl batch) - { - if (batch != null) - constraints[(int)batch.constraintType].RemoveBatch(batch); - } - - public IObiJobHandle CollisionDetection(float stepTime) - { - Oni.RecalculateInertiaTensors(oniSolver); - return jobHandlePool.Borrow().SetPointer(Oni.CollisionDetection(oniSolver, stepTime)); - } - - public IObiJobHandle Substep(float stepTime, float substepTime, int substeps) - { - return jobHandlePool.Borrow().SetPointer(Oni.Step(oniSolver, stepTime, substepTime, substeps)); - } - - public void ApplyInterpolation(ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) - { - Oni.ApplyPositionInterpolation(oniSolver, startPositions.GetIntPtr(), startOrientations.GetIntPtr(), stepTime, unsimulatedTime); - } - - public void InterpolateDiffuseProperties(ObiNativeVector4List properties, ObiNativeVector4List diffusePositions, ObiNativeVector4List diffuseProperties, ObiNativeIntList neighbourCount, int diffuseCount) - { - Oni.InterpolateDiffuseParticles(oniSolver, properties.GetIntPtr(), diffusePositions.GetIntPtr(), diffuseProperties.GetIntPtr(), neighbourCount.GetIntPtr(), diffuseCount); - } - - public int GetParticleGridSize() - { - return Oni.GetParticleGridSize(oniSolver); - } - public void GetParticleGrid(ObiNativeAabbList cells) - { - //Oni.GetParticleGrid(oniSolver, cells.GetIntPtr()); - } - public void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results) - { - int count = Oni.SpatialQuery(oniSolver, shapes.GetIntPtr(), transforms.GetIntPtr(), shapes.count); - - results.ResizeUninitialized(count); - Oni.GetQueryResults(oniSolver, results.GetIntPtr(), count); - } - public void ReleaseJobHandles() - { - jobHandlePool.ReleaseAll(); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver/OniSolverImpl.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver/OniSolverImpl.cs.meta deleted file mode 100644 index c71ef9fd9..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Backends/Oni/Solver/OniSolverImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3240362f8b8e047d7b9250344aaa0d6d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs index e2a4df6c4..6e7c6c3be 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs @@ -76,8 +76,8 @@ namespace Obi { particleIndices[m_ActiveConstraintCount + i] = actor.solverIndices[batch.particleIndices[i]]; aerodynamicCoeffs[(m_ActiveConstraintCount + i) * 3] = batch.aerodynamicCoeffs[i*3]; - aerodynamicCoeffs[(m_ActiveConstraintCount + i) * 3 + 1] = user.drag; - aerodynamicCoeffs[(m_ActiveConstraintCount + i) * 3 + 2] = user.lift; + aerodynamicCoeffs[(m_ActiveConstraintCount + i) * 3 + 1] = user.GetDrag(batch, i); + aerodynamicCoeffs[(m_ActiveConstraintCount + i) * 3 + 2] = user.GetLift(batch, i); } base.Merge(actor, other); @@ -96,6 +96,10 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + aerodynamicCoeffs.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs index 8e46dadd8..a1cf35289 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs @@ -115,6 +115,12 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + restBends.Dispose(); + bendingStiffnesses.Dispose(); + plasticity.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs index e8c6b2fb3..522dd1930 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs @@ -116,6 +116,12 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + restDarbouxVectors.Dispose(); + plasticity.Dispose(); + stiffnesses.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs index 859c86517..1104490b7 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs @@ -120,6 +120,12 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + firstParticle.Dispose(); + numParticles.Dispose(); + lengths.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs index 11917cef4..53c42dff5 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs @@ -42,6 +42,7 @@ namespace Obi bool DeactivateConstraint(int constraintIndex); bool ActivateConstraint(int constraintIndex); void DeactivateAllConstraints(); + void ActivateAllConstraints(); void Clear(); @@ -100,8 +101,12 @@ namespace Obi protected abstract void SwapConstraints(int sourceIndex, int destIndex); public abstract void GetParticlesInvolved(int index, List particles); - public abstract void AddToSolver(ObiSolver solver); - public abstract void RemoveFromSolver(ObiSolver solver); + + public virtual void AddToSolver(ObiSolver solver) { } + public virtual void RemoveFromSolver(ObiSolver solver) { + particleIndices.Dispose(); + lambdas.Dispose(); + } protected virtual void CopyConstraint(ObiConstraintsBatch batch, int constraintIndex) { } @@ -176,6 +181,11 @@ namespace Obi m_ActiveConstraintCount = 0; } + public void ActivateAllConstraints() + { + m_ActiveConstraintCount = m_ConstraintCount; + } + // Swaps the constraint with the last one and reduces the amount of constraints by one. public void RemoveConstraint(int constraintIndex) { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs index d412a6e81..92673df9a 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs @@ -30,7 +30,7 @@ namespace Obi get { return m_BatchImpl; } } - public ObiDistanceConstraintsBatch(int a = 0) + public ObiDistanceConstraintsBatch(ObiDistanceConstraintsData constraints = null) : base() { } @@ -135,6 +135,11 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + restLengths.Dispose(); + stiffnesses.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs index b49dbe5d8..08270d5c5 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs @@ -8,12 +8,12 @@ namespace Obi [Serializable] public class ObiPinConstraintsBatch : ObiConstraintsBatch { - protected IPinConstraintsBatchImpl m_BatchImpl; + protected IPinConstraintsBatchImpl m_BatchImpl; /// /// for each constraint, handle of the pinned collider. /// - [HideInInspector] public List pinBodies = new List(); + [HideInInspector] public List pinBodies = new List(); /// /// index of the pinned collider in the collider world. @@ -23,22 +23,17 @@ namespace Obi /// /// Pin position expressed in the attachment's local space. /// - [HideInInspector] public ObiNativeVector4List offsets = new ObiNativeVector4List(); + [HideInInspector] public ObiNativeVector4List offsets = new ObiNativeVector4List(); /// /// Rest Darboux vector for each constraint. /// - [HideInInspector] public ObiNativeQuaternionList restDarbouxVectors = new ObiNativeQuaternionList(); + [HideInInspector] public ObiNativeQuaternionList restDarbouxVectors = new ObiNativeQuaternionList(); /// /// Compliances of pin constraits. 2 float per constraint (positional and rotational compliance). /// - [HideInInspector] public ObiNativeFloatList stiffnesses = new ObiNativeFloatList(); - - /// - /// One float per constraint: break threshold. - /// - [HideInInspector] public ObiNativeFloatList breakThresholds = new ObiNativeFloatList(); + [HideInInspector] public ObiNativeFloatList stiffnesses = new ObiNativeFloatList(); public override Oni.ConstraintType constraintType { @@ -54,18 +49,17 @@ namespace Obi { } - public void AddConstraint(int solverIndex, ObiColliderBase body, Vector3 offset, Quaternion restDarboux, float linearCompliance, float rotationalCompliance, float breakThreshold) + public void AddConstraint(int solverIndex, ObiColliderBase body, Vector3 offset, Quaternion restDarboux, float linearCompliance, float rotationalCompliance, bool projectRenderable = false) { RegisterConstraint(); particleIndices.Add(solverIndex); pinBodies.Add(body != null ? body.Handle : new ObiColliderHandle()); colliderIndices.Add(body != null ? body.Handle.index : -1); - offsets.Add(offset); + offsets.Add(new Vector4(offset.x, offset.y, offset.z, projectRenderable ? 1:0)); restDarbouxVectors.Add(restDarboux); stiffnesses.Add(linearCompliance); stiffnesses.Add(rotationalCompliance); - breakThresholds.Add(breakThreshold); } public override void Clear() @@ -108,13 +102,11 @@ namespace Obi offsets.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); restDarbouxVectors.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); stiffnesses.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); - breakThresholds.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); lambdas.ResizeInitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 4); offsets.CopyFrom(batch.offsets, 0, m_ActiveConstraintCount, batch.activeConstraintCount); restDarbouxVectors.CopyFrom(batch.restDarbouxVectors, 0, m_ActiveConstraintCount, batch.activeConstraintCount); stiffnesses.CopyFrom(batch.stiffnesses, 0, m_ActiveConstraintCount * 2, batch.activeConstraintCount * 2); - breakThresholds.CopyFrom(batch.breakThresholds, 0, m_ActiveConstraintCount, batch.activeConstraintCount); for (int i = 0; i < batch.activeConstraintCount; ++i) { @@ -139,6 +131,13 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + restDarbouxVectors.Dispose(); + colliderIndices.Dispose(); + offsets.Dispose(); + stiffnesses.Dispose(); + if (solver != null && solver.implementation != null) solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs new file mode 100644 index 000000000..3ae11a2ca --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs @@ -0,0 +1,220 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace Obi +{ + [Serializable] + public class ObiPinholeConstraintsBatch : ObiConstraintsBatch + { + [Serializable] + public struct PinholeEdge + { + public int edgeIndex; + public float coordinate; + + public PinholeEdge(int edgeIndex, float coordinate) + { + this.edgeIndex = edgeIndex; + this.coordinate = coordinate; + } + + public float GetRopeCoordinate(ObiActor actor) + { + int edgeCount = actor.GetDeformableEdgeCount(); + return edgeCount > 0 ? Mathf.Clamp01((edgeIndex + coordinate) / edgeCount) : 0; + } + } + + protected IPinholeConstraintsBatchImpl m_BatchImpl; + + /// + /// for each constraint, handle of the pinned collider. + /// + [HideInInspector] public List pinBodies = new List(); + + /// + /// for each constraint, reference to the actor pinned. + /// + [HideInInspector] public List pinActors = new List(); + + /// + /// index of the pinned collider in the collider world. + /// + [HideInInspector] public ObiNativeIntList colliderIndices = new ObiNativeIntList(); + + /// + /// Pinhole position expressed in the attachment's local space. + /// + [HideInInspector] public ObiNativeVector4List offsets = new ObiNativeVector4List(); + + /// + // Normalized coordinate along current edge. + /// + [HideInInspector] public ObiNativeFloatList edgeMus = new ObiNativeFloatList(); + + /// + /// Edge range as 2 ints (first edge, last edge) for each constraint. + /// + [HideInInspector] public ObiNativeIntList edgeRanges = new ObiNativeIntList(); + + /// + /// Min/max cooridnate in each of the first and last edges as 2 floats for each constraint. + /// + [HideInInspector] public ObiNativeFloatList edgeRangeMus = new ObiNativeFloatList(); + + /// + /// Parameters of pinhole constraints. 5 floats per constraint (compliance, friction, motor speed, motor force and normalized coordinate along edge). + /// + [HideInInspector] public ObiNativeFloatList parameters = new ObiNativeFloatList(); + + /// + /// Relative velocities between rope and pinhole. + /// + [HideInInspector] public ObiNativeFloatList relativeVelocities = new ObiNativeFloatList(); + + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Pinhole; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiPinholeConstraintsBatch(ObiPinholeConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(PinholeEdge edge, PinholeEdge firstEdge, PinholeEdge lastEdge, ObiActor actor, ObiColliderBase body, Vector3 offset, float compliance, float friction, float motorSpeed, float motorForce, bool clampAtEnds) + { + RegisterConstraint(); + + particleIndices.Add(edge.edgeIndex); + edgeMus.Add(edge.coordinate); + edgeRanges.Add(firstEdge.edgeIndex); + edgeRanges.Add(lastEdge.edgeIndex); + edgeRangeMus.Add(firstEdge.coordinate); + edgeRangeMus.Add(lastEdge.coordinate); + + pinBodies.Add(body != null ? body.Handle : new ObiColliderHandle()); + pinActors.Add(actor); + colliderIndices.Add(body != null ? body.Handle.index : -1); + offsets.Add(offset); + parameters.Add(compliance); + parameters.Add(friction); + parameters.Add(motorSpeed); + parameters.Add(motorForce); + parameters.Add(clampAtEnds ? 1 : 0); + relativeVelocities.Add(0); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + pinBodies.Clear(); + colliderIndices.Clear(); + offsets.Clear(); + edgeMus.Clear(); + edgeRanges.Clear(); + edgeRangeMus.Clear(); + parameters.Clear(); + relativeVelocities.Clear(); + } + + public override void GetParticlesInvolved(int index, List particles) + { + particles.Add(particleIndices[index]); + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + particleIndices.Swap(sourceIndex, destIndex); + pinBodies.Swap(sourceIndex, destIndex); + colliderIndices.Swap(sourceIndex, destIndex); + offsets.Swap(sourceIndex, destIndex); + edgeMus.Swap(sourceIndex, destIndex); + edgeRanges.Swap(sourceIndex * 2, destIndex * 2); + edgeRanges.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); + edgeRangeMus.Swap(sourceIndex * 2, destIndex * 2); + edgeRangeMus.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); + + for (int i = 0; i < 5; ++i) + parameters.Swap(sourceIndex * 5 + i, destIndex * 5 + i); + + relativeVelocities.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiPinholeConstraintsBatch; + + if (batch != null) + { + + particleIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + colliderIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + offsets.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + edgeRanges.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); + edgeRangeMus.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); + edgeMus.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + parameters.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 5); + relativeVelocities.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + edgeMus.CopyFrom(batch.edgeMus, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + edgeRangeMus.CopyFrom(batch.edgeRangeMus, 0, m_ActiveConstraintCount * 2, batch.activeConstraintCount * 2); + offsets.CopyFrom(batch.offsets, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + relativeVelocities.CopyFrom(batch.relativeVelocities, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + parameters.CopyFrom(batch.parameters, 0, m_ActiveConstraintCount * 5, batch.activeConstraintCount * 5); + + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + int currentEdge = -1, firstEdge = -1, lastEdge = -1; + if (batch.pinActors[i] != null) + { + currentEdge = batch.pinActors[i].deformableEdgesOffset + batch.particleIndices[i]; + firstEdge = batch.pinActors[i].deformableEdgesOffset + batch.edgeRanges[i * 2]; + lastEdge = batch.pinActors[i].deformableEdgesOffset + batch.edgeRanges[i * 2 + 1]; + } + + edgeRanges[(m_ActiveConstraintCount + i) * 2] = firstEdge; + edgeRanges[(m_ActiveConstraintCount + i) * 2 + 1] = lastEdge; + particleIndices[m_ActiveConstraintCount + i] = Mathf.Clamp(currentEdge, firstEdge, lastEdge); + colliderIndices[m_ActiveConstraintCount + i] = batch.pinBodies[i] != null ? batch.pinBodies[i].index : -1; + } + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + if (solver != null && solver.implementation != null) + { + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IPinholeConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetPinholeConstraints(particleIndices, colliderIndices, offsets, edgeMus, edgeRanges, edgeRangeMus, parameters, relativeVelocities, lambdas, m_ActiveConstraintCount); + } + } + + public override void RemoveFromSolver(ObiSolver solver) + { + base.RemoveFromSolver(solver); + + edgeRanges.Dispose(); + colliderIndices.Dispose(); + offsets.Dispose(); + parameters.Dispose(); + + if (solver != null && solver.implementation != null) + solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); + } + + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs.meta new file mode 100644 index 000000000..a225abd0c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d642dbf4a869c4761b38ce3f65e22f05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs index 9558a10e4..4c87bc322 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs @@ -8,38 +8,38 @@ namespace Obi [Serializable] public class ObiShapeMatchingConstraintsBatch : ObiConstraintsBatch { - protected IShapeMatchingConstraintsBatchImpl m_BatchImpl; + protected IShapeMatchingConstraintsBatchImpl m_BatchImpl; /// /// index of the first particle in each constraint. /// - public ObiNativeIntList firstIndex = new ObiNativeIntList(); + public ObiNativeIntList firstIndex = new ObiNativeIntList(); /// /// amount of particles in each constraint. /// - public ObiNativeIntList numIndices = new ObiNativeIntList(); + public ObiNativeIntList numIndices = new ObiNativeIntList(); /// /// whether the constraint is implicit (0) or explicit (>0). /// - public ObiNativeIntList explicitGroup = new ObiNativeIntList(); + public ObiNativeIntList explicitGroup = new ObiNativeIntList(); /// /// 5 floats per constraint: stiffness, plastic yield, creep, recovery and max deformation. /// - public ObiNativeFloatList materialParameters = new ObiNativeFloatList(); + public ObiNativeFloatList materialParameters = new ObiNativeFloatList(); /// /// rest center of mass for each constraint. /// - public ObiNativeVector4List restComs = new ObiNativeVector4List(); + public ObiNativeVector4List restComs = new ObiNativeVector4List(); /// /// current center of mass for each constraint. /// - public ObiNativeVector4List coms = new ObiNativeVector4List(); + public ObiNativeVector4List coms = new ObiNativeVector4List(); /// /// current best-match orientation for each constraint. @@ -96,7 +96,7 @@ namespace Obi { int first = firstIndex[index]; int num = numIndices[index]; - for (int i = first; i < first + num; ++i) + for (int i = first; i < first + num; ++i) particles.Add(particleIndices[i]); } @@ -154,7 +154,7 @@ namespace Obi // shape matching constraint particle indices are not reordered when deactivating constraints, // so instead of using batch.activeConstraintCount, batch.constraintCount. We need all of them. int numActiveIndices = 0; - for (int i = 0; i < batch.constraintCount; ++i) + for (int i = 0; i < batch.constraintCount; ++i) numActiveIndices += batch.numIndices[i]; particleIndices.ResizeUninitialized(initialIndexCount + numActiveIndices); @@ -209,6 +209,19 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + firstIndex.Dispose(); + numIndices.Dispose(); + explicitGroup.Dispose(); + materialParameters.Dispose(); + + restComs.Dispose(); + coms.Dispose(); + orientations.Dispose(); + linearTransforms.Dispose(); + plasticDeformations.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs index 0edb2ac0f..f7b738cf1 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs @@ -131,6 +131,13 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + skinPoints.Dispose(); + skinNormals.Dispose(); + skinRadiiBackstop.Dispose(); + skinCompliance.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs index 225074fdc..cce356d4b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs @@ -141,6 +141,13 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + orientationIndices.Dispose(); + restLengths.Dispose(); + restOrientations.Dispose(); + stiffnesses.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs index bfecd67a7..313e6ecaa 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs @@ -104,6 +104,11 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + maxLengthsScales.Dispose(); + stiffnesses.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs index a4859dc86..882f1a77d 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs @@ -126,6 +126,13 @@ namespace Obi public override void RemoveFromSolver(ObiSolver solver) { + base.RemoveFromSolver(solver); + + firstTriangle.Dispose(); + numTriangles.Dispose(); + restVolumes.Dispose(); + pressureStiffness.Dispose(); + //Remove batch: solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs index d2e05fb12..96657c004 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs @@ -13,18 +13,8 @@ namespace Obi set; } - float drag - { - get; - set; - } - - float lift - { - get; - set; - } - + float GetDrag(ObiAerodynamicConstraintsBatch batch, int constraintIndex); + float GetLift(ObiAerodynamicConstraintsBatch batch, int constraintIndex); } [Serializable] diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs new file mode 100644 index 000000000..522ff740f --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + [Serializable] + public class ObiPinholeConstraintsData : ObiConstraints + { + + public override ObiPinholeConstraintsBatch CreateBatch(ObiPinholeConstraintsBatch source = null) + { + return new ObiPinholeConstraintsBatch(); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs.meta new file mode 100644 index 000000000..8df74c63a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: caeaf013c17424e0884d22017414ee1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs index d4ccd6990..b8810adc6 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs @@ -8,8 +8,8 @@ namespace Obi { Oni.ConstraintType? GetConstraintType(); - IObiConstraintsBatch GetBatch(int i); - int GetBatchCount(); + IObiConstraintsBatch GetBatch(int i); + int batchCount { get; } void Clear(); bool AddToSolver(ObiSolver solver); @@ -17,6 +17,7 @@ namespace Obi int GetConstraintCount(); int GetActiveConstraintCount(); + void ActivateAllConstraints(); void DeactivateAllConstraints(); void Merge(ObiActor actor, IObiConstraints other); @@ -28,6 +29,8 @@ namespace Obi [NonSerialized] protected ObiSolver m_Solver; [HideInInspector] public List batches = new List(); + public int batchCount { get => batches == null ? 0 : batches.Count; } + // merges constraints from a given actor with this one. public void Merge(ObiActor actor, IObiConstraints other) { @@ -42,11 +45,11 @@ namespace Obi actor.solverBatchOffsets[constraintType].Clear(); // create new empty batches if needed: - int newBatches = Mathf.Max(0, others.GetBatchCount() - GetBatchCount()); + int newBatches = Mathf.Max(0, others.batchCount - batchCount); for (int i = 0; i < newBatches; ++i) AddBatch(CreateBatch()); - for (int i = 0; i < other.GetBatchCount(); ++i) + for (int i = 0; i < other.batchCount; ++i) { // store this batch's offset: actor.solverBatchOffsets[constraintType].Add(batches[i].activeConstraintCount); @@ -64,11 +67,6 @@ namespace Obi return null; } - public int GetBatchCount() - { - return batches == null ? 0 : batches.Count; - } - public int GetConstraintCount() { int count = 0; @@ -101,6 +99,14 @@ namespace Obi batch.DeactivateAllConstraints(); } + public void ActivateAllConstraints() + { + if (batches != null) + foreach (T batch in batches) + if (batch != null) + batch.ActivateAllConstraints(); + } + public T GetFirstBatch() { return (batches != null && batches.Count > 0) ? batches[0] : null; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/GraphColoring.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/GraphColoring.cs index fc4223716..3101bf7be 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/GraphColoring.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/GraphColoring.cs @@ -1,106 +1 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi -{ - /** - * General greedy graph coloring algorithm for constraints. Input: - * - List of particle indices used by all constraints. - * - List of per-constraint offsets of the first constrained particle in the previous array, with the total amount of particle indices in the last position. - * - * The output is a color for each constraint. Constraints of the same color are guaranteed to not share any partices. - */ - public class GraphColoring - { - private List m_ParticleIndices; - private List m_ConstraintIndices; - private List> m_ConstraintsPerParticle; - - public IReadOnlyList particleIndices => m_ParticleIndices.AsReadOnly(); - public IReadOnlyList constraintIndices => m_ConstraintIndices.AsReadOnly(); - - public GraphColoring(int particleCount = 0) - { - m_ParticleIndices = new List(); - m_ConstraintIndices = new List(); - m_ConstraintsPerParticle = new List>(particleCount); - for (int i = 0; i < particleCount; ++i) - m_ConstraintsPerParticle.Add(new List()); - } - - public void Clear() - { - m_ParticleIndices.Clear(); - m_ConstraintIndices.Clear(); - for (int i = 0; i < m_ConstraintsPerParticle.Count; ++i) - m_ConstraintsPerParticle[i].Clear(); - } - - public void AddConstraint(int[] particles) - { - for (int i = 0; i < particles.Length; ++i) - { - while (particles[i] >= m_ConstraintsPerParticle.Count) - m_ConstraintsPerParticle.Add(new List()); - m_ConstraintsPerParticle[particles[i]].Add(m_ConstraintIndices.Count); - } - - m_ConstraintIndices.Add(m_ParticleIndices.Count); - m_ParticleIndices.AddRange(particles); - } - - public IEnumerator Colorize(string progressDescription, List colors) - { - m_ConstraintIndices.Add(m_ParticleIndices.Count); - - int constraintCount = Mathf.Max(0, m_ConstraintIndices.Count - 1); - colors.Clear(); - - if (constraintCount == 0) - yield break; - - colors.Capacity = constraintCount; - bool[] availability = new bool[constraintCount]; - - for (int i = 0; i < constraintCount; ++i) - { - colors.Add(-1); - availability[i] = true; - } - - // For each constraint: - for (int i = 0; i < constraintCount; ++i) - { - // iterate over its particles: - for (int j = m_ConstraintIndices[i]; j < m_ConstraintIndices[i + 1]; ++j) - { - // for each particle, get constraints affecting it: - foreach (int k in m_ConstraintsPerParticle[m_ParticleIndices[j]]) - { - // skip ourselves: - if (i == k) continue; - - // both constraints share a particle so mark the neighbour color as unavailable: - if (colors[k] >= 0) - availability[colors[k]] = false; - } - } - - // Assign the first available color: - for (colors[i] = 0; colors[i] < constraintCount; ++colors[i]) - if (availability[colors[i]]) - break; - - // Reset availability flags: - for (int j = 0; j < constraintCount; ++j) - availability[j] = true; - - yield return new CoroutineJob.ProgressInfo(progressDescription, i / (float)constraintCount); - } - } - - - } -} +using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Obi { /** * General greedy graph coloring algorithm for constraints. Input: * - List of particle indices used by all constraints. * - List of per-constraint offsets of the first constrained particle in the previous array, with the total amount of particle indices in the last position. * * The output is a color for each constraint. Constraints of the same color are guaranteed to not share any partices. */ public class GraphColoring { private List m_ParticleIndices; private List m_ConstraintIndices; private List> m_ConstraintsPerParticle; public IReadOnlyList particleIndices => m_ParticleIndices.AsReadOnly(); public IReadOnlyList constraintIndices => m_ConstraintIndices.AsReadOnly(); public GraphColoring(int particleCount = 0) { m_ParticleIndices = new List(); m_ConstraintIndices = new List(); m_ConstraintsPerParticle = new List>(particleCount); for (int i = 0; i < particleCount; ++i) m_ConstraintsPerParticle.Add(new List()); } public void Clear() { m_ParticleIndices.Clear(); m_ConstraintIndices.Clear(); for (int i = 0; i < m_ConstraintsPerParticle.Count; ++i) m_ConstraintsPerParticle[i].Clear(); } public void AddConstraint(int[] particles) { for (int i = 0; i < particles.Length; ++i) { while (particles[i] >= m_ConstraintsPerParticle.Count) m_ConstraintsPerParticle.Add(new List()); m_ConstraintsPerParticle[particles[i]].Add(m_ConstraintIndices.Count); } m_ConstraintIndices.Add(m_ParticleIndices.Count); m_ParticleIndices.AddRange(particles); } public IEnumerator Colorize(string progressDescription, List colors) { m_ConstraintIndices.Add(m_ParticleIndices.Count); int constraintCount = Mathf.Max(0, m_ConstraintIndices.Count - 1); colors.Clear(); if (constraintCount == 0) yield break; colors.Capacity = constraintCount; bool[] availability = new bool[constraintCount]; for (int i = 0; i < constraintCount; ++i) { colors.Add(-1); availability[i] = true; } // For each constraint: for (int i = 0; i < constraintCount; ++i) { // iterate over its particles: for (int j = m_ConstraintIndices[i]; j < m_ConstraintIndices[i + 1]; ++j) { // for each particle, get constraints affecting it: foreach (int k in m_ConstraintsPerParticle[m_ParticleIndices[j]]) { // skip ourselves: if (i == k) continue; // both constraints share a particle so mark the neighbour color as unavailable: if (colors[k] >= 0) availability[colors[k]] = false; } } // Assign the first available color: for (colors[i] = 0; colors[i] < constraintCount; ++colors[i]) if (availability[colors[i]]) break; // Reset availability flags: for (int j = 0; j < constraintCount; ++j) availability[j] = true; if (i % 250 == 0) yield return new CoroutineJob.ProgressInfo(progressDescription, i / (float)constraintCount); } } } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs index 894a445b1..a4ba94fdb 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Serialization; +using System.IO; #if UNITY_EDITOR using UnityEditor; @@ -16,7 +17,9 @@ namespace Obi public delegate void BlueprintCallback(ObiActorBlueprint blueprint); public event BlueprintCallback OnBlueprintGenerate; + [HideInInspector] [SerializeField] protected uint m_Checksum; [HideInInspector] [SerializeField] protected bool m_Empty = true; + [HideInInspector] [SerializeField] protected bool m_Edited = false; /**< Whether there's been any modifications to blueprint data since generating it. This is used to tell whether it can be re-generated without data loss.*/ [HideInInspector] [SerializeField] protected int m_ActiveParticleCount = 0; [HideInInspector] [SerializeField] protected int m_InitialActiveParticleCount = 0; [HideInInspector] [SerializeField] protected Bounds _bounds = new Bounds(); @@ -24,6 +27,7 @@ namespace Obi /**Particle components*/ [HideInInspector] public Vector3[] positions = null; /**< Particle positions.*/ [HideInInspector] public Vector4[] restPositions = null; /**< Particle rest positions, used to filter collisions.*/ + [HideInInspector] public Vector4[] restNormals = null; /**< Particle local-space normal in xyz, SDF in w. Used for softbody collisions.*/ [HideInInspector] public Quaternion[] orientations = null; /**< Particle orientations.*/ [HideInInspector] public Quaternion[] restOrientations = null; /**< Particle rest orientations.*/ @@ -35,7 +39,7 @@ namespace Obi [HideInInspector] public float[] invRotationalMasses = null; [FormerlySerializedAs("phases")] - [HideInInspector] public int[] filters = null; /**< Particle filters*/ + [HideInInspector] public int[] filters = null; /**< Particle filters*/ [HideInInspector] public Vector3[] principalRadii = null; /**< Particle ellipsoid principal radii. These are the ellipsoid radius in each axis.*/ [HideInInspector] public Color[] colors = null; /**< Particle colors (not used by all actors, can be null)*/ @@ -59,6 +63,14 @@ namespace Obi /** Particle groups.*/ [HideInInspector] public List groups = new List(); + /** + * Checksum value generated from particle positions and orientations. + */ + public uint checksum + { + get { return m_Checksum; } + } + /** * Returns the amount of particles used by this blueprint. */ @@ -72,6 +84,16 @@ namespace Obi get { return m_ActiveParticleCount; } } + public Oni.SimplexType simplexTypes + { + get + { + return Oni.SimplexType.Point | // points (single particles) are always available. + (edges != null ? Oni.SimplexType.Edge : 0) | + (triangles != null ? Oni.SimplexType.Triangle : 0); + } + } + /** * Returns whether this group uses oriented particles. */ @@ -80,12 +102,11 @@ namespace Obi get { return invRotationalMasses != null && invRotationalMasses.Length > 0 && - orientations != null && orientations.Length > 0 && - restOrientations != null && restOrientations.Length > 0; + orientations != null && orientations.Length > 0; } } - public virtual bool usesTethers + public virtual bool usesTethers { get { return false; } } @@ -99,6 +120,7 @@ namespace Obi { positions.Swap(index, m_ActiveParticleCount); restPositions.Swap(index, m_ActiveParticleCount); + restNormals.Swap(index, m_ActiveParticleCount); orientations.Swap(index, m_ActiveParticleCount); restOrientations.Swap(index, m_ActiveParticleCount); velocities.Swap(index, m_ActiveParticleCount); @@ -108,6 +130,14 @@ namespace Obi filters.Swap(index, m_ActiveParticleCount); principalRadii.Swap(index, m_ActiveParticleCount); colors.Swap(index, m_ActiveParticleCount); + + m_Edited = true; + } + + public bool edited + { + get { return m_Edited; } + set { m_Edited = value; } } /** @@ -148,7 +178,7 @@ namespace Obi { if (positions.Length > 0) { - _bounds = new Bounds(positions[0],Vector3.zero); + _bounds = new Bounds(positions[0], Vector3.zero); for (int i = 1; i < positions.Length; ++i) _bounds.Encapsulate(positions[i]); } @@ -161,27 +191,42 @@ namespace Obi get { return _bounds; } } + protected void GenerateChecksum() + { + using (MemoryStream ms = new MemoryStream()) + { + if (positions != null) + foreach (var p in positions) ms.Concatenate(p); + + if (orientations != null) + foreach (var o in orientations) ms.Concatenate(o); + + ms.Flush(); + m_Checksum = ObiUtils.Adler32(ms.ToArray()); + } + } + public IEnumerable GetConstraints() { - if (distanceConstraintsData != null && distanceConstraintsData.GetBatchCount() > 0) + if (distanceConstraintsData != null && distanceConstraintsData.batchCount > 0) yield return distanceConstraintsData; - if (bendConstraintsData != null && bendConstraintsData.GetBatchCount() > 0) + if (bendConstraintsData != null && bendConstraintsData.batchCount > 0) yield return bendConstraintsData; - if (skinConstraintsData != null && skinConstraintsData.GetBatchCount() > 0) + if (skinConstraintsData != null && skinConstraintsData.batchCount > 0) yield return skinConstraintsData; - if (tetherConstraintsData != null && tetherConstraintsData.GetBatchCount() > 0) + if (tetherConstraintsData != null && tetherConstraintsData.batchCount > 0) yield return tetherConstraintsData; - if (stretchShearConstraintsData != null && stretchShearConstraintsData.GetBatchCount() > 0) + if (stretchShearConstraintsData != null && stretchShearConstraintsData.batchCount > 0) yield return stretchShearConstraintsData; - if (bendTwistConstraintsData != null && bendTwistConstraintsData.GetBatchCount() > 0) + if (bendTwistConstraintsData != null && bendTwistConstraintsData.batchCount > 0) yield return bendTwistConstraintsData; - if (shapeMatchingConstraintsData != null && shapeMatchingConstraintsData.GetBatchCount() > 0) + if (shapeMatchingConstraintsData != null && shapeMatchingConstraintsData.batchCount > 0) yield return shapeMatchingConstraintsData; - if (aerodynamicConstraintsData != null && aerodynamicConstraintsData.GetBatchCount() > 0) + if (aerodynamicConstraintsData != null && aerodynamicConstraintsData.batchCount > 0) yield return aerodynamicConstraintsData; - if (chainConstraintsData != null && chainConstraintsData.GetBatchCount() > 0) + if (chainConstraintsData != null && chainConstraintsData.batchCount > 0) yield return chainConstraintsData; - if (volumeConstraintsData != null && volumeConstraintsData.GetBatchCount() > 0) + if (volumeConstraintsData != null && volumeConstraintsData.batchCount > 0) yield return volumeConstraintsData; } @@ -226,6 +271,24 @@ namespace Obi return Quaternion.identity; } + public Vector3 GetParticleRestPosition(int index) + { + if (restPositions != null && index < restPositions.Length) + { + return restPositions[index]; + } + return Vector3.zero; + } + + public Quaternion GetParticleRestOrientation(int index) + { + if (restOrientations != null && index < restOrientations.Length) + { + return restOrientations[index]; + } + return Quaternion.identity; + } + public void GetParticleAnisotropy(int index, ref Vector4 b1, ref Vector4 b2, ref Vector4 b3) { if (orientations != null && index < orientations.Length) @@ -270,7 +333,7 @@ namespace Obi public void GenerateImmediate() { var g = Generate(); - while (g.MoveNext()){} + while (g.MoveNext()) { } } public IEnumerator Generate() @@ -288,24 +351,37 @@ namespace Obi m_InitialActiveParticleCount = m_ActiveParticleCount; foreach (IObiConstraints constraints in GetConstraints()) - for (int i = 0; i < constraints.GetBatchCount(); ++i) + for (int i = 0; i < constraints.batchCount; ++i) constraints.GetBatch(i).initialActiveConstraintCount = constraints.GetBatch(i).activeConstraintCount; + CommitBlueprintChanges(); + #if UNITY_EDITOR - EditorUtility.SetDirty(this); + if (!Application.isPlaying) + { + EditorUtility.SetDirty(this); + } #endif - if (OnBlueprintGenerate != null) - OnBlueprintGenerate(this); + OnBlueprintGenerate?.Invoke(this); + } + + // Called at the end of blueprint generation. Also automatically called when exiting blueprint editor. + // This generates a checksum for the blueprint, and in some case extra data (such as default skinmaps for cloth and softbodies). + public virtual void CommitBlueprintChanges() + { + GenerateChecksum(); } public void Clear() { m_Empty = true; + edited = false; m_ActiveParticleCount = 0; positions = null; restPositions = null; + restNormals = null; orientations = null; restOrientations = null; velocities = null; @@ -313,7 +389,6 @@ namespace Obi invMasses = null; invRotationalMasses = null; filters = null; - //phases = null; principalRadii = null; colors = null; @@ -355,7 +430,7 @@ namespace Obi { EditorUtility.SetDirty(this); if (saveImmediately) - AssetDatabase.SaveAssets(); + AssetDatabase.SaveAssetIfDirty(this); } } else @@ -364,6 +439,8 @@ namespace Obi groups.Insert(index, group); } + edited = true; + return group; } return null; @@ -393,7 +470,7 @@ namespace Obi { EditorUtility.SetDirty(this); if (saveImmediately) - AssetDatabase.SaveAssets(); + AssetDatabase.SaveAssetIfDirty(this); } } else @@ -406,6 +483,8 @@ namespace Obi DestroyImmediate(group, true); } + edited = true; + return true; } return false; @@ -425,7 +504,7 @@ namespace Obi { EditorUtility.SetDirty(this); if (saveImmediately) - AssetDatabase.SaveAssets(); + AssetDatabase.SaveAssetIfDirty(this); } } else @@ -434,26 +513,39 @@ namespace Obi groups[index].name = name; } + edited = true; + return true; } return false; } - public void ClearParticleGroups(bool saveImmediately = true) + public void ClearParticleGroups(bool registerUndo = true, bool saveImmediately = true) { + if (groups.Count == 0) return; + #if UNITY_EDITOR if (!Application.isPlaying) { - Undo.RecordObject(this, "Clear particle groups"); - for (int i = 0; i < groups.Count; ++i) - if (groups[i] != null) - Undo.DestroyObjectImmediate(groups[i]); + if (registerUndo) + { + Undo.RecordObject(this, "Clear particle groups"); + for (int i = 0; i < groups.Count; ++i) + if (groups[i] != null) + Undo.DestroyObjectImmediate(groups[i]); + } + else + { + for (int i = 0; i < groups.Count; ++i) + if (groups[i] != null) + DestroyImmediate(groups[i], true); + } if (EditorUtility.IsPersistent(this)) { EditorUtility.SetDirty(this); if (saveImmediately) - AssetDatabase.SaveAssets(); + AssetDatabase.SaveAssetIfDirty(this); } } else @@ -488,7 +580,7 @@ namespace Obi private bool DoesParticleShareConstraints(IObiConstraints constraints, int index, List particles, bool[] selected) { bool shared = false; - for (int i = 0; i < constraints.GetBatchCount(); ++i) + for (int i = 0; i < constraints.batchCount; ++i) { var batch = constraints.GetBatch(i); for (int j = 0; j < batch.activeConstraintCount; ++j) @@ -508,7 +600,7 @@ namespace Obi private void DeactivateConstraintsWithInactiveParticles(IObiConstraints constraints, List particles) { - for (int j = 0; j < constraints.GetBatchCount(); ++j) + for (int j = 0; j < constraints.batchCount; ++j) { var batch = constraints.GetBatch(j); @@ -526,6 +618,8 @@ namespace Obi } } } + + edited = true; } private void ParticlesSwappedInGroups(int index, int newIndex) @@ -541,9 +635,11 @@ namespace Obi group.particleIndices[i] = newIndex; } } + + edited = true; } - public void RemoveSelectedParticles(ref bool[] selected, bool optimize = true) + public virtual void RemoveSelectedParticles(ref bool[] selected, bool optimize = true) { List particles = new List(); @@ -571,7 +667,7 @@ namespace Obi // Update constraints: foreach (IObiConstraints constraints in GetConstraints()) - for (int j = 0; j < constraints.GetBatchCount(); ++j) + for (int j = 0; j < constraints.batchCount; ++j) constraints.GetBatch(j).ParticlesSwapped(i, m_ActiveParticleCount); // Update groups: @@ -585,6 +681,9 @@ namespace Obi foreach (IObiConstraints constraints in GetConstraints()) DeactivateConstraintsWithInactiveParticles(constraints, particles); + CommitBlueprintChanges(); + + edited = true; } public void RestoreRemovedParticles() @@ -592,9 +691,10 @@ namespace Obi m_ActiveParticleCount = m_InitialActiveParticleCount; foreach (IObiConstraints constraints in GetConstraints()) - for (int j = 0; j < constraints.GetBatchCount(); ++j) + for (int j = 0; j < constraints.batchCount; ++j) constraints.GetBatch(j).activeConstraintCount = constraints.GetBatch(j).initialActiveConstraintCount; - + + CommitBlueprintChanges(); } public virtual void GenerateTethers(bool[] selected) { } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs index dab43bce4..23fc16994 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs @@ -10,7 +10,7 @@ namespace Obi{ this.collider = collider; } - public override bool UpdateIfNeeded (){ + public override void UpdateIfNeeded (){ BoxCollider2D box = collider as BoxCollider2D; @@ -19,12 +19,14 @@ namespace Obi{ // update collider: var shape = world.colliderShapes[index]; - shape.is2D = 1; + shape.is2D = true; shape.type = ColliderShape.ShapeType.Box; shape.filter = source.Filter; - shape.flags = box.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = box.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness + box.edgeRadius; shape.center = box.offset; shape.size = box.size; @@ -37,9 +39,8 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(box.transform, true); + trfm.FromTransform2D(box.transform, source.Rigidbody as ObiRigidbody2D); world.colliderTransforms[index] = trfm; - return false; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs index 277be12f7..96c23dd86 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs @@ -11,7 +11,7 @@ namespace Obi{ this.collider = collider; } - public override bool UpdateIfNeeded () + public override void UpdateIfNeeded () { CapsuleCollider2D capsule = collider as CapsuleCollider2D; @@ -21,12 +21,14 @@ namespace Obi{ // update collider: var shape = world.colliderShapes[index]; - shape.is2D = 1; + shape.is2D = true; shape.type = ColliderShape.ShapeType.Capsule; shape.filter = source.Filter; - shape.flags = capsule.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = capsule.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness; shape.center = capsule.offset; Vector2 size = capsule.size; @@ -42,10 +44,8 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(capsule.transform,true); + trfm.FromTransform2D(capsule.transform, source.Rigidbody as ObiRigidbody2D); world.colliderTransforms[index] = trfm; - - return false; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs index c75ffd90e..c2e702c7d 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs @@ -12,7 +12,7 @@ namespace Obi{ this.collider = collider; } - public override bool UpdateIfNeeded () + public override void UpdateIfNeeded () { CircleCollider2D sphere = collider as CircleCollider2D; @@ -23,12 +23,14 @@ namespace Obi{ // update collider: var shape = world.colliderShapes[index]; - shape.is2D = 1; + shape.is2D = true; shape.type = ColliderShape.ShapeType.Sphere; shape.filter = source.Filter; - shape.flags = sphere.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = sphere.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness; shape.center = sphere.offset; shape.size = Vector3.one * sphere.radius; @@ -41,10 +43,8 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(sphere.transform,true); + trfm.FromTransform2D(sphere.transform, source.Rigidbody as ObiRigidbody2D); world.colliderTransforms[index] = trfm; - - return true; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs index dfdb9988f..e303037db 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs @@ -19,7 +19,7 @@ namespace Obi{ ObiColliderWorld.GetInstance().DestroyEdgeMesh(handle); } - public override bool UpdateIfNeeded (){ + public override void UpdateIfNeeded (){ EdgeCollider2D edgeCollider = collider as EdgeCollider2D; @@ -36,12 +36,14 @@ namespace Obi{ // update collider: var shape = world.colliderShapes[index]; - shape.is2D = 1; + shape.is2D = true; shape.type = ColliderShape.ShapeType.EdgeMesh; shape.filter = source.Filter; - shape.flags = edgeCollider.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = edgeCollider.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.center = edgeCollider.offset; shape.contactOffset = source.Thickness + edgeCollider.edgeRadius; shape.dataIndex = handle.index; @@ -54,10 +56,8 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(edgeCollider.transform, true); + trfm.FromTransform2D(edgeCollider.transform, source.Rigidbody as ObiRigidbody2D); world.colliderTransforms[index] = trfm; - - return true; } public override void Destroy() diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs index afe993057..db6c08ae4 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs @@ -12,18 +12,10 @@ namespace Obi{ this.collider = collider; } - public override bool UpdateIfNeeded (){ + public override void UpdateIfNeeded (){ BoxCollider box = collider as BoxCollider; - /*if (box != null && (box.size != size || box.center != center)){ - size = box.size; - center = box.center; - adaptor.Set(center, size); - Oni.UpdateShape(oniShape,ref adaptor); - return true; - }*/ - // retrieve collision world and index: var world = ObiColliderWorld.GetInstance(); int index = source.Handle.index; @@ -32,9 +24,11 @@ namespace Obi{ var shape = world.colliderShapes[index]; shape.type = ColliderShape.ShapeType.Box; shape.filter = source.Filter; - shape.flags = box.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = box.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness; shape.center = box.center; shape.size = box.size; @@ -47,10 +41,9 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(box.transform); + trfm.FromTransform3D(box.transform, source.Rigidbody as ObiRigidbody); world.colliderTransforms[index] = trfm; - return true; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs index e55f43b0d..252e13694 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs @@ -11,7 +11,7 @@ namespace Obi{ this.source = source; } - public override bool UpdateIfNeeded (){ + public override void UpdateIfNeeded (){ CapsuleCollider capsule = collider as CapsuleCollider; @@ -23,9 +23,11 @@ namespace Obi{ var shape = world.colliderShapes[index]; shape.type = ColliderShape.ShapeType.Capsule; shape.filter = source.Filter; - shape.flags = capsule.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = capsule.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness; shape.center = capsule.center; shape.size = new Vector4(capsule.radius, capsule.height, capsule.direction, 0); @@ -38,10 +40,8 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(capsule.transform); + trfm.FromTransform3D(capsule.transform, source.Rigidbody as ObiRigidbody); world.colliderTransforms[index] = trfm; - - return true; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs index d50fcd280..d53e98095 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs @@ -13,7 +13,7 @@ namespace Obi this.source = source; } - public override bool UpdateIfNeeded() + public override void UpdateIfNeeded() { CharacterController character = collider as CharacterController; @@ -26,9 +26,11 @@ namespace Obi var shape = world.colliderShapes[index]; shape.type = ColliderShape.ShapeType.Capsule; shape.filter = source.Filter; - shape.flags = character.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = character.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness; shape.center = character.center; shape.size = new Vector4(character.radius, character.height, 1, 0); @@ -41,10 +43,8 @@ namespace Obi // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(character.transform); + trfm.FromTransform3D(character.transform, source.Rigidbody as ObiRigidbody); world.colliderTransforms[index] = trfm; - - return true; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs index c25d6b9e2..4f36a755b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs @@ -26,7 +26,7 @@ namespace Obi{ ObiColliderWorld.GetInstance().DestroyDistanceField(handle); } - public override bool UpdateIfNeeded () + public override void UpdateIfNeeded () { bool trigger = false; @@ -55,9 +55,11 @@ namespace Obi{ var shape = world.colliderShapes[index]; shape.type = ColliderShape.ShapeType.SignedDistanceField; shape.filter = source.Filter; - shape.flags = trigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = trigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness; shape.dataIndex = handle.index; world.colliderShapes[index] = shape; @@ -69,10 +71,8 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(source.transform); + trfm.FromTransform3D(source.transform, source.Rigidbody as ObiRigidbody); world.colliderTransforms[index] = trfm; - - return true; } public override void Destroy() diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs index e3831d9d4..d9bb7dfc1 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs @@ -9,6 +9,14 @@ namespace Obi{ { ObiTriangleMeshHandle handle; + public Mesh targetMesh + { + get { + var mc = collider as MeshCollider; + return mc?.sharedMesh; + } + } + public ObiMeshShapeTracker(ObiCollider source, MeshCollider collider){ this.source = source; @@ -23,7 +31,7 @@ namespace Obi{ ObiColliderWorld.GetInstance().DestroyTriangleMesh(handle); } - public override bool UpdateIfNeeded () + public override void UpdateIfNeeded () { MeshCollider meshCollider = collider as MeshCollider; @@ -51,9 +59,11 @@ namespace Obi{ var shape = world.colliderShapes[index]; shape.type = ColliderShape.ShapeType.TriangleMesh; shape.filter = source.Filter; - shape.flags = meshCollider.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = meshCollider.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness; shape.dataIndex = handle.index; world.colliderShapes[index] = shape; @@ -65,10 +75,8 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(meshCollider.transform); + trfm.FromTransform3D(meshCollider.transform, source.Rigidbody as ObiRigidbody); world.colliderTransforms[index] = trfm; - - return true; } public override void Destroy() diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs index c3992da14..69bd4ba41 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs @@ -11,7 +11,7 @@ namespace Obi{ public virtual void Destroy(){ } - public abstract bool UpdateIfNeeded (); + public abstract void UpdateIfNeeded (); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs index ab4368c2f..3c1f59df1 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs @@ -12,59 +12,37 @@ namespace Obi{ this.collider = collider; } - public override bool UpdateIfNeeded() + public override void UpdateIfNeeded() { - SphereCollider sphere = collider as SphereCollider; - // TODO: testing for changes here is not needed? all we do is set variables... - //if (sphere != null && (sphere.radius != radius || sphere.center != center)) - { - //radius = sphere.radius; - //center = sphere.center; + // retrieve collision world and index: + var world = ObiColliderWorld.GetInstance(); + int index = source.Handle.index; - // retrieve collision world and index: - var world = ObiColliderWorld.GetInstance(); - int index = source.Handle.index; + // update collider: + var shape = world.colliderShapes[index]; + shape.type = ColliderShape.ShapeType.Sphere; + shape.filter = source.Filter; + shape.SetSign(source.Inverted); + shape.isTrigger = sphere.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; + shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; + shape.contactOffset = source.Thickness; + shape.center = sphere.center; + shape.size = Vector3.one * sphere.radius; + world.colliderShapes[index] = shape; - // update collider: - var shape = world.colliderShapes[index]; - shape.type = ColliderShape.ShapeType.Sphere; - shape.filter = source.Filter; - shape.flags = sphere.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; - shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; - shape.contactOffset = source.Thickness; - shape.center = sphere.center; - shape.size = Vector3.one * sphere.radius; - world.colliderShapes[index] = shape; + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(sphere.bounds, shape.contactOffset); + world.colliderAabbs[index] = aabb; - // update bounds: - var aabb = world.colliderAabbs[index]; - aabb.FromBounds(sphere.bounds, shape.contactOffset); - world.colliderAabbs[index] = aabb; - - // update transform: - var trfm = world.colliderTransforms[index]; - trfm.FromTransform(sphere.transform); - world.colliderTransforms[index] = trfm; - - - /*var shape = source.colliderWorld.colliderShapes[source.shapeHandle.index]; - - // update the transform - shape.Set(collider as Collider, source.Phase, source.Thickness); - - // update the shape: - shape.SetSphere(sphere.center, sphere.radius); - - source.colliderWorld.colliderShapes[source.shapeHandle.index] = shape;*/ - - //adaptor.Set(center, radius); - //Oni.UpdateShape(oniShape,ref adaptor); - return true; - } - //return false; + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform3D(sphere.transform, source.Rigidbody as ObiRigidbody); + world.colliderTransforms[index] = trfm; } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs index ed3faed03..69619683f 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs @@ -6,7 +6,6 @@ namespace Obi{ public class ObiTerrainShapeTracker : ObiShapeTracker { - private bool heightmapDataHasChanged = false; ObiHeightFieldHandle handle; public ObiTerrainShapeTracker(ObiCollider source, TerrainCollider collider){ @@ -20,7 +19,7 @@ namespace Obi{ ObiColliderWorld.GetInstance().DestroyHeightField(handle); } - public override bool UpdateIfNeeded () + public override void UpdateIfNeeded () { TerrainCollider terrain = collider as TerrainCollider; @@ -42,9 +41,11 @@ namespace Obi{ var shape = world.colliderShapes[index]; shape.type = ColliderShape.ShapeType.Heightmap; shape.filter = source.Filter; - shape.flags = terrain.isTrigger ? 1 : 0; - shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.handle.index : -1; + shape.SetSign(source.Inverted); + shape.isTrigger = terrain.isTrigger; + shape.rigidbodyIndex = source.Rigidbody != null ? source.Rigidbody.Handle.index : -1; shape.materialIndex = source.CollisionMaterial != null ? source.CollisionMaterial.handle.index : -1; + shape.forceZoneIndex = source.ForceZone != null ? source.ForceZone.Handle.index : -1; shape.contactOffset = source.Thickness; shape.dataIndex = handle.index; shape.size = terrain.terrainData.size; @@ -58,10 +59,8 @@ namespace Obi{ // update transform: var trfm = world.colliderTransforms[index]; - trfm.FromTransform(terrain.transform); + trfm.FromTransform3D(terrain.transform, source.Rigidbody as ObiRigidbody); world.colliderTransforms[index] = trfm; - - return true; } public override void Destroy() diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiCollider.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiCollider.cs index 13ead10b3..71ad68ae9 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiCollider.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiCollider.cs @@ -30,9 +30,8 @@ namespace Obi return; } - m_SourceCollider = value; - RemoveCollider(); + m_SourceCollider = value; AddCollider(); } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiColliderBase.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiColliderBase.cs index 7700c7bd8..76471cf39 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiColliderBase.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiColliderBase.cs @@ -13,6 +13,9 @@ namespace Obi [SerializeProperty("Thickness")] [SerializeField] private float thickness = 0; + [SerializeProperty("Inverted")] + [SerializeField] private bool inverted = false; + [SerializeProperty("CollisionMaterial")] [SerializeField] private ObiCollisionMaterial material; @@ -22,7 +25,11 @@ namespace Obi { set { - material = value; + if (material != value) + { + material = value; + ForceUpdate(); + } } get { return material; } } @@ -34,7 +41,7 @@ namespace Obi if (filter != value) { filter = value; - dirty = true; + ForceUpdate(); } } get { return filter; } @@ -47,12 +54,25 @@ namespace Obi if (!Mathf.Approximately(thickness, value)) { thickness = value; - dirty = true; + ForceUpdate(); } } get { return thickness; } } + public bool Inverted + { + set + { + if (inverted != value) + { + inverted = value; + ForceUpdate(); + } + } + get { return inverted; } + } + public ObiShapeTracker Tracker { get { return tracker; } @@ -68,15 +88,9 @@ namespace Obi } } - public IntPtr OniCollider + public ObiForceZone ForceZone { - get - { - if (oniCollider == IntPtr.Zero) - FindSourceCollider(); - - return oniCollider; - } + get; set; } public ObiRigidbodyBase Rigidbody @@ -85,11 +99,8 @@ namespace Obi } protected ObiColliderHandle shapeHandle; - - protected IntPtr oniCollider; protected ObiRigidbodyBase obiRigidbody; protected bool wasUnityColliderEnabled = true; - protected bool dirty = false; protected ObiShapeTracker tracker; /**< tracker object used to determine when to update the collider's shape*/ @@ -140,7 +151,6 @@ namespace Obi protected void AddCollider() { - Component unityCollider = GetUnityCollider(ref wasUnityColliderEnabled); if (unityCollider != null && (shapeHandle == null || !shapeHandle.isValid)) @@ -154,7 +164,6 @@ namespace Obi // Create rigidbody if necessary, and link ourselves to it: CreateRigidbody(); } - } protected void RemoveCollider() @@ -169,6 +178,15 @@ namespace Obi } } + /** + * Flags the collider as needing to be updated from now on. If the object it's on has any editor static flag enabled, + * the collider will be again flagged as *not* needing to be updated after its next update. + */ + public void ForceUpdate() + { + ObiColliderWorld.GetInstance().MarkColliderAsNeedingUpdate(shapeHandle); + } + /** * Check if the collider transform or its shape have changed any relevant property, and update their Oni counterparts. */ @@ -176,14 +194,18 @@ namespace Obi { bool unityColliderEnabled = false; Component unityCollider = GetUnityCollider(ref unityColliderEnabled); - var colliderWorld = ObiColliderWorld.GetInstance(); if (unityCollider != null) { - // no need to test for changes, all we are doing is setting some variables here. - if (tracker != null) + // Only if this object is not static: + if (tracker != null) //&& needsUpdate) + { tracker.UpdateIfNeeded(); + } + // check isStatic, *after* updating the tracker at least once. + if (unityCollider.gameObject.isStatic) + ObiColliderWorld.GetInstance().MarkColliderAsNotNeedingUpdate(shapeHandle); } // If the unity collider is null but its handle is valid, the unity collider has been destroyed. else if (shapeHandle != null && shapeHandle.isValid) diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs index 233c5818e..0adbb9551 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs @@ -44,6 +44,10 @@ namespace Obi { public ObiColliderHandle(int index = -1) : base(index) { } } + public class ObiForceZoneHandle : ObiResourceHandle + { + public ObiForceZoneHandle(int index = -1) : base(index) { } + } public class ObiCollisionMaterialHandle : ObiResourceHandle { public ObiCollisionMaterialHandle(int index = -1) : base(index) { } @@ -53,7 +57,6 @@ namespace Obi public ObiRigidbodyHandle(int index = -1) : base(index) { } } - [ExecuteInEditMode] public class ObiColliderWorld { [NonSerialized] public List implementations; @@ -63,7 +66,10 @@ namespace Obi [NonSerialized] public ObiNativeAabbList colliderAabbs; // list of collider bounds. [NonSerialized] public ObiNativeAffineTransformList colliderTransforms; // list of collider transforms. - [NonSerialized] public List materialHandles; + [NonSerialized] public List forceZoneHandles; // list of collider handles, used by ObiForceZone components to retrieve them. + [NonSerialized] public ObiNativeForceZoneList forceZones; // list of collider force zones. + + [NonSerialized] public List materialHandles; // list of material handles, used by ObiCollisionMaterial components to retrieve them. [NonSerialized] public ObiNativeCollisionMaterialList collisionMaterials; // list of collision materials. [NonSerialized] public List rigidbodyHandles; // list of rigidbody handles, used by ObiRigidbody components to retrieve them. @@ -74,6 +80,19 @@ namespace Obi [NonSerialized] public ObiDistanceFieldContainer distanceFieldContainer; [NonSerialized] public ObiHeightFieldContainer heightFieldContainer; + private List collidersToCreate; + private List collidersToDestroy; + + private List forceZonesToCreate; + private List forceZonesToDestroy; + + private List rigidbodiesToCreate; + private List rigidbodiesToDestroy; + + public int collidersToUpdateCount { private set; get; } = 0; // amount of colliders that need to be updated. These are always grouped at the start of the collider arrays (handles, shapes, etc). + + private bool dirty = false; + private static ObiColliderWorld instance; public static ObiColliderWorld GetInstance() @@ -101,6 +120,11 @@ namespace Obi if (colliderTransforms == null) colliderTransforms = new ObiNativeAffineTransformList(); + if (forceZoneHandles == null) + forceZoneHandles = new List(); + if (forceZones == null) + forceZones = new ObiNativeForceZoneList(); + if (materialHandles == null) materialHandles = new List(); if (collisionMaterials == null) @@ -119,13 +143,29 @@ namespace Obi distanceFieldContainer = new ObiDistanceFieldContainer(); if (heightFieldContainer == null) heightFieldContainer = new ObiHeightFieldContainer(); + + if (collidersToCreate == null) + collidersToCreate = new List(); + if (collidersToDestroy == null) + collidersToDestroy = new List(); + + if (forceZonesToCreate == null) + forceZonesToCreate = new List(); + if (forceZonesToDestroy == null) + forceZonesToDestroy = new List(); + + if (rigidbodiesToCreate == null) + rigidbodiesToCreate = new List(); + if (rigidbodiesToDestroy == null) + rigidbodiesToDestroy = new List(); } private void Destroy() { + dirty = false; for (int i = 0; i < implementations.Count; ++i) { - implementations[i].SetColliders(colliderShapes, colliderAabbs, colliderTransforms, 0); + implementations[i].SetColliders(colliderShapes, colliderAabbs, colliderTransforms); implementations[i].UpdateWorld(0); } @@ -142,41 +182,48 @@ namespace Obi foreach (var handle in materialHandles) handle.Invalidate(); + if (forceZoneHandles != null) + foreach (var handle in forceZoneHandles) + handle.Invalidate(); + // Dispose of all lists: implementations = null; colliderHandles = null; rigidbodyHandles = null; materialHandles = null; + forceZoneHandles = null; - if (colliderShapes != null) - colliderShapes.Dispose(); - if (colliderAabbs != null) - colliderAabbs.Dispose(); - if (colliderTransforms != null) - colliderTransforms.Dispose(); + collidersToCreate = null; + collidersToDestroy = null; + forceZonesToCreate = null; + forceZonesToDestroy = null; + rigidbodiesToCreate = null; + rigidbodiesToDestroy = null; - if (collisionMaterials != null) - collisionMaterials.Dispose(); + colliderShapes?.Dispose(); + colliderAabbs?.Dispose(); + colliderTransforms?.Dispose(); + forceZones?.Dispose(); + collisionMaterials?.Dispose(); + rigidbodies?.Dispose(); - if (rigidbodies != null) - rigidbodies.Dispose(); - - if (triangleMeshContainer != null) - triangleMeshContainer.Dispose(); - if (edgeMeshContainer != null) - edgeMeshContainer.Dispose(); - if (distanceFieldContainer != null) - distanceFieldContainer.Dispose(); - if (heightFieldContainer != null) - heightFieldContainer.Dispose(); + triangleMeshContainer?.Dispose(); + edgeMeshContainer?.Dispose(); + distanceFieldContainer?.Dispose(); + heightFieldContainer?.Dispose(); instance = null; } private void DestroyIfUnused() { - // when there are no implementations and no colliders, the world gets destroyed. - if (colliderHandles.Count == 0 && rigidbodyHandles.Count == 0 && materialHandles.Count == 0 && implementations.Count == 0) + // when there is no data and no implementations, the world gets destroyed. + // don't check materialHandles.Count == 0, as these are scriptable objects and may outlive the world. + if (colliderHandles.Count == 0 && + rigidbodyHandles.Count == 0 && + forceZoneHandles.Count == 0 && + implementations.Count == 0) + Destroy(); } @@ -194,22 +241,39 @@ namespace Obi public ObiColliderHandle CreateCollider() { - var handle = new ObiColliderHandle(colliderHandles.Count); - colliderHandles.Add(handle); + var handle = new ObiColliderHandle(); - colliderShapes.Add(new ColliderShape() { materialIndex = -1, rigidbodyIndex = -1}); - colliderAabbs.Add(new Aabb()); - colliderTransforms.Add(new AffineTransform()); + // in-editor, we create data right away since the simulation is not running. + if (!Application.isPlaying) + CreateColliderData(handle); + else + collidersToCreate.Add(handle); + + return handle; + } + + public ObiForceZoneHandle CreateForceZone() + { + var handle = new ObiForceZoneHandle(); + + // in-editor, we create data right away since the simulation is not running. + if (!Application.isPlaying) + CreateForceZoneData(handle); + else + forceZonesToCreate.Add(handle); return handle; } public ObiRigidbodyHandle CreateRigidbody() { - var handle = new ObiRigidbodyHandle(rigidbodyHandles.Count); - rigidbodyHandles.Add(handle); + var handle = new ObiRigidbodyHandle(); - rigidbodies.Add(new ColliderRigidbody()); + // in-editor, we create data right away since the simulation is not running. + if (!Application.isPlaying) + CreateRigidbodyData(handle); + else + rigidbodiesToCreate.Add(handle); return handle; } @@ -266,64 +330,41 @@ namespace Obi public void DestroyCollider(ObiColliderHandle handle) { - if (colliderShapes != null && handle != null && handle.isValid && handle.index < colliderHandles.Count) + // Destroy data right away if no simulation is running. + if (!Application.isPlaying || implementations.Count == 0) + DestroyColliderData(handle); + else { - int index = handle.index; - int lastIndex = colliderHandles.Count - 1; - - // swap all collider info: - colliderHandles.Swap(index, lastIndex); - colliderShapes.Swap(index, lastIndex); - colliderAabbs.Swap(index, lastIndex); - colliderTransforms.Swap(index, lastIndex); - - // update the index of the handle we swapped with: - colliderHandles[index].index = index; - - // invalidate our handle: - // (after updating the swapped one! - // in case there's just one handle in the array, - // we need to write -1 after 0) - handle.Invalidate(); - - // remove last index: - colliderHandles.RemoveAt(lastIndex); - colliderShapes.count--; - colliderAabbs.count--; - colliderTransforms.count--; - - DestroyIfUnused(); + // In case the handle is in the creation queue, just remove it. + if (!collidersToCreate.Remove(handle)) + collidersToDestroy.Add(handle); } + } + public void DestroyForceZone(ObiForceZoneHandle handle) + { + // Destroy data right away if no simulation is running. + if (!Application.isPlaying || implementations.Count == 0) + DestroyForceZoneData(handle); + else + { + // In case the handle is in the creation queue, just remove it. + if (!forceZonesToCreate.Remove(handle)) + forceZonesToDestroy.Add(handle); + } } public void DestroyRigidbody(ObiRigidbodyHandle handle) { - if (rigidbodies != null && handle != null && handle.isValid && handle.index < rigidbodyHandles.Count) + // Destroy data right away if no simulation is running. + if (!Application.isPlaying || implementations.Count == 0) + DestroyRigidbodyData(handle); + else { - int index = handle.index; - int lastIndex = rigidbodyHandles.Count - 1; - - // swap all collider info: - rigidbodyHandles.Swap(index, lastIndex); - rigidbodies.Swap(index, lastIndex); - - // update the index of the handle we swapped with: - rigidbodyHandles[index].index = index; - - // invalidate our handle: - // (after updating the swapped one! - // in case there's just one handle in the array, - // we need to write -1 after 0) - handle.Invalidate(); - - // remove last index: - rigidbodyHandles.RemoveAt(lastIndex); - rigidbodies.count--; - - DestroyIfUnused(); + // In case the handle is in the creation queue, just remove it. + if (!rigidbodiesToCreate.Remove(handle)) + rigidbodiesToDestroy.Add(handle); } - } public void DestroyCollisionMaterial(ObiCollisionMaterialHandle handle) @@ -354,80 +395,309 @@ namespace Obi } } - public void UpdateColliders() + private void DestroyColliderData (ObiColliderHandle handle) { + if (colliderShapes != null && handle != null && handle.isValid && handle.index < colliderHandles.Count) + { + int index = handle.index; + int lastIndex = colliderHandles.Count - 1; + + // swap all collider info: + colliderHandles.Swap(index, lastIndex); + colliderShapes.Swap(index, lastIndex); + colliderAabbs.Swap(index, lastIndex); + colliderTransforms.Swap(index, lastIndex); + + // update the index of the handle we swapped with: + colliderHandles[index].index = index; + + // invalidate our handle: + // (after updating the swapped one! + // in case there's just one handle in the array, + // we need to write -1 after 0) + handle.Invalidate(); + + // remove last index: + colliderHandles.RemoveAt(lastIndex); + colliderShapes.count--; + colliderAabbs.count--; + colliderTransforms.count--; + + // force all colliders to update next frame, as the index of the data they reference + // (eg the mesh in a MeshCollider) may have changed as a result of deleting this collider's data. + collidersToUpdateCount = colliderHandles.Count; + + DestroyIfUnused(); + } + } + + private void DestroyForceZoneData(ObiForceZoneHandle handle) + { + if (forceZones != null && handle != null && handle.isValid && handle.index < forceZoneHandles.Count) + { + int index = handle.index; + int lastIndex = forceZoneHandles.Count - 1; + + // swap all force zone info: + forceZoneHandles.Swap(index, lastIndex); + forceZones.Swap(index, lastIndex); + + // update the index of the handle we swapped with: + forceZoneHandles[index].index = index; + + // invalidate our handle: + // (after updating the swapped one! + // in case there's just one handle in the array, + // we need to write -1 after 0) + handle.Invalidate(); + + // remove last index: + forceZoneHandles.RemoveAt(lastIndex); + forceZones.count--; + + DestroyIfUnused(); + } + } + + private void DestroyRigidbodyData(ObiRigidbodyHandle handle) + { + if (rigidbodies != null && handle != null && handle.isValid && handle.index < rigidbodyHandles.Count) + { + int index = handle.index; + int lastIndex = rigidbodyHandles.Count - 1; + + // swap all collider info: + rigidbodyHandles.Swap(index, lastIndex); + rigidbodies.Swap(index, lastIndex); + + // update the index of the handle we swapped with: + rigidbodyHandles[index].index = index; + + // invalidate our handle: + // (after updating the swapped one! + // in case there's just one handle in the array, + // we need to write -1 after 0) + handle.Invalidate(); + + // remove last index: + rigidbodyHandles.RemoveAt(lastIndex); + rigidbodies.count--; + + DestroyIfUnused(); + } + + } + + private void CreateColliderData(ObiColliderHandle handle) + { + handle.index = colliderHandles.Count; + colliderHandles.Add(handle); + colliderShapes.Add(new ColliderShape { materialIndex = -1, rigidbodyIndex = -1, dataIndex = -1 }); + colliderAabbs.Add(new Aabb()); + colliderTransforms.Add(new AffineTransform()); + + MarkColliderAsNeedingUpdate(handle); + } + + private void CreateForceZoneData(ObiForceZoneHandle handle) + { + handle.index = forceZoneHandles.Count; + forceZoneHandles.Add(handle); + forceZones.Add(new ForceZone()); + } + + private void CreateRigidbodyData(ObiRigidbodyHandle handle) + { + handle.index = rigidbodyHandles.Count; + rigidbodyHandles.Add(handle); + rigidbodies.Add(new ColliderRigidbody()); + } + + public bool DoesColliderRequireToBeUpdated(ObiColliderHandle handle) + { + if (handle != null && handle.isValid && + handle.index < colliderHandles.Count && handle.index < collidersToUpdateCount) + return true; + return false; + } + + public void MarkColliderAsNeedingUpdate(ObiColliderHandle handle) + { + if (colliderShapes != null && handle != null && handle.isValid && + handle.index < colliderHandles.Count && handle.index >= collidersToUpdateCount && + collidersToUpdateCount < colliderHandles.Count) + { + int index = handle.index; + int lastIndex = collidersToUpdateCount; + + // swap all collider info: + colliderHandles.Swap(index, lastIndex); + colliderShapes.Swap(index, lastIndex); + colliderAabbs.Swap(index, lastIndex); + colliderTransforms.Swap(index, lastIndex); + + // update handles: + colliderHandles[lastIndex].index = lastIndex; + colliderHandles[index].index = index; + + collidersToUpdateCount++; + } + } + + public void MarkColliderAsNotNeedingUpdate(ObiColliderHandle handle) + { + if (colliderShapes != null && handle != null && handle.isValid && + handle.index < colliderHandles.Count && handle.index < collidersToUpdateCount) + { + int index = handle.index; + int lastIndex = collidersToUpdateCount-1; + + // swap all collider info: + colliderHandles.Swap(index, lastIndex); + colliderShapes.Swap(index, lastIndex); + colliderAabbs.Swap(index, lastIndex); + colliderTransforms.Swap(index, lastIndex); + + // update handles: + colliderHandles[lastIndex].index = lastIndex; + colliderHandles[index].index = index; + + collidersToUpdateCount--; + } + } + + public void FlushHandleBuffers() + { + // First process destruction, then process creation. + // In case we create a handle and then destroy it, + // we should enqueue it for destruction only if it's not in the creation queue. + // If it is, just remove if from the creation queue. + + if (collidersToDestroy != null) + { + foreach (var handle in collidersToDestroy) + DestroyColliderData(handle); + collidersToDestroy?.Clear(); + } + + if (forceZonesToDestroy != null) + { + foreach (var handle in forceZonesToDestroy) + DestroyForceZoneData(handle); + forceZonesToDestroy?.Clear(); + } + + if (rigidbodiesToDestroy != null) + { + foreach (var handle in rigidbodiesToDestroy) + DestroyRigidbodyData(handle); + rigidbodiesToDestroy?.Clear(); + } + + if (collidersToCreate != null) + { + foreach (var handle in collidersToCreate) + CreateColliderData(handle); + collidersToCreate?.Clear(); + } + + if (forceZonesToCreate != null) + { + foreach (var handle in forceZonesToCreate) + CreateForceZoneData(handle); + forceZonesToCreate?.Clear(); + } + + if (rigidbodiesToCreate != null) + { + foreach (var handle in rigidbodiesToCreate) + CreateRigidbodyData(handle); + rigidbodiesToCreate?.Clear(); + } + + } + + public void UpdateWorld(float deltaTime, bool updateDynamics = true) + { + if (!dirty) + return; + + dirty = false; + + // ensure all objects have valid handles. + // May destroy the world if it's empty, + // so we next check that handle/implementations are not null. + FlushHandleBuffers(); + // update all colliders: - for (int i = 0; i < colliderHandles.Count; ++i) - colliderHandles[i].owner.UpdateIfNeeded(); - } + if (colliderHandles != null) + for (int i = 0; i < collidersToUpdateCount; ++i) + colliderHandles[i].owner.UpdateIfNeeded(); - public void UpdateRigidbodies(List solvers, float stepTime) - { - // reset all solver's delta buffers to zero: - foreach (ObiSolver solver in solvers) - { - if (solver != null && solver.initialized) - { - solver.EnsureRigidbodyArraysCapacity(rigidbodyHandles.Count); - solver.rigidbodyLinearDeltas.WipeToZero(); - solver.rigidbodyAngularDeltas.WipeToZero(); - } - } - - for (int i = 0; i < rigidbodyHandles.Count; ++i) - rigidbodyHandles[i].owner.UpdateIfNeeded(stepTime); - } - - public void UpdateWorld(float deltaTime) - { - for (int i = 0; i < implementations.Count; ++i) - { - if (implementations[i].referenceCount > 0) - { - // set arrays: - implementations[i].SetColliders(colliderShapes, colliderAabbs, colliderTransforms, colliderShapes.count); - implementations[i].SetRigidbodies(rigidbodies); - implementations[i].SetCollisionMaterials(collisionMaterials); - implementations[i].SetTriangleMeshData(triangleMeshContainer.headers, triangleMeshContainer.bihNodes, triangleMeshContainer.triangles, triangleMeshContainer.vertices); - implementations[i].SetEdgeMeshData(edgeMeshContainer.headers, edgeMeshContainer.bihNodes, edgeMeshContainer.edges, edgeMeshContainer.vertices); - implementations[i].SetDistanceFieldData(distanceFieldContainer.headers, distanceFieldContainer.dfNodes); - implementations[i].SetHeightFieldData(heightFieldContainer.headers, heightFieldContainer.samples); - - // update world implementation: - implementations[i].UpdateWorld(deltaTime); - } - } - } - - public void UpdateRigidbodyVelocities(List solvers) - { - int count = 0; - foreach (ObiSolver solver in solvers) - if (solver != null && solver.initialized) count++; - - if (count > 0) - { - // we want to average the deltas applied by all solvers, so calculate 1/solverCount. - float rcpCount = 1.0f / count; + // update all force zones: + if (forceZoneHandles != null) + for (int i = 0; i < forceZoneHandles.Count; ++i) + forceZoneHandles[i].owner.UpdateIfNeeded(); + // update rigidbodies: + if (rigidbodyHandles != null && updateDynamics) for (int i = 0; i < rigidbodyHandles.Count; ++i) + rigidbodyHandles[i].owner.UpdateIfNeeded(deltaTime); + + // update implementations: + if (implementations != null) + for (int i = 0; i < implementations.Count; ++i) { - Vector4 linearDelta = Vector4.zero; - Vector4 angularDelta = Vector4.zero; - - foreach (ObiSolver solver in solvers) + if (implementations[i].referenceCount > 0) { - if (solver != null && solver.initialized) - { - linearDelta += solver.rigidbodyLinearDeltas[i] * rcpCount; - angularDelta += solver.rigidbodyAngularDeltas[i] * rcpCount; - } - } + // set arrays: + implementations[i].SetColliders(colliderShapes, colliderAabbs, colliderTransforms); + implementations[i].SetForceZones(forceZones); + implementations[i].SetRigidbodies(rigidbodies); + implementations[i].SetCollisionMaterials(collisionMaterials); + implementations[i].SetTriangleMeshData(triangleMeshContainer.headers, triangleMeshContainer.bihNodes, triangleMeshContainer.triangles, triangleMeshContainer.vertices); + implementations[i].SetEdgeMeshData(edgeMeshContainer.headers, edgeMeshContainer.bihNodes, edgeMeshContainer.edges, edgeMeshContainer.vertices); + implementations[i].SetDistanceFieldData(distanceFieldContainer.headers, distanceFieldContainer.dfNodes); + implementations[i].SetHeightFieldData(heightFieldContainer.headers, heightFieldContainer.samples); - // update rigidbody velocities - rigidbodyHandles[i].owner.UpdateVelocities(linearDelta, angularDelta); + // update world implementation: + if (updateDynamics) + implementations[i].UpdateWorld(deltaTime); + } } + } + + public void SetDirty() + { + dirty = true; + } + + public void UpdateCollisionMaterials() + { + if (implementations != null) + for (int i = 0; i < implementations.Count; ++i) + { + if (implementations[i].referenceCount > 0) + { + implementations[i].SetCollisionMaterials(collisionMaterials); + } + } + } + + public void UpdateRigidbodyVelocities(ObiSolver solver) + { + if (solver != null && solver.initialized) + { + int count = Mathf.Min(rigidbodyHandles.Count, solver.rigidbodyLinearDeltas.count); + + for (int i = 0; i < count; ++i) + rigidbodyHandles[i].owner.UpdateVelocities(solver.rigidbodyLinearDeltas[i], solver.rigidbodyAngularDeltas[i]); } + + solver.rigidbodyLinearDeltas.WipeToZero(); + solver.rigidbodyAngularDeltas.WipeToZero(); + solver.rigidbodyLinearDeltas.Upload(); + solver.rigidbodyAngularDeltas.Upload(); } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs index b20a92eb4..97940be21 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs @@ -36,17 +36,17 @@ namespace Obi{ } } - public void OnEnable() + private void OnEnable() { UpdateMaterial(); } - public void OnDisable() + private void OnDisable() { ObiColliderWorld.GetInstance().DestroyCollisionMaterial(materialHandle); } - public void OnValidate() + private void OnValidate() { // we can't create GameObjects in OnValidate(), so make sure the colliderworld already exists. UpdateMaterial(); diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbody.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbody.cs index 0896b6524..468af6d74 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbody.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbody.cs @@ -2,17 +2,16 @@ using System; using System.Collections; -namespace Obi -{ +namespace Obi{ - /** + /** * Small helper class that lets you specify Obi-only properties for rigidbodies. */ - [ExecuteInEditMode] - [RequireComponent(typeof(Rigidbody))] - public class ObiRigidbody : ObiRigidbodyBase - { + [ExecuteInEditMode] + [RequireComponent(typeof(Rigidbody))] + public class ObiRigidbody : ObiRigidbodyBase + { public Rigidbody unityRigidbody { get; private set; } public Vector3 position => unityRigidbody.position; @@ -24,22 +23,26 @@ namespace Obi private Quaternion prevRotation; private Vector3 prevPosition; - public override void OnEnable() + protected override void OnEnable() + { + unityRigidbody = GetComponent(); + ResetPosition(); + base.OnEnable(); + } + + public void ResetPosition() { - unityRigidbody = GetComponent(); prevPosition = unityRigidbody.position; prevRotation = unityRigidbody.rotation; - linearVelocity = unityRigidbody.linearVelocity; angularVelocity = unityRigidbody.angularVelocity; - base.OnEnable(); } - private void UpdateVelocities(float stepTime) + private void CacheVelocities(float stepTime) { // differentiate positions/orientations to get our own velocites for kinematic objects. - // when calling Physics.Simulate, MovePosition/Rotation do not work correctly. Also useful for animations. - if (unityRigidbody.isKinematic) + // also useful for animations. + if (unityRigidbody.isKinematic && stepTime > 0) { // differentiate positions to obtain linear velocity: linearVelocity = (unityRigidbody.position - prevPosition) / stepTime; @@ -59,21 +62,31 @@ namespace Obi prevRotation = unityRigidbody.rotation; } - public override void UpdateIfNeeded(float stepTime) + public override void UpdateIfNeeded(float stepTime) { - UpdateVelocities(stepTime); + // Rigidbody might not exist, as rigidbody deletion is buffered. + // This means the unity rigidbody might be deleted before the rigidbody handle is invalidated. + // Conversely, rigidbodyHandle might be non-null but invalid. + if (unityRigidbody == null || !Handle.isValid) return; + + + CacheVelocities(stepTime); var world = ObiColliderWorld.GetInstance(); - var rb = world.rigidbodies[handle.index]; + var rb = world.rigidbodies[Handle.index]; rb.FromRigidbody(this); - world.rigidbodies[handle.index] = rb; + world.rigidbodies[Handle.index] = rb; } - /** + /** * Reads velocities back from the solver. */ - public override void UpdateVelocities(Vector3 linearDelta, Vector3 angularDelta) + public override void UpdateVelocities(Vector3 linearDelta, Vector3 angularDelta) { + // Rigidbody might not exist, as rigidbody deletion is buffered. + // This means the unity rigidbody might be deleted before the rigidbody handle is invalidated. + if (unityRigidbody == null) return; + // kinematic rigidbodies are passed to Obi with zero velocity, so we must ignore the new velocities calculated by the solver: if (Application.isPlaying && !(unityRigidbody.isKinematic || kinematicForParticles)) { @@ -84,6 +97,6 @@ namespace Obi } } } - } + } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs index 6e831e839..5f453fb06 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs @@ -2,17 +2,16 @@ using System; using System.Collections; -namespace Obi -{ +namespace Obi{ - /** + /** * Small helper class that lets you specify Obi-only properties for rigidbodies. */ - [ExecuteInEditMode] - [RequireComponent(typeof(Rigidbody2D))] - public class ObiRigidbody2D : ObiRigidbodyBase - { + [ExecuteInEditMode] + [RequireComponent(typeof(Rigidbody2D))] + public class ObiRigidbody2D : ObiRigidbodyBase + { public Rigidbody2D unityRigidbody { get; private set; } public Vector2 position => unityRigidbody.position; @@ -24,22 +23,26 @@ namespace Obi private Quaternion prevRotation; private Vector3 prevPosition; - public override void OnEnable() + protected override void OnEnable() { unityRigidbody = GetComponent(); - prevPosition = transform.position; - prevRotation = transform.rotation; - - linearVelocity = unityRigidbody.linearVelocity; - angularVelocity = unityRigidbody.angularVelocity; + ResetPosition(); base.OnEnable(); } - private void UpdateKinematicVelocities(float stepTime) + public void ResetPosition() + { + prevPosition = unityRigidbody.position; + prevRotation = Quaternion.AngleAxis(unityRigidbody.rotation, Vector3.forward); + linearVelocity = unityRigidbody.linearVelocity; + angularVelocity = unityRigidbody.angularVelocity; + } + + private void CacheVelocities(float stepTime) { // differentiate positions/orientations to get our own velocites for kinematic objects. // when calling Physics.Simulate, MovePosition/Rotation do not work correctly. Also useful for animations. - if (unityRigidbody.isKinematic) + if (unityRigidbody.isKinematic && stepTime > 0) { // differentiate positions to obtain linear velocity: linearVelocity = (transform.position - prevPosition) / stepTime; @@ -61,27 +64,35 @@ namespace Obi public override void UpdateIfNeeded(float stepTime) { - UpdateKinematicVelocities(stepTime); + // Rigidbody might not exist, as rigidbody deletion is buffered. + // This means the unity rigidbody might be deleted before the rigidbody handle is invalidated. + if (unityRigidbody == null) return; + + CacheVelocities(stepTime); var world = ObiColliderWorld.GetInstance(); - var rb = world.rigidbodies[handle.index]; + var rb = world.rigidbodies[Handle.index]; rb.FromRigidbody(this); - world.rigidbodies[handle.index] = rb; + world.rigidbodies[Handle.index] = rb; } - /** + /** * Reads velocities back from the solver. */ - public override void UpdateVelocities(Vector3 linearDelta, Vector3 angularDelta) + public override void UpdateVelocities(Vector3 linearDelta, Vector3 angularDelta) { + // Rigidbody might not exist, as rigidbody deletion is buffered. + // This means the unity rigidbody might be deleted before the rigidbody handle is invalidated. + if (unityRigidbody == null) return; + // kinematic rigidbodies are passed to Obi with zero velocity, so we must ignore the new velocities calculated by the solver: if (Application.isPlaying && !(unityRigidbody.isKinematic || kinematicForParticles)) { - unityRigidbody.linearVelocity += new Vector2(linearDelta.x, linearDelta.y); - unityRigidbody.angularVelocity += angularDelta[2] * Mathf.Rad2Deg; - } + unityRigidbody.linearVelocity += new Vector2(linearDelta.x, linearDelta.y); + unityRigidbody.angularVelocity += angularDelta[2] * Mathf.Rad2Deg; + } - } - } + } + } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs index 69cbef4f5..c08d54b5f 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs @@ -5,28 +5,45 @@ using System.Collections; namespace Obi{ - /** + /** * Small helper class that lets you specify Obi-only properties for rigidbodies. */ - [ExecuteInEditMode] - public abstract class ObiRigidbodyBase : MonoBehaviour - { + [ExecuteInEditMode] + public abstract class ObiRigidbodyBase : MonoBehaviour + { public bool kinematicForParticles = false; - public ObiRigidbodyHandle handle; - - public virtual void OnEnable() + protected ObiRigidbodyHandle rigidbodyHandle; + public ObiRigidbodyHandle Handle { - handle = ObiColliderWorld.GetInstance().CreateRigidbody(); - handle.owner = this; - UpdateIfNeeded(1); + get + { + // don't check rigidbodyHandle.isValid: + // CreateRigidbody may defer creation, so we get a non-null, but invalid handle. + // If calling handle again right away before it becomes valid, it will call CreateRigidbody() again and create a second handle to the same body. + if (rigidbodyHandle == null) + { + var world = ObiColliderWorld.GetInstance(); + + // create the material: + rigidbodyHandle = world.CreateRigidbody(); + rigidbodyHandle.owner = this; + } + return rigidbodyHandle; + } + } + + protected virtual void OnEnable() + { + rigidbodyHandle = ObiColliderWorld.GetInstance().CreateRigidbody(); + rigidbodyHandle.owner = this; } public void OnDisable() { - ObiColliderWorld.GetInstance().DestroyRigidbody(handle); + ObiColliderWorld.GetInstance().DestroyRigidbody(rigidbodyHandle); } public abstract void UpdateIfNeeded(float stepTime); diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs index 1fa9f41d0..3858bc697 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs @@ -76,30 +76,38 @@ namespace Obi ObiTriangleMeshHandle handle = new ObiTriangleMeshHandle(null); if (source != null && !handles.TryGetValue(source, out handle)) - { - var sourceTris = source.triangles; - var sourceVertices = source.vertices; - - // Build a bounding interval hierarchy from the triangles: - IBounded[] t = new IBounded[sourceTris.Length/3]; - for (int i = 0; i < t.Length; ++i) + { + if (source.isReadable) { - int t1 = sourceTris[i * 3]; - int t2 = sourceTris[i * 3 + 1]; - int t3 = sourceTris[i * 3 + 2]; - t[i] = new Triangle(t1,t2,t3, sourceVertices[t1], sourceVertices[t2], sourceVertices[t3]); + var sourceTris = source.triangles; + var sourceVertices = source.vertices; + + // Build a bounding interval hierarchy from the triangles: + IBounded[] t = new IBounded[sourceTris.Length / 3]; + for (int i = 0; i < t.Length; ++i) + { + int t1 = sourceTris[i * 3]; + int t2 = sourceTris[i * 3 + 1]; + int t3 = sourceTris[i * 3 + 2]; + t[i] = new Triangle(t1, t2, t3, sourceVertices[t1], sourceVertices[t2], sourceVertices[t3]); + } + var sourceBih = BIH.Build(ref t); + + Triangle[] tris = Array.ConvertAll(t, x => (Triangle)x); + + handle = new ObiTriangleMeshHandle(source, headers.count); + handles.Add(source, handle); + + headers.Add(new TriangleMeshHeader(bihNodes.count, sourceBih.Length, triangles.count, tris.Length, vertices.count, sourceVertices.Length)); + bihNodes.AddRange(sourceBih); + triangles.AddRange(tris); + vertices.AddRange(sourceVertices); + } + else + { + handle = new ObiTriangleMeshHandle(source); + handles.Add(source, handle); } - var sourceBih = BIH.Build(ref t); - - Triangle[] tris = Array.ConvertAll(t, x => (Triangle)x); - - handle = new ObiTriangleMeshHandle(source, headers.count); - handles.Add(source, handle); - headers.Add(new TriangleMeshHeader(bihNodes.count, sourceBih.Length, triangles.count, tris.Length, vertices.count, sourceVertices.Length)); - - bihNodes.AddRange(sourceBih); - triangles.AddRange(tris); - vertices.AddRange(sourceVertices); } return handle; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs index 0121d6fc0..31892a9e4 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs @@ -1,5 +1,4 @@ using System; -using System.Runtime.InteropServices; using UnityEngine; namespace Obi @@ -13,9 +12,11 @@ namespace Obi public int firstChild; // add 12 bytes of padding to ensure correct memory alignment: +#pragma warning disable 0414 private int pad0; private int pad1; private int pad2; +#pragma warning restore 0414 public DFNode(Vector4 center) { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/AffineTransform.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/AffineTransform.cs index 6c8fa5f6e..e129482e5 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/AffineTransform.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/AffineTransform.cs @@ -1,4 +1,5 @@ -using UnityEngine; +using System; +using UnityEngine; namespace Obi { @@ -19,16 +20,46 @@ namespace Obi this.scale = scale; } - public void FromTransform(Transform source, bool is2D = false) + public void FromTransform3D(Transform source, ObiRigidbody rb) { - translation = source.position; - rotation = source.rotation; - scale = source.lossyScale; - - if (is2D) + if (rb != null && rb.unityRigidbody != null) { - translation[2] = 0; + translation = source.position - rb.unityRigidbody.transform.position + rb.position; + rotation = (source.rotation * Quaternion.Inverse(rb.unityRigidbody.transform.rotation)) * rb.rotation; } + else + { + translation = source.position; + rotation = source.rotation; + } + + scale = source.lossyScale; + } + + public void FromTransform2D(Transform source, ObiRigidbody2D rb) + { + if (rb != null && rb.unityRigidbody != null) + { + translation = source.position - rb.unityRigidbody.transform.position + (Vector3)rb.position; + rotation = (source.rotation * Quaternion.Inverse(rb.unityRigidbody.transform.rotation)) * Quaternion.AngleAxis(rb.rotation, Vector3.forward); + } + else + { + translation = source.position; + rotation = source.rotation; + } + + scale = source.lossyScale; + translation[2] = 0; + } + + public AffineTransform Inverse() + { + var conj = Quaternion.Inverse(rotation); + var invScale = new Vector3(1 / scale.x, 1 / scale.y, 1 / scale.z); + return new AffineTransform(conj * Vector3.Scale(translation , -invScale), + conj, + invScale); } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs index 10126adc9..e51423f4a 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs @@ -10,8 +10,8 @@ namespace Obi public Vector4 angularVelocity; public Vector4 com; public float inverseMass; - - private int pad0; + + public int constraintCount; private int pad1; private int pad2; @@ -20,7 +20,7 @@ namespace Obi bool kinematic = !Application.isPlaying || rb.unityRigidbody.isKinematic || rb.kinematicForParticles; //rotation = source.rotation; - velocity = rb.kinematicForParticles ? Vector3.zero : rb.linearVelocity; + velocity = rb.kinematicForParticles ? Vector3.zero : rb.linearVelocity + (rb.unityRigidbody.useGravity ? Physics.gravity * Time.fixedDeltaTime : Vector3.zero); angularVelocity = rb.kinematicForParticles ? Vector3.zero : rb.angularVelocity; // center of mass in unity is affected by local rotation and position, but not scale. We need it expressed in world space: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ColliderShape.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ColliderShape.cs index 70ab4cdc9..f71030e2d 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ColliderShape.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ColliderShape.cs @@ -22,13 +22,34 @@ namespace Obi heightmap: width (x axis), height (y axis) and depth (z axis) in world units.*/ public ShapeType type; public float contactOffset; - public int dataIndex; public int rigidbodyIndex; // index of the associated rigidbody in the collision world. public int materialIndex; // index of the associated material in the collision world. - + public int forceZoneIndex; // index of the associated force zone in the collision world. public int filter; // bitwise category/mask. - public int flags; // for now, only used for trigger (1) or regular collider (0). - public int is2D; // whether the collider is 2D (1) or 3D (0). + public int flags; // first bit whether the collider is 2D (1) or 3D (0), second bit whether it's a trigger (1) or regular collider (0), + // third bit (sign) determines whether shape is inverted or not. + + public bool is2D + { + get => (flags & 1) != 0; + set => flags |= value ? 1 : 0; + } + public bool isTrigger + { + get => ((flags & 1 << 1) != 0) || forceZoneIndex >= 0; + set => flags |= value ? 1 << 1 : 0; + } + public float sign + { + get => (flags & 1 << 2) != 0 ? -1 : 1; + } + + public void SetSign(bool inverted) + { + if (inverted) flags |= 1 << 2; + else flags &= ~(1 << 2); + } + } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs index 082f99c67..f0c815d5b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs @@ -1,9 +1,10 @@ using UnityEngine; using System.Collections; +using System.Runtime.InteropServices; namespace Obi { - + [StructLayout(LayoutKind.Sequential)] public struct CollisionMaterial { public float dynamicFriction; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs new file mode 100644 index 000000000..1f3a8d208 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs @@ -0,0 +1,93 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Mathematics; +#endif + +namespace Obi +{ + public struct ContactEffectiveMasses + { + public float normalInvMassA; + public float tangentInvMassA; + public float bitangentInvMassA; + + public float normalInvMassB; + public float tangentInvMassB; + public float bitangentInvMassB; + + public float TotalNormalInvMass => normalInvMassA + normalInvMassB; + public float TotalTangentInvMass => tangentInvMassA + tangentInvMassB; + public float TotalBitangentInvMass => bitangentInvMassA + bitangentInvMassB; + + public void ClearContactMassesA() + { + normalInvMassA = tangentInvMassA = bitangentInvMassA = 0; + } + + public void ClearContactMassesB() + { + normalInvMassB = tangentInvMassB = bitangentInvMassB = 0; + } + + #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + public void CalculateContactMassesA(float invMass, + float4 inverseInertiaTensor, + float4 position, + quaternion orientation, + float4 contactPoint, + float4 normal, + float4 tangent, + float4 bitangent, + bool rollingContacts) + { + // initialize inverse linear masses: + normalInvMassA = tangentInvMassA = bitangentInvMassA = invMass; + + if (rollingContacts) + { + float4 rA = contactPoint - position; + float4x4 solverInertiaA = BurstMath.TransformInertiaTensor(inverseInertiaTensor, orientation); + + normalInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, normal); + tangentInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, tangent); + bitangentInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, bitangent); + } + } + + public void CalculateContactMassesB(float invMass, + float4 inverseInertiaTensor, + float4 position, + quaternion orientation, + float4 contactPoint, + float4 normal, + float4 tangent, + float4 bitangent, + bool rollingContacts) + { + // initialize inverse linear masses: + normalInvMassB = tangentInvMassB = bitangentInvMassB = invMass; + + if (rollingContacts) + { + float4 rB = contactPoint - position; + float4x4 solverInertiaB = BurstMath.TransformInertiaTensor(inverseInertiaTensor, orientation); + + normalInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, normal); + tangentInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, tangent); + bitangentInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, bitangent); + } + } + + + public void CalculateContactMassesB(in BurstRigidbody rigidbody, in BurstAffineTransform solver2World, float4 pointB, float4 normal, float4 tangent, float4 bitangent) + { + float4 rB = solver2World.TransformPoint(pointB) - rigidbody.com; + + // initialize inverse linear masses: + normalInvMassB = tangentInvMassB = bitangentInvMassB = rigidbody.inverseMass; + normalInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, normal); + tangentInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, tangent); + bitangentInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, bitangent); + } + #endif + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs.meta new file mode 100644 index 000000000..bf8ca76fc --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b11c7db3414246668eb72ef55dd737f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmitPoint.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmitPoint.cs new file mode 100644 index 000000000..dfa50f31a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmitPoint.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using System; + +namespace Obi +{ + [Serializable] + public struct EmitPoint + { + public Vector4 position; + public Vector4 direction; + public Vector4 velocity; + public Color color; + + public EmitPoint(Vector3 position, Vector3 direction) + { + this.position = position; + this.direction = direction; + this.velocity = Vector4.zero; + this.color = Color.white; + } + + public EmitPoint(Vector3 position, Vector3 direction, Color color) + { + this.position = position; + this.direction = direction; + this.velocity = Vector4.zero; + this.color = color; + } + + public EmitPoint GetTransformed(Matrix4x4 transform, Matrix4x4 prevTransform, Color multiplyColor, float deltaTime) + { + var ep = new EmitPoint(transform.MultiplyPoint3x4(position), + transform.MultiplyVector(direction), + color * multiplyColor); + + ep.velocity = deltaTime > 0 ? ((Vector3)ep.position - prevTransform.MultiplyPoint3x4(position)) / deltaTime : Vector3.zero; + return ep; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmitPoint.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmitPoint.cs.meta new file mode 100644 index 000000000..cc9dd0484 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmitPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0c9d9016e8744477adde7f1afe28798 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs new file mode 100644 index 000000000..9cf3c3e32 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +namespace Obi +{ + public struct EmittedParticleData + { + public Vector4 fluidMaterial; + public Vector4 fluidMaterial2; + public Vector4 fluidInterface; + public Vector4 userData; + public int phase; + public float invMass; + public float radius; + public float volume; + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs.meta new file mode 100644 index 000000000..d57c77842 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 032673eb10713468fb72d04ad5cc6b26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ForceZone.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ForceZone.cs new file mode 100644 index 000000000..f2bcd63cf --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ForceZone.cs @@ -0,0 +1,41 @@ +using UnityEngine; +using System; + +namespace Obi +{ + [Serializable] + public struct ForceZone + { + public enum ForceMode + { + Force, + Acceleration, + Wind, + } + + public enum ZoneType + { + Directional, + Radial, + Vortex, + Void + } + + public enum DampingDirection + { + All, // damps motion in all directions + ForceDirection, // damps motion in the direction of force. + SurfaceDirection // damps motion toward/away from the surface of the zone. + } + + public Color color; + public ZoneType type; + public ForceMode mode; + public DampingDirection dampingDir; + public float intensity; + public float minDistance; + public float maxDistance; + public float falloffPower; + public float damping; + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ForceZone.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ForceZone.cs.meta new file mode 100644 index 000000000..f39f401cb --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ForceZone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c189f8dc8ade4e14a960f3b6eb11f14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/InertialFrame.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/InertialFrame.cs new file mode 100644 index 000000000..4f2561f92 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/InertialFrame.cs @@ -0,0 +1,56 @@ +using UnityEngine; + +namespace Obi +{ + public struct InertialFrame + { + public AffineTransform frame; + public AffineTransform prevFrame; + + public Vector4 velocity; + public Vector4 angularVelocity; + + public Vector4 acceleration; + public Vector4 angularAcceleration; + + public InertialFrame(Vector4 position, Vector4 scale, Quaternion rotation) + { + this.frame = new AffineTransform(position, rotation, scale); + this.prevFrame = frame; + + velocity = Vector4.zero; + angularVelocity = Vector4.zero; + acceleration = Vector4.zero; + angularAcceleration = Vector4.zero; + } + + public InertialFrame(AffineTransform frame) + { + this.frame = frame; + this.prevFrame = frame; + + velocity = Vector4.zero; + angularVelocity = Vector4.zero; + acceleration = Vector4.zero; + angularAcceleration = Vector4.zero; + } + + public void Update(Vector4 position, Vector4 scale, Quaternion rotation, float dt) + { + prevFrame = frame; + Vector4 prevVelocity = velocity; + Vector4 prevAngularVelocity = angularVelocity; + + frame.translation = position; + frame.rotation = rotation; + frame.scale = scale; + + velocity = ObiIntegration.DifferentiateLinear(frame.translation, prevFrame.translation, dt); + angularVelocity = ObiIntegration.DifferentiateAngular(frame.rotation, prevFrame.rotation, dt); + + acceleration = ObiIntegration.DifferentiateLinear(velocity, prevVelocity, dt); + angularAcceleration = ObiIntegration.DifferentiateLinear(angularVelocity, prevAngularVelocity, dt); + } + + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/InertialFrame.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/InertialFrame.cs.meta new file mode 100644 index 000000000..56b8e9239 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/InertialFrame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7420f38eb63f04112a965d884f75d176 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs index c6a61babf..94e9cef26 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs @@ -12,11 +12,6 @@ namespace Obi for (int i = 0; i < capacity; ++i) this[i] = Color.white; } - public ObiNativeColorList(int capacity, int alignment, Color defaultValue) : base(capacity, alignment) - { - for (int i = 0; i < capacity; ++i) - this[i] = defaultValue; - } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta index 23dc2862c..eb41d0f72 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 391ffe5ba25364d2393afabc3083daa1 +guid: f377d76dadb3945b39cfac818a54d1be MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs new file mode 100644 index 000000000..339b196dd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeContactList : ObiNativeList + { + public ObiNativeContactList() { } + public ObiNativeContactList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new Oni.Contact(); + } + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs.meta new file mode 100644 index 000000000..74a33c11c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa58238d45b934704aede27415ce4242 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactShapeList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactShapeList.cs deleted file mode 100644 index d5ff11583..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactShapeList.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - [Serializable] - public class ObiNativeContactShapeList : ObiNativeList - { - public ObiNativeContactShapeList() { } - public ObiNativeContactShapeList(int capacity = 8, int alignment = 16) : base(capacity, alignment) - { - for (int i = 0; i < capacity; ++i) - this[i] = new Oni.Contact(); - } - } -} - diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactShapeList.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactShapeList.cs.meta deleted file mode 100644 index ab5d80836..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactShapeList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5ac88e1dd7e0249b5b361d60655d8d88 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs new file mode 100644 index 000000000..974f9f32a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeEffectiveMassesList : ObiNativeList + { + public ObiNativeEffectiveMassesList() { } + public ObiNativeEffectiveMassesList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new ContactEffectiveMasses(); + } + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs.meta new file mode 100644 index 000000000..813424cbf --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc8b00cd716564eff82fc19de0c458a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs new file mode 100644 index 000000000..39abfa12b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs @@ -0,0 +1,17 @@ +using System; + +namespace Obi +{ + [Serializable] + public class ObiNativeEmitPointList : ObiNativeList + { + public ObiNativeEmitPointList() { } + public ObiNativeEmitPointList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new EmitPoint(); + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs.meta new file mode 100644 index 000000000..13c552e66 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cbd83091221b46c9a724f3275281d2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs new file mode 100644 index 000000000..442146f1d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeForceZoneList : ObiNativeList + { + public ObiNativeForceZoneList() { } + public ObiNativeForceZoneList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new ForceZone(); + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs.meta new file mode 100644 index 000000000..65b36912d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2815feee105f648149e0f5b1b22954bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs index c18c1821f..81d9d0692 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs @@ -1,5 +1,4 @@ using System; -using UnityEngine; namespace Obi { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs index 9b2704cbc..63bf45700 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs @@ -1,5 +1,4 @@ using System; -using UnityEngine; namespace Obi { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs index 0fa158bd2..24b4ce45e 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs @@ -5,10 +5,12 @@ using UnityEngine; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using System.Collections; +using UnityEngine.Rendering; +using System.Linq; namespace Obi { - public unsafe abstract class ObiNativeList : IEnumerable, IDisposable, ISerializationCallbackReceiver where T : struct + public unsafe class ObiNativeList : IEnumerable, IDisposable, ISerializationCallbackReceiver where T : struct { public T[] serializedContents; protected void* m_AlignedPtr = null; @@ -21,7 +23,13 @@ namespace Obi #if ENABLE_UNITY_COLLECTIONS_CHECKS protected AtomicSafetyHandle m_SafetyHandle; #endif - protected ComputeBuffer m_ComputeBuffer; + + protected GraphicsBuffer.Target m_ComputeBufferType; + protected GraphicsBuffer m_ComputeBuffer; + protected GraphicsBuffer m_CountBuffer; // used to hold the counter value in case m_ComputeBufferType is Counter. + protected bool computeBufferDirty = false; + protected AsyncGPUReadbackRequest m_AsyncRequest; + protected AsyncGPUReadbackRequest m_CounterAsyncRequest; public int count { @@ -33,6 +41,9 @@ namespace Obi // we first ensure we can hold the previous count, and then set the new one. EnsureCapacity(m_Count); m_Count = Mathf.Min(m_Capacity, value); + + if (m_ComputeBuffer != null && m_ComputeBuffer.IsValid() && m_ComputeBufferType == GraphicsBuffer.Target.Counter) + m_ComputeBuffer.SetCounterValue((uint)m_Count); } } get { return m_Count; } @@ -40,37 +51,61 @@ namespace Obi public int capacity { - set - { - if (value != m_Capacity) - ChangeCapacity(value); - } get { return m_Capacity; } } + public int stride + { + get { return m_Stride; } + } + public bool isCreated { get { return m_AlignedPtr != null; } } + public bool noReadbackInFlight + { + get { return m_AsyncRequest.done && (m_ComputeBufferType != GraphicsBuffer.Target.Counter || m_CounterAsyncRequest.done); } + } + + // Returns the current compute buffer representation of this list. Will return null if AsComputeBuffer() hasn't been called yet, + // or if the list has been disposed of. + public GraphicsBuffer computeBuffer + { + get { return m_ComputeBuffer; } + } + public T this[int index] { get { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if (index < 0 || index >= m_Capacity) + { + throw new IndexOutOfRangeException($"Reading from index {index} is out of range of '{m_Capacity}' Capacity."); + } +#endif return UnsafeUtility.ReadArrayElementWithStride(m_AlignedPtr, index, m_Stride); } set { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if (index < 0 || index >= m_Capacity) + { + throw new IndexOutOfRangeException($"Writing to index {index} is out of range of '{m_Capacity}' Capacity."); + } +#endif UnsafeUtility.WriteArrayElementWithStride(m_AlignedPtr, index, m_Stride, value); - - if (m_ComputeBuffer != null) - m_ComputeBuffer.SetData(AsNativeArray(), index, index, 1); + computeBufferDirty = true; } } // Declare parameterless constructor, called by Unity upon deserialization. protected ObiNativeList() { + m_Stride = UnsafeUtility.SizeOf(); + #if ENABLE_UNITY_COLLECTIONS_CHECKS m_SafetyHandle = AtomicSafetyHandle.Create(); #endif @@ -78,6 +113,8 @@ namespace Obi public ObiNativeList(int capacity = 8, int alignment = 16) { + m_Stride = UnsafeUtility.SizeOf(); + #if ENABLE_UNITY_COLLECTIONS_CHECKS m_SafetyHandle = AtomicSafetyHandle.Create(); #endif @@ -92,32 +129,21 @@ namespace Obi protected void Dispose(bool disposing) { + DisposeOfComputeBuffer(); + if (isCreated) { - - // dispose of compuse buffer representation: - if (m_ComputeBuffer != null) - { - m_ComputeBuffer.Dispose(); - } - // free unmanaged memory buffer: UnsafeUtility.Free(m_AlignedPtr, Allocator.Persistent); m_AlignedPtr = null; - } + m_Count = m_Capacity = 0; + #if ENABLE_UNITY_COLLECTIONS_CHECKS - // dispose of atomic safety handle: - try - { + // dispose of atomic safety handle: AtomicSafetyHandle.CheckDeallocateAndThrow(m_SafetyHandle); AtomicSafetyHandle.Release(m_SafetyHandle); - } - catch (Exception e) - { - // Debug.LogException(e); - } - #endif + } } public void Dispose() @@ -125,6 +151,26 @@ namespace Obi Dispose(true); } + public void DisposeOfComputeBuffer() + { + // dispose of compute buffer representation: + if (m_ComputeBuffer != null) + { + // if there's any pending async readback, finalize it. + // otherwise we pull the rug from under the readbacks' feet and that's no good. + WaitForReadback(); + + m_ComputeBuffer.Dispose(); + m_ComputeBuffer = null; + } + + if (m_CountBuffer != null) + { + m_CountBuffer.Dispose(); + m_CountBuffer = null; + } + } + public void OnBeforeSerialize() { if (isCreated) @@ -169,38 +215,144 @@ namespace Obi return AsNativeArray(m_Count); } - // Reinterprets the data in the list as a native array. + public NativeArray AsNativeArray() + { + return AsNativeArray(m_Count); + } + + // Reinterprets the data in the list as a native array of the given length, up to the list's capacity. public NativeArray AsNativeArray(int arrayLength) where U : struct { unsafe { - NativeArray array = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(m_AlignedPtr, arrayLength, Allocator.None); + NativeArray array = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(m_AlignedPtr, Mathf.Min(arrayLength, m_Capacity), Allocator.None); #if ENABLE_UNITY_COLLECTIONS_CHECKS NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref array, m_SafetyHandle); #endif + // assume the NativeArray will write new data, so we'll need to update the computeBuffer upon Upload(). + computeBufferDirty = true; return array; } } - // Reinterprets the data in the list as a compute buffer. Note: This also calls AsNativeArray() internally, to be able to pass the raw pointer to the compute buffer - public ComputeBuffer AsComputeBuffer() where U : struct + // Reinterprets the data in the list as a compute buffer, in case of an empty list it returns a buffer of size 1 with uninitialized content. + public GraphicsBuffer SafeAsComputeBuffer(GraphicsBuffer.Target bufferType = GraphicsBuffer.Target.Structured) where U : struct { - if (m_ComputeBuffer != null) - { - m_ComputeBuffer.Dispose(); - } + return AsComputeBuffer(Mathf.Max(1,m_Count), bufferType); + } - m_ComputeBuffer = new ComputeBuffer(m_Count, m_Stride); - m_ComputeBuffer.SetData(AsNativeArray()); - return m_ComputeBuffer; + // Reinterprets the data in the list as a compute buffer. + public GraphicsBuffer AsComputeBuffer(GraphicsBuffer.Target bufferType = GraphicsBuffer.Target.Structured) where U : struct + { + return AsComputeBuffer(m_Count, bufferType); + } + + // Reinterprets the data in the list as a compute buffer of the given length. Returns null if the list is empty. + public GraphicsBuffer AsComputeBuffer(int arrayLength, GraphicsBuffer.Target bufferType = GraphicsBuffer.Target.Structured) where U : struct + { + DisposeOfComputeBuffer(); + + if (arrayLength > 0) + { + m_ComputeBufferType = bufferType; + m_ComputeBuffer = new GraphicsBuffer(bufferType, arrayLength, UnsafeUtility.SizeOf()); + m_ComputeBuffer.SetData(AsNativeArray(arrayLength)); + + if (bufferType == GraphicsBuffer.Target.Counter) + { + // initialize count to zero, since counter buffers always start empty: + m_Count = 0; + m_ComputeBuffer.SetCounterValue((uint)m_Count); + m_CountBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 1, 4); + GraphicsBuffer.CopyCount(m_ComputeBuffer, m_CountBuffer, 0); + } + + return m_ComputeBuffer; + } + return null; + } + + // Kicks a GPU readback request, to bring compute buffer data to this list. + public void Readback(int readcount, bool async) where U : struct + { + if (m_ComputeBuffer != null && m_ComputeBuffer.IsValid() && noReadbackInFlight) + { + var nativeArray = AsNativeArray(readcount); + + // When using SafeAsComputeBuffer, we'll get a compute buffer of size 1 even if the list (and the NativeArray) is empty. + // Guard against trying to readback into a smaller NativeArray. Also guard against requesting zero items. + if (nativeArray.Length >= readcount && readcount > 0) + m_AsyncRequest = AsyncGPUReadback.RequestIntoNativeArray(ref nativeArray, m_ComputeBuffer, readcount * UnsafeUtility.SizeOf(), 0); + + // For counter buffers, request the counter value too: + if (m_ComputeBufferType == GraphicsBuffer.Target.Counter) + { + GraphicsBuffer.CopyCount(m_ComputeBuffer, m_CountBuffer, 0); + m_CounterAsyncRequest = AsyncGPUReadback.Request(m_CountBuffer, m_CountBuffer.stride, 0, (AsyncGPUReadbackRequest request)=> + { + if (!request.hasError) + m_Count = Mathf.Min(m_Capacity, request.GetData()[0]); + }); + } + + if (!async) + WaitForReadback(); + } + } + + public void Readback(bool async = true) + { + // On counter buffers, we shouldn't read data up to m_Count and then update m_Count with the compute buffer's counter value *afterwards*. + // This would lead to reading back less data than we should, so we need to request the entire compute buffer. + if (m_ComputeBuffer != null) + Readback(m_ComputeBuffer.count, async); + } + + public void Readback(int readcount ,bool async = true) + { + Readback(readcount, async); + } + + // Makes sure any pending changes by the CPU are sent to the GPU. + // If the list data has been changed on the CPU since the last time Unmap() was called and there's a compute buffer associated to it, + // will write the current contents of the list to the compute buffer. + public void Upload(int length, bool force = false) where U : struct + { + if ((computeBufferDirty || force) && m_ComputeBuffer != null && m_ComputeBuffer.IsValid()) + m_ComputeBuffer.SetData(AsNativeArray(length)); + + computeBufferDirty = false; + } + + public void Upload(bool force = false) + { + Upload(m_Count,force); + } + + public void UploadFullCapacity() + { + Upload(m_Capacity, true); + } + + // Waits for the last readback request to be complete, this brings back data from the GPU to the CPU: + public void WaitForReadback() + { + if (isCreated) + { + m_AsyncRequest.WaitForCompletion(); + m_CounterAsyncRequest.WaitForCompletion(); + } } protected void ChangeCapacity(int newCapacity) { + // invalidate compute buffer: + DisposeOfComputeBuffer(); + // allocate a new buffer: m_Stride = UnsafeUtility.SizeOf(); - var newAlignedPtr = UnsafeUtility.Malloc(newCapacity * m_Stride, 16, Allocator.Persistent); + var newAlignedPtr = UnsafeUtility.Malloc(newCapacity * m_Stride, m_AlignBytes, Allocator.Persistent); // if there was a previous allocation: if (isCreated) @@ -257,7 +409,45 @@ namespace Obi void* sourceAddress = source.AddressOfElement(sourceIndex); void* destAddress = AddressOfElement(destIndex); UnsafeUtility.MemCpy(destAddress, sourceAddress, length * m_Stride); + } + public void CopyFrom(NativeArray source, int sourceIndex, int destIndex, int length) where U : struct + { + if (!isCreated || !source.IsCreated || UnsafeUtility.SizeOf() != m_Stride) + throw new ArgumentNullException(); + + if (length <= 0 || source.Length == 0) + return; + + if (sourceIndex >= source.Length || sourceIndex < 0 || destIndex >= m_Count || destIndex < 0 || + sourceIndex + length > source.Length || destIndex + length > m_Count) + throw new ArgumentOutOfRangeException(); + + void* sourceAddress = (byte*)source.GetUnsafePtr() + sourceIndex * m_Stride; + void* destAddress = AddressOfElement(destIndex); + UnsafeUtility.MemCpy(destAddress, sourceAddress, length * m_Stride); + } + + public void CopyFrom(T[] source, int sourceIndex, int destIndex, int length) + { + if (source == null || !isCreated) + throw new ArgumentNullException(); + + if (length <= 0 || source.Length == 0) + return; + + if (sourceIndex < 0 || destIndex < 0 || + sourceIndex + length > source.Length || destIndex + length > m_Count) + throw new ArgumentOutOfRangeException(); + + // pin the managed array and get its address: + ulong sourceHandle; + void* sourceAddress = UnsafeUtility.PinGCArrayAndGetDataAddress(source, out sourceHandle); + void* destAddress = UnsafeUtility.AddressOf(ref UnsafeUtility.ArrayElementAsRef(m_AlignedPtr, destIndex)); + UnsafeUtility.MemCpy(destAddress, sourceAddress, length * m_Stride); + + // unpin the managed array: + UnsafeUtility.ReleaseGCObject(sourceHandle); } public void CopyReplicate(T value, int destIndex, int length) @@ -301,9 +491,53 @@ namespace Obi public void Add(T item) { EnsureCapacity(m_Count + 1); + computeBufferDirty = true; this[m_Count++] = item; } + public void AddReplicate(T value, int times) + { + int appendAt = m_Count; + ResizeUninitialized(m_Count + times); + CopyReplicate(value, appendAt, times); + } + + public void AddRange(T[] array) + { + AddRange(array, array.Length); + } + + public void AddRange(T[] array, int length) + { + AddRange(array, 0, length); + } + + public void AddRange(T[] array, int start, int length) + { + int appendAt = m_Count; + ResizeUninitialized(m_Count + length); + CopyFrom(array, start, appendAt, length); + } + + public void AddRange(ObiNativeList array, int length) + { + int appendAt = m_Count; + ResizeUninitialized(m_Count + length); + CopyFrom(array, 0, appendAt, length); + } + + public void AddRange(ObiNativeList array, int start, int length) + { + int appendAt = m_Count; + ResizeUninitialized(m_Count + length); + CopyFrom(array, start, appendAt, length); + } + + public void AddRange(ObiNativeList array) + { + AddRange(array, array.count); + } + public void AddRange(IEnumerable enumerable) { ICollection collection = enumerable as ICollection; @@ -351,7 +585,9 @@ namespace Obi { newCount = Mathf.Max(0, newCount); bool realloc = EnsureCapacity(newCount); + m_Count = newCount; + return realloc; } @@ -389,7 +625,25 @@ namespace Obi unsafe { if (isCreated) + { UnsafeUtility.MemClear(m_AlignedPtr, count * m_Stride); + + computeBufferDirty = true; + } + } + } + + public void WipeToValue(T value) + { + unsafe + { + if (isCreated) + { + void* sourceAddress = UnsafeUtility.AddressOf(ref value); + UnsafeUtility.MemCpyReplicate(m_AlignedPtr, sourceAddress, m_Stride, count); + + computeBufferDirty = true; + } } } @@ -411,10 +665,14 @@ namespace Obi public void* AddressOfElement(int index) { - // UnsafeUtility.AddressOf(ref UnsafeUtilityEx.ArrayElementAsRef(m_AlignedPtr, m_Count)); return (void*) ((byte*)m_AlignedPtr + m_Stride * index); } + public NativeReference GetCountReference(Allocator alloc) + { + return new NativeReference(m_Count, alloc); + } + public IntPtr GetIntPtr() { if (isCreated) diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs index 32d189542..64cffb4d9 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs @@ -6,11 +6,18 @@ namespace Obi [Serializable] public class ObiNativeMatrix4x4List : ObiNativeList { + public ObiNativeMatrix4x4List() { } // TODO: WTF???? why does this prevent a crash? public ObiNativeMatrix4x4List(int capacity = 8, int alignment = 16) : base(capacity, alignment) { for (int i = 0; i < capacity; ++i) this[i] = Matrix4x4.identity; } + + public ObiNativeMatrix4x4List(int capacity, int alignment, Matrix4x4 defaultValue) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = defaultValue; + } } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta index 8e6aebecc..c90054257 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f6b7295a6ebb4475fb050c4c5b3770cc +guid: 57e079b439b8f4d71966919ca4fa4838 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs new file mode 100644 index 000000000..542f40f3a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeUIntList : ObiNativeList + { + + public ObiNativeUIntList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = 0; + } + + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs.meta new file mode 100644 index 000000000..b6f26ce34 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cee276900c5ce412aafe4e23112537eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ObiList.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ObiList.cs index 0a44ef0d7..6c7b86aa2 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ObiList.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/ObiList.cs @@ -110,7 +110,7 @@ namespace Obi EnsureCapacity(++count); - for (int i = count-1; i > index; ++i) + for (int i = count-1; i > index; --i) { data[i] = data[i-1]; } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs index d165b565c..72245ed7e 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs @@ -6,11 +6,12 @@ namespace Obi [StructLayout(LayoutKind.Sequential, Size = 64)] public struct QueryResult { - public Vector4 simplexBary; /**< Barycentric coords of nearest point in simplex */ - public Vector4 queryPoint; /**< Nearest point in query shape*/ - public Vector4 normal; /**< Closest direction between simplex and query shape. */ - public float distance; /**< Distance between simplex and query shape.*/ - public int simplexIndex; /**< Index of the simplex in the solver.*/ - public int queryIndex; /**< Index of the query that spawned this result.*/ + public Vector4 simplexBary; /**< Barycentric coords of nearest point in simplex */ + public Vector4 queryPoint; /**< Nearest point in query shape*/ + public Vector4 normal; /**< Closest direction between simplex and query shape. */ + public float distance; /**< Distance between simplex and query shape.*/ + public float distanceAlongRay; /**< For ray queries, distance along the ray.*/ + public int simplexIndex; /**< Index of the simplex in the solver.*/ + public int queryIndex; /**< Index of the query that spawned this result.*/ } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid.meta new file mode 100644 index 000000000..c9ad98ff6 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c4a05fed09dd4e9e9d346fa3f1ccd55 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs new file mode 100644 index 000000000..5b92932f2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + public class RegularGrid + { + private Dictionary> gridMap = new Dictionary>(); + private float cellSize; + private Func getPosition; + + public RegularGrid(float cellSize, Func getPosition) + { + this.cellSize = cellSize; + + if (getPosition != null) + this.getPosition = getPosition; + else + getPosition = (x) => { return Vector3.zero; }; + } + + public Vector3Int GetCellCoords(Vector3 pos) + { + return new Vector3Int(Mathf.FloorToInt(pos.x / cellSize), + Mathf.FloorToInt(pos.y / cellSize), + Mathf.FloorToInt(pos.z / cellSize)); + } + + public void AddElement(T elm) + { + var coords = GetCellCoords(getPosition(elm)); + if (gridMap.TryGetValue(coords, out List cell)) + cell.Add(elm); + else + gridMap[coords] = new List { elm }; + } + + public bool RemoveElement(T elm) + { + var coords = GetCellCoords(getPosition(elm)); + if (gridMap.TryGetValue(coords, out List cell)) + { + return cell.Remove(elm); + } + return false; + } + + public IEnumerable GetNeighborsEnumerator(T elm) + { + // if cells are infinitesimaly small, + // elements should have no neighbors. + if (cellSize < ObiUtils.epsilon) + yield break; + + var position = getPosition(elm); + var coords = GetCellCoords(position); + List cell; + + for (int x = -1; x <= 1; ++x) + for (int y = -1; y <= 1; ++y) + for (int z = -1; z <= 1; ++z) + { + if (gridMap.TryGetValue(coords + new Vector3Int(x,y,z), out cell)) + { + foreach(T n in cell) + { + if (n.Equals(elm)) + continue; + + float dist = Vector3.Distance(position, getPosition(n)); + if (dist <= cellSize) + yield return n; + } + } + } + } + + // TODO: single call passing position and element to ignore. + public IEnumerable GetNeighborsEnumerator(Vector3 position) + { + // if cells are infinitesimaly small, + // elements should have no neighbors. + if (cellSize < ObiUtils.epsilon) + yield break; + + var coords = GetCellCoords(position); + List cell; + + for (int x = -1; x <= 1; ++x) + for (int y = -1; y <= 1; ++y) + for (int z = -1; z <= 1; ++z) + { + if (gridMap.TryGetValue(coords + new Vector3Int(x, y, z), out cell)) + { + foreach (T n in cell) + { + float dist = Vector3.Distance(position, getPosition(n)); + if (dist <= cellSize) + yield return n; + } + } + } + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs.meta new file mode 100644 index 000000000..96fcea3bc --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9506e58093a7c491f944e8e74529bf74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/SimplexCounts.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/SimplexCounts.cs index c9b8e2be0..f2adcf1e4 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/SimplexCounts.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/SimplexCounts.cs @@ -24,21 +24,20 @@ namespace Obi public int GetSimplexStartAndSize(int index, out int size) { - if (index < pointCount) + if (index < triangleCount) { - size = 1; - return index; + size = 3; + return index * 3; } - else if (index < pointCount + edgeCount) + else if (index < triangleCount + edgeCount) { size = 2; - return pointCount + (index - pointCount) * 2; + return triangleCount * 3 + (index - triangleCount) * 2; } else if (index < simplexCount) { - size = 3; - int triStart = pointCount + edgeCount * 2; - return triStart + (index - pointCount - edgeCount) * 3; + size = 1; + return triangleCount * 3 + edgeCount * 2 + (index - triangleCount - edgeCount); } size = 0; return 0; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/VInt4.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/VInt4.cs index 49a11bdf7..c0f3bc17e 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/VInt4.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/VInt4.cs @@ -1,8 +1,11 @@ -using UnityEngine; -using System; -using System.Collections; +using System; using System.Runtime.InteropServices; +#if (OBI_MATHEMATICS) +using Unity.Mathematics; +#endif + + namespace Obi { [Serializable] @@ -29,5 +32,10 @@ namespace Obi this.z = x; this.w = x; } + +#if (OBI_MATHEMATICS) + public static implicit operator VInt4(int4 i) => new VInt4(i.x, i.y, i.z, i.w); + public static implicit operator int4(VInt4 i) => new int4(i.x, i.y, i.z, i.w); +#endif } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs index c8224bfe9..5caa44552 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs @@ -80,7 +80,7 @@ namespace Obi }; public readonly static Vector3Int[] faceNeighborhood = -{ + { new Vector3Int(-1,0,0), new Vector3Int(1,0,0), new Vector3Int(0,-1,0), @@ -226,15 +226,15 @@ namespace Obi } - public IEnumerator Voxelize(Matrix4x4 transform, bool generateTriangleIndices = false) + public IEnumerator Voxelize(Matrix4x4 transform, Vector3Int axisMask, bool generateTriangleIndices = false) { voxelSize = Mathf.Max(0.0001f, voxelSize); var xfBounds = input.bounds.Transform(transform); // Calculate min and max voxels, adding a 1-voxel margin. - origin = GetPointVoxel(xfBounds.min) - new Vector3Int(1, 1, 1); - Vector3Int max = GetPointVoxel(xfBounds.max) + new Vector3Int(1, 1, 1); + origin = GetPointVoxel(Vector3.Scale(xfBounds.min, axisMask)) - axisMask; + Vector3Int max = GetPointVoxel(Vector3.Scale(xfBounds.max, axisMask)) + axisMask; resolution = new Vector3Int(max.x - origin.x + 1, max.y - origin.y + 1, max.z - origin.z + 1); @@ -263,9 +263,9 @@ namespace Obi // Generate surface voxels: for (int i = 0; i < triIndices.Length; i += 3) { - Vector3 v1 = transform.MultiplyPoint3x4(vertices[triIndices[i]]); - Vector3 v2 = transform.MultiplyPoint3x4(vertices[triIndices[i + 1]]); - Vector3 v3 = transform.MultiplyPoint3x4(vertices[triIndices[i + 2]]); + Vector3 v1 = Vector3.Scale(transform.MultiplyPoint3x4(vertices[triIndices[i]]), axisMask); + Vector3 v2 = Vector3.Scale(transform.MultiplyPoint3x4(vertices[triIndices[i + 1]]), axisMask); + Vector3 v3 = Vector3.Scale(transform.MultiplyPoint3x4(vertices[triIndices[i + 2]]), axisMask); Bounds triBounds = GetTriangleBounds(v1, v2, v3); @@ -281,6 +281,7 @@ namespace Obi yield return fillCoroutine.Current; } + // Ensures boundary is only one voxel thick. public void BoundaryThinning() { for (int x = 0; x < resolution.x; ++x) @@ -308,6 +309,212 @@ namespace Obi } } + // Ensures boundary voxels are 2D. + public void MakeBoundary2D() + { + for (int x = 0; x < resolution.x; ++x) + for (int y = 0; y < resolution.y; ++y) + for (int z = 0; z < resolution.z; ++z) + if (this[x, y, z] == Voxel.Boundary) + this[x, y, z] = Voxel.Inside; + + for (int x = 0; x < resolution.x; ++x) + for (int y = 0; y < resolution.y; ++y) + for (int z = 0; z < resolution.z; ++z) + { + int sum = 0; + for (int j = 0; j < faceNeighborhood.Length; ++j) + { + var index = faceNeighborhood[j]; + if (VoxelExists(index.x + x, index.y + y, index.z + z) && this[index.x + x, index.y + y, index.z + z] != Voxel.Outside) + { + sum++; + } + } + + if (sum <= 3 && this[x, y, z] == Voxel.Inside) + this[x, y, z] = Voxel.Boundary; + } + } + + public void CreateMesh(ref Mesh mesh, int smoothingIterations) + { + if (mesh == null) + mesh = new Mesh(); + + mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; + mesh.Clear(); + List vertices = new List(); + List vertices2 = new List(); + List tris = new List(); + vertices.Clear(); + vertices2.Clear(); + tris.Clear(); + + int[] vtxIndex = new int[voxelCount]; + for (int i = 0; i < vtxIndex.Length; ++i) + vtxIndex[i] = -1; + + // create vertices: + for (int x = 0; x < resolution.x; ++x) + for (int y = 0; y < resolution.y; ++y) + for (int z = 0; z < resolution.z; ++z) + if (this[x, y, z] == Voxel.Boundary) + { + vtxIndex[GetVoxelIndex(x, y, z)] = vertices.Count; + var vtx = new Vector3(Origin.x + x + 0.5f, Origin.y + y + 0.5f, Origin.z + z + 0.5f) * voxelSize; + vertices.Add(vtx); + vertices2.Add(vtx); + } + + List inputVertices = vertices; + List outputVertices = vertices2; + for (int i = 0; i < smoothingIterations; ++i) + { + for (int x = 0; x < resolution.x; ++x) + for (int y = 0; y < resolution.y; ++y) + for (int z = 0; z < resolution.z; ++z) + if (this[x, y, z] == Voxel.Boundary) + { + Vector3 avg = Vector3.zero; + + int count = 0; + for (int j = 0; j < faceNeighborhood.Length; ++j) + { + var index = faceNeighborhood[j]; + if (VoxelExists(index.x + x, index.y + y, index.z + z) && this[index.x + x, index.y + y, index.z + z] == Voxel.Boundary) + { + avg += inputVertices[vtxIndex[GetVoxelIndex(index.x + x, index.y + y, index.z + z)]]; + count++; + } + } + + if (count > 0) + outputVertices[vtxIndex[GetVoxelIndex(x, y, z)]] = avg / count; + } + + var aux = inputVertices; + inputVertices = outputVertices; + outputVertices = aux; + } + + // triangulate + for (int x = 0; x < resolution.x; ++x) + for (int y = 0; y < resolution.y; ++y) + for (int z = 0; z < resolution.z; ++z) + if (this[x, y, z] == Voxel.Boundary) + { + int x0y0z0 = GetVoxelIndex(x, y, z); + + int x1y0z0 = VoxelExists(x + 1, y, z) ? GetVoxelIndex(x+1, y, z) : -1; + int x1y1z0 = VoxelExists(x + 1, y + 1, z) ? GetVoxelIndex(x+1, y+1, z) : -1; + int x0y1z0 = VoxelExists(x, y + 1, z) ? GetVoxelIndex(x, y+1, z) : -1; + + int x0y0z1 = VoxelExists(x, y, z + 1) ? GetVoxelIndex(x, y , z + 1) : -1; + int x0y1z1 = VoxelExists(x, y + 1, z + 1) ? GetVoxelIndex(x, y + 1, z + 1) : -1; + int x1y0z1 = VoxelExists(x + 1, y, z + 1) ? GetVoxelIndex(x+1, y, z + 1) : -1; + + int x1y1z1 = VoxelExists(x + 1, y + 1, z + 1) ? GetVoxelIndex(x + 1, y + 1, z + 1) : -1; + + // XY plane + if (x1y0z0 >= 0 && x1y1z0 >= 0 && x0y1z0 >= 0 && + voxels[x1y0z0] == Voxel.Boundary && + voxels[x1y1z0] == Voxel.Boundary && + voxels[x0y1z0] == Voxel.Boundary) + { + if (x0y1z1 < 0 || voxels[x0y1z1] == Voxel.Outside || + x0y0z1 < 0 || voxels[x0y0z1] == Voxel.Outside || + x1y0z1 < 0 || voxels[x1y0z1] == Voxel.Outside || + x1y1z1 < 0 || voxels[x1y1z1] == Voxel.Outside) + { + tris.Add(vtxIndex[x0y0z0]); + tris.Add(vtxIndex[x1y0z0]); + tris.Add(vtxIndex[x0y1z0]); + + tris.Add(vtxIndex[x0y1z0]); + tris.Add(vtxIndex[x1y0z0]); + tris.Add(vtxIndex[x1y1z0]); + } + else + { + tris.Add(vtxIndex[x1y0z0]); + tris.Add(vtxIndex[x0y0z0]); + tris.Add(vtxIndex[x0y1z0]); + + tris.Add(vtxIndex[x1y0z0]); + tris.Add(vtxIndex[x0y1z0]); + tris.Add(vtxIndex[x1y1z0]); + } + } + + // XZ plane + if (x1y0z0 >= 0 && x1y0z1 >= 0 && x0y0z1 >= 0 && + voxels[x1y0z0] == Voxel.Boundary && + voxels[x1y0z1] == Voxel.Boundary && + voxels[x0y0z1] == Voxel.Boundary) + { + if (x0y1z0 < 0 || voxels[x0y1z0] == Voxel.Outside || + x0y1z1 < 0 || voxels[x0y1z1] == Voxel.Outside || + x1y1z0 < 0 || voxels[x1y1z0] == Voxel.Outside || + x1y1z1 < 0 || voxels[x1y1z1] == Voxel.Outside) + { + tris.Add(vtxIndex[x1y0z0]); + tris.Add(vtxIndex[x0y0z0]); + tris.Add(vtxIndex[x0y0z1]); + + tris.Add(vtxIndex[x1y0z0]); + tris.Add(vtxIndex[x0y0z1]); + tris.Add(vtxIndex[x1y0z1]); + } + else + { + tris.Add(vtxIndex[x0y0z0]); + tris.Add(vtxIndex[x1y0z0]); + tris.Add(vtxIndex[x0y0z1]); + + tris.Add(vtxIndex[x0y0z1]); + tris.Add(vtxIndex[x1y0z0]); + tris.Add(vtxIndex[x1y0z1]); + } + } + + // XY plane + if (x0y0z1 >= 0 && x0y1z1 >= 0 && x0y1z0 >= 0 && + voxels[x0y0z1] == Voxel.Boundary && + voxels[x0y1z1] == Voxel.Boundary && + voxels[x0y1z0] == Voxel.Boundary) + { + if (x1y0z0 < 0 || voxels[x1y0z0] == Voxel.Outside || + x1y0z1 < 0 || voxels[x1y0z1] == Voxel.Outside || + x1y1z0 < 0 || voxels[x1y1z0] == Voxel.Outside || + x1y1z1 < 0 || voxels[x1y1z1] == Voxel.Outside) + { + tris.Add(vtxIndex[x0y0z1]); + tris.Add(vtxIndex[x0y0z0]); + tris.Add(vtxIndex[x0y1z0]); + + tris.Add(vtxIndex[x0y0z1]); + tris.Add(vtxIndex[x0y1z0]); + tris.Add(vtxIndex[x0y1z1]); + } + else + { + tris.Add(vtxIndex[x0y0z0]); + tris.Add(vtxIndex[x0y0z1]); + tris.Add(vtxIndex[x0y1z0]); + + tris.Add(vtxIndex[x0y1z0]); + tris.Add(vtxIndex[x0y0z1]); + tris.Add(vtxIndex[x0y1z1]); + } + } + } + + mesh.SetVertices(outputVertices); + mesh.SetIndices(tris, MeshTopology.Triangles, 0); + mesh.RecalculateNormals(); + } + private IEnumerator FloodFill() { Queue queue = new Queue(); @@ -424,6 +631,5 @@ namespace Obi return !(Mathf.Max(-maxP, minP) > r); } - } -} \ No newline at end of file +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs index 8484fbfd8..dd727dc36 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System.Collections.Generic; +using System.Collections; using UnityEngine; namespace Obi @@ -9,7 +10,7 @@ namespace Obi */ public class VoxelDistanceField { - public Vector3Int[,,] distanceField; // for each coordinate, stores coordinates of closest surface voxel. + public Vector3[,,] distanceField; // for each coordinate, stores coordinates of closest surface voxel. private MeshVoxelizer voxelizer; @@ -18,115 +19,159 @@ namespace Obi this.voxelizer = voxelizer; } - public float SampleUnfiltered(int x, int y, int z) + public Vector4 SampleUnfiltered(int x, int y, int z) { - if (!voxelizer.VoxelExists(x, y, z)) return float.PositiveInfinity; + x = Mathf.Clamp(x, 0, voxelizer.resolution.x - 1); + y = Mathf.Clamp(y, 0, voxelizer.resolution.y - 1); + z = Mathf.Clamp(z, 0, voxelizer.resolution.z - 1); - float dist = Vector3.Distance(voxelizer.GetVoxelCenter(distanceField[x, y, z]), - voxelizer.GetVoxelCenter(new Vector3Int(x, y, z))); + var grad = distanceField[x, y, z]; + float dist = grad.magnitude; + grad.Normalize(); - if (voxelizer[x, y, z] == MeshVoxelizer.Voxel.Inside) - return -dist; - return dist; + return new Vector4(grad.x, grad.y, grad.z, -dist); } - public Vector4 SampleFiltered(float x, float y, float z) + public Vector4 SampleFiltered(float x, float y, float z, Vector3Int axisMask) { var pos = new Vector3(x, y, z); // clamp position inside the distance field: - var min = voxelizer.GetVoxelCenter(new Vector3Int(0, 0, 0)); + var min = voxelizer.GetVoxelCenter(new Vector3Int(0, 0, 0)); var max = voxelizer.GetVoxelCenter(new Vector3Int(voxelizer.resolution.x - 1, voxelizer.resolution.y - 1, voxelizer.resolution.z - 1)); - pos.x = Mathf.Clamp(pos.x, min.x, max.x - voxelizer.voxelSize * 0.05f); - pos.y = Mathf.Clamp(pos.y, min.y, max.y - voxelizer.voxelSize * 0.05f); - pos.z = Mathf.Clamp(pos.z, min.z, max.z - voxelizer.voxelSize * 0.05f); - - var voxel = voxelizer.GetPointVoxel(pos - Vector3.one * voxelizer.voxelSize * 0.5f) - voxelizer.Origin; + pos.x = Mathf.Clamp(pos.x, min.x, max.x); + pos.y = Mathf.Clamp(pos.y, min.y, max.y); + pos.z = Mathf.Clamp(pos.z, min.z, max.z); + var voxel = voxelizer.GetPointVoxel(pos - (Vector3)axisMask * voxelizer.voxelSize * 0.5f) - voxelizer.Origin; var voxelCenter = voxelizer.GetVoxelCenter(voxel); - var norm = (pos - voxelCenter) / voxelizer.voxelSize; + var norm = Vector3.Scale((pos - voxelCenter) / voxelizer.voxelSize, axisMask); - float xz00 = SampleUnfiltered(voxel.x, voxel.y, voxel.z); - float xz01 = SampleUnfiltered(voxel.x, voxel.y, voxel.z + 1); - float xz10 = SampleUnfiltered(voxel.x + 1, voxel.y, voxel.z); - float xz11 = SampleUnfiltered(voxel.x + 1, voxel.y, voxel.z + 1); + var xz00 = SampleUnfiltered(voxel.x, voxel.y, voxel.z); + var xz01 = SampleUnfiltered(voxel.x, voxel.y, voxel.z + 1); + var xz10 = SampleUnfiltered(voxel.x + 1, voxel.y, voxel.z); + var xz11 = SampleUnfiltered(voxel.x + 1, voxel.y, voxel.z + 1); - float yz00 = SampleUnfiltered(voxel.x, voxel.y + 1, voxel.z); - float yz01 = SampleUnfiltered(voxel.x, voxel.y + 1, voxel.z + 1); - float yz10 = SampleUnfiltered(voxel.x + 1, voxel.y + 1, voxel.z); - float yz11 = SampleUnfiltered(voxel.x + 1, voxel.y + 1, voxel.z + 1); + var yz00 = SampleUnfiltered(voxel.x, voxel.y + 1, voxel.z); + var yz01 = SampleUnfiltered(voxel.x, voxel.y + 1, voxel.z + 1); + var yz10 = SampleUnfiltered(voxel.x + 1, voxel.y + 1, voxel.z); + var yz11 = SampleUnfiltered(voxel.x + 1, voxel.y + 1, voxel.z + 1); - float X1 = Mathf.Lerp(xz00, xz10, norm.x); - float X2 = Mathf.Lerp(xz01, xz11, norm.x); - float X3 = Mathf.Lerp(yz00, yz10, norm.x); - float X4 = Mathf.Lerp(yz01, yz11, norm.x); + var X1 = Vector4.Lerp(xz00, xz10, norm.x); + var X2 = Vector4.Lerp(xz01, xz11, norm.x); + var X3 = Vector4.Lerp(yz00, yz10, norm.x); + var X4 = Vector4.Lerp(yz01, yz11, norm.x); - float Y1 = Mathf.Lerp(X1, X2, norm.z); - float Y2 = Mathf.Lerp(X3, X4, norm.z); + var Y1 = Vector4.Lerp(X1, X2, norm.z); + var Y2 = Vector4.Lerp(X3, X4, norm.z); - float R = Mathf.Lerp(Mathf.Lerp(xz10, xz11, norm.z), Mathf.Lerp(yz10, yz11, norm.z), norm.y); - float L = Mathf.Lerp(Mathf.Lerp(xz00, xz01, norm.z), Mathf.Lerp(yz00, yz01, norm.z), norm.y); - - float F = Mathf.Lerp(X2, X4, norm.y); - float B = Mathf.Lerp(X1, X3, norm.y); - - return new Vector4((R - L) / voxelizer.voxelSize, - (Y2 - Y1) / voxelizer.voxelSize, - (F - B) / voxelizer.voxelSize, - Mathf.Lerp(Y1, Y2, norm.y)); + return Vector4.Lerp(Y1, Y2, norm.y); } - public IEnumerator JumpFlood() + public void Smooth() { + // create output buffer for ping-pong. + Vector3[,,] smoothed = new Vector3[voxelizer.resolution.x, + voxelizer.resolution.y, + voxelizer.resolution.z]; - // create and initialize distance field: - distanceField = new Vector3Int[voxelizer.resolution.x, - voxelizer.resolution.y, - voxelizer.resolution.z]; - - // create auxiliar buffer for ping-pong. - Vector3Int[,,] auxBuffer = new Vector3Int[voxelizer.resolution.x, - voxelizer.resolution.y, - voxelizer.resolution.z]; - - // initialize distance field: for (int x = 0; x < distanceField.GetLength(0); ++x) for (int y = 0; y < distanceField.GetLength(1); ++y) for (int z = 0; z < distanceField.GetLength(2); ++z) { - if (voxelizer[x, y, z] == MeshVoxelizer.Voxel.Boundary) - distanceField[x, y, z] = new Vector3Int(x, y, z); + if (voxelizer[x, y, z] != MeshVoxelizer.Voxel.Outside) + { + var p = new Vector3Int(x, y, z); + Vector3 df = distanceField[x, y, z]; + int count = 1; + foreach (var o in MeshVoxelizer.faceNeighborhood) + { + // offset voxel to get neighbor: + var n = p + o; + if (voxelizer.VoxelExists(n.x, n.y, n.z) && voxelizer[n.x, n.y, n.z] != MeshVoxelizer.Voxel.Outside) + { + df += distanceField[n.x, n.y, n.z]; + count++; + } + } + df /= count; + smoothed[x, y, z] = df; + } + } + + distanceField = smoothed; + } + + private void CalculateGradientsAndDistances(Vector3Int[,,] buffer1) + { + distanceField = new Vector3[voxelizer.resolution.x, + voxelizer.resolution.y, + voxelizer.resolution.z]; + + for (int x = 0; x < buffer1.GetLength(0); ++x) + for (int y = 0; y < buffer1.GetLength(1); ++y) + for (int z = 0; z < buffer1.GetLength(2); ++z) + { + if (voxelizer[x, y, z] != MeshVoxelizer.Voxel.Outside) + { + distanceField[x, y, z] = voxelizer.GetVoxelCenter(buffer1[x, y, z]) - + voxelizer.GetVoxelCenter(new Vector3Int(x, y, z)); + } else - distanceField[x, y, z] = new Vector3Int(-1, -1, -1); + distanceField[x, y, z] = Vector3.zero; + } + } + + public IEnumerator JumpFlood() + { + // create two buffers for ping-ponging: + Vector3Int[,,] buffer1 = new Vector3Int[voxelizer.resolution.x, + voxelizer.resolution.y, + voxelizer.resolution.z]; + + Vector3Int[,,] buffer2 = new Vector3Int[voxelizer.resolution.x, + voxelizer.resolution.y, + voxelizer.resolution.z]; + + // initialize distance field: + for (int x = 0; x < buffer1.GetLength(0); ++x) + for (int y = 0; y < buffer1.GetLength(1); ++y) + for (int z = 0; z < buffer1.GetLength(2); ++z) + { + if (voxelizer[x, y, z] == MeshVoxelizer.Voxel.Outside) + buffer1[x, y, z] = new Vector3Int(x, y, z); + else + buffer1[x, y, z] = new Vector3Int(-1, -1, -1); } // calculate the maximum size of the buffer: - int size = Mathf.Max(distanceField.GetLength(0), - distanceField.GetLength(1), - distanceField.GetLength(2)); + int size = Mathf.Max(buffer1.GetLength(0), + buffer1.GetLength(1), + buffer1.GetLength(2)); int step = (int)(size / 2.0f); - yield return new CoroutineJob.ProgressInfo("Generating voxel distance field...",0); + yield return new CoroutineJob.ProgressInfo("Generating voxel distance field...", 0); - float numPasses = (int) Mathf.Log(size, 2); + float numPasses = (int)Mathf.Log(size, 2); int i = 0; // jump flood passes: while (step >= 1) { - JumpFloodPass(step, distanceField, auxBuffer); + JumpFloodPass(step, buffer1, buffer2); // halve step: step /= 2; // swap buffers: - Vector3Int[,,] temp = distanceField; - distanceField = auxBuffer; - auxBuffer = temp; + Vector3Int[,,] temp = buffer1; + buffer1 = buffer2; + buffer2 = temp; yield return new CoroutineJob.ProgressInfo("Generating voxel distance field...", ++i / numPasses); } + CalculateGradientsAndDistances(buffer1); } private void JumpFloodPass(int stride, Vector3Int[,,] input, Vector3Int[,,] output) @@ -155,34 +200,30 @@ namespace Obi dist = (s - p).sqrMagnitude; // for each neighbor voxel: - for (int nx = -1; nx <= 1; ++nx) - for (int ny = -1; ny <= 1; ++ny) - for (int nz = -1; nz <= 1; ++nz) + foreach (var o in MeshVoxelizer.fullNeighborhood) + { + // offset voxel to get neighbor: + var n = p + o * stride; + + if (voxelizer.VoxelExists(n.x, n.y, n.z)) + { + // neighbors' closest seed. + Vector3Int nc = input[n.x, n.y, n.z]; + + if (nc.x >= 0) { - // neighbor's position: - int px = x + nx * stride; - int py = y + ny * stride; - int pz = z + nz * stride; + // distance to neighbor's closest seed: + float newDist = (nc - p).sqrMagnitude; - if (voxelizer.VoxelExists(px,py,pz)) + // if the distance to the neighbor's closest seed is smaller than the distance to ours: + if (newDist < dist) { - // neighbors' closest seed. - Vector3Int n = input[px,py,pz]; - - if (n.x >= 0) - { - // distance to neighbor's closest seed: - float newDist = (n - p).sqrMagnitude; - - // if the distance to the neighbor's closest seed is smaller than the distance to ours: - if (newDist < dist) - { - output[x, y, z] = n; - dist = newDist; - } - } + output[x, y, z] = nc; + dist = newDist; } } + } + } } } diff --git a/Assets/ThirdParty/Obi/Editor/Common/ObiEditorSettings.cs b/Assets/ThirdParty/Obi/Scripts/Common/ObiEditorSettings.cs similarity index 86% rename from Assets/ThirdParty/Obi/Editor/Common/ObiEditorSettings.cs rename to Assets/ThirdParty/Obi/Scripts/Common/ObiEditorSettings.cs index 94d9ce99d..1a48a23fb 100644 --- a/Assets/ThirdParty/Obi/Editor/Common/ObiEditorSettings.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/ObiEditorSettings.cs @@ -1,10 +1,12 @@ using UnityEngine; + +#if UNITY_EDITOR using UnityEditor; -using System.Collections; +#endif namespace Obi { - class ObiEditorSettings : ScriptableObject + public class ObiEditorSettings : ScriptableObject { public const string m_ObiEditorSettingsPath = "Assets/ObiEditorSettings.asset"; @@ -14,6 +16,7 @@ namespace Obi [SerializeField] private Color m_SelectedParticle; [SerializeField] private Color m_ActiveParticle; [SerializeField] private Gradient m_PropertyGradient; + [SerializeField] private bool m_ParticlePicking; public Color brushColor { @@ -39,8 +42,13 @@ namespace Obi { get { return m_PropertyGradient; } } + public bool sceneViewParticlePicking + { + get { return m_ParticlePicking; } + } - internal static ObiEditorSettings GetOrCreateSettings() +#if UNITY_EDITOR + public static ObiEditorSettings GetOrCreateSettings() { var settings = AssetDatabase.LoadAssetAtPath(m_ObiEditorSettingsPath); if (settings == null) @@ -52,6 +60,7 @@ namespace Obi settings.m_SelectedParticle = new Color32(243, 77, 43, 255); settings.m_ActiveParticle = new Color32(243, 243, 43, 255); settings.m_PropertyGradient = new Gradient(); + settings.m_ParticlePicking = true; // Populate the color keys at the relative time 0 and 1 (0 and 100%) var colorKey = new GradientColorKey[2]; @@ -75,9 +84,11 @@ namespace Obi return settings; } - internal static SerializedObject GetSerializedSettings() + + public static SerializedObject GetSerializedSettings() { return new SerializedObject(GetOrCreateSettings()); } +#endif } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Editor/Common/ObiEditorSettings.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/ObiEditorSettings.cs.meta similarity index 100% rename from Assets/ThirdParty/Obi/Editor/Common/ObiEditorSettings.cs.meta rename to Assets/ThirdParty/Obi/Scripts/Common/ObiEditorSettings.cs.meta diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches.meta new file mode 100644 index 000000000..3fd71cf29 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13ef5aa25fc194dda8d453b36a50e5d0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs new file mode 100644 index 000000000..7f8362043 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs @@ -0,0 +1,316 @@ +using UnityEngine; +using Unity.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace Obi +{ + public interface IMeshDataProvider + { + Mesh sourceMesh { get; } + uint meshInstances { get; } + + int vertexCount { get; } + int triangleCount { get; } + + void GetVertices(List vertices); + void GetNormals(List normals); + void GetTangents(List tangents); + void GetColors(List colors); + void GetUVs(int channel, List uvs); + + void GetTriangles(List triangles); + } + + public class MeshDataBatch + { + public struct MeshData + { + public int firstVertex; + public int vertexCount; + + public int firstTriangle; + public int triangleCount; + } + + private Dictionary meshToIndex; + + // per mesh data: + public ObiNativeList meshData; + + public ObiNativeList restPositions; + public ObiNativeList restNormals; + public ObiNativeList restTangents; + public ObiNativeList restColors; + public ObiNativeList uv; + public ObiNativeList uv2; + public ObiNativeList uv3; + public ObiNativeList uv4; + public ObiNativeList triangles; + + private List tempVertices; + private List tempNormals; + private List tempTangents; + private List tempColors; + private List tempUV; + private List tempUV2; + private List tempUV3; + private List tempUV4; + private List tempTriangles; + + public int Count { get { return meshData.count; } } + + public MeshDataBatch() + { + meshToIndex = new Dictionary(); + meshData = new ObiNativeList(); + + InitializeTempData(); + InitializeDynamicData(); + InitializeStaticData(); + } + + public void InitializeTempData() + { + tempVertices = new List(); + tempNormals = new List(); + tempTangents = new List(); + tempColors = new List(); + + tempUV = new List(); + tempUV2 = new List(); + tempUV3 = new List(); + tempUV4 = new List(); + tempTriangles = new List(); + } + + public void InitializeDynamicData() + { + if (restPositions == null) + restPositions = new ObiNativeList(); + + if (restNormals == null) + restNormals = new ObiNativeList(); + + if (restTangents == null) + restTangents = new ObiNativeList(); + + if (restColors == null) + restColors = new ObiNativeList(); + } + + public void InitializeStaticData() + { + if (uv == null) + uv = new ObiNativeList(); + + if (uv2 == null) + uv2 = new ObiNativeList(); + + if (uv3 == null) + uv3 = new ObiNativeList(); + + if (uv4 == null) + uv4 = new ObiNativeList(); + + if (triangles == null) + triangles = new ObiNativeList(); + } + + public void Dispose() + { + if (meshData != null) meshData.Dispose(); + DisposeOfTempData(); + DisposeOfDynamicData(); + DisposeOfStaticData(); + } + + public void DisposeOfTempData() + { + tempVertices = null; + tempNormals = null; + tempTangents = null; + tempColors = null; + + tempUV = null; + tempUV2 = null; + tempUV3 = null; + tempUV4 = null; + tempTriangles = null; + } + + public void DisposeOfDynamicData() + { + if (restPositions != null) restPositions.Dispose(); restPositions = null; + if (restNormals != null) restNormals.Dispose(); restNormals = null; + if (restTangents != null) restTangents.Dispose(); restTangents = null; + if (restColors != null) restColors.Dispose(); restColors = null; + } + + public void DisposeOfStaticData() + { + if (uv != null) uv.Dispose(); uv = null; + if (uv2 != null) uv2.Dispose(); uv2 = null; + if (uv3 != null) uv3.Dispose(); uv3 = null; + if (uv4 != null) uv4.Dispose(); uv4 = null; + if (triangles != null) triangles.Dispose(); triangles = null; + } + + public void Clear() + { + if (meshToIndex != null) meshToIndex.Clear(); + if (meshData != null) meshData.Clear(); + + if (restPositions != null) restPositions.Clear(); + if (restNormals != null) restNormals.Clear(); + if (restTangents != null) restTangents.Clear(); + if (restColors != null) restColors.Clear(); + if (uv != null) uv.Clear(); + if (uv2 != null) uv2.Clear(); + if (uv3 != null) uv3.Clear(); + if (uv4 != null) uv4.Clear(); + if (triangles != null) triangles.Clear(); + } + + public int AddMesh(IMeshDataProvider meshProvider) + { + if (!meshToIndex.TryGetValue(meshProvider.sourceMesh, out int index)) + { + index = meshData.count; + meshToIndex[meshProvider.sourceMesh] = index; + + meshProvider.GetVertices(tempVertices); + meshProvider.GetNormals(tempNormals); + meshProvider.GetTangents(tempTangents); + meshProvider.GetColors(tempColors); + + meshProvider.GetUVs(0, tempUV); + meshProvider.GetUVs(1, tempUV2); + meshProvider.GetUVs(2, tempUV3); + meshProvider.GetUVs(3, tempUV4); + + meshProvider.GetTriangles(tempTriangles); + + if (tempTangents.Count == 0) + tempTangents.AddRange(Enumerable.Repeat(Vector4.zero, tempVertices.Count)); + + if (tempColors.Count == 0) + tempColors.AddRange(Enumerable.Repeat(Color.white, tempVertices.Count)); + + if (tempUV.Count == 0) + tempUV.AddRange(Enumerable.Repeat(Vector2.zero, tempVertices.Count)); + + if (tempUV2.Count == 0) + tempUV2.AddRange(Enumerable.Repeat(Vector2.zero, tempVertices.Count)); + + if (tempUV3.Count == 0) + tempUV3.AddRange(Enumerable.Repeat(Vector2.zero, tempVertices.Count)); + + if (tempUV4.Count == 0) + tempUV4.AddRange(Enumerable.Repeat(Vector2.zero, tempVertices.Count)); + + meshData.Add(new MeshData + { + firstVertex = restPositions.count, + vertexCount = tempVertices.Count, + + firstTriangle = triangles.count, + triangleCount = tempTriangles.Count + }); + + restPositions.AddRange(tempVertices); + restNormals.AddRange(tempNormals); + restTangents.AddRange(tempTangents); + restColors.AddRange(tempColors); + uv.AddRange(tempUV); + uv2.AddRange(tempUV2); + uv3.AddRange(tempUV3); + uv4.AddRange(tempUV4); + triangles.AddRange(tempTriangles); + } + return index; + } + + public void PrepareForCompute() + { + meshData.AsComputeBuffer(); + restPositions.AsComputeBuffer(); + restNormals.AsComputeBuffer(); + restTangents.AsComputeBuffer(); + restColors.AsComputeBuffer(); + } + + public int GetVertexCount(int meshIndex) + { + return meshData[meshIndex].vertexCount; + } + + public int GetTriangleCount(int meshIndex) + { + return meshData[meshIndex].triangleCount; + } + + public NativeSlice GetVertices(int meshIndex) + { + int start = meshData[meshIndex].firstVertex; + int count = meshData[meshIndex].vertexCount; + return restPositions.AsNativeArray().Slice(start,count); + } + + public NativeSlice GetNormals(int meshIndex) + { + int start = meshData[meshIndex].firstVertex; + int count = meshData[meshIndex].vertexCount; + return restNormals.AsNativeArray().Slice(start, count); + } + + public NativeSlice GetTangents(int meshIndex) + { + int start = meshData[meshIndex].firstVertex; + int count = meshData[meshIndex].vertexCount; + return restTangents.AsNativeArray().Slice(start, count); + } + + public NativeSlice GetColors(int meshIndex) + { + int start = meshData[meshIndex].firstVertex; + int count = meshData[meshIndex].vertexCount; + return restColors.AsNativeArray().Slice(start, count); + } + + public NativeSlice GetUV(int meshIndex) + { + int start = meshData[meshIndex].firstVertex; + int count = meshData[meshIndex].vertexCount; + return uv.AsNativeArray().Slice(start, count); + } + + public NativeSlice GetUV2(int meshIndex) + { + int start = meshData[meshIndex].firstVertex; + int count = meshData[meshIndex].vertexCount; + return uv2.AsNativeArray().Slice(start, count); + } + + public NativeSlice GetUV3(int meshIndex) + { + int start = meshData[meshIndex].firstVertex; + int count = meshData[meshIndex].vertexCount; + return uv3.AsNativeArray().Slice(start, count); + } + + public NativeSlice GetUV4(int meshIndex) + { + int start = meshData[meshIndex].firstVertex; + int count = meshData[meshIndex].vertexCount; + return uv4.AsNativeArray().Slice(start, count); + } + + public NativeSlice GetTriangles(int meshIndex) + { + int start = meshData[meshIndex].firstTriangle; + int count = meshData[meshIndex].triangleCount; + return triangles.AsNativeArray().Slice(start, count); + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs.meta new file mode 100644 index 000000000..a116f658a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51631a4146e8e4501adcbe8ff6f039c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs new file mode 100644 index 000000000..a2c0337aa --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs @@ -0,0 +1,117 @@ + +using UnityEngine; + +namespace Obi +{ + public class SkeletonDataBatch + { + public struct SkeletonData + { + public int firstBone; + public int boneCount; + } + + // per skinMap data: + public ObiNativeList skeletonData; + public ObiNativeList world2Solver; + + // bone data: + public ObiNativeList bonePositions; + public ObiNativeList boneRotations; + public ObiNativeList boneScales; + + public int Count { get { return skeletonData.count; } } + + public SkeletonDataBatch() + { + skeletonData = new ObiNativeList(); + world2Solver = new ObiNativeList(); + + bonePositions = new ObiNativeList(); + boneRotations = new ObiNativeList(); + boneScales = new ObiNativeList(); + } + + public void Dispose() + { + skeletonData.Dispose(); + world2Solver.Dispose(); + + bonePositions.Dispose(); + boneRotations.Dispose(); + boneScales.Dispose(); + } + + public void Clear() + { + skeletonData.Clear(); + world2Solver.Clear(); + + bonePositions.Clear(); + boneRotations.Clear(); + boneScales.Clear(); + } + + public int AddSkeleton(Transform[] bones, Matrix4x4 worldToSolver) + { + var data = new SkeletonData + { + firstBone = bonePositions.count, + }; + + foreach (var bone in bones) + { + if (bone != null) + { + bonePositions.Add(bone.position); + boneRotations.Add(bone.rotation); + boneScales.Add(bone.localScale); + } + } + + data.boneCount = bonePositions.count; + + skeletonData.Add(data); + world2Solver.Add(worldToSolver); + + return skeletonData.count - 1; + } + + public void PrepareForCompute() + { + skeletonData.SafeAsComputeBuffer(); + world2Solver.SafeAsComputeBuffer(); + bonePositions.SafeAsComputeBuffer(); + boneRotations.SafeAsComputeBuffer(); + boneScales.SafeAsComputeBuffer(); + } + + public void SetBoneTransform(int index, int boneIndex, Transform transform) + { + if (transform != null) + { + var i = skeletonData[index].firstBone + boneIndex; + bonePositions[i] = transform.position; + boneScales[i] = transform.lossyScale; + boneRotations[i] = transform.rotation; + } + } + + public void UpdateBoneTransformsCompute() + { + bonePositions.Upload(); + boneScales.Upload(); + boneRotations.Upload(); + } + + public Matrix4x4 GetWorldToSolverTransform(int index) + { + return world2Solver[index]; + } + + public void SetWorldToSolverTransform(int index, Matrix4x4 trfm) + { + world2Solver[index] = trfm; + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs.meta new file mode 100644 index 000000000..cad0d32ba --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b609b47dfb88424c9ae3e32c64bfaeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs new file mode 100644 index 000000000..91f76b019 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using UnityEngine.Rendering; + +namespace Obi +{ + public interface ISurfaceChunkUser + { + uint usedChunkCount { get; } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs.meta new file mode 100644 index 000000000..ffcc1476e --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e544f8db79af4a6a91df85c5df0dee7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs new file mode 100644 index 000000000..3fc670692 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs @@ -0,0 +1,48 @@ + +namespace Obi +{ + public interface IActorRenderer + { + public ObiActor actor + { + get; + } + } + + public interface ObiActorRenderer : IActorRenderer, ObiRenderer where T : ObiActorRenderer + { + public void EnableRenderer() + { + actor.OnBlueprintLoaded += ObiActorRenderer_OnBlueprintLoaded; + actor.OnBlueprintUnloaded += ObiActorRenderer_OnBlueprintUnloaded; + + if (actor.isLoaded) + RegisterRenderer(actor.solver); + } + + public void DisableRenderer() + { + if (actor.isLoaded) + UnregisterRenderer(actor.solver); + + actor.OnBlueprintLoaded -= ObiActorRenderer_OnBlueprintLoaded; + actor.OnBlueprintUnloaded -= ObiActorRenderer_OnBlueprintUnloaded; + } + + public void SetRendererDirty(Oni.RenderingSystemType type) + { + if (actor != null) + actor.SetRenderingDirty(type); + } + + private void ObiActorRenderer_OnBlueprintLoaded(ObiActor act, ObiActorBlueprint blueprint) + { + RegisterRenderer(act.solver); + } + + protected void ObiActorRenderer_OnBlueprintUnloaded(ObiActor act, ObiActorBlueprint blueprint) + { + UnregisterRenderer(act.solver); + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs.meta new file mode 100644 index 000000000..8dd784516 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f86d1462578d497182bb58c20b89d42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs index 8f39af505..2f0344d66 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs @@ -37,7 +37,7 @@ namespace Obi public void OnEnable() { - material = GameObject.Instantiate(Resources.Load("ObiMaterials/DistanceFieldRendering")); + material = GameObject.Instantiate(Resources.Load("ObiMaterials/DistanceFields/DistanceFieldRendering")); material.hideFlags = HideFlags.HideAndDontSave; } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs new file mode 100644 index 000000000..93b906200 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs @@ -0,0 +1,96 @@ +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Unity.Profiling; +using UnityEngine; +using UnityEngine.Rendering; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct DiffuseParticleVertex + { + public Vector4 pos; + public Vector3 offset; + public Vector4 color; + public Vector4 velocity; + public Vector4 attributes; + } + + public class ObiFoamRenderSystem : RenderSystem + { + public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.FoamParticles; } + + public RendererSet renderers { get; } = new RendererSet(); + public bool isSetup => true; + + protected VertexAttributeDescriptor[] layout = + { + new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), + new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 4), // velocity + new VertexAttributeDescriptor(VertexAttribute.TexCoord1, VertexAttributeFormat.Float32, 4), // attributes + }; + + static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupSurfaceMeshing"); + static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("SurfaceMeshing"); + + protected HashSet cameras = new HashSet(); + protected MaterialPropertyBlock matProps; + + protected ObiSolver m_Solver; + public ProceduralRenderBatch renderBatch; + +#if (UNITY_2019_1_OR_NEWER) + System.Action renderCallback; +#endif + + // must be done before fluid meshing. + public uint tier + { + get { return 0; } + } + + public ObiFoamRenderSystem(ObiSolver solver) + { + m_Solver = solver; + matProps = new MaterialPropertyBlock(); + +#if (UNITY_2019_1_OR_NEWER) + renderCallback = new System.Action((cntxt, cam) => { RenderFromCamera(cam); }); + RenderPipelineManager.beginCameraRendering += renderCallback; +#endif + Camera.onPreCull += RenderFromCamera; + } + + public virtual void Dispose() + { + +#if (UNITY_2019_1_OR_NEWER) + RenderPipelineManager.beginCameraRendering -= renderCallback; +#endif + Camera.onPreCull -= RenderFromCamera; + + renderBatch.Dispose(); + cameras.Clear(); + } + + public void RenderFromCamera(Camera camera) + { + cameras.Add(camera); + } + + public virtual void Setup() + { + } + + public virtual void Step() + { + } + + public virtual void Render() + { + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs.meta new file mode 100644 index 000000000..7536fe664 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96d883432ef854a8598e264c73232bdc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs new file mode 100644 index 000000000..1977c446f --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs @@ -0,0 +1,151 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.Rendering; +using Unity.Collections; +using Unity.Profiling; +using System.Runtime.InteropServices; + +namespace Obi +{ + + public abstract class ObiInstancedParticleRenderSystem : RenderSystem + { + public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.InstancedParticles; } + + public RendererSet renderers { get; } = new RendererSet(); + public bool isSetup => activeParticles != null; + + + static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupParticleRendering"); + static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ParticleRendering"); + + protected ObiSolver m_Solver; + + protected List batchList = new List(); + + protected ObiNativeList activeParticles; + protected ObiNativeList rendererIndex; + protected ObiNativeList rendererData; + + protected ObiNativeList instanceTransforms; + protected ObiNativeList invInstanceTransforms; + protected ObiNativeList instanceColors; + + public ObiInstancedParticleRenderSystem(ObiSolver solver) + { + m_Solver = solver; + + activeParticles = new ObiNativeList(); + rendererIndex = new ObiNativeList(); + rendererData = new ObiNativeList(); + instanceTransforms = new ObiNativeList(); + invInstanceTransforms = new ObiNativeList(); + instanceColors = new ObiNativeList(); + } + + public virtual void Dispose() + { + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + + if (activeParticles != null) + activeParticles.Dispose(); + if (rendererData != null) + rendererData.Dispose(); + if (rendererIndex != null) + rendererIndex.Dispose(); + if (instanceTransforms != null) + instanceTransforms.Dispose(); + if (invInstanceTransforms != null) + invInstanceTransforms.Dispose(); + if (instanceColors != null) + instanceColors.Dispose(); + } + + protected virtual void Clear() + { + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + + activeParticles.Clear(); + rendererData.Clear(); + rendererIndex.Clear(); + instanceTransforms.Clear(); + invInstanceTransforms.Clear(); + instanceColors.Clear(); + } + + protected virtual void CreateBatches() + { + // generate batches: + for (int i = 0; i < renderers.Count; ++i) + { + renderers[i].renderParameters.layer = renderers[i].gameObject.layer; + + // Create multiple batches of at most maxInstancesPerBatch particles each: + int instanceCount = 0; + while (instanceCount < renderers[i].actor.particleCount) + { + var batch = new InstancedRenderBatch(i, renderers[i].mesh, renderers[i].material, renderers[i].renderParameters); + batch.firstInstance = instanceCount; + batch.instanceCount = Mathf.Min(renderers[i].actor.particleCount - instanceCount, Constants.maxInstancesPerBatch); + instanceCount += batch.instanceCount; + batchList.Add(batch); + } + } + + // sort batches: + batchList.Sort(); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + var renderer = renderers[batch.firstRenderer]; + int particlesSoFar = activeParticles.count; + + // add active particles here, respecting batch order: + activeParticles.AddRange(renderer.actor.solverIndices, batch.firstInstance, batch.instanceCount); + rendererIndex.AddReplicate(i, batch.instanceCount); + rendererData.Add(new ParticleRendererData(renderer.instanceColor, renderer.instanceScale)); + + batch.firstInstance = particlesSoFar; + } + + instanceTransforms.ResizeUninitialized(activeParticles.count); + invInstanceTransforms.ResizeUninitialized(activeParticles.count); + instanceColors.ResizeUninitialized(activeParticles.count); + } + + protected virtual void CloseBatches() + { + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(); + } + + public virtual void Setup() + { + using (m_SetupRenderMarker.Auto()) + { + Clear(); + + CreateBatches(); + + ObiUtils.MergeBatches(batchList); + + CloseBatches(); + } + } + + public virtual void Step() + { + } + + public virtual void Render() + { + } + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs.meta new file mode 100644 index 000000000..d62f80c8d --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd33018010abc46be9ac6cc091142ccf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs index 90be3a496..e76814594 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs @@ -11,80 +11,51 @@ namespace Obi [AddComponentMenu("Physics/Obi/Obi Instanced Particle Renderer", 1001)] [ExecuteInEditMode] [RequireComponent(typeof(ObiActor))] - public class ObiInstancedParticleRenderer : MonoBehaviour + public class ObiInstancedParticleRenderer : MonoBehaviour, ObiActorRenderer { - static ProfilerMarker m_DrawParticlesPerfMarker = new ProfilerMarker("DrawParticles"); - - public bool render = true; public Mesh mesh; public Material material; - public Vector3 instanceScale = Vector3.one; + public RenderBatchParams renderParameters = new RenderBatchParams(true); + public Color instanceColor = Color.white; + public float instanceScale = 1; - private List matrices = new List(); - private List colors = new List(); - private MaterialPropertyBlock mpb; + public ObiActor actor { get; private set; } - int meshesPerBatch = 0; - int batchCount; + void Awake() + { + actor = GetComponent(); + } public void OnEnable() { - GetComponent().OnInterpolate += DrawParticles; + ((ObiActorRenderer)this).EnableRenderer(); } public void OnDisable() { - GetComponent().OnInterpolate -= DrawParticles; + ((ObiActorRenderer)this).DisableRenderer(); } - void DrawParticles(ObiActor actor) + public void OnValidate() { - using (m_DrawParticlesPerfMarker.Auto()) + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.InstancedParticles); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) { - if (mesh == null || material == null || !render || !isActiveAndEnabled || !actor.isActiveAndEnabled || actor.solver == null) - { - return; - } +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstInstancedParticleRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: - ObiSolver solver = actor.solver; - - // figure out the size of our instance batches: - meshesPerBatch = Constants.maxInstancesPerBatch; - batchCount = actor.particleCount / meshesPerBatch + 1; - meshesPerBatch = Mathf.Min(meshesPerBatch, actor.particleCount); - - Vector4 basis1 = new Vector4(1, 0, 0, 0); - Vector4 basis2 = new Vector4(0, 1, 0, 0); - Vector4 basis3 = new Vector4(0, 0, 1, 0); - - //Convert particle data to mesh instances: - for (int i = 0; i < batchCount; i++) - { - - matrices.Clear(); - colors.Clear(); - mpb = new MaterialPropertyBlock(); - int limit = Mathf.Min((i + 1) * meshesPerBatch, actor.activeParticleCount); - - for (int j = i * meshesPerBatch; j < limit; ++j) - { - int solverIndex = actor.solverIndices[j]; - actor.GetParticleAnisotropy(solverIndex, ref basis1, ref basis2, ref basis3); - matrices.Add(Matrix4x4.TRS(actor.GetParticlePosition(solverIndex), - actor.GetParticleOrientation(solverIndex), - Vector3.Scale(new Vector3(basis1[3], basis2[3], basis3[3]), instanceScale))); - colors.Add(actor.GetParticleColor(solverIndex)); - } - - if (colors.Count > 0) - mpb.SetVectorArray("_Color", colors); - - // Send the meshes to be drawn: - Graphics.DrawMeshInstanced(mesh, 0, material, matrices, mpb); - } + if (SystemInfo.supportsComputeShaders) + return new ComputeInstancedParticleRenderSystem(solver); + return null; } - } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs new file mode 100644 index 000000000..b84ed1b37 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs @@ -0,0 +1,145 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.Rendering; +using Unity.Profiling; +using System.Runtime.InteropServices; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct ParticleVertex + { + public Vector4 pos; + public Vector3 offset; + public Vector4 color; + public Vector4 b1; + public Vector4 b2; + public Vector4 b3; + } + + public abstract class ObiParticleRenderSystem : RenderSystem + { + public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.Particles; } + + public RendererSet renderers { get; } = new RendererSet(); + public bool isSetup => activeParticles != null; + + protected VertexAttributeDescriptor[] layout = + { + new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), + new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.TexCoord1, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.TexCoord2, VertexAttributeFormat.Float32, 4) + }; + + static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupParticleRendering"); + static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ParticleRendering"); + + protected ObiSolver m_Solver; + + protected List> batchList = new List>(); + + protected ObiNativeList activeParticles; + protected ObiNativeList rendererIndex; + protected ObiNativeList rendererData; + + public ObiParticleRenderSystem(ObiSolver solver) + { + m_Solver = solver; + + activeParticles = new ObiNativeList(); + rendererIndex = new ObiNativeList(); + rendererData = new ObiNativeList(); + } + + public virtual void Dispose() + { + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + + if (activeParticles != null) + activeParticles.Dispose(); + if (rendererData != null) + rendererData.Dispose(); + if (rendererIndex != null) + rendererIndex.Dispose(); + } + + protected virtual void Clear() + { + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + + activeParticles.Clear(); + rendererData.Clear(); + rendererIndex.Clear(); + } + + protected virtual void CreateBatches() + { + // generate batches: + for (int i = 0; i < renderers.Count; ++i) + { + renderers[i].renderParameters.layer = renderers[i].gameObject.layer; + batchList.Add(new ProceduralRenderBatch(i, renderers[i].material, renderers[i].renderParameters)); + } + + // sort batches: + batchList.Sort(); + + int particleCount = 0; + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + var renderer = renderers[batch.firstRenderer]; + int actorParticleCount = renderer.actor.particleCount; + + batch.vertexCount += actorParticleCount * 4; + batch.triangleCount += actorParticleCount * 2; + + batch.firstParticle = particleCount; + particleCount += actorParticleCount; + + // add particles here, respecting batch order: + activeParticles.AddRange(renderer.actor.solverIndices, actorParticleCount); + rendererData.Add(new ParticleRendererData(renderer.particleColor, renderer.radiusScale)); + rendererIndex.AddReplicate(i, actorParticleCount); + } + } + + protected virtual void CloseBatches() + { + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(layout); + } + + public virtual void Setup() + { + using (m_SetupRenderMarker.Auto()) + { + Clear(); + + CreateBatches(); + + ObiUtils.MergeBatches(batchList); + + CloseBatches(); + + } + } + + public virtual void Step() + { + } + + public virtual void Render() + { + } + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs.meta new file mode 100644 index 000000000..e2307d239 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e36441d408a548d29fbc80dfa4fffc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs index e85ed0f87..ab677004d 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs @@ -1,110 +1,78 @@ using UnityEngine; -using Unity.Profiling; -using System; -using System.Threading; -using System.Collections; -using System.Collections.Generic; namespace Obi { + public interface IParticleRenderer + { + public ObiActor actor { get; } + public Color particleColor { get; } + public float radiusScale { get; } + } + + public struct ParticleRendererData + { + public Color color; + public float radiusScale; + + public ParticleRendererData(Color color, float radiusScale) + { + this.color = color; + this.radiusScale = radiusScale; + } + } + [AddComponentMenu("Physics/Obi/Obi Particle Renderer", 1000)] [ExecuteInEditMode] [RequireComponent(typeof(ObiActor))] - public class ObiParticleRenderer : MonoBehaviour + public class ObiParticleRenderer : MonoBehaviour, IParticleRenderer, ObiActorRenderer { - static ProfilerMarker m_DrawParticlesPerfMarker = new ProfilerMarker("DrawParticles"); + public Material material; + public RenderBatchParams renderParameters = new RenderBatchParams(true); - public bool render = true; - public Shader shader; - public Color particleColor = Color.white; - public float radiusScale = 1; - private ParticleImpostorRendering m_Impostors; + [field: SerializeField] + public Color particleColor { get; set; } = Color.white; - public IEnumerable ParticleMeshes + [field: SerializeField] + public float radiusScale { get; set; } = 1; + + public ObiActor actor { get; private set; } + + public void Awake() { - get { return impostors.Meshes; } + actor = GetComponent(); } - public ParticleImpostorRendering impostors - { - get { - if (m_Impostors == null) - m_Impostors = new ParticleImpostorRendering(); - return m_Impostors; - } - } - - public Material ParticleMaterial { get; private set; } - public void OnEnable() { - GetComponent().OnInterpolate += DrawParticles; + ((ObiActorRenderer)this).EnableRenderer(); } public void OnDisable() { - GetComponent().OnInterpolate -= DrawParticles; - - if (m_Impostors != null) - m_Impostors.ClearMeshes(); - - DestroyImmediate(ParticleMaterial); + ((ObiActorRenderer)this).DisableRenderer(); } - void CreateMaterialIfNeeded() + public void OnValidate() { - - if (shader != null) - { - if (!shader.isSupported) - Debug.LogWarning("Particle rendering shader not suported."); - - if (ParticleMaterial == null || ParticleMaterial.shader != shader) - { - DestroyImmediate(ParticleMaterial); - ParticleMaterial = new Material(shader); - ParticleMaterial.hideFlags = HideFlags.HideAndDontSave; - } - } + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.Particles); } - void DrawParticles(ObiActor actor) + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) { - using (m_DrawParticlesPerfMarker.Auto()) - { - if (!isActiveAndEnabled || !actor.isActiveAndEnabled || actor.solver == null) - { - impostors.ClearMeshes(); - return; - } - - CreateMaterialIfNeeded(); - - impostors.UpdateMeshes(actor); - - DrawParticles(); - } - } - - private void DrawParticles() - { - if (ParticleMaterial != null) + switch (solver.backendType) { - ParticleMaterial.SetFloat("_RadiusScale", radiusScale); - ParticleMaterial.SetColor("_Color", particleColor); +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstParticleRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: - // Send the meshes to be drawn: - if (render) - { - var meshes = ParticleMeshes; - foreach (Mesh mesh in meshes) - Graphics.DrawMesh(mesh, Matrix4x4.identity, ParticleMaterial, gameObject.layer); - } + if (SystemInfo.supportsComputeShaders) + return new ComputeParticleRenderSystem(solver); + return null; } - } - } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta index 3d6569971..58bfe07b6 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta @@ -1,11 +1,10 @@ fileFormatVersion: 2 guid: c8b45ebbf86be4df6b0e6cd933812af2 -timeCreated: 1521054123 -licenseType: Store MonoImporter: + externalObjects: {} serializedVersion: 2 defaultReferences: - - shader: {fileID: 4800000, guid: 801733041f66b49e1b3c2101471db877, type: 3} + - material: {fileID: 2100000, guid: fb88690dea2394644849cde5abd037f9, type: 2} executionOrder: 0 icon: {fileID: 2800000, guid: f424a87c9f03240c2870a664731ac9aa, type: 3} userData: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiRenderer.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiRenderer.cs new file mode 100644 index 000000000..8d8622deb --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiRenderer.cs @@ -0,0 +1,65 @@ +using UnityEngine; + +namespace Obi +{ + public interface ObiRenderer where T : ObiRenderer + { + protected RenderSystem CreateRenderSystem(ObiSolver solver); + + public bool ValidateRenderer() { return true; } + public void CleanupRenderer() { } + + protected bool UnregisterRenderer(ObiSolver solver) + { + CleanupRenderer(); + + // try to get a render system from the solver: + var system = solver.GetRenderSystem(); + + // if there's an existing render system for this kind of renderer, + // unregister from it. + if (system != null && system.RemoveRenderer((T)this)) + { + // if the render system is empty, destroy it: + if (system.isEmpty) + { + solver.UnregisterRenderSystem(system); + system.Dispose(); + } + + solver.dirtyRendering |= (int)system.typeEnum; + return true; + } + + return false; + } + + protected bool RegisterRenderer(ObiSolver solver) + { + if (ValidateRenderer()) + { + // try to get a render system from the solver: + var system = solver.GetRenderSystem(); + + // if no appropiate system has been created yet, create it: + if (system == null) + { + system = CreateRenderSystem(solver) as RenderSystem; + solver.RegisterRenderSystem(system); + } + + // register in the renderer: + if (system != null) + { + if (system.AddRenderer((T)this)) + { + solver.dirtyRendering |= (int)system.typeEnum; + return true; + } + } + } + + return false; + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiRenderer.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiRenderer.cs.meta new file mode 100644 index 000000000..ae92becb7 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ObiRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d4f237ec9acf4df0a30d5a0139e0f36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches.meta new file mode 100644 index 000000000..66adb0b7a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f9c5efc94e964016b39c7778b3af164 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs new file mode 100644 index 000000000..ba2f0949b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs @@ -0,0 +1,368 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine.Rendering; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct DynamicBatchVertex + { + public Vector3 pos; + public Vector3 normal; + public Vector4 tangent; + public Vector4 color; + } + + [StructLayout(LayoutKind.Sequential)] + public struct StaticBatchVertex + { + public Vector2 uv; + public Vector2 uv2; + public Vector2 uv3; + public Vector2 uv4; + } + + public class DynamicRenderBatch : IRenderBatch where T : IMeshDataProvider, IActorRenderer + { + private VertexAttributeDescriptor[] vertexLayout; + + private RenderBatchParams renderBatchParams; + public RenderParams renderParams { get; private set; } + + public Material[] materials; + public Mesh mesh; + + public int firstRenderer; + public int rendererCount; + + public ObiNativeList vertexToRenderer; // for each vertex in the batch, index of its renderer + public ObiNativeList particleToRenderer; // for each particle in the batch, index of its renderer + + public ObiNativeList particleIndices; // solver indices for all renderers in the batch + + public ObiNativeList dynamicVertexData; + public ObiNativeList staticVertexData; + public ObiNativeList triangles; + + public GraphicsBuffer gpuVertexBuffer; + + public int vertexCount; + public int triangleCount => triangles.count / 3; + public int particleCount => particleIndices.count; + + public DynamicRenderBatch(int rendererIndex, int vertexCount, Material[] materials, RenderBatchParams param) + { + this.renderBatchParams = param; + this.materials = materials; + this.vertexCount = vertexCount; + + this.firstRenderer = rendererIndex; + this.rendererCount = 1; + } + + public void Initialize(List renderers, + MeshDataBatch meshData, + ObiNativeList meshIndices, + VertexAttributeDescriptor[] layout, + bool gpu = false) + { + renderParams = renderBatchParams.ToRenderParams(); + vertexLayout = layout; + + mesh = new Mesh(); + + vertexToRenderer = new ObiNativeList(); + particleToRenderer = new ObiNativeList(); + particleIndices = new ObiNativeList(); + + dynamicVertexData = new ObiNativeList(); + staticVertexData = new ObiNativeList(); + triangles = new ObiNativeList(); + + // there will be exactly one submesh per material in the output batch. + // so we iterate trough materials, and for each one, build a submesh by merging the + // renderer's submeshes. If a renderer has less submeshes than materials, reuse the last one. + + SubMeshDescriptor[] descriptors = new SubMeshDescriptor[materials.Length]; + + for (int m = 0; m < materials.Length; ++m) + { + int vertexOffset = 0; + var desc = new SubMeshDescriptor(); + desc.indexStart = triangles.count; + + for (int i = firstRenderer; i < firstRenderer + rendererCount; ++i) + { + var renderer = renderers[i]; + int meshIndex = meshIndices[i]; + int submeshIndex = Mathf.Min(m, renderer.sourceMesh.subMeshCount - 1); + var submeshInfo = renderer.sourceMesh.GetSubMesh(submeshIndex); + + var meshTriangles = meshData.GetTriangles(meshIndex); + for (int k = 0; k < renderer.meshInstances; ++k) + { + // append submesh triangles: + for (int t = submeshInfo.indexStart; t < submeshInfo.indexStart + submeshInfo.indexCount; ++t) + triangles.Add(vertexOffset + meshTriangles[t]); + + vertexOffset += meshData.GetVertexCount(meshIndex); + } + } + + desc.indexCount = triangles.count - desc.indexStart; + descriptors[m] = desc; + } + + // vertices: + for (int i = firstRenderer; i < firstRenderer + rendererCount; ++i) + { + var renderer = renderers[i]; + int meshIndex = meshIndices[i]; + + int vCount = meshData.GetVertexCount(meshIndex); + + for (int k = 0; k < renderer.meshInstances; ++k) + { + vertexToRenderer.AddReplicate(i, vCount); + particleToRenderer.AddReplicate(i, renderer.actor.solverIndices.count); + particleIndices.AddRange(renderer.actor.solverIndices); + + var verts = meshData.GetVertices(meshIndex); + var norms = meshData.GetNormals(meshIndex); + var tan = meshData.GetTangents(meshIndex); + var col = meshData.GetColors(meshIndex); + + var uv = meshData.GetUV(meshIndex); + var uv2 = meshData.GetUV2(meshIndex); + var uv3 = meshData.GetUV3(meshIndex); + var uv4 = meshData.GetUV4(meshIndex); + + for (int j = 0; j < vCount; ++j) + { + dynamicVertexData.Add(new DynamicBatchVertex + { + pos = verts[j], + normal = norms[j], + tangent = tan[j], + color = j < col.Length ? (Vector4)col[j] : Vector4.one + }); + + staticVertexData.Add(new StaticBatchVertex + { + uv = j < uv.Length ? uv[j] : Vector2.zero, + uv2 = j < uv2.Length ? uv2[j] : Vector2.zero, + uv3 = j < uv3.Length ? uv3[j] : Vector2.zero, + uv4 = j < uv4.Length ? uv4[j] : Vector2.zero, + }); + } + } + } + + // setup combined mesh: + mesh.SetVertexBufferParams(vertexCount, layout); + mesh.SetIndexBufferParams(triangles.count, IndexFormat.UInt32); + + mesh.SetVertexBufferData(dynamicVertexData.AsNativeArray(), 0, 0, dynamicVertexData.count, 0, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + mesh.SetVertexBufferData(staticVertexData.AsNativeArray(), 0, 0, staticVertexData.count, 1, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + mesh.SetIndexBufferData(triangles.AsNativeArray(), 0, 0, triangles.count, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + // set submeshes: + mesh.subMeshCount = materials.Length; + for (int m = 0; m < materials.Length; ++m) + mesh.SetSubMesh(m, descriptors[m], MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + if (gpu) + { + dynamicVertexData.Dispose(); + + mesh.vertexBufferTarget |= GraphicsBuffer.Target.Raw; + + // meshes with no vertices will have no vertex buffer, and Unity will throw an exception. + try + { + if (mesh.vertexCount > 0) + { + gpuVertexBuffer ??= mesh.GetVertexBuffer(0); + } + } + catch (Exception e) + { + Debug.LogException(e); + } + + particleIndices.AsComputeBuffer(); + vertexToRenderer.AsComputeBuffer(); + particleToRenderer.AsComputeBuffer(); + } + } + + public void Dispose() + { + if (vertexToRenderer != null) + vertexToRenderer.Dispose(); + if (particleToRenderer != null) + particleToRenderer.Dispose(); + + if (particleIndices != null) + particleIndices.Dispose(); + + if (dynamicVertexData != null) + dynamicVertexData.Dispose(); + if (staticVertexData != null) + staticVertexData.Dispose(); + if (triangles != null) + triangles.Dispose(); + + gpuVertexBuffer?.Dispose(); + gpuVertexBuffer = null; + + GameObject.DestroyImmediate(mesh); + } + + public bool TryMergeWith(IRenderBatch other) + { + var pbatch = other as DynamicRenderBatch; + if (pbatch != null) + { + if (CompareTo(pbatch) == 0 && + vertexCount + pbatch.vertexCount < Constants.maxVertsPerMesh) + { + rendererCount += pbatch.rendererCount; + vertexCount += pbatch.vertexCount; + return true; + } + } + return false; + } + + private static int CompareMaterialLists(Material[] a, Material[] b) + { + int l = Mathf.Min(a.Length, b.Length); + for (int i = 0; i < l; ++i) + { + if (a[i] == null && b[i] == null) + return 0; + + if (a[i] == null) return -1; + if (b[i] == null) return 1; + + int compare = a[i].GetInstanceID().CompareTo(b[i].GetInstanceID()); + if (compare != 0) + return compare; + } + return a.Length.CompareTo(b.Length); + } + + public int CompareTo(IRenderBatch other) + { + var pbatch = other as DynamicRenderBatch; + int result = CompareMaterialLists(materials, pbatch.materials); + if (result == 0) + return renderBatchParams.CompareTo(pbatch.renderBatchParams); + return result; + } + + public void BakeMesh(List renderers, + T renderer, + ref Mesh bakedMesh, bool transformToActorLocalSpace = false) + { + // if the dynamic data is not available (such as when the batch is intended for GPU use), read it back: + bool gpu = !dynamicVertexData.isCreated || dynamicVertexData == null; + if (gpu) + { + dynamicVertexData = new ObiNativeList(); + dynamicVertexData.ResizeUninitialized(this.vertexCount); + var nativeArray = dynamicVertexData.AsNativeArray(); + AsyncGPUReadback.RequestIntoNativeArray(ref nativeArray, gpuVertexBuffer, this.vertexCount * dynamicVertexData.stride, 0).WaitForCompletion(); + } + + bakedMesh.Clear(); + + int vOffset = 0; + int tOffset = 0; + + for (int i = firstRenderer; i < firstRenderer + rendererCount; ++i) + { + // Count vertices of all instances: + int vCount = 0; + for (int k = 0; k < renderers[i].meshInstances; ++k) + vCount += renderers[i].sourceMesh.vertexCount; + + // Count triangles of all submeshes/instances: + int tCount = 0; + for (int m = 0; m < materials.Length; ++m) + { + int submeshIndex = Mathf.Min(m, renderers[i].sourceMesh.subMeshCount - 1); + var submeshInfo = renderers[i].sourceMesh.GetSubMesh(submeshIndex); + tCount += submeshInfo.indexCount * (int)renderers[i].meshInstances; + } + + // if this is the renderer we're interested in, populate the mesh: + if (renderers[i].Equals(renderer)) + { + bakedMesh.SetVertexBufferParams(vCount, vertexLayout); + bakedMesh.SetVertexBufferData(dynamicVertexData.AsNativeArray(), vOffset, 0, vCount, 0, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + bakedMesh.SetVertexBufferData(staticVertexData.AsNativeArray(), vOffset, 0, vCount, 1, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + // transform vertices from solver space to actor space: + if (transformToActorLocalSpace) + { + var solver2Actor = renderer.actor.actorSolverToLocalMatrix; + var verts = bakedMesh.vertices; + for (int v = 0; v < verts.Length; ++v) + verts[v] = solver2Actor.MultiplyPoint3x4(verts[v]); + bakedMesh.vertices = verts; + } + + ObiNativeList indices = new ObiNativeList(tCount); + + // calculate submeshes (one submesh per material): + SubMeshDescriptor[] descriptors = new SubMeshDescriptor[materials.Length]; + for (int m = 0; m < materials.Length; ++m) + { + int vertexOffset = 0; + var desc = new SubMeshDescriptor(); + desc.indexStart = indices.count; + + int submeshIndex = Mathf.Min(m, renderer.sourceMesh.subMeshCount - 1); + var submeshInfo = renderer.sourceMesh.GetSubMesh(submeshIndex); + + for (int k = 0; k < renderer.meshInstances; ++k) + { + // append submesh triangles: + var meshTriangles = renderer.sourceMesh.triangles; + for (int t = submeshInfo.indexStart; t < submeshInfo.indexStart + submeshInfo.indexCount; ++t) + indices.Add(vertexOffset + meshTriangles[t]); + + vertexOffset += renderer.sourceMesh.vertexCount; + } + + desc.indexCount = indices.count - desc.indexStart; + descriptors[m] = desc; + } + + bakedMesh.SetIndexBufferParams(tCount, IndexFormat.UInt32); + bakedMesh.SetIndexBufferData(indices.AsNativeArray(), 0, 0, tCount, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + bakedMesh.subMeshCount = materials.Length; + for (int m = 0; m < materials.Length; ++m) + bakedMesh.SetSubMesh(m, descriptors[m], MeshUpdateFlags.DontValidateIndices); + + bakedMesh.RecalculateBounds(); + return; + } + + vOffset += vCount; + tOffset += tCount; + } + + if (gpu) + { + dynamicVertexData.Dispose(); + } + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs.meta new file mode 100644 index 000000000..4d34bf848 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5bee4cda10f5944149b6f8c90a947c49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs new file mode 100644 index 000000000..ef526a53c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; +using UnityEngine.Rendering; + +namespace Obi +{ + public interface IRenderBatch : IComparable + { + bool TryMergeWith(IRenderBatch other); + } + + [Serializable] + public struct RenderBatchParams + { + [HideInInspector] public int layer; + public LightProbeUsage lightProbeUsage; + public ReflectionProbeUsage reflectionProbeUsage; + public ShadowCastingMode shadowCastingMode; + public bool receiveShadows; + public MotionVectorGenerationMode motionVectors; + public uint renderingLayerMask; + + public RenderBatchParams(bool receiveShadow) + { + layer = 0; + lightProbeUsage = LightProbeUsage.BlendProbes; + reflectionProbeUsage = ReflectionProbeUsage.BlendProbes; + shadowCastingMode = ShadowCastingMode.On; + receiveShadows = receiveShadow; + motionVectors = MotionVectorGenerationMode.Camera; + renderingLayerMask = 0xffffffff; + } + + public RenderBatchParams(Renderer renderer) + { + this.layer = renderer.gameObject.layer; + this.lightProbeUsage = renderer.lightProbeUsage; + this.reflectionProbeUsage = renderer.reflectionProbeUsage; + this.shadowCastingMode = renderer.shadowCastingMode; + this.receiveShadows = renderer.receiveShadows; + this.motionVectors = renderer.motionVectorGenerationMode; + this.renderingLayerMask = renderer.renderingLayerMask; + } + + public int CompareTo(RenderBatchParams param) + { + int cmp = layer.CompareTo(param.layer); + if (cmp == 0) cmp = renderingLayerMask.CompareTo(param.renderingLayerMask); + if (cmp == 0) cmp = lightProbeUsage.CompareTo(param.lightProbeUsage); + if (cmp == 0) cmp = reflectionProbeUsage.CompareTo(param.reflectionProbeUsage); + if (cmp == 0) cmp = shadowCastingMode.CompareTo(param.shadowCastingMode); + if (cmp == 0) cmp = receiveShadows.CompareTo(param.receiveShadows); + if (cmp == 0) cmp = motionVectors.CompareTo(param.motionVectors); + + return cmp; + } + + public RenderParams ToRenderParams() + { + var renderParams = new RenderParams(); + + // URP and HDRP don't work without this line. + renderParams.renderingLayerMask = GraphicsSettings.defaultRenderingLayerMask; + + renderParams.lightProbeUsage = lightProbeUsage; + renderParams.reflectionProbeUsage = reflectionProbeUsage; + renderParams.shadowCastingMode = shadowCastingMode; + renderParams.receiveShadows = receiveShadows; + renderParams.motionVectorMode = motionVectors; + renderParams.renderingLayerMask = renderingLayerMask; + renderParams.layer = layer; + return renderParams; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs.meta new file mode 100644 index 000000000..ae666aba2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a827293101844d32bed440c32d08c83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs new file mode 100644 index 000000000..7883fba49 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace Obi +{ + + [StructLayout(LayoutKind.Sequential)] + public struct ChunkData + { + public int rendererIndex; + public int offset; // index of the first element for each chunk. + + public ChunkData(int rendererIndex, int offset) + { + this.rendererIndex = rendererIndex; + this.offset = offset; + } + } + + public class InstancedRenderBatch : IRenderBatch + { + private RenderBatchParams renderBatchParams; + public RenderParams renderParams { get; private set; } + + public Mesh mesh; + public Material material; + + public int firstRenderer; + public int rendererCount; + + public int firstInstance; + public int instanceCount; + + public GraphicsBuffer argsBuffer; + + public InstancedRenderBatch(int rendererIndex, Mesh mesh, Material material, RenderBatchParams renderBatchParams) + { + this.renderBatchParams = renderBatchParams; + this.firstRenderer = rendererIndex; + this.rendererCount = 1; + this.mesh = mesh; + this.material = material; + this.firstInstance = 0; + this.instanceCount = 0; + } + + public void Initialize(bool gpu = false) + { + renderParams = renderBatchParams.ToRenderParams(); + + if (gpu) + argsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 1, 5 * sizeof(uint)); + } + + public void Dispose() + { + argsBuffer?.Dispose(); + argsBuffer = null; + } + + public bool TryMergeWith(IRenderBatch other) + { + var ibatch = other as InstancedRenderBatch; + if (ibatch != null) + { + if (CompareTo(ibatch) == 0 && + instanceCount + ibatch.instanceCount < Constants.maxInstancesPerBatch) + { + rendererCount += ibatch.rendererCount; + instanceCount += ibatch.instanceCount; + return true; + } + } + return false; + } + + public int CompareTo(IRenderBatch other) + { + var ibatch = other as InstancedRenderBatch; + + int idA = material != null ? material.GetInstanceID() : 0; int idB = (ibatch != null && ibatch.material != null) ? ibatch.material.GetInstanceID() : 0; + + int compareMat = idA.CompareTo(idB); + if (compareMat == 0) + { + idA = mesh != null ? mesh.GetInstanceID() : 0; + idB = (ibatch != null && ibatch.mesh != null) ? ibatch.mesh.GetInstanceID() : 0; + compareMat = idA.CompareTo(idB); + + if (compareMat == 0) + return renderBatchParams.CompareTo(ibatch.renderBatchParams); + } + + return compareMat; + } + + public void BakeMesh(RendererSet renderers, T renderer, ObiNativeList chunkData, + ObiNativeList instanceTransforms, + Matrix4x4 transform, + ref Mesh bakedMesh, bool transformVertices = false) where T:ObiRenderer + { + + // if the data is not available in the CPU (such as when the batch is intended for GPU use), read it back: + bool gpu = argsBuffer != null && argsBuffer.IsValid(); + if (gpu) + { + instanceTransforms.Readback(false); + } + + List combineInstances = new List(); + + bakedMesh.Clear(); + + for (int i = 0; i < chunkData.count; ++i) + { + // if this chunk's renderer is the renderer we are interested in, + // append its instances to the mesh. + if (renderers[chunkData[i].rendererIndex].Equals(renderer)) + { + int firstIndex = i > 0 ? chunkData[i - 1].offset : 0; + int elementCount = chunkData[i].offset - firstIndex; + + for (int m = 0; m < elementCount; ++m) + { + combineInstances.Add(new CombineInstance + { + mesh = mesh, + transform = transformVertices ? transform * instanceTransforms[firstIndex + m] : instanceTransforms[firstIndex + m] + }); + } + } + } + + bakedMesh.CombineMeshes(combineInstances.ToArray(), true, true, false); + bakedMesh.RecalculateBounds(); + + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs.meta new file mode 100644 index 000000000..9c35abb11 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74d879a363c7040229e215fe6c48a581 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs new file mode 100644 index 000000000..f43e853d4 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs @@ -0,0 +1,186 @@ + +using UnityEngine; +using UnityEngine.Rendering; +using Unity.Collections; +using System.Collections.Generic; +using Unity.Collections.LowLevel.Unsafe; + +namespace Obi +{ + + public class ProceduralRenderBatch : IRenderBatch where T : struct + { + private RenderBatchParams renderBatchParams; + public RenderParams renderParams { get; private set; } + + public Material material; + public Mesh mesh; + + public int firstRenderer; + public int rendererCount; + + public int firstParticle; + + public NativeArray vertices; + public NativeArray triangles; + + public GraphicsBuffer gpuVertexBuffer; + public GraphicsBuffer gpuIndexBuffer; + + public int vertexCount; + public int triangleCount; + + public ProceduralRenderBatch(int rendererIndex, Material material, RenderBatchParams param) + { + this.renderBatchParams = param; + + this.material = material; + this.firstRenderer = rendererIndex; + this.firstParticle = 0; + this.rendererCount = 1; + this.vertexCount = 0; + this.triangleCount = 0; + } + + public void Initialize(VertexAttributeDescriptor[] layout, bool gpu = false) + { + var rp = renderBatchParams.ToRenderParams(); + rp.material = material; + renderParams = rp; + + mesh = new Mesh(); + + mesh.SetVertexBufferParams(vertexCount, layout); + mesh.SetIndexBufferParams(triangleCount * 3, IndexFormat.UInt32); + + vertices = new NativeArray(vertexCount, Allocator.Persistent); + mesh.SetVertexBufferData(vertices, 0, 0, vertices.Length, 0, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + triangles = new NativeArray(triangleCount * 3, Allocator.Persistent); + mesh.SetIndexBufferData(triangles, 0, 0, triangles.Length, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + mesh.subMeshCount = 1; + SubMeshDescriptor subMeshDescriptor = new SubMeshDescriptor(); + subMeshDescriptor.indexCount = triangleCount * 3; + mesh.SetSubMesh(0, subMeshDescriptor, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + if (gpu) + { + vertices.Dispose(); + triangles.Dispose(); + + mesh.vertexBufferTarget |= GraphicsBuffer.Target.Raw; + mesh.indexBufferTarget |= GraphicsBuffer.Target.Raw; + + // particles with no vertices will have no vertex buffer, and Unity will throw an exception. + if (mesh.vertexCount > 0) + { + gpuVertexBuffer ??= mesh.GetVertexBuffer(0); + gpuIndexBuffer ??= mesh.GetIndexBuffer(); + } + } + } + + public void Dispose() + { + gpuVertexBuffer?.Dispose(); + gpuIndexBuffer?.Dispose(); + + gpuVertexBuffer = null; + gpuIndexBuffer = null; + + if (vertices.IsCreated) + vertices.Dispose(); + if (triangles.IsCreated) + triangles.Dispose(); + + GameObject.DestroyImmediate(mesh); + } + + public bool TryMergeWith(IRenderBatch other) + { + var pbatch = other as ProceduralRenderBatch; + if (pbatch != null) + { + if (CompareTo(pbatch) == 0 && + vertexCount + pbatch.vertexCount < Constants.maxVertsPerMesh) + { + rendererCount += pbatch.rendererCount; + triangleCount += pbatch.triangleCount; + vertexCount += pbatch.vertexCount; + return true; + } + } + return false; + } + + public int CompareTo(IRenderBatch other) + { + var pbatch = other as ProceduralRenderBatch; int idA = material != null ? material.GetInstanceID() : 0; int idB = (pbatch != null && pbatch.material != null) ? pbatch.material.GetInstanceID() : 0; int result = idA.CompareTo(idB); if (result == 0) return renderBatchParams.CompareTo(pbatch.renderBatchParams); return result; + } + + public void BakeMesh(int vertexOffset, int vertexCount, int triangleOffset, int triangleCount, + Matrix4x4 transform, + ref Mesh bakedMesh, bool transformVertices = false) + { + + // if the data is not available in the CPU (such as when the batch is intended for GPU use), read it back: + bool gpu = !vertices.IsCreated; + if (gpu) + { + vertices = new NativeArray(this.vertexCount, Allocator.Persistent); + triangles = new NativeArray(this.triangleCount * 3, Allocator.Persistent); + AsyncGPUReadback.RequestIntoNativeArray(ref vertices, gpuVertexBuffer, this.vertexCount * UnsafeUtility.SizeOf(), 0).WaitForCompletion(); + AsyncGPUReadback.RequestIntoNativeArray(ref triangles, gpuIndexBuffer, this.triangleCount * 3 * 4, 0).WaitForCompletion(); + } + + bakedMesh.Clear(); + + bakedMesh.SetVertexBufferParams(vertexCount, mesh.GetVertexAttributes()); + bakedMesh.SetVertexBufferData(vertices, vertexOffset, 0, vertexCount, 0, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + // transform vertices from solver space to actor space: + if (transformVertices) + { + var solver2Actor = transform; + var verts = bakedMesh.vertices; + for (int v = 0; v < verts.Length; ++v) + verts[v] = solver2Actor.MultiplyPoint3x4(verts[v]); + bakedMesh.vertices = verts; + } + + ObiNativeList indices = new ObiNativeList(triangleCount * 3); + + // offset indices: + for (int i = 0; i < triangleCount * 3; ++i) + { + int index = triangles[triangleOffset * 3 + i] - vertexOffset; + + // clamp indices to zero, since decimated ropes have unused triangles + // that reference vertex 0. Subtracting the vertex offset from these results in a negative index. + indices.Add(Mathf.Max(0,index)); + } + + bakedMesh.SetIndexBufferParams(triangleCount * 3, IndexFormat.UInt32); + bakedMesh.SetIndexBufferData(indices.AsNativeArray(), 0, 0, triangleCount * 3, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); + + bakedMesh.subMeshCount = 1; + SubMeshDescriptor subMeshDescriptor = new SubMeshDescriptor(); + subMeshDescriptor.indexCount = triangleCount * 3; // mesh triangle count. + bakedMesh.SetSubMesh(0, subMeshDescriptor, MeshUpdateFlags.DontValidateIndices); + + if (gpu) + { + if (vertices.IsCreated) + vertices.Dispose(); + if (triangles.IsCreated) + triangles.Dispose(); + } + + bakedMesh.RecalculateBounds(); + return; + + } + } + +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs.meta new file mode 100644 index 000000000..326186ae2 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ded06625ac9f94b1fa77fd845bb28ec9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ShadowmapExposer.cs b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ShadowmapExposer.cs deleted file mode 100644 index 096b0dcc1..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ShadowmapExposer.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.Rendering; - -namespace Obi{ -public class ShadowmapExposer : MonoBehaviour -{ - Light unityLight; - CommandBuffer afterShadow = null; - public ObiParticleRenderer[] particleRenderers; - - public void Awake(){ - unityLight = GetComponent(); - } - - public void OnEnable(){ - Cleanup(); - - afterShadow = new CommandBuffer(); - afterShadow.name = "FluidShadows"; - unityLight.AddCommandBuffer (LightEvent.AfterShadowMapPass, afterShadow); - } - - public void OnDisable(){ - Cleanup(); - } - - private void Cleanup(){ - - if (afterShadow != null){ - unityLight.RemoveCommandBuffer (LightEvent.AfterShadowMapPass,afterShadow); - afterShadow = null; - } - } - - - public void SetupFluidShadowsCommandBuffer() - { - afterShadow.Clear(); - - if (particleRenderers == null) - return; - - foreach(ObiParticleRenderer renderer in particleRenderers){ - if (renderer != null){ - foreach(Mesh mesh in renderer.ParticleMeshes) - afterShadow.DrawMesh(mesh,Matrix4x4.identity,renderer.ParticleMaterial,0,1); - } - } - - afterShadow.SetGlobalTexture ("_MyShadowMap", new RenderTargetIdentifier(BuiltinRenderTextureType.CurrentActive)); - } - - // Use this for initialization - void Update() - { - bool act = gameObject.activeInHierarchy && enabled; - if (!act || particleRenderers == null || particleRenderers.Length == 0) - { - Cleanup(); - return; - } - - if (afterShadow != null) - { - SetupFluidShadowsCommandBuffer(); - } - } -} -} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ShadowmapExposer.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ShadowmapExposer.cs.meta deleted file mode 100644 index 229f80dcb..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Rendering/ShadowmapExposer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: dbf7247281ef14860853fa0ee2cb4829 -timeCreated: 1463174681 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs new file mode 100644 index 000000000..5f2ecf8d9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs @@ -0,0 +1,225 @@ +using System.Collections.Generic; +using System.Linq; + +#if UNITY_EDITOR +using UnityEditor; +using UnityEditor.SceneManagement; +#endif +using UnityEngine; + +namespace Obi +{ + [ExecuteAlways] + public class ObiActorEditorSelectionHandler + { + private static HashSet solvers = new HashSet(); + private static ObiSolver clickedSolver; + private static int particleIndex; + + #if UNITY_EDITOR + internal static void SolverInitialized(ObiSolver solver) + { + if (solver != null) + { + if (solvers.Count == 0) + Init(); + + if (solver != null) + solvers.Add(solver); + } + + } + + internal static void SolverTeardown(ObiSolver solver) + { + if (solver != null) + { + solvers.Remove(solver); + + if (solvers.Count == 0) + Dispose(); + } + } + + internal static void Init() + { + SceneView.duringSceneGui += SceneGui; + } + + internal static void Dispose() + { + SceneView.duringSceneGui -= SceneGui; + } + + private static bool RaycastAgainstSolver(ObiSolver solver, Ray ray, float thickness, out int pIndex, out float distance) + { + float closestDistanceToRay = float.MaxValue; + pIndex = -1; + distance = float.MaxValue; + + Matrix4x4 solver2World = solver.transform.localToWorldMatrix; + + // Find the closest particle hit by the ray: + for (int i = 0; i < solver.activeParticleCount; ++i) + { + int p = solver.activeParticles[i]; + + Vector3 worldPos = solver2World.MultiplyPoint3x4(solver.positions[p]); + Vector3 projected = ObiUtils.ProjectPointLine(ray.origin, ray.origin + ray.direction, worldPos, out float mu, false); + + // Disregard particles behind the camera: + if (mu < 0) + continue; + + float radius = solver.principalRadii[p][0] + thickness; + float distanceToRay = Vector3.SqrMagnitude(worldPos - projected); + + if (distanceToRay <= radius * radius && + distanceToRay < closestDistanceToRay && + mu < closestDistanceToRay) + { + distance = mu; + closestDistanceToRay = distanceToRay; + pIndex = p; + } + } + + return pIndex >= 0; + } + + private static ObiSolver RaycastAllSolvers(Ray ray, out int pIndex, out float distance) + { + distance = float.MaxValue; + pIndex = -1; + + ObiSolver hitSolver = null; + + foreach (ObiSolver s in solvers) + { + if (s == null || !s.bounds.IntersectRay(ray)) + continue; + + if (RaycastAgainstSolver(s, ray, 0, out int p, out float d)) + { + if (d < distance) + { + distance = d; + hitSolver = s; + pIndex = p; + } + } + } + return hitSolver; + } + + private static void SceneGui(SceneView sceneView) + { + if (EditorApplication.isPaused || !ObiEditorSettings.GetOrCreateSettings().sceneViewParticlePicking) + return; + + // only do this in the main stage or prefab stage, if we're in any other stage don't raycast against particles. + // This will prevent selecting stuff when in the blueprint editor, avatar editor, or other stages. + var stage = StageUtility.GetCurrentStage(); + if (!(stage is MainStage) && !(stage is PrefabStage)) + return; + + var evt = Event.current; + + if (evt.alt) + return; + + float ppp = EditorGUIUtility.pixelsPerPoint; + int mouseScreenX = (int)(evt.mousePosition.x * ppp); + int mouseScreenY = (int)(evt.mousePosition.y * ppp); + + if (mouseScreenX < 0 || mouseScreenX >= sceneView.camera.pixelWidth || + mouseScreenY < 0 || mouseScreenY >= sceneView.camera.pixelHeight) + return; + + int controlID = GUIUtility.GetControlID(FocusType.Passive); + + switch (evt.type) + { + case EventType.Layout: + case EventType.MouseMove: + + if (!Tools.viewToolActive) + { + // Raycast against all solvers: + Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); + clickedSolver = RaycastAllSolvers(ray, out particleIndex, out float closest); + + // check whether we hit a collider before the closest particle in the solver: + RaycastHit hit; + ray = HandleUtility.GUIPointToWorldRay(evt.mousePosition); + if (Physics.Raycast(ray, out hit, closest) && hit.collider != null) + clickedSolver = null; + + // If we hit something, register our control ID and the distance to the particle: + if (clickedSolver != null && Camera.current != null) + { + var worldPos = clickedSolver.transform.TransformPoint(clickedSolver.positions[particleIndex]); + var screenCenter = HandleUtility.WorldToGUIPoint(worldPos); + + var distance = (Event.current.mousePosition - screenCenter).magnitude; + + HandleUtility.AddControl(controlID, distance); + + // AddDefaultControl means that if no other control is selected, this will be chosen as the fallback. + // This allows things like the translate handle and buttons to function. + HandleUtility.AddDefaultControl(controlID); + } + } + + break; + + case EventType.MouseDown: + + if (evt.button == 0 && HandleUtility.nearestControl == controlID && clickedSolver != null) + { + // Setting the hotControl tells the Scene View that this mouse down/up event cannot be considered + // a picking action because the event is in use. + GUIUtility.hotControl = controlID; + evt.Use(); + } + break; + + case EventType.MouseUp: + + if (!Tools.viewToolActive && GUIUtility.hotControl == controlID) + { + // In case we hit some actor, select the actor it belongs to: + if (clickedSolver != null) + { + var clickedActor = clickedSolver.particleToActor[particleIndex].actor; + if (clickedActor != null) + { + var selection = Selection.objects.ToList(); + + if (evt.shift || evt.control) + { + if (selection.Contains(clickedActor.gameObject)) + selection.Remove(clickedActor.gameObject); + else + selection.Add(clickedActor.gameObject); + } + else + { + selection.Clear(); + selection.Add(clickedActor.gameObject); + } + + Selection.objects = selection.ToArray(); + } + + GUIUtility.hotControl = 0; + evt.Use(); + } + } + + break; + } + } +#endif + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs.meta new file mode 100644 index 000000000..453641656 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: baf220f68f79740d3a4ee9fb6fa4d6f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs new file mode 100644 index 000000000..d88159ff8 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; + +namespace Obi +{ + /** + * Render Systems are organized into a fixed number of tiers. Tiers are update sequentially from lower to highest, so systems on + * a higher tier may depend on the output of lower tier systems. + * All systems in the same tier might be updated in parallel. + */ + public class ObiRenderSystemStack + { + private List[] stack; + + public ObiRenderSystemStack(int tiers) + { + stack = new List[tiers]; + for (int i = 0; i < tiers; ++i) + stack[i] = new List(); + } + + public void Setup(int dirtyFlags) + { + foreach (var tier in stack) + foreach (var system in tier) + if ((dirtyFlags & (int)system.typeEnum) != 0) + system.Setup(); + } + + public void Step() + { + foreach (var tier in stack) + foreach (var system in tier) + system.Step(); + } + + public void Render() + { + foreach (var tier in stack) + foreach (var system in tier) + system.Render(); + } + + public bool RegisterRenderSystem(IRenderSystem renderSystem) + { + if (renderSystem != null) + { + // Here we don't check whether the render system already exists: + // We assume this is done before calling AddRenderSystem + // (by calling GetRenderSystem first). + // Otherwise, no guarantees a render system cannot be registered twice. + if (renderSystem.tier >= 0 && renderSystem.tier < stack.Length) + { + stack[renderSystem.tier].Add(renderSystem); + return true; + } + } + return false; + } + + public bool UnregisterRenderSystem(IRenderSystem renderSystem) + { + if (renderSystem != null) + { + if (renderSystem.tier >= 0 && renderSystem.tier < stack.Length) + { + stack[renderSystem.tier].Remove(renderSystem); + return true; + } + } + return false; + } + + public RenderSystem GetRenderSystem() where T : ObiRenderer + { + foreach (var tier in stack) + foreach (var system in tier) + if (system.GetRendererType() == typeof(T)) + return system as RenderSystem; + return null; + } + + public IRenderSystem GetRenderSystem(Oni.RenderingSystemType systemType) + { + foreach (var tier in stack) + foreach (var system in tier) + if (system.typeEnum == systemType) + return system as IRenderSystem; + return null; + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs.meta new file mode 100644 index 000000000..69b7e4540 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 789afc50914b2412e87a032744b17fd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiSolver.cs b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiSolver.cs index e1a5ff765..3e785f61d 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiSolver.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Solver/ObiSolver.cs @@ -23,6 +23,7 @@ using Unity.Profiling; using System; using System.Collections.Generic; using System.Linq; +using System.Collections; namespace Obi { @@ -33,6 +34,7 @@ namespace Obi [AddComponentMenu("Physics/Obi/Obi Solver", 800)] [ExecuteInEditMode] [DisallowMultipleComponent] + [HelpURL("https://obi.virtualmethodstudio.com/manual/7.0/obisolver.html")] public sealed class ObiSolver : MonoBehaviour { static ProfilerMarker m_StateInterpolationPerfMarker = new ProfilerMarker("ApplyStateInterpolation"); @@ -40,16 +42,25 @@ namespace Obi static ProfilerMarker m_GetSolverBoundsPerfMarker = new ProfilerMarker("GetSolverBounds"); static ProfilerMarker m_TestBoundsPerfMarker = new ProfilerMarker("TestBoundsAgainstCameras"); static ProfilerMarker m_GetAllCamerasPerfMarker = new ProfilerMarker("GetAllCameras"); + static ProfilerMarker m_PushActiveParticles = new ProfilerMarker("PushActiveParticles"); + static ProfilerMarker m_UpdateColliderWorld = new ProfilerMarker("UpdateColliderWorld"); + static ProfilerMarker m_PushSimplices = new ProfilerMarker("PushSimplices"); + static ProfilerMarker m_PushDeformableEdges = new ProfilerMarker("PushDeformableEdges"); + static ProfilerMarker m_PushDeformableTriangles = new ProfilerMarker("PushDeformableTriangles"); public enum BackendType { - Oni, + [InspectorName("Compute (GPU)")] + Compute, + [InspectorName("Burst (CPU)")] Burst } - public class ObiCollisionEventArgs : System.EventArgs + public enum Synchronization { - public ObiList contacts = new ObiList(); /**< collision contacts.*/ + Asynchronous, + Synchronous, + SynchronousFixed } [Serializable] @@ -60,8 +71,8 @@ namespace Obi public ParticleInActor() { - this.actor = null; - this.indexInActor = -1; + actor = null; + indexInActor = -1; } public ParticleInActor(ObiActor actor, int indexInActor) @@ -71,84 +82,217 @@ namespace Obi } } + public class SpatialQuery + { + public ObiNativeQueryShapeList shapes; + public ObiNativeAffineTransformList transforms; + public ObiNativeQueryResultList results; + public Action callback; + public bool synchronous = false; + + public bool isValid => shapes != null && transforms != null && results != null && shapes.count > 0 && transforms.count > 0; + public bool done => results.noReadbackInFlight; + + public SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results, Action callback = null, bool synchronous = false) + { + this.shapes = shapes; + this.transforms = transforms; + this.results = results; + this.callback = callback; + this.synchronous = synchronous; + } + + public void WaitForCompletion() + { + results.WaitForReadback(); + } + } + public delegate void SolverCallback(ObiSolver solver); - public delegate void SolverStepCallback(ObiSolver solver, float stepTime); - public delegate void CollisionCallback(ObiSolver solver, ObiCollisionEventArgs contacts); + public delegate void SolverStepCallback(ObiSolver solver, float timeToSimulate, float substepTime); + public delegate void CollisionCallback(ObiSolver solver, ObiNativeContactList contacts); + public delegate void SpatialQueryCallback(ObiSolver solver, ObiNativeQueryResultList results); public event CollisionCallback OnCollision; public event CollisionCallback OnParticleCollision; - public event SolverCallback OnUpdateParameters; + public event SpatialQueryCallback OnSpatialQueryResults; + public event SolverCallback OnAdvection; - public event SolverCallback OnPrepareFrame; - public event SolverStepCallback OnPrepareStep; - public event SolverStepCallback OnBeginStep; - public event SolverStepCallback OnSubstep; - public event SolverCallback OnEndStep; - public event SolverCallback OnInterpolate; + public event SolverCallback OnInitialize; + public event SolverCallback OnTeardown; + public event SolverCallback OnUpdateParameters; + public event SolverCallback OnParticleCountChanged; + + public event SolverStepCallback OnSimulationStart; /**< Called right before scheduling a simulation step, before updating active particles, constraints, etc.*/ + public event SolverStepCallback OnCollisionDetectionStart; /**< Called right after CPU->GPU data transfer, before scheduling collision detection and spatial queries.*/ + public event SolverStepCallback OnSubstepsStart; /**< Called right after scheduling collision detection and spatial queries, before scheduling substeps.*/ + public event SolverCallback OnRequestReadback; /**< Called right after scheduling all substeps (before completing simulation).*/ + public event SolverStepCallback OnSimulationEnd; /**< Called when a simulation step has been completed.*/ + public event SolverStepCallback OnInterpolate; /**< Called every frame after interpolation, right before updating rendering.*/ [Tooltip("If enabled, will force the solver to keep simulating even when not visible from any camera.")] - public bool simulateWhenInvisible = true; /**< Whether to keep simulating the cloth when its not visible by any camera.*/ - - private ISolverImpl m_SolverImpl; + public bool simulateWhenInvisible = true; private IObiBackend m_SimulationBackend = #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) new BurstBackend(); -#elif (OBI_ONI_SUPPORTED) - new OniBackend(); #else new NullBackend(); #endif [SerializeField] private BackendType m_Backend = BackendType.Burst; + private ObiRenderSystemStack m_RenderSystems = new ObiRenderSystemStack(3); + + [Min(1)] + public int substeps = 4; + + [Min(0)] + public int maxStepsPerFrame = 1; + + public Synchronization synchronization = Synchronization.Asynchronous; public Oni.SolverParameters parameters = new Oni.SolverParameters(Oni.SolverParameters.Interpolation.None, new Vector4(0, -9.81f, 0, 0)); + [Min(32)] + [SerializeField] + private uint m_MaxSurfaceChunks = 32768; + public uint maxSurfaceChunks + { + set + { + // make sure anytime active particles need to be updated, simplices will be updated too: + m_MaxSurfaceChunks = value; + dirtyRendering |= (int)Oni.RenderingSystemType.Fluid; + } + get { return m_MaxSurfaceChunks; } + } + + public uint usedSurfaceChunks + { + get { + var system = GetRenderSystem(Oni.RenderingSystemType.Fluid) as ISurfaceChunkUser; + if (system == null) + return 0; + return system.usedChunkCount; + } + } + + public uint maxQueryResults = 8192; + public uint maxFoamParticles = 8192; + public uint maxParticleNeighbors = 128; + public uint maxParticleContacts = 6; + + public bool useLimits = false; + public bool killOffLimitsParticles = false; + public Bounds boundaryLimits = new Bounds(Vector3.zero, new Vector3(10, 10, 10)); + public Vector3 gravity = new Vector3(0, -9.81f, 0); public Space gravitySpace = Space.Self; - [Range(0, 1)] - public float worldLinearInertiaScale = 0; /**< how much does world-space linear inertia affect the actor. This only applies when the solver has "simulateInLocalSpace" enabled.*/ + public Vector3 ambientWind = new Vector3(0, 0, 0); + public Space windSpace = Space.Self; + [Min(1)] + public int foamSubsteps = 1; + + [Tooltip("Minimum amount of fluid particles around a foam particle necessary for the foam to be advected, instead of following a ballistic trajectory.")] + [Min(0)] + public int foamMinNeighbors = 3; + + [Tooltip("When enabled, each individual foam particle will be tested for collisions against ObiColliders.")] + public bool foamCollisions = false; + + [Tooltip("Foam particles can stretch along the direction of their velocity. This parameter controls the maximum amount of stretch.")] + [Range(0, 3)] + public float maxFoamVelocityStretch = 0.3f; + + [Tooltip("Scales the size of foam particles.")] + [Min(0)] + public float foamRadiusScale = 1; + + [Tooltip("Determines how foam particles fade in/out during its lifetime.")] + [MinMax(0, 1)] + public Vector2 foamFade = new Vector2(0.05f, 0.8f); + + [Tooltip("Determines the utilization % range in which particles age faster.")] + [MinMax(0, 1)] + public Vector2 foamAccelAgingRange = new Vector2(0.5f, 0.8f); + + [Tooltip("Determines the utilization % range in which particles age faster.")] + [Min(1)] + public float foamAccelAging = 4; + + [Tooltip("Color of the light scattered by foam.")] + [Min(0)] + public float foamVolumeDensity = 0.1f; + + [Tooltip("Color of the light scattered by foam.")] + [Min(0)] + public float foamAmbientDensity = 0.02f; + + [Tooltip("Color of the light scattered by foam.")] + public Color foamScatterColor = new Color(0.8f,0.75f,0.7f,1); + + [Tooltip("Color used for foam ambient lighting.")] + public Color foamAmbientColor = new Color(0.4f, 0.5f, 0.6f, 1); + + [Tooltip("How much does world-space linear inertia affect particles in the solver.")] [Range(0, 1)] - public float worldAngularInertiaScale = 0; /**< how much does world-space angular inertia affect the actor. This only applies when the solver has "simulateInLocalSpace" enabled.*/ + public float worldLinearInertiaScale = 0; /**< how much does world-space linear inertia affect particles in the solver*/ + + [Tooltip("How much does world-space angular inertia affect particles in the solver.")] + [Range(0, 1)] + public float worldAngularInertiaScale = 0; /**< how much does world-space angular inertia affect particles in the solver.*/ [HideInInspector] [NonSerialized] public List actors = new List(); - [HideInInspector] [NonSerialized] public ParticleInActor[] m_ParticleToActor; + [HideInInspector] [NonSerialized] private ParticleInActor[] m_ParticleToActor; + + [HideInInspector] [NonSerialized] private Queue addBuffer = new Queue(); /**< actors pending insertion into the solver.*/ private ObiNativeIntList freeList; + private Stack freeGroupIDs = new Stack(); - private List points = new List(); /**< 0-simplices*/ - private List edges = new List(); /**< 1-simplices*/ - private List triangles = new List(); /**< 2-simplices*/ - private SimplexCounts m_SimplexCounts; + [NonSerialized] public ObiNativeIntList deformableTriangles; + [NonSerialized] public ObiNativeIntList deformableEdges; + [NonSerialized] public ObiNativeVector2List deformableUVs; - [HideInInspector][NonSerialized] public bool dirtySimplices = true; - [HideInInspector][NonSerialized] public int dirtyConstraints = 0; + [NonSerialized] private ObiNativeIntList m_Points; /**< 0-simplices*/ + [NonSerialized] private ObiNativeIntList m_Edges; /**< 1-simplices*/ + [NonSerialized] private ObiNativeIntList m_Triangles; /**< 2-simplices*/ + [NonSerialized] public SimplexCounts m_SimplexCounts; + + [NonSerialized] private IObiJobHandle simulationHandle; + [NonSerialized] private Synchronization bufferedSynchronization; + [NonSerialized] private int steps = 0; + [NonSerialized] private float substepTime = 0; + [NonSerialized] private float simulatedTime = 0; + [NonSerialized] private float accumulatedTime = 0; + + public float timeSinceSimulationStart { get; private set; } = 0; + + [HideInInspector] [NonSerialized] public bool dirtyDeformableTriangles = true; + [HideInInspector] [NonSerialized] public bool dirtyDeformableEdges = true; + [HideInInspector] [NonSerialized] public Oni.SimplexType dirtySimplices = Oni.SimplexType.All; + [HideInInspector] [NonSerialized] public int dirtyRendering = 0; + [HideInInspector] [NonSerialized] public int dirtyConstraints = 0; + + public bool synchronousSpatialQueries = false; private bool m_dirtyActiveParticles = true; public bool dirtyActiveParticles { set { - // make sure anytime active particles need to be updated, simplices will be updated too: m_dirtyActiveParticles = value; - dirtySimplices |= m_dirtyActiveParticles; } get { return m_dirtyActiveParticles; } } - private ObiCollisionEventArgs collisionArgs = new ObiCollisionEventArgs(); - private ObiCollisionEventArgs particleCollisionArgs = new ObiCollisionEventArgs(); - - private int m_contactCount; - private int m_particleContactCount; - private float m_MaxScale = 1; - private UnityEngine.Bounds bounds = new UnityEngine.Bounds(); + private Bounds m_Bounds = new Bounds(); + private Bounds m_BoundsWS = new Bounds(); private Plane[] planes = new Plane[6]; private Camera[] sceneCameras = new Camera[1]; - private bool isVisible = true; // constraints: [NonSerialized] private IObiConstraints[] m_Constraints = new IObiConstraints[Oni.ConstraintTypeCount]; @@ -165,55 +309,60 @@ namespace Obi public Oni.ConstraintParameters shapeMatchingConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); public Oni.ConstraintParameters tetherConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); public Oni.ConstraintParameters pinConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); + public Oni.ConstraintParameters pinholeConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); public Oni.ConstraintParameters stitchConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); public Oni.ConstraintParameters densityConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); public Oni.ConstraintParameters stretchShearConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); public Oni.ConstraintParameters bendTwistConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); public Oni.ConstraintParameters chainConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); - // rigidbodies + // rigidbodies: ObiNativeVector4List m_RigidbodyLinearVelocities; ObiNativeVector4List m_RigidbodyAngularVelocities; - // colors + // colors: [NonSerialized] private ObiNativeColorList m_Colors; - // cell indices + // cell indices: [NonSerialized] private ObiNativeInt4List m_CellCoords; // status: [NonSerialized] private ObiNativeIntList m_ActiveParticles; [NonSerialized] private ObiNativeIntList m_Simplices; + [NonSerialized] private ObiNativeIntList m_DeadParticles; - // positions + // positions: [NonSerialized] private ObiNativeVector4List m_Positions; - [NonSerialized] private ObiNativeVector4List m_RestPositions; [NonSerialized] private ObiNativeVector4List m_PrevPositions; + [NonSerialized] private ObiNativeVector4List m_RestPositions; + [NonSerialized] private ObiNativeVector4List m_StartPositions; + [NonSerialized] private ObiNativeVector4List m_EndPositions; [NonSerialized] private ObiNativeVector4List m_RenderablePositions; - // orientations + // orientations: [NonSerialized] private ObiNativeQuaternionList m_Orientations; - [NonSerialized] private ObiNativeQuaternionList m_RestOrientations; [NonSerialized] private ObiNativeQuaternionList m_PrevOrientations; - [NonSerialized] private ObiNativeQuaternionList m_StartOrientations; - [NonSerialized] private ObiNativeQuaternionList m_RenderableOrientations; /**< renderable particle orientations.*/ + [NonSerialized] private ObiNativeQuaternionList m_RestOrientations; - // velocities + [NonSerialized] private ObiNativeQuaternionList m_StartOrientations; + [NonSerialized] private ObiNativeQuaternionList m_EndOrientations; + [NonSerialized] private ObiNativeQuaternionList m_RenderableOrientations; + + // velocities: [NonSerialized] private ObiNativeVector4List m_Velocities; [NonSerialized] private ObiNativeVector4List m_AngularVelocities; - // masses/inertia tensors + // masses tensors: [NonSerialized] private ObiNativeFloatList m_InvMasses; [NonSerialized] private ObiNativeFloatList m_InvRotationalMasses; - [NonSerialized] private ObiNativeVector4List m_InvInertiaTensors; - // external forces + // external forces: [NonSerialized] private ObiNativeVector4List m_ExternalForces; [NonSerialized] private ObiNativeVector4List m_ExternalTorques; [NonSerialized] private ObiNativeVector4List m_Wind; - // deltas + // deltas: [NonSerialized] private ObiNativeVector4List m_PositionDeltas; [NonSerialized] private ObiNativeQuaternionList m_OrientationDeltas; [NonSerialized] private ObiNativeIntList m_PositionConstraintCounts; @@ -225,32 +374,44 @@ namespace Obi [NonSerialized] private ObiNativeIntList m_Filters; // particle shape: - [NonSerialized] private ObiNativeVector4List m_Anisotropies; [NonSerialized] private ObiNativeVector4List m_PrincipalRadii; + [NonSerialized] private ObiNativeVector4List m_RenderableRadii; [NonSerialized] private ObiNativeVector4List m_Normals; - // fluids - [NonSerialized] private ObiNativeVector4List m_Vorticities; + // fluids: + [NonSerialized] private ObiNativeFloatList m_Life; [NonSerialized] private ObiNativeVector4List m_FluidData; + [NonSerialized] private ObiNativeVector4List m_FluidMaterials; /**< fluidRadius / surfTension / viscosity / pressure */ + [NonSerialized] private ObiNativeVector4List m_FluidMaterials2; /**< vorticity / vorticity diffusion / baroclinity / baroclinity diffusion */ + [NonSerialized] private ObiNativeVector4List m_FluidInterface; /**< drag / ambient pressure / buoyancy / miscibility */ [NonSerialized] private ObiNativeVector4List m_UserData; - [NonSerialized] private ObiNativeFloatList m_SmoothingRadii; - [NonSerialized] private ObiNativeFloatList m_Buoyancies; - [NonSerialized] private ObiNativeFloatList m_RestDensities; - [NonSerialized] private ObiNativeFloatList m_Viscosities; - [NonSerialized] private ObiNativeFloatList m_SurfaceTension; - [NonSerialized] private ObiNativeFloatList m_VortConfinement; - [NonSerialized] private ObiNativeFloatList m_AtmosphericDrag; - [NonSerialized] private ObiNativeFloatList m_AtmosphericPressure; - [NonSerialized] private ObiNativeFloatList m_Diffusion; + [NonSerialized] private ObiNativeMatrix4x4List m_Anisotropy; - public ISolverImpl implementation - { - get { return m_SolverImpl; } - } + // foam particles: + [NonSerialized] private ObiNativeVector4List m_FoamPositions; /**< xyz = position, w = amount of neighbors*/ + [NonSerialized] private ObiNativeVector4List m_FoamVelocities; /**< xyz = velocity, w = buoyancy*/ + [NonSerialized] private ObiNativeVector4List m_FoamColors; + [NonSerialized] private ObiNativeVector4List m_FoamAttributes; /**< life, aging rate, size, drag*/ + [NonSerialized] private ObiNativeIntList m_FoamCount; + + // contacts: + [NonSerialized] private ObiNativeContactList m_ColliderContacts; + [NonSerialized] private ObiNativeContactList m_ParticleContacts; + [NonSerialized] private ObiNativeEffectiveMassesList m_ContactEffectiveMasses; + [NonSerialized] private ObiNativeEffectiveMassesList m_ParticleContactEffectiveMasses; + + // queries: + [NonSerialized] private ObiNativeQueryShapeList m_BufferedQueryShapes; + [NonSerialized] private ObiNativeAffineTransformList m_BufferedQueryTransforms; + [NonSerialized] private ObiNativeQueryShapeList m_QueryShapes; + [NonSerialized] private ObiNativeAffineTransformList m_QueryTransforms; + [NonSerialized] private ObiNativeQueryResultList m_QueryResults; + + public ISolverImpl implementation { get; private set; } public bool initialized { - get { return m_SolverImpl != null; } + get { return implementation != null; } } public IObiBackend simulationBackend @@ -276,34 +437,45 @@ namespace Obi get { return m_SimplexCounts; } } - public UnityEngine.Bounds Bounds + /// + /// Solver bounds expressed in world space. + /// + public UnityEngine.Bounds bounds { - get { return bounds; } + get { return m_BoundsWS; } } - public bool IsVisible + /// + /// Solver bounds expressed in the solver's local space. + /// + public UnityEngine.Bounds localBounds { - get { return isVisible; } + get { return m_Bounds; } } - public float maxScale - { - get { return m_MaxScale; } - } + public bool isVisible { get; private set; } = true; + + public float maxScale { get; private set; } = 1; + + public bool simulationInFlight { get; private set; } = false; + + public int pendingQueryCount => bufferedQueryShapes.count; public int allocParticleCount { get { return particleToActor.Count(s => s != null && s.actor != null); } } + public int activeParticleCount => activeParticles.count; + public int contactCount { - get { return m_contactCount; } + get { return (backendType == BackendType.Burst || OnCollision != null) ? colliderContacts.count : 0; } } public int particleContactCount { - get { return m_particleContactCount; } + get { return (backendType == BackendType.Burst || OnParticleCollision != null) ? particleContacts.count : 0; } } public ParticleInActor[] particleToActor @@ -328,6 +500,18 @@ namespace Obi } } + public ObiNativeIntList deadParticles + { + get + { + if (m_DeadParticles == null) + m_DeadParticles = new ObiNativeIntList(); + + return m_DeadParticles; + } + } + + #region Simplices public ObiNativeIntList simplices { get @@ -339,6 +523,42 @@ namespace Obi } } + public ObiNativeIntList points + { + get + { + if (m_Points == null) + m_Points = new ObiNativeIntList(8); + + return m_Points; + } + } + + public ObiNativeIntList edges + { + get + { + if (m_Edges == null) + m_Edges = new ObiNativeIntList(8); + + return m_Edges; + } + } + + public ObiNativeIntList triangles + { + get + { + if (m_Triangles == null) + m_Triangles = new ObiNativeIntList(8); + + return m_Triangles; + } + } + + #endregion + + #region Rigidbodies public ObiNativeVector4List rigidbodyLinearDeltas { get @@ -362,6 +582,7 @@ namespace Obi return m_RigidbodyAngularVelocities; } } + #endregion public ObiNativeColorList colors { @@ -399,15 +620,6 @@ namespace Obi } } - public ObiNativeVector4List restPositions - { - get - { - if (m_RestPositions == null) - m_RestPositions = new ObiNativeVector4List(); - return m_RestPositions; - } - } public ObiNativeVector4List prevPositions { @@ -419,6 +631,16 @@ namespace Obi } } + public ObiNativeVector4List restPositions + { + get + { + if (m_RestPositions == null) + m_RestPositions = new ObiNativeVector4List(); + return m_RestPositions; + } + } + public ObiNativeVector4List startPositions { get @@ -429,6 +651,16 @@ namespace Obi } } + public ObiNativeVector4List endPositions + { + get + { + if (m_EndPositions == null) + m_EndPositions = new ObiNativeVector4List(); + return m_EndPositions; + } + } + public ObiNativeVector4List renderablePositions { get @@ -453,16 +685,6 @@ namespace Obi } } - public ObiNativeQuaternionList restOrientations - { - get - { - if (m_RestOrientations == null) - m_RestOrientations = new ObiNativeQuaternionList(); - return m_RestOrientations; - } - } - public ObiNativeQuaternionList prevOrientations { get @@ -473,6 +695,17 @@ namespace Obi } } + public ObiNativeQuaternionList restOrientations + { + get + { + if (m_RestOrientations == null) + m_RestOrientations = new ObiNativeQuaternionList(); + return m_RestOrientations; + } + } + + public ObiNativeQuaternionList startOrientations { get @@ -483,6 +716,17 @@ namespace Obi } } + public ObiNativeQuaternionList endOrientations + { + get + { + if (m_EndOrientations == null) + m_EndOrientations = new ObiNativeQuaternionList(); + return m_EndOrientations; + } + } + + public ObiNativeQuaternionList renderableOrientations { get @@ -541,16 +785,6 @@ namespace Obi } } - public ObiNativeVector4List invInertiaTensors - { - get - { - if (m_InvInertiaTensors == null) - m_InvInertiaTensors = new ObiNativeVector4List(); - return m_InvInertiaTensors; - } - } - #endregion #region External forces @@ -663,13 +897,13 @@ namespace Obi } } - public ObiNativeVector4List anisotropies + public ObiNativeVector4List renderableRadii { get { - if (m_Anisotropies == null) - m_Anisotropies = new ObiNativeVector4List(); - return m_Anisotropies; + if (m_RenderableRadii == null) + m_RenderableRadii = new ObiNativeVector4List(); + return m_RenderableRadii; } } @@ -697,13 +931,13 @@ namespace Obi #region Fluid properties - public ObiNativeVector4List vorticities + public ObiNativeFloatList life { get { - if (m_Vorticities == null) - m_Vorticities = new ObiNativeVector4List(); - return m_Vorticities; + if (m_Life == null) + m_Life = new ObiNativeFloatList(); + return m_Life; } } @@ -727,103 +961,290 @@ namespace Obi } } - public ObiNativeFloatList smoothingRadii + public ObiNativeVector4List fluidInterface { get { - if (m_SmoothingRadii == null) - m_SmoothingRadii = new ObiNativeFloatList(); - return m_SmoothingRadii; + if (m_FluidInterface == null) + m_FluidInterface = new ObiNativeVector4List(); + return m_FluidInterface; } } - public ObiNativeFloatList buoyancies + public ObiNativeVector4List fluidMaterials { get { - if (m_Buoyancies == null) - m_Buoyancies = new ObiNativeFloatList(); - return m_Buoyancies; + if (m_FluidMaterials == null) + m_FluidMaterials = new ObiNativeVector4List(); + return m_FluidMaterials; } } - public ObiNativeFloatList restDensities + public ObiNativeVector4List fluidMaterials2 { get { - if (m_RestDensities == null) - m_RestDensities = new ObiNativeFloatList(); - return m_RestDensities; + if (m_FluidMaterials2 == null) + m_FluidMaterials2 = new ObiNativeVector4List(); + return m_FluidMaterials2; } } - public ObiNativeFloatList viscosities + public ObiNativeMatrix4x4List anisotropies { get { - if (m_Viscosities == null) - m_Viscosities = new ObiNativeFloatList(); - return m_Viscosities; + if (m_Anisotropy == null) + m_Anisotropy = new ObiNativeMatrix4x4List(); + return m_Anisotropy; } } - public ObiNativeFloatList surfaceTension + public ObiNativeVector4List foamPositions { get { - if (m_SurfaceTension == null) - m_SurfaceTension = new ObiNativeFloatList(); - return m_SurfaceTension; + if (m_FoamPositions == null) + m_FoamPositions = new ObiNativeVector4List(); + return m_FoamPositions; } } - public ObiNativeFloatList vortConfinement + public ObiNativeVector4List foamVelocities { get { - if (m_VortConfinement == null) - m_VortConfinement = new ObiNativeFloatList(); - return m_VortConfinement; + if (m_FoamVelocities == null) + m_FoamVelocities = new ObiNativeVector4List(); + return m_FoamVelocities; } } - public ObiNativeFloatList atmosphericDrag + public ObiNativeVector4List foamColors { get { - if (m_AtmosphericDrag == null) - m_AtmosphericDrag = new ObiNativeFloatList(); - return m_AtmosphericDrag; + if (m_FoamColors == null) + m_FoamColors = new ObiNativeVector4List(); + return m_FoamColors; } } - public ObiNativeFloatList atmosphericPressure + public ObiNativeVector4List foamAttributes { get { - if (m_AtmosphericPressure == null) - m_AtmosphericPressure = new ObiNativeFloatList(); - return m_AtmosphericPressure; + if (m_FoamAttributes == null) + m_FoamAttributes = new ObiNativeVector4List(); + return m_FoamAttributes; } } - public ObiNativeFloatList diffusion + public ObiNativeIntList foamCount { get { - if (m_Diffusion == null) - m_Diffusion = new ObiNativeFloatList(); - return m_Diffusion; + if (m_FoamCount == null) + { + m_FoamCount = new ObiNativeIntList(); + m_FoamCount.ResizeUninitialized(9); + + // post-emission particle dispatch (4 floats), post-update particle dispatch (4 floats), + // plus 1 extra float for storing currently alive particles while updating/killing. + m_FoamCount.CopyFrom(new int[] { 0, 1, 1, 0, 0, 1, 1, 0, 0 }, 0, 0, 9); + } + return m_FoamCount; } } #endregion + #region Contacts - void Update() + public ObiNativeContactList colliderContacts + { + get + { + if (m_ColliderContacts == null) + m_ColliderContacts = new ObiNativeContactList(); + return m_ColliderContacts; + } + } + + public ObiNativeContactList particleContacts + { + get + { + if (m_ParticleContacts == null) + m_ParticleContacts = new ObiNativeContactList(); + return m_ParticleContacts; + } + } + + public ObiNativeEffectiveMassesList contactEffectiveMasses + { + get + { + if (m_ContactEffectiveMasses == null) + m_ContactEffectiveMasses = new ObiNativeEffectiveMassesList(); + return m_ContactEffectiveMasses; + } + } + + public ObiNativeEffectiveMassesList particleContactEffectiveMasses + { + get + { + if (m_ParticleContactEffectiveMasses == null) + m_ParticleContactEffectiveMasses = new ObiNativeEffectiveMassesList(); + return m_ParticleContactEffectiveMasses; + } + } + + #endregion + + #region Queries + + private ObiNativeQueryShapeList bufferedQueryShapes + { + get + { + if (m_BufferedQueryShapes == null) + m_BufferedQueryShapes = new ObiNativeQueryShapeList(); + return m_BufferedQueryShapes; + } + } + + private ObiNativeAffineTransformList bufferedQueryTransforms + { + get + { + if (m_BufferedQueryTransforms == null) + m_BufferedQueryTransforms = new ObiNativeAffineTransformList(8); + return m_BufferedQueryTransforms; + } + } + + private ObiNativeQueryShapeList queryShapes + { + get + { + if (m_QueryShapes == null) + m_QueryShapes = new ObiNativeQueryShapeList(); + return m_QueryShapes; + } + } + + private ObiNativeAffineTransformList queryTransforms + { + get + { + if (m_QueryTransforms == null) + m_QueryTransforms = new ObiNativeAffineTransformList(8); + return m_QueryTransforms; + } + } + + public ObiNativeQueryResultList queryResults + { + get + { + if (m_QueryResults == null) + m_QueryResults = new ObiNativeQueryResultList(); + return m_QueryResults; + } + } + + #endregion + + public void OnEnable() + { + bufferedSynchronization = synchronization; + accumulatedTime = 0; + } + + private void FixedUpdate() + { + // first fixed update this frame: + if (steps++ == 0) + { + // Wait for the previous frame's simulation to end and GPU data to be available. + if (bufferedSynchronization == Synchronization.Asynchronous) + CompleteSimulation(); + } + + if (bufferedSynchronization == Synchronization.SynchronousFixed) + { + // Update collider world: + ObiColliderWorld.GetInstance().SetDirty(); + ObiColliderWorld.GetInstance().UpdateWorld(Time.fixedDeltaTime); + + // kick off this step's simulation, and immediately wait for it to complete: + StartSimulation(Time.fixedDeltaTime, 1); + CompleteSimulation(); + } + + } + + private void Update() + { + ObiColliderWorld.GetInstance().SetDirty(); + } + + private void LateUpdate() { var scale = transform.lossyScale; - m_MaxScale = Mathf.Max(Mathf.Max(scale.x, scale.y), scale.z); + maxScale = Mathf.Max(Mathf.Max(scale.x, scale.y), scale.z); + + // Accumulate amount of time to simulate (duration of the frame - time already simulated) + if (Application.isPlaying) + { + // Make sure ObiColliderWorld updates after all solvers have called CompleteSimulation() on their FixedUpdate. + // This way we can be sure no physics updates are in flight. + // Only update acceleration structures and rigidbodies if a physics step will take place. + ObiColliderWorld.GetInstance().UpdateWorld(Time.fixedDeltaTime * steps, steps > 0 && bufferedSynchronization != Synchronization.SynchronousFixed); + + // Accumulate time and clamp it to a single timestep, in case the simulation is lagging behind rendering (dropping time). + accumulatedTime += Time.deltaTime - Time.fixedDeltaTime * steps; + accumulatedTime = Mathf.Clamp(accumulatedTime, 0, Time.fixedDeltaTime); + } + else + { + // if in editor, we don't accumulate any simulation time + // and just update solver bounds before rendering/simulation. + accumulatedTime = 0; + UpdateBounds(); + } + + if (bufferedSynchronization == Synchronization.Asynchronous || + bufferedSynchronization == Synchronization.SynchronousFixed) + Render(accumulatedTime); + + // if in play mode, kick off this frame's simulation. + if (Application.isPlaying && bufferedSynchronization != Synchronization.SynchronousFixed) + StartSimulation(Time.fixedDeltaTime, steps); + + if (bufferedSynchronization == Synchronization.Synchronous) + { + // if the simulation has been stepped this frame, + // sychronously wait for completion before rendering. + if (steps > 0) + CompleteSimulation(); + + Render(accumulatedTime); + } + + // Reset step counter to zero, now that + // simulation tasks for this frame have been dispatched. + steps = 0; + } + + private void OnApplicationQuit() + { + // Make sure solvers finish their simulation before Unity automatically destroys collider world + // when closing app or exiting play mode. + OnDestroy(); } private void OnDestroy() @@ -841,16 +1262,23 @@ namespace Obi #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) case BackendType.Burst: m_SimulationBackend = new BurstBackend(); break; #endif -#if (OBI_ONI_SUPPORTED) - case BackendType.Oni: m_SimulationBackend = new OniBackend(); break; -#endif + case BackendType.Compute: + + if (SystemInfo.supportsComputeShaders) + m_SimulationBackend = new ComputeBackend(); + else + goto default; + break; default: -#if (OBI_ONI_SUPPORTED) - m_SimulationBackend = new OniBackend(); -#else - m_SimulationBackend = new NullBackend(); -#endif + Debug.LogWarning("The Burst backend depends on the following packages: Mathematics, Collections, Jobs and Burst. Please install the required dependencies. Simulation will fall back to the compute backend, if possible."); + if (SystemInfo.supportsComputeShaders) + m_SimulationBackend = new ComputeBackend(); + else + { + Debug.LogError("This platform doesn't support compute shaders. Please switch to the Burst backend."); + m_SimulationBackend = new NullBackend(); + } break; } } @@ -861,11 +1289,17 @@ namespace Obi { CreateBackend(); + substepTime = Time.fixedDeltaTime / substeps; + // Set up local actor and particle buffers: actors = new List(); freeList = new ObiNativeIntList(); m_ParticleToActor = new ParticleInActor[0]; + deformableUVs = new ObiNativeVector2List(); + deformableTriangles = new ObiNativeIntList(); + deformableEdges = new ObiNativeIntList(); + // Create constraints: m_Constraints[(int)Oni.ConstraintType.Distance] = new ObiDistanceConstraintsData(); m_Constraints[(int)Oni.ConstraintType.Bending] = new ObiBendConstraintsData(); @@ -878,19 +1312,32 @@ namespace Obi m_Constraints[(int)Oni.ConstraintType.Tether] = new ObiTetherConstraintsData(); m_Constraints[(int)Oni.ConstraintType.Skin] = new ObiSkinConstraintsData(); m_Constraints[(int)Oni.ConstraintType.Pin] = new ObiPinConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.Pinhole] = new ObiPinholeConstraintsData(); // Create the solver: - m_SolverImpl = m_SimulationBackend.CreateSolver(this, 0); + implementation = m_SimulationBackend.CreateSolver(this, 0); // Set data arrays: - m_SolverImpl.ParticleCountChanged(this); - m_SolverImpl.SetRigidbodyArrays(this); + implementation.ParticleCountChanged(this); + implementation.SetRigidbodyArrays(this); + OnParticleCountChanged?.Invoke(this); // Initialize moving transform: InitializeTransformFrame(); + // Force initial collider world update: + ObiColliderWorld.GetInstance().SetDirty(); + ObiColliderWorld.GetInstance().UpdateWorld(0); + ObiColliderWorld.GetInstance().SetDirty(); + + OnInitialize?.Invoke(this); + // Set initial parameter values: PushSolverParameters(); + +#if UNITY_EDITOR + ObiActorEditorSelectionHandler.SolverInitialized(this); +#endif } } @@ -898,18 +1345,29 @@ namespace Obi { if (initialized) { + CompleteSimulation(); + // Clear all constraints: PushConstraints(); - // Destroy the Oni solver: - m_SimulationBackend.DestroySolver(m_SolverImpl); - m_SolverImpl = null; + // Destroy the solver: + m_SimulationBackend.DestroySolver(implementation); + implementation = null; // Free particle / rigidbody memory: FreeParticleArrays(); FreeRigidbodyArrays(); freeList.Dispose(); + + // Reset bounds: + m_Bounds = new Bounds(); + + OnTeardown?.Invoke(this); + +#if UNITY_EDITOR + ObiActorEditorSelectionHandler.SolverTeardown(this); +#endif } } @@ -921,6 +1379,7 @@ namespace Obi actor.RemoveFromSolver(); // re-add all actors. + // Solver will be re-initialized on adding the first one. foreach (ObiActor actor in temp) actor.AddToSolver(); } @@ -936,23 +1395,30 @@ namespace Obi public void EnsureRigidbodyArraysCapacity(int count) { - if (initialized && count >= rigidbodyLinearDeltas.count) + if (initialized && (count > rigidbodyLinearDeltas.count || !rigidbodyLinearDeltas.isCreated)) { rigidbodyLinearDeltas.ResizeInitialized(count); rigidbodyAngularDeltas.ResizeInitialized(count); - m_SolverImpl.SetRigidbodyArrays(this); + implementation.SetRigidbodyArrays(this); } } private void FreeParticleArrays() { activeParticles.Dispose(); + deadParticles.Dispose(); simplices.Dispose(); + points.Dispose(); + edges.Dispose(); + triangles.Dispose(); + colors.Dispose(); cellCoords.Dispose(); startPositions.Dispose(); + endPositions.Dispose(); startOrientations.Dispose(); + endOrientations.Dispose(); positions.Dispose(); prevPositions.Dispose(); restPositions.Dispose(); @@ -969,17 +1435,17 @@ namespace Obi filters.Dispose(); renderablePositions.Dispose(); renderableOrientations.Dispose(); + renderableRadii.Dispose(); + fluidInterface.Dispose(); + fluidMaterials.Dispose(); + fluidMaterials2.Dispose(); + foamPositions.Dispose(); + foamVelocities.Dispose(); + foamColors.Dispose(); + foamAttributes.Dispose(); + foamCount.Dispose(); anisotropies.Dispose(); - smoothingRadii.Dispose(); - buoyancies.Dispose(); - restDensities.Dispose(); - viscosities.Dispose(); - surfaceTension.Dispose(); - vortConfinement.Dispose(); - atmosphericDrag.Dispose(); - atmosphericPressure.Dispose(); - diffusion.Dispose(); - vorticities.Dispose(); + life.Dispose(); fluidData.Dispose(); userData.Dispose(); externalForces.Dispose(); @@ -990,27 +1456,46 @@ namespace Obi positionConstraintCounts.Dispose(); orientationConstraintCounts.Dispose(); normals.Dispose(); - invInertiaTensors.Dispose(); + colliderContacts.Dispose(); + particleContacts.Dispose(); + contactEffectiveMasses.Dispose(); + particleContactEffectiveMasses.Dispose(); + + bufferedQueryShapes.Dispose(); + bufferedQueryTransforms.Dispose(); + queryShapes.Dispose(); + queryTransforms.Dispose(); + queryResults.Dispose(); + + deformableUVs.Dispose(); + deformableTriangles.Dispose(); + deformableEdges.Dispose(); m_ActiveParticles = null; + m_DeadParticles = null; m_Simplices = null; + m_Points = null; + m_Edges = null; + m_Triangles = null; + m_Colors = null; m_CellCoords = null; m_Positions = null; m_RestPositions = null; m_PrevPositions = null; m_StartPositions = null; + m_EndPositions = null; m_RenderablePositions = null; m_Orientations = null; m_RestOrientations = null; m_PrevOrientations = null; m_StartOrientations = null; + m_EndOrientations = null; m_RenderableOrientations = null; m_Velocities = null; m_AngularVelocities = null; m_InvMasses = null; m_InvRotationalMasses = null; - m_InvInertiaTensors = null; m_ExternalForces = null; m_ExternalTorques = null; m_Wind = null; @@ -1021,21 +1506,35 @@ namespace Obi m_CollisionMaterials = null; m_Phases = null; m_Filters = null; - m_Anisotropies = null; + m_RenderableRadii = null; m_PrincipalRadii = null; m_Normals = null; - m_Vorticities = null; + m_Life = null; m_FluidData = null; m_UserData = null; - m_SmoothingRadii = null; - m_Buoyancies = null; - m_RestDensities = null; - m_Viscosities = null; - m_SurfaceTension = null; - m_VortConfinement = null; - m_AtmosphericDrag = null; - m_AtmosphericPressure = null; - m_Diffusion = null; + m_FluidInterface = null; + m_FluidMaterials = null; + m_FluidMaterials2 = null; + m_FoamPositions = null; + m_FoamVelocities = null; + m_FoamColors = null; + m_FoamAttributes = null; + m_FoamCount = null; + m_Anisotropy = null; + m_ColliderContacts = null; + m_ParticleContacts = null; + m_ContactEffectiveMasses = null; + m_ParticleContactEffectiveMasses = null; + + m_BufferedQueryShapes = null; + m_BufferedQueryTransforms = null; + m_QueryShapes = null; + m_QueryTransforms = null; + m_QueryResults = null; + + deformableUVs = null; + deformableTriangles = null; + deformableEdges = null; } private void EnsureParticleArraysCapacity(int count) @@ -1043,12 +1542,15 @@ namespace Obi // only resize if the count is larger than the current amount of particles: if (count >= positions.count) { - colors.ResizeInitialized(count); + colors.ResizeInitialized(count, Color.white); + deadParticles.ResizeInitialized(count); startPositions.ResizeInitialized(count); + endPositions.ResizeInitialized(count); positions.ResizeInitialized(count); prevPositions.ResizeInitialized(count); restPositions.ResizeInitialized(count); startOrientations.ResizeInitialized(count, Quaternion.identity); + endOrientations.ResizeInitialized(count, Quaternion.identity); orientations.ResizeInitialized(count, Quaternion.identity); prevOrientations.ResizeInitialized(count, Quaternion.identity); restOrientations.ResizeInitialized(count, Quaternion.identity); @@ -1062,17 +1564,12 @@ namespace Obi collisionMaterials.ResizeInitialized(count); phases.ResizeInitialized(count); filters.ResizeInitialized(count); - anisotropies.ResizeInitialized(count * 3); - smoothingRadii.ResizeInitialized(count); - buoyancies.ResizeInitialized(count); - restDensities.ResizeInitialized(count); - viscosities.ResizeInitialized(count); - surfaceTension.ResizeInitialized(count); - vortConfinement.ResizeInitialized(count); - atmosphericDrag.ResizeInitialized(count); - atmosphericPressure.ResizeInitialized(count); - diffusion.ResizeInitialized(count); - vorticities.ResizeInitialized(count); + renderableRadii.ResizeInitialized(count); + fluidInterface.ResizeInitialized(count); + fluidMaterials.ResizeInitialized(count); + fluidMaterials2.ResizeInitialized(count); + anisotropies.ResizeInitialized(count); + life.ResizeInitialized(count, float.PositiveInfinity); fluidData.ResizeInitialized(count); userData.ResizeInitialized(count); externalForces.ResizeInitialized(count); @@ -1083,9 +1580,9 @@ namespace Obi positionConstraintCounts.ResizeInitialized(count); orientationConstraintCounts.ResizeInitialized(count); normals.ResizeInitialized(count); - invInertiaTensors.ResizeInitialized(count); - m_SolverImpl.ParticleCountChanged(this); + // reset dead particles counter to zero. + deadParticles.count = 0; } if (count >= m_ParticleToActor.Length) @@ -1094,38 +1591,366 @@ namespace Obi } } - private void AllocateParticles(int[] particleIndices) + private void UpdateFoamParticleCapacity() + { + if (maxFoamParticles != foamPositions.count) + { + foamPositions.ResizeUninitialized((int)maxFoamParticles); + foamVelocities.ResizeUninitialized((int)maxFoamParticles); + foamColors.ResizeUninitialized((int)maxFoamParticles); + foamAttributes.ResizeUninitialized((int)maxFoamParticles); + foamCount[3] = Mathf.Min(foamCount[3], (int)maxFoamParticles); + + implementation.MaxFoamParticleCountChanged(this); + } + } + + private void AllocateParticles(ObiNativeIntList particleIndices) { // If attempting to allocate more particles than we have: - if (particleIndices.Length > freeList.count) + if (particleIndices.count > freeList.count) { - int grow = particleIndices.Length - freeList.count; + int grow = particleIndices.count - freeList.count; // append new free indices: for (int i = 0; i < grow; ++i) freeList.Add(positions.count + i); // grow particle arrays: - EnsureParticleArraysCapacity(positions.count + particleIndices.Length); + EnsureParticleArraysCapacity(positions.count + particleIndices.count); } // determine first particle in the free list to use: - int first = freeList.count - particleIndices.Length; + int first = freeList.count - particleIndices.count; // copy free indices to the input array: - freeList.CopyTo(particleIndices, first, particleIndices.Length); + particleIndices.CopyFrom(freeList, first, 0, particleIndices.count); // shorten the free list: freeList.ResizeUninitialized(first); } - private void FreeParticles(int[] particleIndices) + private void FreeParticles(ObiNativeIntList particleIndices) { freeList.AddRange(particleIndices); } + private void CollisionCallbacks() + { + if (OnCollision != null) + { + colliderContacts.WaitForReadback(); + OnCollision.Invoke(this, colliderContacts); + } + if (OnParticleCollision != null) + { + particleContacts.WaitForReadback(); + OnParticleCollision.Invoke(this, particleContacts); + } + if (OnAdvection != null) + { + foamPositions.WaitForReadback(); + foamVelocities.WaitForReadback(); + foamAttributes.WaitForReadback(); + foamColors.WaitForReadback(); + foamCount.WaitForReadback(); + + OnAdvection.Invoke(this); + + + foamPositions.Upload(); + foamVelocities.Upload(); + foamAttributes.Upload(); + foamColors.Upload(); + foamCount.Upload(); + } + } + + private void NotifyDeceasedParticles() + { + deadParticles.WaitForReadback(); + + int dead = deadParticles.count; + for (int i = 0; i < dead; ++i) + { + int index = deadParticles[i]; + var pa = particleToActor[index]; + if (pa != null) + pa.actor.DeactivateParticle(pa.indexInActor); + } + + deadParticles.count = 0; + } + + public void StartSimulation(float stepDelta, int simulationSteps) + { + if (simulationSteps > 0) + { + // Complete previous simulation call, if any: + CompleteSimulation(); + + simulatedTime = stepDelta * simulationSteps; // physics time that has been simulated by Unity this frame. Might be more than the time we actually simulate, due to maxStepsPerFrame. + substepTime = stepDelta / substeps; // duration of a substep. + + // only update buffered synchronization before starting a new step. + bufferedSynchronization = synchronization; + + // notify actors of dead particles, so they can deactivate them. Do this before inserting new actors, + // as actor insertion might trigger a resizing of the deadParticles buffer. + NotifyDeceasedParticles(); + + // AddActor() calls are buffered, new actors should be inserted as this particular point in time: + while (addBuffer.TryDequeue(out ObiActor actor)) + InsertBufferedActor(actor); + + if (initialized && maxStepsPerFrame > 0) + { + simulationInFlight = true; + + int frameSubsteps = Mathf.Min(maxStepsPerFrame, simulationSteps) * substeps; // amount of substeps *actually* simulated this frame. + float timeToSimulate = frameSubsteps * substepTime; // amount of time we need to simulate, might be less than simulatedTime. + + UpdateFoamParticleCapacity(); + + // Update collision materials/rigidbodies after adding new actors to make sure collision materials are up to date. + // Also call it before SimulationStart, so that constraints referencing rigidbodies (such as Pin constraints in attachments) + // use handle data that's up to date. + using (m_UpdateColliderWorld.Auto()) + { + ObiColliderWorld.GetInstance().UpdateCollisionMaterials(); + EnsureRigidbodyArraysCapacity(ObiColliderWorld.GetInstance().rigidbodyHandles.Count); + } + + // We need SimulationStart to be called before PushConstraints for updating pin constraints. + OnSimulationStart?.Invoke(this, timeToSimulate, substepTime); + foreach (ObiActor actor in actors) + actor.SimulationStart(timeToSimulate, substepTime); + + // Update the active particles array: + PushActiveParticles(); + + // Update the simplices array: + PushSimplices(); + + // Update deformable triangles/edges arrays: + PushDeformableTriangles(); + PushDeformableEdges(); + + // Update constraint batches: + PushConstraints(); + + // Update parameters: + parameters.gravity = gravitySpace == Space.World ? transform.InverseTransformVector(gravity) : gravity; + parameters.ambientWind = windSpace == Space.World ? transform.InverseTransformVector(ambientWind) : ambientWind; + implementation.SetParameters(parameters); + + // Notify render systems that a step has started: + m_RenderSystems.Step(); + + // CPU -> GPU data transfer + implementation.PushData(); + + OnCollisionDetectionStart?.Invoke(this, timeToSimulate, substepTime); + foreach (ObiActor actor in actors) + actor.CollisionDetectionStart(timeToSimulate, substepTime); + + // Update inertial reference frame: + simulationHandle = UpdateTransformFrame(simulatedTime); + + // Calculate bounds and update particle lifetimes. + simulationHandle = implementation.UpdateBounds(simulationHandle, simulatedTime); + + // Perform collision detection: + if (simulateWhenInvisible || isVisible) + { + simulationHandle = implementation.CollisionDetection(simulationHandle, simulatedTime); + simulationHandle?.Complete(); // complete here, since several jobs need fluidParticles.Length. TODO: use deferred jobs. + } + + // Perform queued queries. This ensures queries "see" the same state as collision callbacks, and ensures no + // data races (queries performed while the simulation is running). + FlushSpatialQueries(); + + OnSubstepsStart?.Invoke(this, timeToSimulate, substepTime); + foreach (ObiActor actor in actors) + actor.SubstepsStart(timeToSimulate, substepTime); + + // Divide each step into multiple substeps: + float timeLeft = simulatedTime; + for (int i = 0; i < frameSubsteps; ++i) + { + // Only update the solver if it is visible, or if we must simulate even when invisible. + if ((simulateWhenInvisible || isVisible) && initialized) + { + simulationHandle = implementation.Substep(simulationHandle, stepDelta, substepTime, simulationSteps, timeLeft); + } + timeLeft -= substepTime; + } + + timeSinceSimulationStart += timeToSimulate; + + // Request GPU data to be brought back to the CPU. + RequestReadback(); + } + } + } + + private void FlushSpatialQueries() + { + while (bufferedQueryShapes.count > 0) + { + // copy buffered queries to the lists used for performing the queries: + queryShapes.ResizeUninitialized(bufferedQueryShapes.count); + queryTransforms.ResizeUninitialized(bufferedQueryTransforms.count); + + queryShapes.CopyFrom(bufferedQueryShapes); + queryTransforms.CopyFrom(bufferedQueryTransforms); + + bufferedQueryShapes.Clear(); + bufferedQueryTransforms.Clear(); + + implementation.SpatialQuery(queryShapes, queryTransforms, queryResults); + queryResults.Readback(); + + if (synchronousSpatialQueries) + { + // Wait for query results right now and trigger query results event: + queryResults.WaitForReadback(); + OnSpatialQueryResults?.Invoke(this, queryResults); + } + } + } + + public void CompleteSimulation() + { + // if the solver is not yet initialized or there's no previous call to SimulationStart, return. + if (!initialized || !simulationInFlight) + return; + + // Make sure previous simulation call has completed. + simulationHandle?.Complete(); + + // Update physics state for rendering, and wait for GPU readbacks to finish. + implementation.FinishSimulation(); + + // Trigger simulation end callback, after GPU readbacks are completed but before query/collision callbacks. + OnSimulationEnd?.Invoke(this, simulatedTime, substepTime); + foreach (ObiActor actor in actors) + actor.SimulationEnd(simulatedTime, substepTime); + + // Update rigidbody velocities with the simulation results: + ObiColliderWorld.GetInstance().UpdateRigidbodyVelocities(this); + + // Trigger spatial query results: + if (!synchronousSpatialQueries) + { + queryResults.WaitForReadback(); + OnSpatialQueryResults?.Invoke(this, queryResults); + } + + // Trigger collision callbacks now that GPU data (including rigidbody velocity deltas) is available. + CollisionCallbacks(); + + simulationInFlight = false; + } + + /// + /// Performs physics state interpolation and updates rendering. + /// + /// Remaining time that could not be simulated during this frame (in seconds). This is used to interpolate physics state. + public void Render(float unsimulatedTime) + { + if (!initialized) + return; + + // Only perform interpolation if the solver is visible, or if we must simulate even when invisible. + if (simulateWhenInvisible || isVisible) + { + using (m_StateInterpolationPerfMarker.Auto()) + { + // interpolate physics state: + simulationHandle = implementation.ApplyInterpolation(simulationHandle, startPositions, startOrientations, Time.fixedDeltaTime, unsimulatedTime); + } + } + + simulationHandle?.Complete(); + + // test bounds against all cameras to update visibility. + UpdateVisibility(); + + OnInterpolate?.Invoke(this, simulatedTime, substepTime); + + foreach (ObiActor actor in actors) + actor.Interpolate(simulatedTime, substepTime); + + if (!Application.isPlaying) + { + // in-editor, actors update their positions/orientations in Interpolate when transformed, + // so we must copy them to the GPU: + positions.Upload(); + orientations.Upload(); + renderablePositions.Upload(); + renderableOrientations.Upload(); + } + + // Update render systems if dirty: + if (dirtyRendering != 0) + { + m_RenderSystems.Setup(dirtyRendering); + dirtyRendering = 0; + } + + // Only render if visible: + if (simulateWhenInvisible || isVisible) + m_RenderSystems.Render(); + } + + private void UpdateBounds() + { + // While in-editor, update active particles and simplices so that + // solver bounds are correct. + if (initialized) + { + PushActiveParticles(); + PushSimplices(); + + simulationHandle = UpdateTransformFrame(0); + simulationHandle = implementation.UpdateBounds(simulationHandle, 0); + simulationHandle?.Complete(); + } + } + + private void RequestReadback() + { + if (!initialized) + return; + + OnRequestReadback?.Invoke(this); + foreach (ObiActor actor in actors) + actor.RequestReadback(); + + implementation.RequestReadback(); + + // We must read the entire contacts buffer instead of the amount of contacts the CPU + // has from last frame, since we need to get both the counter value and the contacts data on the same + // frame. Alternative would be to read back amount of contacts from last frame, but that + // means we could find invalid/uninitialized contacts if the amount of contacts decreases from one frame to the next. + if (OnCollision != null) + colliderContacts.Readback(); + if (OnParticleCollision != null) + particleContacts.Readback(); + + if (OnAdvection != null) + { + foamPositions.Readback(); + foamVelocities.Readback(); + foamAttributes.Readback(); + foamColors.Readback(); + foamCount.Readback(); + } + } /// /// Adds an actor to the solver. @@ -1139,28 +1964,17 @@ namespace Obi /// public bool AddActor(ObiActor actor) { - if (actor == null) + if (actor == null || actors == null || actor.sourceBlueprint == null || actor.sourceBlueprint.empty || actors.Contains(actor) || addBuffer.Contains(actor)) return false; - if ((actors == null || !actors.Contains(actor)) && actor.sourceBlueprint != null) - { - // If the solver is not initialized yet, do so: - Initialize(); - - actor.solverIndices = new int[actor.sourceBlueprint.particleCount]; - - AllocateParticles(actor.solverIndices); - - for (int i = 0; i < actor.solverIndices.Length; ++i) - particleToActor[actor.solverIndices[i]] = new ObiSolver.ParticleInActor(actor, i); - - actors.Add(actor); - - actor.LoadBlueprint(this); - } + // in-editor, we insert actors right away since the simulation is not running, + // yet we need to perform rendering. + if (!Application.isPlaying) + InsertBufferedActor(actor); + else + addBuffer.Enqueue(actor); return true; - } /// @@ -1175,27 +1989,34 @@ namespace Obi /// public bool RemoveActor(ObiActor actor) { - if (actor == null) return false; + // remove from add buffer: TODO: use list instead of queue. + addBuffer = new Queue(addBuffer.Where(s => s != actor)); + // Find actor index in our actors array: int index = actors.IndexOf(actor); // If we are in charge of this actor indeed, perform all steps necessary to release it. if (index >= 0) { - actor.UnloadBlueprint(this); + actor.UnloadBlueprint(); - for (int i = 0; i < actor.solverIndices.Length; ++i) + for (int i = 0; i < actor.solverIndices.count; ++i) particleToActor[actor.solverIndices[i]] = null; FreeParticles(actor.solverIndices); + freeGroupIDs.Push(actor.groupID); actors.RemoveAt(index); + actor.solverIndices.Dispose(); actor.solverIndices = null; + for (int i = 0; i < actor.solverBatchOffsets.Length; ++i) + actor.solverBatchOffsets[i].Clear(); + // If this was the last actor in the solver, tear it down: if (actors.Count == 0) Teardown(); @@ -1206,6 +2027,35 @@ namespace Obi return false; } + private void InsertBufferedActor(ObiActor actor) + { + if (actor == null) + return; + + // If the solver is not initialized yet, do so: + Initialize(); + + if (actor.solverIndices == null) + actor.solverIndices = new ObiNativeIntList(); + actor.solverIndices.ResizeUninitialized(actor.sourceBlueprint.particleCount); + + AllocateParticles(actor.solverIndices); + + for (int i = 0; i < actor.solverIndices.count; ++i) + particleToActor[actor.solverIndices[i]] = new ParticleInActor(actor, i); + + actors.Add(actor); + + if (freeGroupIDs.Count == 0) + freeGroupIDs.Push(actors.Count); + actor.groupID = freeGroupIDs.Pop(); + + actor.LoadBlueprint(); + + implementation.ParticleCountChanged(this); + OnParticleCountChanged?.Invoke(this); + } + /// /// Updates solver parameters. /// @@ -1215,39 +2065,41 @@ namespace Obi if (!initialized) return; - m_SolverImpl.SetParameters(parameters); + implementation.SetParameters(parameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Distance, ref distanceConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Distance, ref distanceConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Bending, ref bendingConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Bending, ref bendingConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.ParticleCollision, ref particleCollisionConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.ParticleCollision, ref particleCollisionConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.ParticleFriction, ref particleFrictionConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.ParticleFriction, ref particleFrictionConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Collision, ref collisionConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Collision, ref collisionConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Friction, ref frictionConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Friction, ref frictionConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Density, ref densityConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Density, ref densityConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Skin, ref skinConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Skin, ref skinConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Volume, ref volumeConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Volume, ref volumeConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.ShapeMatching, ref shapeMatchingConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.ShapeMatching, ref shapeMatchingConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Tether, ref tetherConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Tether, ref tetherConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Pin, ref pinConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Pin, ref pinConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Stitch, ref stitchConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Pinhole, ref pinholeConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.StretchShear, ref stretchShearConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Stitch, ref stitchConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.BendTwist, ref bendTwistConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.StretchShear, ref stretchShearConstraintParameters); - m_SolverImpl.SetConstraintGroupParameters(Oni.ConstraintType.Chain, ref chainConstraintParameters); + implementation.SetConstraintGroupParameters(Oni.ConstraintType.BendTwist, ref bendTwistConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Chain, ref chainConstraintParameters); if (OnUpdateParameters != null) OnUpdateParameters(this); @@ -1278,6 +2130,7 @@ namespace Obi case Oni.ConstraintType.ShapeMatching: return shapeMatchingConstraintParameters; case Oni.ConstraintType.Tether: return tetherConstraintParameters; case Oni.ConstraintType.Pin: return pinConstraintParameters; + case Oni.ConstraintType.Pinhole: return pinholeConstraintParameters; case Oni.ConstraintType.Stitch: return stitchConstraintParameters; case Oni.ConstraintType.Density: return densityConstraintParameters; case Oni.ConstraintType.StretchShear: return stretchShearConstraintParameters; @@ -1305,153 +2158,218 @@ namespace Obi private void PushActiveParticles() { - activeParticles.Clear(); - for (int i = 0; i < actors.Count; ++i) + if (dirtyActiveParticles) { - ObiActor currentActor = actors[i]; - - if (currentActor.isActiveAndEnabled) + using (m_PushActiveParticles.Auto()) { - for (int j = 0; j < currentActor.activeParticleCount; ++j) - activeParticles.Add(currentActor.solverIndices[j]); + activeParticles.Clear(); + for (int i = 0; i < actors.Count; ++i) + { + if (actors[i].isActiveAndEnabled) + activeParticles.AddRange(actors[i].solverIndices, actors[i].activeParticleCount); + } + + implementation.SetActiveParticles(activeParticles); + + dirtyActiveParticles = false; } } + } - implementation.SetActiveParticles(activeParticles); - dirtyActiveParticles = false; + private void PushDeformableTriangles() + { + if (dirtyDeformableTriangles) + { + using (m_PushDeformableTriangles.Auto()) + { + deformableTriangles.Clear(); + deformableUVs.Clear(); + + for (int i = 0; i < actors.Count; ++i) + { + ObiActor currentActor = actors[i]; + if (currentActor.isActiveAndEnabled) + { + currentActor.ProvideDeformableTriangles(deformableTriangles, deformableUVs); + } + } + + implementation.SetDeformableTriangles(deformableTriangles, deformableUVs); + + dirtyDeformableTriangles = false; + } + } + } + + private void PushDeformableEdges() + { + if (dirtyDeformableEdges) + { + using (m_PushDeformableEdges.Auto()) + { + deformableEdges.Clear(); + + for (int i = 0; i < actors.Count; ++i) + { + ObiActor currentActor = actors[i]; + if (currentActor.isActiveAndEnabled) + { + currentActor.ProvideDeformableEdges(deformableEdges); + } + } + + implementation.SetDeformableEdges(deformableEdges); + + dirtyDeformableEdges = false; + } + } } private void PushSimplices() { - simplices.Clear(); - points.Clear(); - edges.Clear(); - triangles.Clear(); - for (int i = 0; i < actors.Count; ++i) + if (dirtySimplices != Oni.SimplexType.None) { - ObiActor currentActor = actors[i]; - - if (currentActor.isActiveAndEnabled && currentActor.isLoaded) + using (m_PushSimplices.Auto()) { - //simplex based contacts - if (currentActor.surfaceCollisions) + simplices.Clear(); + + if ((dirtySimplices & Oni.SimplexType.Point) != 0) + points.Clear(); + + if ((dirtySimplices & Oni.SimplexType.Edge) != 0) + edges.Clear(); + + if ((dirtySimplices & Oni.SimplexType.Triangle) != 0) + triangles.Clear(); + + for (int i = 0; i < actors.Count; ++i) { - if (currentActor.blueprint.points != null) - for (int j = 0; j < currentActor.blueprint.points.Length; ++j) + var currentActor = actors[i]; + + if (currentActor.isActiveAndEnabled && currentActor.isLoaded) + { + //simplex based contacts + if (currentActor.surfaceCollisions) { - int actorIndex = currentActor.blueprint.points[j]; + if (currentActor.sharedBlueprint.points != null && (dirtySimplices & Oni.SimplexType.Point) != 0) + for (int j = 0; j < currentActor.sharedBlueprint.points.Length; ++j) + { + int actorIndex = currentActor.sharedBlueprint.points[j]; - if (actorIndex < currentActor.activeParticleCount) - points.Add(currentActor.solverIndices[actorIndex]); + if (actorIndex < currentActor.activeParticleCount) + points.Add(currentActor.solverIndices[actorIndex]); + } + + if (currentActor.sharedBlueprint.edges != null && (dirtySimplices & Oni.SimplexType.Edge) != 0) + for (int j = 0; j < currentActor.sharedBlueprint.edges.Length / 2; ++j) + { + int actorIndex1 = currentActor.sharedBlueprint.edges[j * 2]; + int actorIndex2 = currentActor.sharedBlueprint.edges[j * 2 + 1]; + + if (actorIndex1 < currentActor.activeParticleCount && actorIndex2 < currentActor.activeParticleCount) + { + edges.Add(currentActor.solverIndices[actorIndex1]); + edges.Add(currentActor.solverIndices[actorIndex2]); + } + } + + if (currentActor.sharedBlueprint.triangles != null && (dirtySimplices & Oni.SimplexType.Triangle) != 0) + for (int j = 0; j < currentActor.sharedBlueprint.triangles.Length / 3; ++j) + { + int actorIndex1 = currentActor.sharedBlueprint.triangles[j * 3]; + int actorIndex2 = currentActor.sharedBlueprint.triangles[j * 3 + 1]; + int actorIndex3 = currentActor.sharedBlueprint.triangles[j * 3 + 2]; + + if (actorIndex1 < currentActor.activeParticleCount && + actorIndex2 < currentActor.activeParticleCount && + actorIndex3 < currentActor.activeParticleCount) + { + triangles.Add(currentActor.solverIndices[actorIndex1]); + triangles.Add(currentActor.solverIndices[actorIndex2]); + triangles.Add(currentActor.solverIndices[actorIndex3]); + } + } } - - if (currentActor.blueprint.edges != null) - for (int j = 0; j < currentActor.blueprint.edges.Length / 2; ++j) + // particle based contacts + else if ((dirtySimplices & Oni.SimplexType.Point) != 0) { - int actorIndex1 = currentActor.blueprint.edges[j * 2]; - int actorIndex2 = currentActor.blueprint.edges[j * 2 + 1]; - - if (actorIndex1 < currentActor.activeParticleCount && actorIndex2 < currentActor.activeParticleCount) - { - edges.Add(currentActor.solverIndices[actorIndex1]); - edges.Add(currentActor.solverIndices[actorIndex2]); - } - } - - if (currentActor.blueprint.triangles != null) - for (int j = 0; j < currentActor.blueprint.triangles.Length / 3; ++j) - { - int actorIndex1 = currentActor.blueprint.triangles[j * 3]; - int actorIndex2 = currentActor.blueprint.triangles[j * 3 + 1]; - int actorIndex3 = currentActor.blueprint.triangles[j * 3 + 2]; // TODO: +1: degenerate triangles. check out! - - if (actorIndex1 < currentActor.activeParticleCount && - actorIndex2 < currentActor.activeParticleCount && - actorIndex3 < currentActor.activeParticleCount) - { - triangles.Add(currentActor.solverIndices[actorIndex1]); - triangles.Add(currentActor.solverIndices[actorIndex2]); - triangles.Add(currentActor.solverIndices[actorIndex3]); - } + // generate a point simplex out of each active particle: + points.AddRange(currentActor.solverIndices, currentActor.activeParticleCount); } + } } - // particle based contacts - else - { - // generate a point simplex out of each active particle: - for (int j = 0; j < currentActor.activeParticleCount; ++j) - points.Add(currentActor.solverIndices[j]); - } + + simplices.EnsureCapacity(points.count + edges.count + triangles.count); + simplices.AddRange(triangles); + simplices.AddRange(edges); + simplices.AddRange(points); + + m_SimplexCounts = new SimplexCounts(points.count, edges.count / 2, triangles.count / 3); + + cellCoords.ResizeInitialized(m_SimplexCounts.simplexCount); + + implementation.SetSimplices(simplices, m_SimplexCounts); + + dirtySimplices = Oni.SimplexType.None; } } - - simplices.capacity = points.Count + edges.Count + triangles.Count; - simplices.AddRange(points); - simplices.AddRange(edges); - simplices.AddRange(triangles); - - m_SimplexCounts = new SimplexCounts(points.Count, edges.Count / 2, triangles.Count / 3); - cellCoords.ResizeInitialized(m_SimplexCounts.simplexCount); - - m_SolverImpl.SetSimplices(simplices, m_SimplexCounts); - dirtySimplices = false; - } private void PushConstraints() { - // Clear all dirty constraints: - for (int i = 0; i < Oni.ConstraintTypeCount; ++i) - if (m_Constraints[i] != null && ((1 << i) & dirtyConstraints) != 0) - m_Constraints[i].Clear(); - - // Iterate over all actors, merging their batches together: - for (int k = 0; k < actors.Count; ++k) + if (dirtyConstraints != 0) { - if (actors[k].isLoaded) + // Clear all dirty constraints: + for (int i = 0; i < Oni.ConstraintTypeCount; ++i) + if (m_Constraints[i] != null && ((1 << i) & dirtyConstraints) != 0) + m_Constraints[i].Clear(); + + // Iterate over all actors, merging their batches together: + for (int k = 0; k < actors.Count; ++k) { - for (int i = 0; i < Oni.ConstraintTypeCount; ++i) - if (m_Constraints[i] != null && ((1 << i) & dirtyConstraints) != 0) - { - var constraints = actors[k].GetConstraintsByType((Oni.ConstraintType)i); - m_Constraints[i].Merge(actors[k], constraints); - } + if (actors[k].isLoaded) + { + for (int i = 0; i < Oni.ConstraintTypeCount; ++i) + if (m_Constraints[i] != null && ((1 << i) & dirtyConstraints) != 0) + { + var constraints = actors[k].GetConstraintsByType((Oni.ConstraintType)i); + m_Constraints[i].Merge(actors[k], constraints); + } + } } + + // Readd the constraints to the solver: + for (int i = 0; i < Oni.ConstraintTypeCount; ++i) + if (m_Constraints[i] != null && ((1 << i) & dirtyConstraints) != 0) + m_Constraints[i].AddToSolver(this); + + // Reset the dirty flag: + dirtyConstraints = 0; } - - // Readd the constraints to the solver: - for (int i = 0; i < Oni.ConstraintTypeCount; ++i) - if (m_Constraints[i] != null && ((1 << i) & dirtyConstraints) != 0) - m_Constraints[i].AddToSolver(this); - - // Reset the dirty flag: - dirtyConstraints = 0; } /** - * Checks if any particle in the solver is visible from at least one camera. If so, sets isVisible to true, false otherwise. + * Updates solver bounds, then checks if they're visible from at least one camera. If so, sets isVisible to true, false otherwise. */ private void UpdateVisibility() { - using (m_UpdateVisibilityPerfMarker.Auto()) { - using (m_GetSolverBoundsPerfMarker.Auto()) { // get bounds in solver space: Vector3 min = Vector3.zero, max = Vector3.zero; - m_SolverImpl.GetBounds(ref min, ref max); - bounds.SetMinMax(min, max); + implementation.GetBounds(ref min, ref max); + m_Bounds.SetMinMax(min, max); } - if (bounds.AreValid()) + if (m_Bounds.AreValid()) { using (m_TestBoundsPerfMarker.Auto()) { // transform bounds to world space: - bounds = bounds.Transform(transform.localToWorldMatrix); + m_BoundsWS = m_Bounds.Transform(transform.localToWorldMatrix); using (m_GetAllCamerasPerfMarker.Auto()) { @@ -1462,7 +2380,7 @@ namespace Obi foreach (Camera cam in sceneCameras) { GeometryUtility.CalculateFrustumPlanes(cam, planes); - if (GeometryUtility.TestPlanesAABB(planes, bounds)) + if (GeometryUtility.TestPlanesAABB(planes, m_BoundsWS)) { if (!isVisible) { @@ -1491,344 +2409,123 @@ namespace Obi Vector4 scale = transform.lossyScale; Quaternion rotation = transform.rotation; - m_SolverImpl.InitializeFrame(translation, scale, rotation); + implementation.InitializeFrame(translation, scale, rotation); } - private void UpdateTransformFrame(float dt) + private IObiJobHandle UpdateTransformFrame(float dt) { Vector4 translation = transform.position; Vector4 scale = transform.lossyScale; Quaternion rotation = transform.rotation; - m_SolverImpl.UpdateFrame(translation, scale, rotation, dt); - m_SolverImpl.ApplyFrame(worldLinearInertiaScale, worldAngularInertiaScale, dt); + implementation.UpdateFrame(translation, scale, rotation, dt); + return implementation.ApplyFrame(worldLinearInertiaScale, worldAngularInertiaScale, dt); } - public void PrepareFrame() + public void RegisterRenderSystem(IRenderSystem renderSystem) { - if (OnPrepareFrame != null) - OnPrepareFrame(this); + m_RenderSystems.RegisterRenderSystem(renderSystem); + } - foreach (ObiActor actor in actors) - actor.PrepareFrame(); + public void UnregisterRenderSystem(IRenderSystem renderSystem) + { + m_RenderSystems.UnregisterRenderSystem(renderSystem); + } + + public RenderSystem GetRenderSystem() where T : ObiRenderer + { + return m_RenderSystems.GetRenderSystem(); + } + + public IRenderSystem GetRenderSystem(Oni.RenderingSystemType type) + { + return m_RenderSystems.GetRenderSystem(type); } /// - /// Signals the start of a new time step. - /// - /// Pushes active particles (if dirtyActiveParticles is true), and runtime constraints (if dirtyConstraints != 0). - /// Updates the solver's nertial reference frame. Calls begin step callbacks. - /// Finally, it schedules execution of simulation tasks at the beginng on a physics step (most notably, collision detection), and returns a handle to the job that will perform them. - /// Duration of the entire time step (in seconds). - /// - /// A handle to the job. - /// - public IObiJobHandle BeginStep(float stepTime) - { - if (!isActiveAndEnabled || !initialized) - return null; - - if (OnPrepareStep != null) - OnPrepareStep(this, stepTime); - - foreach (ObiActor actor in actors) - actor.PrepareStep(stepTime); - - // Update the active particles array: - if (dirtyActiveParticles) - PushActiveParticles(); - - // Update the simplices array: - if (dirtySimplices) - PushSimplices(); - - // Update constraint batches: - if (dirtyConstraints != 0) - PushConstraints(); - - // Update inertial frame: - UpdateTransformFrame(stepTime); - - // Update gravity: - parameters.gravity = gravitySpace == Space.World ? transform.InverseTransformVector(gravity) : gravity; - if (initialized) - m_SolverImpl.SetParameters(parameters); - - // Copy positions / orientations at the start of the step, for interpolation: - startPositions.CopyFrom(positions); - startOrientations.CopyFrom(orientations); - - if (OnBeginStep != null) - OnBeginStep(this, stepTime); - - foreach (ObiActor actor in actors) - actor.BeginStep(stepTime); - - // Perform collision detection: - if (simulateWhenInvisible || isVisible) - return m_SolverImpl.CollisionDetection(stepTime); - - return null; - } - - /// - /// Schedules the job to advance the simulation a given amount of time, then returns a handle to this job. - /// - /// Amount of time to advance (in seconds). - /// - /// A handle to the job. - /// - public IObiJobHandle Substep(float stepTime, float substepTime, int index) - { - - // Only update the solver if it is visible, or if we must simulate even when invisible. - if (isActiveAndEnabled && (simulateWhenInvisible || isVisible) && initialized) - { - if (OnSubstep != null) - OnSubstep(this, substepTime); - - foreach (ObiActor actor in actors) - actor.Substep(substepTime); - - // Update the solver (this is internally split in tasks so multiple solvers can be updated in parallel) - return m_SolverImpl.Substep(stepTime, substepTime, index); - } - - return null; - } - - /// - /// Wraps up a simulation step: resets external forces and calls collision callbacks. - /// - /// Size of the last substep performed this step (in seconds). - public void EndStep(float substepTime) - { - if (!initialized) - return; - - m_contactCount = implementation.GetConstraintCount(Oni.ConstraintType.Collision); - m_particleContactCount = implementation.GetConstraintCount(Oni.ConstraintType.ParticleCollision); - - if (OnCollision != null) - { - collisionArgs.contacts.SetCount(m_contactCount); - - if (m_contactCount > 0) - implementation.GetCollisionContacts(collisionArgs.contacts.Data, m_contactCount); - - OnCollision(this, collisionArgs); - - } - - if (OnParticleCollision != null) - { - particleCollisionArgs.contacts.SetCount(m_particleContactCount); - - if (m_particleContactCount > 0) - implementation.GetParticleCollisionContacts(particleCollisionArgs.contacts.Data, m_particleContactCount); - - OnParticleCollision(this, particleCollisionArgs); - - } - - m_SolverImpl.ResetForces(); - - if (OnEndStep != null) - OnEndStep(this); - - foreach (ObiActor actor in actors) - actor.EndStep(substepTime); - } - - /// - /// Finalizes the frame by performing physics state interpolation. - /// - /// This is usually used for mesh generation, rendering setup and other tasks that must take place after all physics steps for this frame are done. - /// Duration of this time step (in seconds). Note this is the entire timestep, not just the ast substep. - /// Remaining time that could not be simulated during this step (in seconds). This is used to interpolate physics state. - public void Interpolate(float stepTime, float unsimulatedTime) - { - if (!isActiveAndEnabled || !initialized) - return; - - // Only perform interpolation if the solver is visible, or if we must simulate even when invisible. - if (simulateWhenInvisible || isVisible) - { - using (m_StateInterpolationPerfMarker.Auto()) - { - // interpolate physics state: - m_SolverImpl.ApplyInterpolation(startPositions, startOrientations, stepTime, unsimulatedTime); - } - } - - UpdateVisibility(); - - if (OnInterpolate != null) - OnInterpolate(this); - - foreach (ObiActor actor in actors) - actor.Interpolate(); - - } - - public void ReleaseJobHandles() - { - if (!initialized) - return; - - m_SolverImpl.ReleaseJobHandles(); - } - - /// - /// Performs multiple spatial queries in parallel against all simplices in the solver, and returns a list of results. - /// - /// All other query/raycast methods are built on top of this one. Use it when you need maximum flexibility/performance. - /// List of query shapes to test against all simplices in the solver. - /// List of transforms, must have the same size as the shapes list. - /// - /// This list will contain results for all queries, in no specific order. - /// Use the queryIndex member of each query result to correlate each result to the query that spawned it. For instance: - /// a query result with queryIndex 5, belongs to the query shape at index 5 in the input shapes list. - /// - public void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results) - { - if (!initialized || shapes == null || transforms == null || results == null || shapes.count != transforms.count) - return; - - m_SolverImpl.SpatialQuery(shapes, transforms, results); - } - - /// - /// Performs a single spatial queries against all simplices in the solver, and returns a list of results. + /// Enqueues a generic spatial query to be performed during the next physics update. + /// If called when the solver is yet uninitialized, + /// the query will be ignored and this method will return -1. /// /// Query shape to test against all simplices in the solver. - /// Transform applied to the query shape. + /// Transform to apply to the query shape. /// - /// An array that contains the query results. + /// Index of the query in the queue. Use the queryIndex member of each query result to correlate each result to the query that spawned it. For instance: + /// a query result with queryIndex 5, belongs to the query shape at index 5 in the queue. /// - public QueryResult[] SpatialQuery(QueryShape shape, AffineTransform transform) + public int EnqueueSpatialQuery(QueryShape shape, AffineTransform transform) { + // if the solver is not initialized, bail out. if (!initialized) - return null; + return -1; - var queries = new ObiNativeQueryShapeList(); - var transforms = new ObiNativeAffineTransformList(); - var results = new ObiNativeQueryResultList(); - - queries.Add(shape); - transforms.Add(transform); - - m_SolverImpl.SpatialQuery(queries, transforms, results); - - var resultsArray = results.ToArray(); - - queries.Dispose(); - transforms.Dispose(); - results.Dispose(); - - return resultsArray; + int index = bufferedQueryShapes.count; + bufferedQueryShapes.Add(shape); + bufferedQueryTransforms.Add(transform); + return index; } /// - /// Performs a single raycast against all simplices in the solver, and returns the result. + /// Enqueues multiple generic spatial query to be performed during the next physics update. + /// If called when the solver is yet uninitialized, + /// the query will be ignored and this method will return -1. + /// + /// Query shapes to test against all simplices in the solver. + /// Transforms to apply to the query shapes. + /// + /// Index of the first query in the queue. Use the queryIndex member of each query result to correlate each result to the query that spawned it. For instance: + /// a query result with queryIndex 5, belongs to the query shape at index 5 in the queue. + /// + public int EnqueueSpatialQueries(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms) + { + // if the solver is not initialized or input is not ok, bail out. + if (!initialized || shapes == null || transforms == null || shapes.count != transforms.count) + return -1; + + int index = bufferedQueryShapes.count; + bufferedQueryShapes.AddRange(shapes); + bufferedQueryTransforms.AddRange(transforms); + return index; + } + + /// + /// Enqueues a raycast to be performed during the next physics update. + /// If called when the solver is yet uninitialized, + /// the query will be ignored and this method will return -1. /// /// Ray to cast against all simplices in the solver. Expressed in world space. - /// Struct containing hit info, if any. /// Filter (mask, category) used to filter out collisions against certain simplices. /// Ray length. /// /// Ray thickness. If the ray hits a simplex, hitInfo will contain a point on the simplex. /// If it merely passes near the simplex (within its thickness distance, but no actual hit), it will contain the point on the ray closest to the simplex surface. /// - /// Whether the ray hit anything. If the ray did not hit, the hitInfo will contain a simplexIndex of -1 and a distance equal to maxDistance. + /// Index of the query in the queue. Use the queryIndex member of each query result to correlate each result to the query that spawned it. For instance: + /// a query result with queryIndex 5, belongs to the query shape at index 5 in the queue. /// - public bool Raycast(Ray ray, out QueryResult hitInfo, int filter, float maxDistance = 100, float rayThickness = 0) - { - var result = Raycast(new List { ray }, filter, maxDistance, rayThickness); - if (result != null && result.Length > 0 && result[0].simplexIndex >= 0) - { - hitInfo = result[0]; - return true; - } - else - { - hitInfo = new QueryResult() { distance = maxDistance }; - return false; - } - } - - /// - /// Performs multiple raycasts in parallel against all simplices in the solver, and returns the results. - /// - /// List of rays to cast against all simplices in the solver. Expressed in world space. - /// Filter (mask, category) used to filter out collisions against certain simplices. - /// Ray length. - /// - /// Ray thickness. If the ray hits a simplex, hitInfo will contain a point on the simplex. - /// If it merely passes near the simplex (within its thickness distance, but no actual hit), it will contain the point on the ray closest to the simplex surface. - /// - /// This list will contain results for all raycasts, in no specific order. - /// Use the queryIndex member of each query result to correlate each result to the raycast that spawned it. For instance: - /// a query result with queryIndex 5, belongs to the raycast at index 5 in the input rays list. - /// - public QueryResult[] Raycast(List rays, int filter, float maxDistance = 100, float rayThickness = 0) + public int EnqueueRaycast(Ray ray, int filter, float maxDistance = 100, float rayThickness = 0) { + // if the solver is not initialized or simulation is currently underway, bail out. if (!initialized) - return null; + return -1; - var queries = new ObiNativeQueryShapeList(); - var transforms = new ObiNativeAffineTransformList(); - var results = new ObiNativeQueryResultList(); - var resultArray = new QueryResult[rays.Count]; + int index = bufferedQueryShapes.count; - for (int i = 0; i < rays.Count; ++i) + bufferedQueryShapes.Add(new QueryShape { - queries.Add(new QueryShape() - { - type = QueryShape.QueryType.Ray, - center = rays[i].origin, - size = rays[i].origin + rays[i].direction * maxDistance, - contactOffset = rayThickness, - maxDistance = 0.0005f, - filter = filter - }); + type = QueryShape.QueryType.Ray, + center = ray.origin, + size = ray.direction * maxDistance, + contactOffset = rayThickness, + maxDistance = 0.0001f, + filter = filter + }); - transforms.Add(new AffineTransform(Vector4.zero, Quaternion.identity, Vector4.one)); + bufferedQueryTransforms.Add(new AffineTransform(Vector4.zero, Quaternion.identity, Vector4.one)); - resultArray[i] = new QueryResult { distance = maxDistance, simplexIndex = -1, queryIndex = -1 }; - } - - m_SolverImpl.SpatialQuery(queries, transforms, results); - - Matrix4x4 solver2World = transform.localToWorldMatrix; - for (int i = 0; i < results.count; ++i) - { - int rayIndex = results[i].queryIndex; - var pointWS = solver2World.MultiplyPoint3x4(results[i].queryPoint + results[i].normal * results[i].distance); - - if (results[i].distance <= 0.001f) - { - // project the hit on the ray: - float rayDistance = (pointWS.x - rays[rayIndex].origin.x) * rays[rayIndex].direction.x + - (pointWS.y - rays[rayIndex].origin.y) * rays[rayIndex].direction.y + - (pointWS.z - rays[rayIndex].origin.z) * rays[rayIndex].direction.z; - - // keep the closest hit: - if (rayDistance < resultArray[rayIndex].distance) - { - resultArray[rayIndex] = results[i]; - resultArray[rayIndex].distance = rayDistance; - resultArray[rayIndex].queryPoint = rays[rayIndex].origin + rays[rayIndex].direction * rayDistance; - } - } - } - - queries.Dispose(); - transforms.Dispose(); - results.Dispose(); - - return resultArray; + return index; } + } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters.meta b/Assets/ThirdParty/Obi/Scripts/Common/Updaters.meta deleted file mode 100644 index 3f65456b0..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cefe4e650f12d45c2bc73c7e1996aee7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiFixedUpdater.cs b/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiFixedUpdater.cs deleted file mode 100644 index 35cb5f99d..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiFixedUpdater.cs +++ /dev/null @@ -1,70 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System; - -namespace Obi -{ - /// - /// Updater class that will perform simulation during FixedUpdate(). This is the most physically correct updater, - /// and the one to be used in most cases. Also allows to perform substepping, greatly improving convergence. - - [AddComponentMenu("Physics/Obi/Obi Fixed Updater", 801)] - [ExecuteInEditMode] - public class ObiFixedUpdater : ObiUpdater - { - /// - /// Each FixedUpdate() call will be divided into several substeps. Performing more substeps will greatly improve the accuracy/convergence speed of the simulation. - /// Increasing the amount of substeps is more effective than increasing the amount of constraint iterations. - /// - [Tooltip("Amount of substeps performed per FixedUpdate. Increasing the amount of substeps greatly improves accuracy and convergence speed.")] - public int substeps = 4; - - [NonSerialized] private float accumulatedTime; - - private void OnValidate() - { - substeps = Mathf.Max(1, substeps); - } - - private void OnEnable() - { - accumulatedTime = 0; - } - - private void OnDisable() - { - Physics.autoSimulation = true; - } - - private void FixedUpdate() - { - ObiProfiler.EnableProfiler(); - - PrepareFrame(); - - BeginStep(Time.fixedDeltaTime); - - float substepDelta = Time.fixedDeltaTime / (float)substeps; - - // Divide the step into multiple smaller substeps: - for (int i = 0; i < substeps; ++i) - Substep(Time.fixedDeltaTime, substepDelta, substeps-i); - - EndStep(substepDelta); - - ObiProfiler.DisableProfiler(); - - accumulatedTime -= Time.fixedDeltaTime; - } - - private void Update() - { - accumulatedTime += Time.deltaTime; - - ObiProfiler.EnableProfiler(); - Interpolate(Time.fixedDeltaTime, accumulatedTime); - ObiProfiler.DisableProfiler(); - } - } -} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateFixedUpdater.cs b/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateFixedUpdater.cs deleted file mode 100644 index 1a482cb96..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateFixedUpdater.cs +++ /dev/null @@ -1,84 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System; - -namespace Obi -{ - /// - /// Updater class that will perform simulation after WaitForFixedUpdate. Use this for simulations that require animation data as input, such as character clothing. - /// Make sure to set the Animator update mode to "Animate Physics". - - [AddComponentMenu("Physics/Obi/Obi Late Fixed Updater", 802)] - [ExecuteInEditMode] - public class ObiLateFixedUpdater : ObiUpdater - { - - /// - /// Each LateFixedUpdate() call will be divided into several substeps. Performing more substeps will greatly improve the accuracy/convergence speed of the simulation. - /// Increasing the amount of substeps is more effective than increasing the amount of constraint iterations. - /// - [Tooltip("Amount of substeps performed per FixedUpdate. Increasing the amount of substeps greatly improves accuracy and convergence speed.")] - public int substeps = 4; - - [NonSerialized] private float accumulatedTime; - - private void OnValidate() - { - substeps = Mathf.Max(1, substeps); - } - - private void OnEnable() - { - accumulatedTime = 0; - StartCoroutine(RunLateFixedUpdate()); - } - private void OnDisable() - { - StopCoroutine(RunLateFixedUpdate()); - } - - private void FixedUpdate() - { - PrepareFrame(); - } - - private IEnumerator RunLateFixedUpdate() - { - while (true) - { - yield return new WaitForFixedUpdate(); - if (Application.isPlaying) - LateFixedUpdate(); - } - } - - private void LateFixedUpdate() - { - ObiProfiler.EnableProfiler(); - - BeginStep(Time.fixedDeltaTime); - - float substepDelta = Time.fixedDeltaTime / (float)substeps; - - // Divide the step into multiple smaller substeps: - for (int i = 0; i < substeps; ++i) - Substep(Time.fixedDeltaTime, substepDelta, substeps - i); - - EndStep(substepDelta); - - ObiProfiler.DisableProfiler(); - - accumulatedTime -= Time.fixedDeltaTime; - } - - private void Update() - { - accumulatedTime += Time.deltaTime; - - ObiProfiler.EnableProfiler(); - Interpolate(Time.fixedDeltaTime, accumulatedTime); - ObiProfiler.DisableProfiler(); - } - } -} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateUpdater.cs b/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateUpdater.cs deleted file mode 100644 index 71d42a1a7..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateUpdater.cs +++ /dev/null @@ -1,72 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System; - -namespace Obi -{ - /// - /// Updater class that will perform simulation during LateUpdate(). This is highly unphysical and should be avoided whenever possible. - /// This updater does not make any accuracy guarantees when it comes to two-way coupling with rigidbodies. - /// It is only provided for the odd case when there's no way to perform simulation with a fixed timestep. - /// If in doubt, use the ObiFixedUpdater component instead. - /// - [AddComponentMenu("Physics/Obi/Obi Late Updater", 802)] - public class ObiLateUpdater : ObiUpdater - { - /// - /// Smoothing factor fo the timestep (smoothDelta). Values closer to 1 will yield stabler simulation, but it will be off-sync with rendering. - /// - [Tooltip("Smoothing factor fo the timestep (smoothDelta). Values closer to 1 will yield stabler simulation, but it will be off-sync with rendering.")] - [Range(0,1)] - public float deltaSmoothing = 0.95f; - - /// - /// Target timestep used to advance the simulation. The updater will interpolate this value with Time.deltaTime to find the actual timestep used for each frame. - /// - [Tooltip("Target timestep used to advance the simulation. The updater will interpolate this value with Time.deltaTime to find the actual timestep used for each frame.")] - private float smoothDelta = 0.02f; - - /// - /// Each FixedUpdate() call will be divided into several substeps. Performing more substeps will greatly improve the accuracy/convergence speed of the simulation. - /// Increasing the amount of substeps is more effective than increasing the amount of constraint iterations. - /// - [Tooltip("Amount of substeps performed per FixedUpdate. Increasing the amount of substeps greatly improves accuracy and convergence speed.")] - public int substeps = 4; - - private void OnValidate() - { - smoothDelta = Mathf.Max(0.0001f, smoothDelta); - substeps = Mathf.Max(1, substeps); - } - - private void Update() - { - PrepareFrame(); - } - - private void LateUpdate() - { - if (Time.deltaTime > 0) - { - if (Application.isPlaying) - { - // smooth out timestep: - smoothDelta = Mathf.Lerp(Time.deltaTime, smoothDelta, deltaSmoothing); - - BeginStep(smoothDelta); - - float substepDelta = smoothDelta / (float)substeps; - - // Divide the step into multiple smaller substeps: - for (int i = 0; i < substeps; ++i) - Substep(smoothDelta, substepDelta, substeps - i); - - EndStep(substepDelta); - } - - Interpolate(smoothDelta, smoothDelta); - } - } - } -} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiUpdater.cs b/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiUpdater.cs deleted file mode 100644 index 0fa3c60d0..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiUpdater.cs +++ /dev/null @@ -1,136 +0,0 @@ -using UnityEngine; -using Unity.Profiling; -using System.Collections; -using System.Collections.Generic; -using System; - -using Unity.Jobs; -using Unity.Collections; - -namespace Obi -{ - /// - /// Base class for updating multiple solvers in parallel. - /// Derive from this class to write your onw updater. This grants you precise control over execution order, - /// as you can choose to update solvers at any point during Unity's update cycle. - /// - [ExecuteInEditMode] - public abstract class ObiUpdater : MonoBehaviour - { - static ProfilerMarker m_BeginStepPerfMarker = new ProfilerMarker("BeginStep"); - static ProfilerMarker m_SubstepPerfMarker = new ProfilerMarker("Substep"); - static ProfilerMarker m_EndStepPerfMarker = new ProfilerMarker("EndStep"); - static ProfilerMarker m_InterpolatePerfMarker = new ProfilerMarker("Interpolate"); - - /// - /// List of solvers updated by this updater. - /// - public List solvers = new List(); - - private List handles = new List(); - - - /// - /// Prepares all solvers to begin simulating a new frame. This should be called as soon as possible in the frame, - /// and guaranteed to be called every frame that will step physics. - /// - protected void PrepareFrame() - { - foreach (ObiSolver solver in solvers) - if (solver != null) - solver.PrepareFrame(); - } - - /// - /// Prepares all solvers to begin simulating a new physics step. This involves - /// caching some particle data for interpolation, performing collision detection, among other things. - /// - /// Duration (in seconds) of the next step. - protected void BeginStep(float stepDeltaTime) - { - using (m_BeginStepPerfMarker.Auto()) - { - // Update colliders right before collision detection: - ObiColliderWorld.GetInstance().UpdateColliders(); - ObiColliderWorld.GetInstance().UpdateRigidbodies(solvers,stepDeltaTime); - ObiColliderWorld.GetInstance().UpdateWorld(stepDeltaTime); - - handles.Clear(); - - // Kick off all solver jobs: - foreach (ObiSolver solver in solvers) - if (solver != null) - handles.Add(solver.BeginStep(stepDeltaTime)); - - // wait for all solver jobs to complete: - foreach (IObiJobHandle handle in handles) - if (handle != null) - handle.Complete(); - - foreach (ObiSolver solver in solvers) - if (solver != null) - solver.ReleaseJobHandles(); - } - } - - - /// - /// Advances the simulation a given amount of time. Note that once BeginStep has been called, - /// Substep can be called multiple times. - /// - /// Duration (in seconds) of the substep. - protected void Substep(float stepDeltaTime, float substepDeltaTime, int index) - { - using (m_SubstepPerfMarker.Auto()) - { - handles.Clear(); - - // Kick off all solver jobs: - foreach (ObiSolver solver in solvers) - if (solver != null) - handles.Add(solver.Substep(stepDeltaTime, substepDeltaTime, index)); - - // wait for all solver jobs to complete: - foreach (IObiJobHandle handle in handles) - if (handle != null) - handle.Complete(); - - foreach (ObiSolver solver in solvers) - if (solver != null) - solver.ReleaseJobHandles(); - } - } - - /// - /// Wraps up the current simulation step. This will trigger contact callbacks. - /// - protected void EndStep(float substepDeltaTime) - { - using (m_EndStepPerfMarker.Auto()) - { - // End step: Invokes collision callbacks and notifies actors that the solver step has ended. - foreach (ObiSolver solver in solvers) - if (solver != null) - solver.EndStep(substepDeltaTime); - } - - // Write back rigidbody velocity deltas: - ObiColliderWorld.GetInstance().UpdateRigidbodyVelocities(solvers); - } - - /// - /// Interpolates the previous and current physics states. Should be called right before rendering the current frame. - /// - /// Duration (in seconds) of the last step taken. - /// Amount of accumulated (not yet simulated) time. - protected void Interpolate(float stepDeltaTime, float accumulatedTime) - { - using (m_InterpolatePerfMarker.Auto()) - { - foreach (ObiSolver solver in solvers) - if (solver != null) - solver.Interpolate(stepDeltaTime, accumulatedTime); - } - } - } -} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiUpdater.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiUpdater.cs.meta deleted file mode 100644 index 14db883fd..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiUpdater.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4b1bfb6ce01f944a78a3761b5b77d359 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/LayerField.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/LayerField.cs new file mode 100644 index 000000000..458d1b88f --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/LayerField.cs @@ -0,0 +1,21 @@ +using System; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + [AttributeUsage(AttributeTargets.Field)] + public class LayerField : MultiPropertyAttribute + { +#if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + property.intValue = EditorGUI.LayerField(position, label, property.intValue); + } +#endif + } + +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/LayerField.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/LayerField.cs.meta new file mode 100644 index 000000000..e7694c6c9 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/LayerField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 636fa558efd1441fdbf787bdda34c53a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs index f1face328..8dc8923d8 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs @@ -16,7 +16,7 @@ namespace Obi{ public virtual void OnGUI(Rect position, SerializedProperty property, GUIContent label) { - EditorGUI.PropertyField(position,property,label); + EditorGUI.PropertyField(position,property,label,true); } internal virtual void OnPreGUI(Rect position, SerializedProperty property){} @@ -53,8 +53,9 @@ namespace Obi{ if (!attr.IsVisible(property)) return -EditorGUIUtility.standardVerticalSpacing; - // In case no attribute returns a modified height, return the property's default one: - float height = base.GetPropertyHeight(property, label); + // In case no attribute returns a modified height, return the property's default one: + float height = EditorGUI.GetPropertyHeight(property, label, true); + //base.GetPropertyHeight(property, label); // Check if any of the attributes wants to modify height: foreach (object atr in mAttribute.stored) diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs index ad7ffae98..b5863040f 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs @@ -48,15 +48,18 @@ namespace Obi{ // If any changes were detected, call the property setter: if (EditorGUI.EndChangeCheck() && propertyFieldInfo != null) { - - // Record object state for undo: - Undo.RecordObject(property.serializedObject.targetObject, "Inspector"); - - // Call property setter: - propertyFieldInfo.SetValue(target,value,null); + foreach (var t in property.serializedObject.targetObjects) + { + // Record object state for undo: + Undo.RecordObject(t, "Inspector"); - // Record prefab modification: - PrefabUtility.RecordPrefabInstancePropertyModifications(property.serializedObject.targetObject); + // Call property setter: + propertyFieldInfo.SetValue(t, value, null); + SetPropertyValue(property, propertyFieldInfo.PropertyType, value); + + // Record prefab modification: + PrefabUtility.RecordPrefabInstancePropertyModifications(t); + } } EditorGUI.EndProperty(); @@ -68,18 +71,18 @@ namespace Obi{ private object GetSource(SerializedProperty property) { - object target = property.serializedObject.targetObject; + object trgt = property.serializedObject.targetObject; string[] data = property.propertyPath.Split('.'); if (data.Length == 1) - return target; + return trgt; else{ for (int i = 0; i < data.Length-1;++i){ - target = target.GetType().GetField(data[i]).GetValue(target); + trgt = trgt.GetType().GetField(data[i]).GetValue(trgt); } } - return target; + return trgt; } private object DrawProperty(Rect position, SerializedPropertyType propertyType, Type type, object value, GUIContent label) @@ -120,7 +123,46 @@ namespace Obi{ throw new NotImplementedException("Unimplemented propertyType "+propertyType+"."); } } - + + private void SetPropertyValue(SerializedProperty property, Type type, object value) + { + switch (property.propertyType) + { + case SerializedPropertyType.Integer: + property.intValue = (int)value; break; + case SerializedPropertyType.Boolean: + property.boolValue = (bool)value; break; + case SerializedPropertyType.Float: + property.floatValue = (float)value; break; + case SerializedPropertyType.String: + property.stringValue = (string)value; break; + case SerializedPropertyType.Color: + property.colorValue = (Color)value; break; + case SerializedPropertyType.ObjectReference: + property.objectReferenceValue = (UnityEngine.Object)value; break; + case SerializedPropertyType.ExposedReference: + property.exposedReferenceValue = (UnityEngine.Object)value; break; + case SerializedPropertyType.LayerMask: + property.intValue = (int)value; break; + case SerializedPropertyType.Enum: + property.enumValueIndex = (int)value; break; + case SerializedPropertyType.Vector2: + property.vector2Value = (Vector2)value; break; + case SerializedPropertyType.Vector3: + property.vector3Value = (Vector3)value; break; + case SerializedPropertyType.Vector4: + property.vector4Value = (Vector4)value; break; + case SerializedPropertyType.Rect: + property.rectValue = (Rect)value; break; + case SerializedPropertyType.AnimationCurve: + property.animationCurveValue = (AnimationCurve)value; break; + case SerializedPropertyType.Bounds: + property.boundsValue = (Bounds)value; break; + default: + throw new NotImplementedException("Unimplemented propertyType " + property.propertyType + "."); + } + } + } #endif } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs index 1d0244b87..16920a9b1 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs @@ -14,6 +14,7 @@ namespace Obi{ private MethodInfo eventMethodInfo = null; private FieldInfo fieldInfo = null; + private PropertyInfo propertyInfo = null; public VisibleIf(string methodName, bool negate = false) { @@ -39,13 +40,19 @@ namespace Obi{ // If we could not find a method with that name, look for a field: if (eventMethodInfo == null && fieldInfo == null) fieldInfo = eventOwnerType.GetField(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); - - if (eventMethodInfo != null) + + // or maybe a property + if (eventMethodInfo == null && fieldInfo == null && propertyInfo == null) + propertyInfo = eventOwnerType.GetProperty(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + + if (eventMethodInfo != null) return (bool)eventMethodInfo.Invoke(property.serializedObject.targetObject, null); else if (fieldInfo != null) return (bool)fieldInfo.GetValue(property.serializedObject.targetObject); - else - Debug.LogWarning(string.Format("VisibleIf: Unable to find method or field {0} in {1}", eventName, eventOwnerType)); + else if (propertyInfo != null) + return (bool)propertyInfo.GetValue(property.serializedObject.targetObject); + else + Debug.LogWarning(string.Format("VisibleIf: Unable to find method, field or property {0} in {1}", eventName, eventOwnerType)); return true; } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs index c4c5aa21d..199ebcbee 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs @@ -48,7 +48,7 @@ public class CoroutineJob{ private bool stop; private Exception e; - public int asyncThreshold = 0; //Time in milliseconds that must pass before job switches to async mode. By default, the job is asynchronous from the start. + public int asyncThreshold = 250; //Time in milliseconds that must pass before job switches to async mode. By default, the job is asynchronous from the start. private void Init(){ isDone = false; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs index b000bcd80..7a7f83bb7 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs @@ -6,38 +6,31 @@ using System.Collections; namespace Obi { + public class EditorCoroutine + { -public class EditorCoroutine -{ + public static bool ShowCoroutineProgressBar(string title, IEnumerator coroutine) + { - public static void ShowCoroutineProgressBar(string title, ref IEnumerator coroutine){ + bool cancelled = false; + + #if (UNITY_EDITOR) + if (coroutine != null){ + + while (coroutine.MoveNext() && !cancelled) + { + var progressInfo = coroutine.Current as CoroutineJob.ProgressInfo; + cancelled |= EditorUtility.DisplayCancelableProgressBar(title, progressInfo.userReadableInfo, progressInfo.progress); + } + + // once finished, set coroutine to null and clear progress bar. + coroutine = null; + EditorUtility.ClearProgressBar(); + + } + #endif + return cancelled; + } - #if (UNITY_EDITOR) - if (coroutine != null){ - - CoroutineJob.ProgressInfo progressInfo; - - do{ - if (!coroutine.MoveNext()) - progressInfo = null; - else - progressInfo = coroutine.Current as CoroutineJob.ProgressInfo; - - if (progressInfo != null && EditorUtility.DisplayCancelableProgressBar(title, progressInfo.userReadableInfo, progressInfo.progress)){ - progressInfo = null; - } - }while (progressInfo != null); - - // once finished, clear progress bar and set coroutine to null. - coroutine = null; - - // Unity bug here: https://issuetracker.unity3d.com/issues/unity-throws-nullreferenceexception-or-endlayoutgroup-errors-when-editorutility-dot-clearprogressbar-is-called - EditorUtility.ClearProgressBar(); - - } - #endif - - } - -} + } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiAmbientForceZone.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiAmbientForceZone.cs deleted file mode 100644 index 6a9dbde3d..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiAmbientForceZone.cs +++ /dev/null @@ -1,39 +0,0 @@ -using UnityEngine; -using System; - -namespace Obi -{ - public class ObiAmbientForceZone : ObiExternalForce - { - - public override void ApplyForcesToActor(ObiActor actor) - { - - Matrix4x4 l2sTransform = actor.solver.transform.worldToLocalMatrix * transform.localToWorldMatrix; - - Vector4 force = l2sTransform.MultiplyVector(Vector3.forward * (intensity + GetTurbulence(turbulence))); - - if (actor.usesCustomExternalForces) - { - for (int i = 0; i < actor.activeParticleCount; ++i) - actor.solver.wind[actor.solverIndices[i]] += force; - } - else - { - for (int i = 0; i < actor.activeParticleCount; ++i) - actor.solver.externalForces[actor.solverIndices[i]] += force; - } - } - - public void OnDrawGizmosSelected() - { - - Gizmos.matrix = transform.localToWorldMatrix; - Gizmos.color = new Color(0,0.7f,1,1); - - // arrow body: - ObiUtils.DrawArrowGizmo(0.5f + GetTurbulence(1),0.2f,0.3f,0.2f); - } - } -} - diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiExternalForce.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiExternalForce.cs deleted file mode 100644 index 41089fd0c..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiExternalForce.cs +++ /dev/null @@ -1,50 +0,0 @@ -using UnityEngine; -using System; - -namespace Obi -{ - public abstract class ObiExternalForce : MonoBehaviour - { - - public float intensity = 0; - public float turbulence = 0; - public float turbulenceFrequency = 1; - public float turbulenceSeed = 0; - public ObiSolver[] affectedSolvers; - - public void OnEnable() - { - foreach (ObiSolver solver in affectedSolvers) - { - if (solver != null) - solver.OnBeginStep += Solver_OnStepBegin; - } - } - - public void OnDisable() - { - foreach (ObiSolver solver in affectedSolvers) - { - if (solver != null) - solver.OnBeginStep -= Solver_OnStepBegin; - } - } - - void Solver_OnStepBegin(ObiSolver solver, float stepTime) - { - foreach (ObiActor actor in solver.actors) - { - if (actor != null) - ApplyForcesToActor(actor); - } - } - - protected float GetTurbulence(float turbulenceIntensity){ - return Mathf.PerlinNoise(Time.fixedTime * turbulenceFrequency,turbulenceSeed) * turbulenceIntensity; - } - - public abstract void ApplyForcesToActor(ObiActor actor); - - } -} - diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiExternalForce.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiExternalForce.cs.meta deleted file mode 100644 index adabe4f4f..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiExternalForce.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 4978a525b6164476d96f5d28d8b309f8 -timeCreated: 1480349422 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs new file mode 100644 index 000000000..23bd10b92 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs @@ -0,0 +1,137 @@ +using UnityEngine; + +namespace Obi +{ + [ExecuteInEditMode] + [RequireComponent(typeof(ObiCollider))] + public class ObiForceZone : MonoBehaviour + { + [SerializeProperty("sourceCollider")] + [SerializeField] private ObiCollider m_SourceCollider; + + protected ObiForceZoneHandle forcezoneHandle; + + /// + /// The ObiCollider this ObiForceZone should affect. + /// + /// This is automatically set when you first create the ObiForceZone component, but you can override it afterwards. + public ObiCollider SourceCollider + { + set + { + if (value != null && value.gameObject != this.gameObject) + { + Debug.LogError("The ObiCollider component must reside in the same GameObject as ObiForceZone."); + return; + } + + RemoveCollider(); + m_SourceCollider = value; + AddCollider(); + + } + get { return m_SourceCollider; } + } + + public ObiForceZoneHandle Handle + { + get + { + // don't check forcezoneHandle.isValid: + // CreateForceZone may defer creation, so we get a non-null, but invalid handle. + // If calling handle again right away before it becomes valid, it will call CreateForceZone again and create a second handle to the same zone. + if (forcezoneHandle == null) + { + var world = ObiColliderWorld.GetInstance(); + + // create the material: + forcezoneHandle = world.CreateForceZone(); + forcezoneHandle.owner = this; + } + return forcezoneHandle; + } + } + + public ForceZone.ZoneType type; + public ForceZone.ForceMode mode; + public float intensity; + + [Header("Damping")] + public ForceZone.DampingDirection dampingDir; + public float damping = 0; + + [Header("Falloff")] + public float minDistance; + public float maxDistance; + [Min(0)] + public float falloffPower = 1; + + [Header("Tint")] + public Color color = Color.clear; + + [Header("Pulse")] + public float pulseIntensity; + public float pulseFrequency; + public float pulseSeed; + + protected float intensityVariation; + + public void OnEnable() + { + forcezoneHandle = ObiColliderWorld.GetInstance().CreateForceZone(); + forcezoneHandle.owner = this; + FindSourceCollider(); + } + + public void OnDisable() + { + RemoveCollider(); + ObiColliderWorld.GetInstance().DestroyForceZone(forcezoneHandle); + } + + private void FindSourceCollider() + { + if (SourceCollider == null) + SourceCollider = GetComponent(); + else + AddCollider(); + } + + private void AddCollider() + { + if (m_SourceCollider != null) + m_SourceCollider.ForceZone = this; + } + + private void RemoveCollider() + { + if (m_SourceCollider != null) + m_SourceCollider.ForceZone = null; + } + + public virtual void UpdateIfNeeded() + { + if (!Handle.isValid) + return; + + var fc = ObiColliderWorld.GetInstance().forceZones[Handle.index]; + fc.type = type; + fc.mode = mode; + fc.intensity = intensity + intensityVariation; + fc.minDistance = minDistance; + fc.maxDistance = maxDistance; + fc.falloffPower = falloffPower; + fc.damping = damping; + fc.dampingDir = dampingDir; + fc.color = color; + ObiColliderWorld.GetInstance().forceZones[Handle.index] = fc; + } + + public void Update() + { + if (Application.isPlaying) + intensityVariation = Mathf.PerlinNoise(Time.time * pulseFrequency, pulseSeed) * pulseIntensity; + } + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiSphericalForceZone.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta similarity index 86% rename from Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiSphericalForceZone.cs.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta index 56ae827cd..b0a77b8f4 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiSphericalForceZone.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f05961933f21f46a683fc5d5beec4061 +guid: 4978a525b6164476d96f5d28d8b309f8 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiSphericalForceZone.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiSphericalForceZone.cs deleted file mode 100644 index 7e7bb03bd..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiSphericalForceZone.cs +++ /dev/null @@ -1,63 +0,0 @@ -using UnityEngine; -using System; - -namespace Obi -{ - public class ObiSphericalForceZone : ObiExternalForce - { - - public float radius = 5; - public bool radial = true; - - public override void ApplyForcesToActor(ObiActor actor) - { - - float sqrRadius = radius * radius; - float finalIntensity = intensity + GetTurbulence(turbulence); - - Matrix4x4 l2sTransform = actor.solver.transform.worldToLocalMatrix * transform.localToWorldMatrix; - - Vector4 center = l2sTransform.MultiplyPoint3x4(Vector4.zero); - Vector4 forward = l2sTransform.MultiplyVector(Vector3.forward); - - // Calculate force intensity for each actor particle: - for (int i = 0; i < actor.activeParticleCount; ++i){ - - Vector4 distanceVector = actor.solver.positions[actor.solverIndices[i]] - center; - - float sqrMag = distanceVector.sqrMagnitude; - float falloff = Mathf.Clamp01((sqrRadius - sqrMag) / sqrRadius); - - Vector4 force; - if (radial) - force = distanceVector/(Mathf.Sqrt(sqrMag) + float.Epsilon) * falloff * finalIntensity; - else - force = forward * falloff * finalIntensity; - - if (actor.usesCustomExternalForces) - actor.solver.wind[actor.solverIndices[i]] += force; - else - actor.solver.externalForces[actor.solverIndices[i]] += force; - } - - } - - public void OnDrawGizmosSelected() - { - Gizmos.matrix = transform.localToWorldMatrix; - Gizmos.color = new Color(0,0.7f,1,1); - Gizmos.DrawWireSphere(Vector3.zero,radius); - - float turb = GetTurbulence(1); - - if (!radial){ - ObiUtils.DrawArrowGizmo(radius + turb,radius*0.2f,radius*0.3f,radius*0.2f); - }else{ - Gizmos.DrawLine(new Vector3(0,0,-radius*0.5f)*turb,new Vector3(0,0,radius*0.5f)*turb); - Gizmos.DrawLine(new Vector3(0,-radius*0.5f,0)*turb,new Vector3(0,radius*0.5f,0)*turb); - Gizmos.DrawLine(new Vector3(-radius*0.5f,0,0)*turb,new Vector3(radius*0.5f,0,0)*turb); - } - } - } -} - diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs index c8c1315ef..6e67c4a1c 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs @@ -1,5 +1,6 @@ using UnityEngine; using UnityEngine.Events; +using Unity.Collections; using System; using System.Collections.Generic; @@ -24,11 +25,11 @@ namespace Obi public int Compare(Oni.Contact x, Oni.Contact y) { - return CompareByRef(ref x, ref y, solver); + return CompareByRef(x, y, solver); } } - private static int CompareByRef(ref Oni.Contact a, ref Oni.Contact b, ObiSolver solver) + private static int CompareByRef(Oni.Contact a, Oni.Contact b, ObiSolver solver) { if (a.bodyB == b.bodyB) { @@ -64,7 +65,7 @@ namespace Obi solver.OnCollision -= Solver_OnCollision; } - private int FilterOutDistantContacts(Oni.Contact[] data, int count) + private int FilterOutDistantContacts(ObiNativeContactList data, int count) { int filteredCount = count; @@ -72,12 +73,12 @@ namespace Obi // moving the ones above the threshold to the end of the array: for (int i = count - 1; i >= 0; --i) if (data[i].distance > distanceThreshold) - ObiUtils.Swap(ref data[i], ref data[--filteredCount]); + data.Swap(i, --filteredCount); return filteredCount; } - private int RemoveDuplicates(Oni.Contact[] data, int count) + private int RemoveDuplicates(ObiNativeContactList data, int count) { if (count == 0) return 0; @@ -86,13 +87,13 @@ namespace Obi // replacing duplicates by the first contact that's different: int i = 0, r = 0; while (++i != count) - if (CompareByRef(ref data[i], ref data[r], solver) != 0 && ++r != i) + if (CompareByRef(data[i], data[r], solver) != 0 && ++r != i) data[r] = data[i]; return ++r; } - private void InvokeCallbacks(Oni.Contact[] data, int count) + private void InvokeCallbacks(ObiNativeContactList data, int count) { int a = 0, b = 0; int lengthA = count, lengthB = prevCount; @@ -101,7 +102,7 @@ namespace Obi while (a < lengthA && b < lengthB) { // compare both contacts: - int compare = CompareByRef(ref data[a], ref prevData[b], solver); + int compare = CompareByRef(data[a], prevData[b], solver); // call the appropiate event depending on the comparison result: if (compare < 0) @@ -122,30 +123,26 @@ namespace Obi onContactExit.Invoke(solver, prevData[b++]); } - void Solver_OnCollision(object sender, ObiSolver.ObiCollisionEventArgs args) + void Solver_OnCollision(object sender, ObiNativeContactList contacts) { - // here we access the internal backing array (Data) directly, - // instead of using the accessor property. This slightly improves performance. - // note: the backing array length is the lists' capacity, so we - // need to use args.contacts.Count to get the actual number of contacts. - // skip all contacts above the distance threshold by moving them to the end of the array: - int filteredCount = FilterOutDistantContacts(args.contacts.Data, args.contacts.Count); + int filteredCount = FilterOutDistantContacts(contacts, contacts.count); // sort the remaining contacts by collider, then by actor: - Array.Sort(args.contacts.Data, 0, filteredCount, comparer); + contacts.AsNativeArray().Slice(0,filteredCount).Sort(comparer); // remove duplicates: - filteredCount = RemoveDuplicates(args.contacts.Data, filteredCount); + filteredCount = RemoveDuplicates(contacts, filteredCount); // zip trough the current and previous contact lists once, invoking events when appropiate. - InvokeCallbacks(args.contacts.Data, filteredCount); + InvokeCallbacks(contacts, filteredCount); // store current contact list/count for next frame. // could get better performance by double buffering instead of copying: if (filteredCount > prevData.Length) Array.Resize(ref prevData, filteredCount); - Array.Copy(args.contacts.Data, prevData, filteredCount); + + contacts.CopyTo(prevData, 0, filteredCount); prevCount = filteredCount; } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiContactGrabber.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiContactGrabber.cs index bdd58b078..caadb3b8b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiContactGrabber.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiContactGrabber.cs @@ -45,7 +45,7 @@ public class ObiContactGrabber : MonoBehaviour } } - private Dictionary collisionEvents = new Dictionary(); /**< store the current collision event*/ + private Dictionary collisionEvents = new Dictionary(); /**< store the current collision event*/ private ObiCollider localCollider; /**< the collider on this gameObject.*/ private HashSet grabbedParticles = new HashSet(); /**< set to store all currently grabbed particles.*/ private HashSet grabbedActors = new HashSet(); /**< set of softbodies grabbed during this step.*/ @@ -69,7 +69,7 @@ public class ObiContactGrabber : MonoBehaviour solver.OnCollision -= Solver_OnCollision; } - private void Solver_OnCollision(object sender, Obi.ObiSolver.ObiCollisionEventArgs e) + private void Solver_OnCollision(object sender, ObiNativeContactList e) { collisionEvents[(ObiSolver)sender] = e; } @@ -122,10 +122,10 @@ public class ObiContactGrabber : MonoBehaviour { foreach (ObiSolver solver in solvers) { - ObiSolver.ObiCollisionEventArgs collisionEvent; + ObiNativeContactList collisionEvent; if (collisionEvents.TryGetValue(solver, out collisionEvent)) { - foreach (Oni.Contact contact in collisionEvent.contacts) + foreach (Oni.Contact contact in collisionEvent) { // this one is an actual collision: if (contact.distance < 0.01f) diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs new file mode 100644 index 000000000..f2419738b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs @@ -0,0 +1,39 @@ +using UnityEngine; +using System; + +namespace Obi +{ + + [AddComponentMenu("Physics/Obi/Obi Foam Emitter", 1000)] + [ExecuteInEditMode] + [RequireComponent(typeof(ObiActor))] + [DisallowMultipleComponent] + public class ObiFoamEmitter : ObiFoamGenerator + { + public enum ShapeType + { + Cylinder = 0, + Box = 1 + } + + [Header("Emission shape")] + public ShapeType shape; + public Transform shapeTransform; + public Vector3 shapeSize = Vector3.one; + + private float emissionAccumulator = 0; + + public int GetParticleNumberToEmit(float deltaTime) + { + emissionAccumulator += foamGenerationRate * deltaTime; + int particles = (int)emissionAccumulator; + emissionAccumulator -= particles; + return particles; + } + + public void Reset() + { + emissionAccumulator = 0; + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiFixedUpdater.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs.meta similarity index 64% rename from Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiFixedUpdater.cs.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs.meta index cac670221..f626a9f32 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiFixedUpdater.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs.meta @@ -1,11 +1,11 @@ fileFormatVersion: 2 -guid: 1d9704d540ac448439a425526f6b2986 +guid: 3a2bd12c1cc9c45428b37635331065db MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: 4e2c952f509ae40bdaf836136058d487, type: 3} + icon: {fileID: 2800000, guid: b7cec6e680e3a479ca03a89eccd4e052, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs new file mode 100644 index 000000000..fe9cec91b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs @@ -0,0 +1,101 @@ +using UnityEngine; +using System; + +namespace Obi +{ + /** + * Foam generators create diffuse particles in areas where certain conditions meet (high velocity constrasts, high vorticity, low density, high normal values, etc.). These particles + * are then advected trough the fluid velocity field. + */ + + [AddComponentMenu("Physics/Obi/Obi Foam Generator", 1000)] + [ExecuteInEditMode] + [RequireComponent(typeof(ObiActor))] + [DisallowMultipleComponent] + public class ObiFoamGenerator : MonoBehaviour, ObiActorRenderer + { + public ObiActor actor { get; private set; } + + [Header("Foam spawning")] + public float foamGenerationRate = 100; + public float foamPotential = 50; + + [Range(0,1)] + public float foamPotentialDiffusion = 0.95f; + public Vector2 velocityRange = new Vector2(2, 4); + public Vector2 vorticityRange = new Vector2(4, 8); + + [Header("Foam properties")] + public Light volumeLight; + public Color color = new Color(1,1,1,0.25f); + public float size = 0.02f; + [Range(0,1)] + public float sizeRandom = 0.2f; + public float lifetime = 5; + [Range(0, 1)] + public float lifetimeRandom = 0.2f; + + public float buoyancy = 0.5f; + + [Range(0, 1)] + public float drag = 0.5f; + + [Range(0, 1)] + public float atmosphericDrag = 0.5f; + + [Range(1, 50)] + public float airAging = 2; + + [Range(0, 1)] + public float isosurface = 0.02f; + + [Header("Density Control (Compute only)")] + [Range(0, 1)] + public float pressure = 1; + [Range(0, 1)] + public float density = 0.3f; + [Range(1, 4)] + public float smoothingRadius = 2.5f; + [Range(0, 1)] + public float viscosity = 0.5f; + [Min(0)] + public float surfaceTension = 2; + + public void Awake() + { + actor = GetComponent(); + } + + public void OnEnable() + { + ((ObiActorRenderer)this).EnableRenderer(); + } + + public void OnDisable() + { + ((ObiActorRenderer)this).DisableRenderer(); + } + + public void OnValidate() + { + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.FoamParticles); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) + { + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstFoamRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: + + if (SystemInfo.supportsComputeShaders) + return new ComputeFoamRenderSystem(solver); + return null; + } + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateFixedUpdater.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta similarity index 64% rename from Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateFixedUpdater.cs.meta rename to Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta index 3982fd1ef..a26a9e659 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateFixedUpdater.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta @@ -1,11 +1,11 @@ fileFormatVersion: 2 -guid: 434ec3c1822e84ae79a7f64f950b1bf9 +guid: 87b741a43af4845478fd8eff354a1510 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: 4e2c952f509ae40bdaf836136058d487, type: 3} + icon: {fileID: 2800000, guid: b7cec6e680e3a479ca03a89eccd4e052, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiIntegration.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiIntegration.cs new file mode 100644 index 000000000..8c0f50135 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiIntegration.cs @@ -0,0 +1,50 @@ +using UnityEngine; +using System.Runtime.CompilerServices; + +namespace Obi +{ + public static class ObiIntegration + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 IntegrateLinear(Vector4 position, Vector4 velocity, float dt) + { + return position + velocity * dt; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferentiateLinear(Vector4 position, Vector4 prevPosition, float dt) + { + return (position - prevPosition) / dt; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Quaternion AngularVelocityToSpinQuaternion(Quaternion rotation, Vector4 angularVelocity, float dt) + { + var delta = new Quaternion(angularVelocity.x, + angularVelocity.y, + angularVelocity.z, 0); + + var rot = delta * rotation; + var v = new Vector4(rot.x, rot.y, rot.z, rot.w) * 0.5f * dt; + return new Quaternion(v.x, v.y, v.z, v.w); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Quaternion IntegrateAngular(Quaternion rotation, Vector4 angularVelocity, float dt) + { + var spin = AngularVelocityToSpinQuaternion(rotation, angularVelocity, dt); + rotation.x += spin.x; + rotation.y += spin.y; + rotation.z += spin.z; + rotation.w += spin.w; + return rotation.normalized; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 DifferentiateAngular(Quaternion rotation, Quaternion prevRotation, float dt) + { + var delta = rotation * Quaternion.Inverse(prevRotation); + return new Vector4(delta.x, delta.y, delta.z, 0) * 2.0f / dt; + } + } +} \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiIntegration.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiIntegration.cs.meta new file mode 100644 index 000000000..819d6050c --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiIntegration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbcd2b1cce6ff448ebca664dd6c55e2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs index 9fbff25fe..3cd2b72d6 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs @@ -1,508 +1,70 @@ -using System; -using UnityEngine; - -namespace Obi -{ - [AddComponentMenu("Physics/Obi/Obi Particle Attachment", 820)] - [RequireComponent(typeof(ObiActor))] - [ExecuteInEditMode] - public class ObiParticleAttachment : MonoBehaviour - { - public enum AttachmentType - { - Static, - Dynamic - } - - [SerializeField] [HideInInspector] private ObiActor m_Actor; - [SerializeField] [HideInInspector] private Transform m_Target; - - [SerializeField] [HideInInspector] private ObiParticleGroup m_ParticleGroup; - [SerializeField] [HideInInspector] private AttachmentType m_AttachmentType = AttachmentType.Static; - [SerializeField] [HideInInspector] private bool m_ConstrainOrientation = false; - [SerializeField] [HideInInspector] private float m_Compliance = 0; - [SerializeField] [HideInInspector] [Delayed] private float m_BreakThreshold = float.PositiveInfinity; +using System; using UnityEngine; namespace Obi { [AddComponentMenu("Physics/Obi/Obi Particle Attachment", 820)] [RequireComponent(typeof(ObiActor))] [ExecuteInEditMode] public class ObiParticleAttachment : MonoBehaviour { public enum AttachmentType { Static, Dynamic } [SerializeField] [HideInInspector] private ObiActor m_Actor; [SerializeField] [HideInInspector] private Transform m_Target; [SerializeField] [HideInInspector] private ObiParticleGroup m_ParticleGroup; [SerializeField] [HideInInspector] private AttachmentType m_AttachmentType = AttachmentType.Static; [SerializeField] [HideInInspector] private bool m_ConstrainOrientation = false; + [SerializeField] [HideInInspector] private bool m_Projection = false; [SerializeField] [HideInInspector] private float m_Compliance = 0; // private variables are serialized during script reloading, to keep their value. Must mark them explicitly as non-serialized. - [NonSerialized] private ObiPinConstraintsBatch pinBatch; - [NonSerialized] private ObiColliderBase attachedCollider; - [NonSerialized] private int attachedColliderHandleIndex; + [NonSerialized] private ObiPinConstraintsBatch pinBatch; [NonSerialized] private ObiColliderBase attachedCollider; [NonSerialized] private int attachedColliderHandleIndex; [NonSerialized] private int[] m_SolverIndices; [NonSerialized] private Vector3[] m_PositionOffsets = null; [NonSerialized] private Quaternion[] m_OrientationOffsets = null; - [NonSerialized] private int[] m_SolverIndices; - [NonSerialized] private Vector3[] m_PositionOffsets = null; - [NonSerialized] private Quaternion[] m_OrientationOffsets = null; + /// /// The actor this attachment is added to. /// public ObiActor actor { get { return m_Actor; } } - /// - /// The actor this attachment is added to. - /// - public ObiActor actor - { - get { return m_Actor; } - } + /// /// The target transform that the should be attached to. /// public Transform target { get { return m_Target; } set { if (value != m_Target) { m_Target = value; Bind(); } } } - /// - /// The target transform that the should be attached to. - /// - public Transform target - { - get { return m_Target; } - set - { - if (value != m_Target) - { - m_Target = value; - Bind(); - } - } - } + /// /// The particle group that should be attached to the . /// public ObiParticleGroup particleGroup { get { return m_ParticleGroup; } set { if (value != m_ParticleGroup) { m_ParticleGroup = value; Bind(); } } } - /// - /// The particle group that should be attached to the . - /// - public ObiParticleGroup particleGroup - { - get - { - return m_ParticleGroup; - } + /// /// Whether this attachment is currently bound or not. /// public bool isBound { get { return m_Target != null && m_SolverIndices != null && m_PositionOffsets != null; } } - set - { - if (value != m_ParticleGroup) - { - m_ParticleGroup = value; - Bind(); - } - } - } + /// /// Type of attachment, can be either static or dynamic. /// public AttachmentType attachmentType { get { return m_AttachmentType; } set { if (value != m_AttachmentType) { DisableAttachment(m_AttachmentType); m_AttachmentType = value; EnableAttachment(m_AttachmentType); } } } - /// - /// Whether this attachment is currently bound or not. - /// - public bool isBound - { - get { return m_Target != null && m_SolverIndices != null && m_PositionOffsets != null; } - } + /// /// Should this attachment constraint particle orientations too? /// public bool constrainOrientation { get { return m_ConstrainOrientation; } set { if (value != m_ConstrainOrientation) { DisableAttachment(m_AttachmentType); m_ConstrainOrientation = value; EnableAttachment(m_AttachmentType); } } } - /// - /// Type of attachment, can be either static or dynamic. - /// - public AttachmentType attachmentType - { - get { return m_AttachmentType; } - set - { - if (value != m_AttachmentType) - { - DisableAttachment(m_AttachmentType); - m_AttachmentType = value; - EnableAttachment(m_AttachmentType); - } - } - } + /// /// Should this dynamic attachment project renderable particle positions every frame to the target? /// public bool projection { get { return m_Projection; } set { if (value != m_Projection) { DisableAttachment(m_AttachmentType); m_Projection = value; EnableAttachment(m_AttachmentType); } } } - /// - /// Should this attachment constraint particle orientations too? - /// - public bool constrainOrientation - { - get { return m_ConstrainOrientation; } - set - { - if (value != m_ConstrainOrientation) - { - DisableAttachment(m_AttachmentType); - m_ConstrainOrientation = value; - EnableAttachment(m_AttachmentType); - } - } - } + /// /// Constraint compliance, in case this attachment is dynamic. /// /// High compliance values will increase the attachment's elasticity. public float compliance { get { return m_Compliance; } set { if (!Mathf.Approximately(value, m_Compliance)) { m_Compliance = value; if (m_AttachmentType == AttachmentType.Dynamic && pinBatch != null) { for (int i = 0; i < m_SolverIndices.Length; ++i) pinBatch.stiffnesses[i * 2] = m_Compliance; } } } } + /// /// Force thershold above which the attachment should break. /// /// Only affects dynamic attachments, as static attachments do not work with forces. [Delayed] public float breakThreshold = float.PositiveInfinity; private void OnEnable() { m_Actor = GetComponent(); m_Actor.OnBlueprintLoaded += Actor_OnBlueprintLoaded; m_Actor.OnSimulationStart += Actor_OnSimulate; if (m_Actor.solver != null) Actor_OnBlueprintLoaded(m_Actor, m_Actor.sourceBlueprint); EnableAttachment(m_AttachmentType); } - /// - /// Constraint compliance, in case this attachment is dynamic. - /// - /// High compliance values will increase the attachment's elasticity. - public float compliance - { - get { return m_Compliance; } - set - { - if (!Mathf.Approximately(value, m_Compliance)) - { - m_Compliance = value; - if (m_AttachmentType == AttachmentType.Dynamic && pinBatch != null) - { - for (int i = 0; i < m_SolverIndices.Length; ++i) - pinBatch.stiffnesses[i * 2] = m_Compliance; - } - } - } - } - - /// - /// Force thershold above which the attachment should break. - /// - /// Only affects dynamic attachments, as static attachments do not work with forces. - public float breakThreshold - { - get { return m_BreakThreshold; } - set - { - if (!Mathf.Approximately(value, m_BreakThreshold)) - { - m_BreakThreshold = value; - if (m_AttachmentType == AttachmentType.Dynamic && pinBatch != null) - { - for (int i = 0; i < m_SolverIndices.Length; ++i) - pinBatch.breakThresholds[i] = m_BreakThreshold; - } - } - } - } - - private void OnEnable() - { - m_Actor = GetComponent(); - m_Actor.OnBlueprintLoaded += Actor_OnBlueprintLoaded; - m_Actor.OnPrepareStep += Actor_OnPrepareStep; - m_Actor.OnEndStep += Actor_OnEndStep; - - if (m_Actor.solver != null) - Actor_OnBlueprintLoaded(m_Actor, m_Actor.sourceBlueprint); - - EnableAttachment(m_AttachmentType); - } - - private void OnDisable() - { - DisableAttachment(m_AttachmentType); - - m_Actor.OnBlueprintLoaded -= Actor_OnBlueprintLoaded; - m_Actor.OnPrepareStep -= Actor_OnPrepareStep; - m_Actor.OnEndStep -= Actor_OnEndStep; - } - - private void OnValidate() - { - m_Actor = GetComponent(); + private void OnDisable() { DisableAttachment(m_AttachmentType); m_Actor.OnBlueprintLoaded -= Actor_OnBlueprintLoaded; m_Actor.OnSimulationStart -= Actor_OnSimulate; } private void OnValidate() { m_Actor = GetComponent(); // do not re-bind: simply disable and re-enable the attachment. - DisableAttachment(AttachmentType.Static); - DisableAttachment(AttachmentType.Dynamic); - EnableAttachment(m_AttachmentType); - } + DisableAttachment(AttachmentType.Static); DisableAttachment(AttachmentType.Dynamic); EnableAttachment(m_AttachmentType); } void Actor_OnBlueprintLoaded(ObiActor act, ObiActorBlueprint blueprint) { Bind(); } - void Actor_OnBlueprintLoaded(ObiActor act, ObiActorBlueprint blueprint) - { - Bind(); - } - - void Actor_OnPrepareStep(ObiActor act, float stepTime) - { + void Actor_OnSimulate(ObiActor act, float stepTime, float substepTime) { // Attachments must be updated at the start of the step, before performing any simulation. UpdateAttachment(); - } - private void Actor_OnEndStep(ObiActor act, float stepTime) - { - // dynamic attachments must be tested at the end of the step, once constraint forces have been calculated. // if there's any broken constraint, flag pin constraints as dirty for remerging at the start of the next step. - BreakDynamicAttachment(stepTime); - } - - private void Bind() - { + BreakDynamicAttachment(substepTime); } private void Bind() { // Disable attachment. - DisableAttachment(m_AttachmentType); - - if (m_Target != null && m_ParticleGroup != null && m_Actor.isLoaded) - { - Matrix4x4 bindMatrix = m_Target.worldToLocalMatrix * m_Actor.solver.transform.localToWorldMatrix; - - m_SolverIndices = new int[m_ParticleGroup.Count]; - m_PositionOffsets = new Vector3[m_ParticleGroup.Count]; - m_OrientationOffsets = new Quaternion[m_ParticleGroup.Count]; - - for (int i = 0; i < m_ParticleGroup.Count; ++i) - { - int particleIndex = m_ParticleGroup.particleIndices[i]; - if (particleIndex >= 0 && particleIndex < m_Actor.solverIndices.Length) - { - m_SolverIndices[i] = m_Actor.solverIndices[particleIndex]; - m_PositionOffsets[i] = bindMatrix.MultiplyPoint3x4(m_Actor.solver.positions[m_SolverIndices[i]]); - } - else - { - Debug.LogError("The particle group \'" + m_ParticleGroup.name + "\' references a particle that does not exist in the actor \'" + m_Actor.name + "\'."); - m_SolverIndices = null; - m_PositionOffsets = null; - m_OrientationOffsets = null; - return; - } - } - - if (m_Actor.usesOrientedParticles) - { - Quaternion bindOrientation = bindMatrix.rotation; - - for (int i = 0; i < m_ParticleGroup.Count; ++i) - { - int particleIndex = m_ParticleGroup.particleIndices[i]; - if (particleIndex >= 0 && particleIndex < m_Actor.solverIndices.Length) - m_OrientationOffsets[i] = bindOrientation * m_Actor.solver.orientations[m_SolverIndices[i]]; - } - } - } - else - { - m_PositionOffsets = null; - m_OrientationOffsets = null; - } - - EnableAttachment(m_AttachmentType); - } - - - private void EnableAttachment(AttachmentType type) - { - - if (enabled && m_Actor.isLoaded && isBound) - { - var solver = m_Actor.solver; - - switch (type) - { - case AttachmentType.Dynamic: - - var pins = m_Actor.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiPinConstraintsData; - attachedCollider = m_Target.GetComponent(); - - if (pins != null && attachedCollider != null && pinBatch == null) - { + DisableAttachment(m_AttachmentType); if (m_Target != null && m_ParticleGroup != null && m_Actor.isLoaded) { Matrix4x4 bindMatrix = m_Target.worldToLocalMatrix * m_Actor.solver.transform.localToWorldMatrix; m_SolverIndices = new int[m_ParticleGroup.Count]; m_PositionOffsets = new Vector3[m_ParticleGroup.Count]; m_OrientationOffsets = new Quaternion[m_ParticleGroup.Count]; for (int i = 0; i < m_ParticleGroup.Count; ++i) { int particleIndex = m_ParticleGroup.particleIndices[i]; if (particleIndex >= 0 && particleIndex < m_Actor.solverIndices.count) { m_SolverIndices[i] = m_Actor.solverIndices[particleIndex]; m_PositionOffsets[i] = bindMatrix.MultiplyPoint3x4(m_Actor.solver.positions[m_SolverIndices[i]]); } else { Debug.LogError("The particle group \'" + m_ParticleGroup.name + "\' references a particle that does not exist in the actor \'" + m_Actor.name + "\'."); m_SolverIndices = null; m_PositionOffsets = null; m_OrientationOffsets = null; return; } } if (m_Actor.usesOrientedParticles) { Quaternion bindOrientation = bindMatrix.rotation; for (int i = 0; i < m_ParticleGroup.Count; ++i) { int particleIndex = m_ParticleGroup.particleIndices[i]; if (particleIndex >= 0 && particleIndex < m_Actor.solverIndices.count) m_OrientationOffsets[i] = bindOrientation * m_Actor.solver.orientations[m_SolverIndices[i]]; } } } else { m_PositionOffsets = null; m_OrientationOffsets = null; } EnableAttachment(m_AttachmentType); } private void EnableAttachment(AttachmentType type) { if (enabled && m_Actor.isLoaded && isBound) { var solver = m_Actor.solver; switch (type) { case AttachmentType.Dynamic: var pins = m_Actor.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiPinConstraintsData; attachedCollider = m_Target.GetComponent(); if (pins != null && attachedCollider != null && pinBatch == null) { // create a new data batch with all our pin constraints: - pinBatch = new ObiPinConstraintsBatch(pins); - for (int i = 0; i < m_SolverIndices.Length; ++i) - { - pinBatch.AddConstraint(m_SolverIndices[i], - attachedCollider, - m_PositionOffsets[i], - m_OrientationOffsets[i], - m_Compliance, - constrainOrientation ? 0 : 10000, - m_BreakThreshold); - - pinBatch.activeConstraintCount++; - } + pinBatch = new ObiPinConstraintsBatch(pins); for (int i = 0; i < m_SolverIndices.Length; ++i) { pinBatch.AddConstraint(m_SolverIndices[i], attachedCollider, m_PositionOffsets[i], m_OrientationOffsets[i], m_Compliance, constrainOrientation ? 0 : 10000, projection); pinBatch.activeConstraintCount++; } // add the batch to the actor: pins.AddBatch(pinBatch); // store the attached collider's handle: - attachedColliderHandleIndex = -1; - if (attachedCollider.Handle != null) - attachedColliderHandleIndex = attachedCollider.Handle.index; - - m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); - } - - break; - - case AttachmentType.Static: - - for (int i = 0; i < m_SolverIndices.Length; ++i) - if (m_SolverIndices[i] >= 0 && m_SolverIndices[i] < solver.invMasses.count) - solver.invMasses[m_SolverIndices[i]] = 0; - - if (m_Actor.usesOrientedParticles && m_ConstrainOrientation) - { - for (int i = 0; i < m_SolverIndices.Length; ++i) - if (m_SolverIndices[i] >= 0 && m_SolverIndices[i] < solver.invRotationalMasses.count) - solver.invRotationalMasses[m_SolverIndices[i]] = 0; - } - - m_Actor.UpdateParticleProperties(); - - break; - - } - } - - } - - private void DisableAttachment(AttachmentType type) - { - if (isBound) - { - switch (type) - { - case AttachmentType.Dynamic: - - if (pinBatch != null) - { - var pins = m_Actor.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; - if (pins != null) - { - pins.RemoveBatch(pinBatch); - if (actor.isLoaded) - m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); - } - - attachedCollider = null; - pinBatch = null; - attachedColliderHandleIndex = -1; - } - - break; - - case AttachmentType.Static: - - var solver = m_Actor.solver; - var blueprint = m_Actor.sourceBlueprint; - - for (int i = 0; i < m_SolverIndices.Length; ++i) - { - int solverIndex = m_SolverIndices[i]; - if (solverIndex >= 0 && solverIndex < solver.invMasses.count) - solver.invMasses[solverIndex] = blueprint.invMasses[i]; - } - - if (m_Actor.usesOrientedParticles) - { - for (int i = 0; i < m_SolverIndices.Length; ++i) - { - int solverIndex = m_SolverIndices[i]; - if (solverIndex >= 0 && solverIndex < solver.invRotationalMasses.count) - solver.invRotationalMasses[solverIndex] = blueprint.invRotationalMasses[i]; - } - } - - m_Actor.UpdateParticleProperties(); - - break; - - } - } - } - - private void UpdateAttachment() - { - - if (enabled && m_Actor.isLoaded && isBound) - { - var solver = m_Actor.solver; - - switch (m_AttachmentType) - { - case AttachmentType.Dynamic: + attachedColliderHandleIndex = -1; if (attachedCollider.Handle != null) attachedColliderHandleIndex = attachedCollider.Handle.index; m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); } break; case AttachmentType.Static: for (int i = 0; i < m_SolverIndices.Length; ++i) if (m_SolverIndices[i] >= 0 && m_SolverIndices[i] < solver.invMasses.count) solver.invMasses[m_SolverIndices[i]] = 0; if (m_Actor.usesOrientedParticles && m_ConstrainOrientation) { for (int i = 0; i < m_SolverIndices.Length; ++i) if (m_SolverIndices[i] >= 0 && m_SolverIndices[i] < solver.invRotationalMasses.count) solver.invRotationalMasses[m_SolverIndices[i]] = 0; } m_Actor.UpdateParticleProperties(); break; } } } private void DisableAttachment(AttachmentType type) { if (isBound) { switch (type) { case AttachmentType.Dynamic: if (pinBatch != null) { var pins = m_Actor.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; if (pins != null) { pins.RemoveBatch(pinBatch); if (actor.isLoaded) m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); } attachedCollider = null; pinBatch = null; attachedColliderHandleIndex = -1; } break; case AttachmentType.Static: var solver = m_Actor.solver; var blueprint = m_Actor.sourceBlueprint; for (int i = 0; i < m_SolverIndices.Length; ++i) { int solverIndex = m_SolverIndices[i]; if (solverIndex >= 0 && solverIndex < solver.invMasses.count) solver.invMasses[solverIndex] = blueprint.invMasses[i]; } if (m_Actor.usesOrientedParticles) { for (int i = 0; i < m_SolverIndices.Length; ++i) { int solverIndex = m_SolverIndices[i]; if (solverIndex >= 0 && solverIndex < solver.invRotationalMasses.count) solver.invRotationalMasses[solverIndex] = blueprint.invRotationalMasses[i]; } } m_Actor.UpdateParticleProperties(); break; } } } private void UpdateAttachment() { if (enabled && m_Actor.isLoaded && isBound) { var solver = m_Actor.solver; switch (m_AttachmentType) { case AttachmentType.Dynamic: // in case the handle has been updated/invalidated (for instance, when disabling the target) rebuild constraints: if (attachedCollider != null && attachedCollider.Handle != null && - attachedCollider.Handle.index != attachedColliderHandleIndex) - { - attachedColliderHandleIndex = attachedCollider.Handle.index; - m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); - } - - break; - - case AttachmentType.Static: - - var blueprint = m_Actor.sourceBlueprint; - bool targetActive = m_Target.gameObject.activeInHierarchy; + attachedCollider.Handle.index != attachedColliderHandleIndex) { attachedColliderHandleIndex = attachedCollider.Handle.index; m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); } break; case AttachmentType.Static: var blueprint = m_Actor.sourceBlueprint; bool targetActive = m_Target.gameObject.activeInHierarchy; // Build the attachment matrix: Matrix4x4 attachmentMatrix = solver.transform.worldToLocalMatrix * m_Target.localToWorldMatrix; // Fix all particles in the group and update their position // Note: skip assignment to startPositions if you want attached particles to be interpolated too. - for (int i = 0; i < m_SolverIndices.Length; ++i) - { - int solverIndex = m_SolverIndices[i]; - - if (solverIndex >= 0 && solverIndex < solver.invMasses.count) - { - if (targetActive) - { - solver.invMasses[solverIndex] = 0; - solver.velocities[solverIndex] = Vector3.zero; - solver.startPositions[solverIndex] = solver.positions[solverIndex] = attachmentMatrix.MultiplyPoint3x4(m_PositionOffsets[i]); - }else - solver.invMasses[solverIndex] = blueprint.invMasses[i]; - } - } - - if (m_Actor.usesOrientedParticles && m_ConstrainOrientation) - { - Quaternion attachmentRotation = attachmentMatrix.rotation; - - for (int i = 0; i < m_SolverIndices.Length; ++i) - { - int solverIndex = m_SolverIndices[i]; - - if (solverIndex >= 0 && solverIndex < solver.invRotationalMasses.count) - { - if (targetActive) - { - solver.invRotationalMasses[solverIndex] = 0; - solver.angularVelocities[solverIndex] = Vector3.zero; - solver.startOrientations[solverIndex] = solver.orientations[solverIndex] = attachmentRotation * m_OrientationOffsets[i]; - } - else - solver.invRotationalMasses[solverIndex] = blueprint.invRotationalMasses[i]; - } - } - } - break; - } - } - } - - private void BreakDynamicAttachment(float stepTime) - { - - if (enabled && m_AttachmentType == AttachmentType.Dynamic && m_Actor.isLoaded && isBound) + for (int i = 0; i < m_SolverIndices.Length; ++i) { int solverIndex = m_SolverIndices[i]; if (solverIndex >= 0 && solverIndex < solver.invMasses.count) { if (targetActive) { solver.invMasses[solverIndex] = 0; solver.velocities[solverIndex] = Vector3.zero; solver.startPositions[solverIndex] = solver.endPositions[solverIndex] = solver.positions[solverIndex] = attachmentMatrix.MultiplyPoint3x4(m_PositionOffsets[i]); } + else solver.invMasses[solverIndex] = blueprint.invMasses[i]; } } if (m_Actor.usesOrientedParticles && m_ConstrainOrientation) { Quaternion attachmentRotation = attachmentMatrix.rotation; for (int i = 0; i < m_SolverIndices.Length; ++i) { int solverIndex = m_SolverIndices[i]; if (solverIndex >= 0 && solverIndex < solver.invRotationalMasses.count) { if (targetActive) { solver.invRotationalMasses[solverIndex] = 0; solver.angularVelocities[solverIndex] = Vector3.zero; solver.startOrientations[solverIndex] = solver.endOrientations[solverIndex] = solver.orientations[solverIndex] = attachmentRotation * m_OrientationOffsets[i]; } else solver.invRotationalMasses[solverIndex] = blueprint.invRotationalMasses[i]; } } } break; } } else if (!isBound && attachedColliderHandleIndex >= 0) { - - var solver = m_Actor.solver; - - var actorConstraints = m_Actor.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; - var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; - - bool dirty = false; - if (actorConstraints != null && pinBatch != null) - { - int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); - if (pinBatchIndex >= 0 && pinBatchIndex < actor.solverBatchOffsets[(int)Oni.ConstraintType.Pin].Count) - { - int offset = actor.solverBatchOffsets[(int)Oni.ConstraintType.Pin][pinBatchIndex]; - var solverBatch = solverConstraints.batches[pinBatchIndex]; - - float sqrTime = stepTime * stepTime; - for (int i = 0; i < pinBatch.activeConstraintCount; i++) - { + attachedColliderHandleIndex = -1; + m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); + } } private void BreakDynamicAttachment(float substepTime) { if (enabled && m_AttachmentType == AttachmentType.Dynamic && m_Actor.isLoaded && isBound) { var solver = m_Actor.solver; var actorConstraints = m_Actor.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; bool dirty = false; if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) { int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); if (pinBatchIndex >= 0 && pinBatchIndex < actor.solverBatchOffsets[(int)Oni.ConstraintType.Pin].Count) { int offset = actor.solverBatchOffsets[(int)Oni.ConstraintType.Pin][pinBatchIndex]; var solverBatch = solverConstraints.batches[pinBatchIndex]; float sqrTime = substepTime * substepTime; for (int i = 0; i < pinBatch.activeConstraintCount; i++) { // In case the handle has been created/destroyed. - if (pinBatch.pinBodies[i] != attachedCollider.Handle) - { - pinBatch.pinBodies[i] = attachedCollider.Handle; - dirty = true; - } + if (pinBatch.pinBodies[i] != attachedCollider.Handle) { pinBatch.pinBodies[i] = attachedCollider.Handle; dirty = true; } // in case the constraint has been broken: - if (-solverBatch.lambdas[(offset + i) * 4 + 3] / sqrTime > pinBatch.breakThresholds[i]) - { - pinBatch.DeactivateConstraint(i); - dirty = true; - } - } - } - } + if (-solverBatch.lambdas[(offset + i) * 4 + 3] / sqrTime > breakThreshold) { pinBatch.DeactivateConstraint(i); dirty = true; } } } } // constraints are recreated at the start of a step. - if (dirty) - m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); - } - } - } -} + if (dirty) m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); } } } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleDragger.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleDragger.cs index 90f193dec..564490594 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleDragger.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleDragger.cs @@ -22,23 +22,24 @@ namespace Obi picker.OnParticlePicked.AddListener(Picker_OnParticleDragged); picker.OnParticleDragged.AddListener(Picker_OnParticleDragged); picker.OnParticleReleased.AddListener(Picker_OnParticleReleased); + + picker.solver.OnSimulationStart += Solver_OnEndSimulation; } void OnDisable() { + picker.solver.OnSimulationStart -= Solver_OnEndSimulation; + picker.OnParticlePicked.RemoveListener(Picker_OnParticleDragged); picker.OnParticleDragged.RemoveListener(Picker_OnParticleDragged); picker.OnParticleReleased.RemoveListener(Picker_OnParticleReleased); lineRenderer.positionCount = 0; } - void FixedUpdate() + private void Solver_OnEndSimulation(ObiSolver solver, float timeToSimulate, float substepTime) { - ObiSolver solver = picker.solver; - if (solver != null && pickArgs != null) { - // Calculate picking position in solver space: Vector4 targetPosition = solver.transform.InverseTransformPoint(pickArgs.worldPosition); @@ -52,7 +53,6 @@ namespace Obi Vector4 velocity = solver.velocities[pickArgs.particleIndex]; solver.externalForces[pickArgs.particleIndex] = ((targetPosition - position) * springStiffness - velocity * springDamping) / invMass; - if (drawSpring) { lineRenderer.positionCount = 2; diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleGridDebugger.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleGridDebugger.cs deleted file mode 100644 index 4a2a827b4..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleGridDebugger.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi -{ - - [RequireComponent(typeof(ObiSolver))] - public class ObiParticleGridDebugger : MonoBehaviour - { - - ObiSolver solver; - ObiNativeAabbList cells; - - void OnEnable() - { - solver = GetComponent(); - cells = new ObiNativeAabbList(); - } - - private void OnDisable() - { - cells.Dispose(); - } - - void LateUpdate () - { - cells.count = solver.implementation.GetParticleGridSize(); - solver.implementation.GetParticleGrid(cells); - } - - void OnDrawGizmos() - { - - if (cells != null) - { - Gizmos.color = Color.yellow; - for(int i = 0; i < cells.count; ++i) - Gizmos.DrawWireCube(cells[i].center, cells[i].size); - } - - } - - } -} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleGridDebugger.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleGridDebugger.cs.meta deleted file mode 100644 index f787114ba..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticleGridDebugger.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 12c0ac28542b14de6a887a6a9067d86d -timeCreated: 1487351379 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticlePicker.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticlePicker.cs index 9c5d4a474..8c2d7fdb9 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticlePicker.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiParticlePicker.cs @@ -63,13 +63,13 @@ namespace Obi Matrix4x4 solver2World = solver.transform.localToWorldMatrix; // Find the closest particle hit by the ray: - for (int i = 0; i < solver.renderablePositions.count; ++i) + for (int i = 0; i < solver.positions.count; ++i) { - Vector3 worldPos = solver2World.MultiplyPoint3x4(solver.renderablePositions[i]); + Vector3 worldPos = solver2World.MultiplyPoint3x4(solver.positions[i]); float mu; - Vector3 projected = ObiUtils.ProjectPointLine(worldPos, ray.origin, ray.origin + ray.direction, out mu, false); + Vector3 projected = ObiUtils.ProjectPointLine(ray.origin, ray.origin + ray.direction, worldPos, out mu, false); float distanceToRay = Vector3.SqrMagnitude(worldPos - projected); // Disregard particles behind the camera: @@ -88,7 +88,7 @@ namespace Obi if (pickedParticleIndex >= 0) { - pickedParticleDepth = Camera.main.transform.InverseTransformVector(solver2World.MultiplyPoint3x4(solver.renderablePositions[pickedParticleIndex]) - Camera.main.transform.position).z; + pickedParticleDepth = Camera.main.transform.InverseTransformVector(solver2World.MultiplyPoint3x4(solver.positions[pickedParticleIndex]) - Camera.main.transform.position).z; if (OnParticlePicked != null) { diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiProfiler.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiProfiler.cs deleted file mode 100644 index 32e62596f..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiProfiler.cs +++ /dev/null @@ -1,215 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - [DisallowMultipleComponent] - public class ObiProfiler : MonoBehaviour - { - [Header("Appearance")] - public GUISkin skin; - public Color threadColor = Color.white; - public Color taskColor = new Color(0.1f, 1, 0.2f); - public Color parallelTaskColor = new Color(1,0.8f,0.2f); - //public Color idleColor = new Color(0.7f,0.7f,0.7f); - public Color renderTaskColor = new Color(0.2f, 0.7f, 1.0f); - public Color defaultTaskColor = new Color(1, 0.5f, 0.2f); - - [Header("Visualization")] - public bool showPercentages = false; - public int profileThrottle = 30; - - private Oni.ProfileInfo[] info; - private double frameStart; - private double frameEnd; - private int frameCounter = 0; - private int yPos = 25; - private bool profiling = false; - - private float zoom = 1; - private Vector2 scrollPosition = Vector2.zero; - - private static ObiProfiler _instance; - - private void Awake() - { - if (_instance != null && _instance != this) - DestroyImmediate(this); - else{ - _instance = this; - } - } - - public void OnDestroy(){ -#if (OBI_ONI_SUPPORTED) - _instance = null; - Oni.EnableProfiler(false); -#endif - } - - private void OnEnable() - { -#if (OBI_ONI_SUPPORTED) - if (_instance != null && _instance.profiling) - Oni.EnableProfiler(true); -#endif - } - - private void OnDisable() - { -#if (OBI_ONI_SUPPORTED) - if (_instance != null) - Oni.EnableProfiler(false); -#endif - } - - public static void EnableProfiler() - { -#if (OBI_ONI_SUPPORTED) - if (_instance != null) - { - _instance.profiling = true; - if (_instance.isActiveAndEnabled) - Oni.EnableProfiler(true); - } -#endif - } - - public static void DisableProfiler() - { -#if (OBI_ONI_SUPPORTED) - if (_instance != null) - { - _instance.profiling = false; - Oni.EnableProfiler(false); - } -#endif - } - - public static void BeginSample(string name, byte type) - { -#if (OBI_ONI_SUPPORTED) - if (_instance != null) - Oni.BeginSample(name, type); -#endif - } - - public static void EndSample() - { -#if (OBI_ONI_SUPPORTED) - if (_instance != null) - Oni.EndSample(); -#endif - } - - private void UpdateProfilerInfo(){ -#if (OBI_ONI_SUPPORTED) - frameCounter--; - if (frameCounter <= 0) - { - int count = Oni.GetProfilingInfoCount(); - info = new Oni.ProfileInfo[count]; - Oni.GetProfilingInfo(info,count); - - frameCounter = profileThrottle; - - // Calculate frame duration: - frameStart = double.MaxValue; - frameEnd = double.MinValue; - foreach (Oni.ProfileInfo i in info){ - frameStart = Math.Min(frameStart,i.start); - frameEnd = Math.Max(frameEnd,i.end); - } - } - - Oni.ClearProfiler(); -#endif - } - - public void OnGUI() - { -#if (OBI_ONI_SUPPORTED) - if (Event.current.type == EventType.Layout) - UpdateProfilerInfo(); - - if (info == null) - return; - - GUI.skin = skin; - int toolbarHeight = 20; - int threadHeight = 20; - int scrollViewWidth = (int)(Screen.width / zoom); - - double frameDuration = frameEnd - frameStart; - - // Toolbar: - GUI.BeginGroup(new Rect(0,0,Screen.width,toolbarHeight),"","Box"); - - GUI.Label(new Rect(5,0,50,toolbarHeight),"Zoom:"); - zoom = GUI.HorizontalSlider(new Rect(50,5,100,toolbarHeight),zoom,0.005f,1); - GUI.Label(new Rect(Screen.width - 100,0,100,toolbarHeight),(frameDuration/1000.0f).ToString("0.###") + " ms/frame"); - - GUI.EndGroup(); - - // Timeline view: - scrollPosition = GUI.BeginScrollView(new Rect(0, toolbarHeight, Screen.width, Screen.height-20), scrollPosition, - new Rect(0, 0, scrollViewWidth, yPos+30)); // height depends on amount of threads. - - GUI.color = threadColor; - GUI.Label(new Rect(5,0,200,20),"Thread 1"); - GUI.Box(new Rect(0, 0, scrollViewWidth, 40),"","Thread"); - - yPos = 25; - uint currentThreadId = 0; - uint currentLevel = 0; - foreach (Oni.ProfileInfo i in info) - { - uint threadId = (i.info & (uint)Oni.ProfileMask.ThreadIdMask) >> 16; - uint level = (i.info & (uint)Oni.ProfileMask.StackLevelMask) >> 8; - uint type = i.info & (uint)Oni.ProfileMask.TypeMask; - - if (currentThreadId != threadId){ - yPos += threadHeight+1; - GUI.color = threadColor; - GUI.Label(new Rect(5,yPos+5,200,20),"Thread "+(threadId+1)); - GUI.Box(new Rect(0, yPos+5, scrollViewWidth, 40),"","Thread"); - yPos += 30; - }else if (currentLevel != level){ - yPos += threadHeight+1; - } - - currentLevel = level; - currentThreadId = threadId; - - switch(type){ - case 0: GUI.color = taskColor; break; - //case 1: GUI.color = idleColor; break; - case 2: GUI.color = parallelTaskColor; break; - case 3: GUI.color = renderTaskColor; break; - default: GUI.color = defaultTaskColor; break; - } - - // task duration: - int taskStart = (int) ((i.start - frameStart) / frameDuration * (Screen.width-10) / zoom); - int taskEnd = (int) ((i.end - frameStart) / frameDuration * (Screen.width-10) / zoom); - int taskDuration = taskEnd-taskStart; - - string name; - if (showPercentages) - { - double pctg = (i.end-i.start)/frameDuration*100; - name = i.name + " ("+pctg.ToString("0.#")+"%)"; - } - else{ - double ms = (i.end-i.start)/1000.0f; - name = i.name + " ("+ms.ToString("0.###")+"ms)"; - } - - GUI.Box(new Rect(taskStart, yPos, taskDuration-1, threadHeight),name,"Task"); - } - GUI.EndScrollView(); -#endif - } - } -} - diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiProfiler.cs.meta b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiProfiler.cs.meta deleted file mode 100644 index d26c93d7c..000000000 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiProfiler.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 62e83a599724f45a4aa337d74764e572 -timeCreated: 1482252100 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: - - skin: {fileID: 11400000, guid: b90d3c214c99743b0865fc0e0d1f1a15, type: 2} - executionOrder: 0 - icon: {fileID: 2800000, guid: 1c322d61eeb3640408ee1119729d5c21, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiStitcher.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiStitcher.cs index 86c1f76bd..e7c95e84b 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiStitcher.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiStitcher.cs @@ -34,9 +34,9 @@ namespace Obi [SerializeField] [HideInInspector] private ObiActor actor1 = null; /**< one of the actors used by the stitcher.*/ [SerializeField] [HideInInspector] private ObiActor actor2 = null; /**< the second actor used by the stitcher.*/ - [HideInInspector] public ObiNativeIntList particleIndices = new ObiNativeIntList(); - [HideInInspector] public ObiNativeFloatList stiffnesses = new ObiNativeFloatList(); - [HideInInspector] public ObiNativeFloatList lambdas = new ObiNativeFloatList(); + [HideInInspector] public ObiNativeIntList particleIndices; + [HideInInspector] public ObiNativeFloatList stiffnesses; + [HideInInspector] public ObiNativeFloatList lambdas; //private IntPtr batch; private IStitchConstraintsBatchImpl m_BatchImpl; @@ -176,6 +176,10 @@ namespace Obi inSolver = true; + particleIndices = new ObiNativeIntList(); + stiffnesses = new ObiNativeFloatList(); + lambdas = new ObiNativeFloatList(); + // create a constraint batch (CreateStitchConstraints() in burst returns a singleton): m_BatchImpl = solver.implementation.CreateConstraintsBatch(Oni.ConstraintType.Stitch) as IStitchConstraintsBatchImpl; @@ -195,6 +199,10 @@ namespace Obi // Oni.RemoveBatch(actor1.solver.OniSolver, batch); if (inSolver && m_BatchImpl != null) { + lambdas.Dispose(); + particleIndices.Dispose(); + stiffnesses.Dispose(); + solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IStitchConstraintsBatchImpl); m_BatchImpl.Destroy(); m_BatchImpl = null; @@ -227,7 +235,6 @@ namespace Obi m_BatchImpl.SetStitchConstraints(particleIndices, stiffnesses, lambdas, stitches.Count); } - } } diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiUtils.cs b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiUtils.cs index fcf48adf2..a3e1a1966 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiUtils.cs +++ b/Assets/ThirdParty/Obi/Scripts/Common/Utils/ObiUtils.cs @@ -1,888 +1,114 @@ -using UnityEngine; -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; +using UnityEngine; using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.IO; namespace Obi { public static class Constants { public const int maxVertsPerMesh = 65000; public const int maxInstancesPerBatch = 1023; } public static class ObiUtils { public const float epsilon = 0.0000001f; public const float sqrt3 = 1.73205080f; public const float sqrt2 = 1.41421356f; public const int FilterMaskBitmask = unchecked((int)0xffff0000); public const int FilterCategoryBitmask = 0x0000ffff; public const int ParticleGroupBitmask = 0x00ffffff; public const int CollideWithEverything = 0x0000ffff; public const int CollideWithNothing= 0x0; public const int MaxCategory = 15; public const int MinCategory = 0; [Flags] public enum ParticleFlags { SelfCollide = 1 << 24, Fluid = 1 << 25, OneSided = 1 << 26, Isolated = 1 << 27 // particles that are not part of persistent constraints and can be deleted without ill effects: fluids and granulars + } // Colour alphabet from https://www.aic-color.org/resources/Documents/jaic_v5_06.pdf public static readonly Color32[] colorAlphabet = { new Color32(240,163,255,255), new Color32(0,117,220,255), new Color32(153,63,0,255), new Color32(76,0,92,255), new Color32(25,25,25,255), new Color32(0,92,49,255), new Color32(43,206,72,255), new Color32(255,204,153,255), new Color32(128,128,128,255), new Color32(148,255,181,255), new Color32(143,124,0,255), new Color32(157,204,0,255), new Color32(194,0,136,255), new Color32(0,51,128,255), new Color32(255,164,5,255), new Color32(255,168,187,255), new Color32(66,102,0,255), new Color32(255,0,16,255), new Color32(94,241,242,255), new Color32(0,153,143,255), new Color32(224,255,102,255), new Color32(116,10,255,255), new Color32(153,0,0,255), new Color32(255,255,128,255), new Color32(255,255,0,255), new Color32(255,80,5,255) }; public static readonly string[] categoryNames = { "0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15" }; -namespace Obi -{ - - public static class Constants - { - public const int maxVertsPerMesh = 65000; - public const int maxInstancesPerBatch = 1023; - } - - public static class ObiUtils - { - - public const float epsilon = 0.0000001f; - public const float sqrt3 = 1.73205080f; - public const float sqrt2 = 1.41421356f; - - public const int FilterMaskBitmask = unchecked((int)0xffff0000); - public const int FilterCategoryBitmask = 0x0000ffff; - public const int ParticleGroupBitmask = 0x00ffffff; - - public const int CollideWithEverything = 0x0000ffff; - public const int CollideWithNothing= 0x0; - - public const int MaxCategory = 15; - public const int MinCategory = 0; - - [Flags] - public enum ParticleFlags + // Based on Kubelka-Munk theory: https://vanity-ibex.xyz/blog/kubelka_munk_colormixing/ + public static Color RGBToAbsorption(this Color rgb) { - SelfCollide = 1 << 24, - Fluid = 1 << 25, - OneSided = 1 << 26 + // S (scattering) is assumed to be 1 for all channels + Color k; + k.r = Mathf.Pow(1 - rgb.r, 2) / (2 * rgb.r + epsilon); + k.g = Mathf.Pow(1 - rgb.g, 2) / (2 * rgb.g + epsilon); + k.b = Mathf.Pow(1 - rgb.b, 2) / (2 * rgb.b + epsilon); + k.a = rgb.a; + return k; } - // Colour alphabet from https://www.aic-color.org/resources/Documents/jaic_v5_06.pdf - public static readonly Color32[] colorAlphabet = + // Based on Kubelka-Munk theory: https://vanity-ibex.xyz/blog/kubelka_munk_colormixing/ + public static Color AbsorptionToRGB(this Color k) { - new Color32(240,163,255,255), - new Color32(0,117,220,255), - new Color32(153,63,0,255), - new Color32(76,0,92,255), - new Color32(25,25,25,255), - new Color32(0,92,49,255), - new Color32(43,206,72,255), - new Color32(255,204,153,255), - new Color32(128,128,128,255), - new Color32(148,255,181,255), - new Color32(143,124,0,255), - new Color32(157,204,0,255), - new Color32(194,0,136,255), - new Color32(0,51,128,255), - new Color32(255,164,5,255), - new Color32(255,168,187,255), - new Color32(66,102,0,255), - new Color32(255,0,16,255), - new Color32(94,241,242,255), - new Color32(0,153,143,255), - new Color32(224,255,102,255), - new Color32(116,10,255,255), - new Color32(153,0,0,255), - new Color32(255,255,128,255), - new Color32(255,255,0,255), - new Color32(255,80,5,255) - }; + // Assuming S=1 for all channels + Color rgb; + rgb.r = 1 + k.r - Mathf.Sqrt(k.r * (k.r + 2)); + rgb.g = 1 + k.g - Mathf.Sqrt(k.g * (k.g + 2)); + rgb.b = 1 + k.b - Mathf.Sqrt(k.b * (k.b + 2)); + rgb.a = k.a; + return rgb; + } public static void DrawArrowGizmo(float bodyLenght, float bodyWidth, float headLenght, float headWidth) { float halfBodyLenght = bodyLenght * 0.5f; float halfBodyWidth = bodyWidth * 0.5f; // arrow body: Gizmos.DrawLine(new Vector3(halfBodyWidth, 0, -halfBodyLenght), new Vector3(halfBodyWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, -halfBodyLenght), new Vector3(-halfBodyWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, -halfBodyLenght), new Vector3(halfBodyWidth, 0, -halfBodyLenght)); // arrow head: Gizmos.DrawLine(new Vector3(halfBodyWidth, 0, halfBodyLenght), new Vector3(headWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, halfBodyLenght), new Vector3(-headWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(0, 0, halfBodyLenght + headLenght), new Vector3(headWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(0, 0, halfBodyLenght + headLenght), new Vector3(-headWidth, 0, halfBodyLenght)); } - public static readonly string[] categoryNames = + public static void DebugDrawBox(Vector3 pos, Quaternion rot, Vector3 scale, Color c) { - "0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15" - }; + // create matrix + Matrix4x4 m = new Matrix4x4(); + m.SetTRS(pos, rot, scale); - public static void DrawArrowGizmo(float bodyLenght, float bodyWidth, float headLenght, float headWidth) - { + var point1 = m.MultiplyPoint(new Vector3(-0.5f, -0.5f, 0.5f)); + var point2 = m.MultiplyPoint(new Vector3(0.5f, -0.5f, 0.5f)); + var point3 = m.MultiplyPoint(new Vector3(0.5f, -0.5f, -0.5f)); + var point4 = m.MultiplyPoint(new Vector3(-0.5f, -0.5f, -0.5f)); - float halfBodyLenght = bodyLenght * 0.5f; - float halfBodyWidth = bodyWidth * 0.5f; + var point5 = m.MultiplyPoint(new Vector3(-0.5f, 0.5f, 0.5f)); + var point6 = m.MultiplyPoint(new Vector3(0.5f, 0.5f, 0.5f)); + var point7 = m.MultiplyPoint(new Vector3(0.5f, 0.5f, -0.5f)); + var point8 = m.MultiplyPoint(new Vector3(-0.5f, 0.5f, -0.5f)); - // arrow body: - Gizmos.DrawLine(new Vector3(halfBodyWidth, 0, -halfBodyLenght), new Vector3(halfBodyWidth, 0, halfBodyLenght)); - Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, -halfBodyLenght), new Vector3(-halfBodyWidth, 0, halfBodyLenght)); - Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, -halfBodyLenght), new Vector3(halfBodyWidth, 0, -halfBodyLenght)); + Debug.DrawLine(point1, point2, c); + Debug.DrawLine(point2, point3, c); + Debug.DrawLine(point3, point4, c); + Debug.DrawLine(point4, point1, c); - // arrow head: - Gizmos.DrawLine(new Vector3(halfBodyWidth, 0, halfBodyLenght), new Vector3(headWidth, 0, halfBodyLenght)); - Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, halfBodyLenght), new Vector3(-headWidth, 0, halfBodyLenght)); - Gizmos.DrawLine(new Vector3(0, 0, halfBodyLenght + headLenght), new Vector3(headWidth, 0, halfBodyLenght)); - Gizmos.DrawLine(new Vector3(0, 0, halfBodyLenght + headLenght), new Vector3(-headWidth, 0, halfBodyLenght)); + Debug.DrawLine(point5, point6, c); + Debug.DrawLine(point6, point7, c); + Debug.DrawLine(point7, point8, c); + Debug.DrawLine(point8, point5, c); + + Debug.DrawLine(point1, point5, c); + Debug.DrawLine(point2, point6, c); + Debug.DrawLine(point3, point7, c); + Debug.DrawLine(point4, point8, c); } - - public static void DebugDrawCross(Vector3 pos, float size, Color color) + public static void DebugDrawCross(Vector3 pos, float size, Color color) { Debug.DrawLine(pos - Vector3.right * size, pos + Vector3.right * size, color); Debug.DrawLine(pos - Vector3.up * size, pos + Vector3.up * size, color); Debug.DrawLine(pos - Vector3.forward * size, pos + Vector3.forward * size, color); } public static int CeilToPowerOfTwo(this int count) { int powerOfTwo = 1; while (powerOfTwo < count) powerOfTwo <<= 1; return powerOfTwo; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Swap(ref T lhs, ref T rhs) { T temp = lhs; lhs = rhs; rhs = temp; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Swap(this T[] source, int index1, int index2) { if (source != null && index1 >= 0 && index2 >= 0 && index1 < source.Length && index2 < source.Length) { T temp = source[index1]; source[index1] = source[index2]; source[index2] = temp; } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Swap(this IList list, int index1, int index2) { if (list != null && index1 >= 0 && index2 >= 0 && index1 < list.Count && index2 < list.Count) { T temp = list[index1]; list[index1] = list[index2]; list[index2] = temp; } } public static void ShiftLeft(this T[] source, int index, int count, int positions) { for (int j = 0; j < positions; ++j) { for (int i = index; i < index + count; ++i) source.Swap(i, i - 1); index--; } } public static void ShiftRight(this T[] source, int index, int count, int positions) { for (int j = 0; j < positions; ++j) { for (int i = index + count - 1; i >= index; --i) source.Swap(i, i + 1); index++; } } public static int Unique(this IList list, Func equals) { int result = 0; for (int i = 0; i < list.Count; ++i) { if (!equals(list[result],list[i]) && ++result != i) list[result] = list[i]; } result++; return result; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool AreValid(this Bounds bounds) { return !(float.IsNaN(bounds.max.x) || float.IsInfinity(bounds.max.x) || float.IsNaN(bounds.max.y) || float.IsInfinity(bounds.max.y) || float.IsNaN(bounds.max.z) || float.IsInfinity(bounds.max.z) || float.IsNaN(bounds.min.x) || float.IsInfinity(bounds.min.x) || float.IsNaN(bounds.min.y) || float.IsInfinity(bounds.min.y) || float.IsNaN(bounds.min.z) || float.IsInfinity(bounds.min.z)); } public static Bounds Transform(this Bounds b, Matrix4x4 m) { var xa = m.GetColumn(0) * b.min.x; var xb = m.GetColumn(0) * b.max.x; var ya = m.GetColumn(1) * b.min.y; var yb = m.GetColumn(1) * b.max.y; var za = m.GetColumn(2) * b.min.z; var zb = m.GetColumn(2) * b.max.z; Bounds result = new Bounds(); Vector3 pos = m.GetColumn(3); result.SetMinMax(Vector3.Min(xa, xb) + Vector3.Min(ya, yb) + Vector3.Min(za, zb) + pos, Vector3.Max(xa, xb) + Vector3.Max(ya, yb) + Vector3.Max(za, zb) + pos); return result; } public static int CountTrailingZeroes(int x) { int mask = 1; for (int i = 0; i < 32; i++, mask <<= 1) if ((x & mask) != 0) return i; return 32; } public static void Add(Vector3 a, Vector3 b, ref Vector3 result) { result.x = a.x + b.x; result.y = a.y + b.y; result.z = a.z + b.z; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float Remap(this float value, float from1, float to1, float from2, float to2) { return (value - from1) / (to1 - from1) * (to2 - from2) + from2; } /** * Modulo operator that also follows intuition for negative arguments. That is , -1 mod 3 = 2, not -1. */ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float Mod(float a, float b) { return a - b * Mathf.Floor(a / b); } public static Matrix4x4 Add(this Matrix4x4 a, Matrix4x4 other) { for (int i = 0; i < 16; ++i) a[i] += other[i]; return a; } public static float FrobeniusNorm(this Matrix4x4 a) { float norm = 0; for (int i = 0; i < 16; ++i) norm += a[i] * a[i]; return norm > 0 ? Mathf.Sqrt(norm) : 0; } public static Matrix4x4 ScalarMultiply(this Matrix4x4 a, float s) { for (int i = 0; i < 16; ++i) a[i] *= s; return a; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Vector4 Diagonal(this Matrix4x4 value) { return new Vector4(value.m00, value.m11, value.m22, value.m33); } public static Vector3 ProjectPointLine(Vector3 lineStart, Vector3 lineEnd, Vector3 point, out float mu, bool clampToSegment = true) { Vector3 ap = point - lineStart; Vector3 ab = lineEnd - lineStart; mu = Vector3.Dot(ap, ab) / Vector3.Dot(ab, ab); if (clampToSegment) mu = Mathf.Clamp01(mu); return lineStart + ab * mu; } public static bool LinePlaneIntersection(Vector3 planePoint, Vector3 planeNormal, Vector3 linePoint, Vector3 lineDirection, out Vector3 point) { point = linePoint; Vector3 lineNormal = lineDirection.normalized; float denom = Vector3.Dot(planeNormal, lineNormal); if (Mathf.Approximately(denom, 0)) return false; float t = (Vector3.Dot(planeNormal,planePoint) - Vector3.Dot(planeNormal,linePoint)) / denom; point = linePoint + lineNormal * t; return true; } public static float RaySphereIntersection(Vector3 rayOrigin, Vector3 rayDirection, Vector3 center, float radius) { Vector3 oc = rayOrigin - center; float a = Vector3.Dot(rayDirection, rayDirection); float b = 2.0f * Vector3.Dot(oc, rayDirection); float c = Vector3.Dot(oc, oc) - radius * radius; float discriminant = b * b - 4 * a * c; if(discriminant < 0){ return -1.0f; } else{ return (-b - Mathf.Sqrt(discriminant)) / (2.0f * a); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float InvMassToMass(float invMass) { return 1.0f / invMass; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float MassToInvMass(float mass) { return 1.0f / Mathf.Max(mass, 0.00001f); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int PureSign(this float val) { return ((0 <= val)?1:0) - ((val < 0)?1:0); } public static void NearestPointOnTri(in Vector3 p1, in Vector3 p2, in Vector3 p3, in Vector3 p, out Vector3 result) { float e0x = p2.x - p1.x; float e0y = p2.y - p1.y; float e0z = p2.z - p1.z; float e1x = p3.x - p1.x; float e1y = p3.y - p1.y; float e1z = p3.z - p1.z; float v0x = p1.x - p.x; float v0y = p1.y - p.y; float v0z = p1.z - p.z; float a00 = e0x * e0x + e0y * e0y + e0z * e0z; float a01 = e0x * e1x + e0y * e1y + e0z * e1z; float a11 = e1x * e1x + e1y * e1y + e1z * e1z; float b0 = e0x * v0x + e0y * v0y + e0z * v0z; float b1 = e1x * v0x + e1y * v0y + e1z * v0z; const float zero = 0; const float one = 1; float det = a00 * a11 - a01 * a01; float t0 = a01 * b1 - a11 * b0; float t1 = a01 * b0 - a00 * b1; if (t0 + t1 <= det) { if (t0 < zero) { if (t1 < zero) // region 4 { if (b0 < zero) { t1 = zero; if (-b0 >= a00) // V0 { t0 = one; } else // E01 { t0 = -b0 / a00; } } else { t0 = zero; if (b1 >= zero) // V0 { t1 = zero; } else if (-b1 >= a11) // V2 { t1 = one; } else // E20 { t1 = -b1 / a11; } } } else // region 3 { t0 = zero; if (b1 >= zero) // V0 { t1 = zero; } else if (-b1 >= a11) // V2 { t1 = one; } else // E20 { t1 = -b1 / a11; } } } else if (t1 < zero) // region 5 { t1 = zero; if (b0 >= zero) // V0 { t0 = zero; } else if (-b0 >= a00) // V1 { t0 = one; } else // E01 { t0 = -b0 / a00; } } else // region 0, interior { float invDet = one / det; t0 *= invDet; t1 *= invDet; } } else { float tmp0, tmp1, numer, denom; if (t0 < zero) // region 2 { tmp0 = a01 + b0; tmp1 = a11 + b1; if (tmp1 > tmp0) { numer = tmp1 - tmp0; denom = a00 - 2 * a01 + a11; if (numer >= denom) // V1 { t0 = one; t1 = zero; } else // E12 { t0 = numer / denom; t1 = one - t0; } } else { t0 = zero; if (tmp1 <= zero) // V2 { t1 = one; } else if (b1 >= zero) // V0 { t1 = zero; } else // E20 { t1 = -b1 / a11; } } } else if (t1 < zero) // region 6 { tmp0 = a01 + b1; tmp1 = a00 + b0; if (tmp1 > tmp0) { numer = tmp1 - tmp0; denom = a00 - 2 * a01 + a11; if (numer >= denom) // V2 { t1 = one; t0 = zero; } else // E12 { t1 = numer / denom; t0 = one - t1; } } else { t1 = zero; if (tmp1 <= zero) // V1 { t0 = one; } else if (b0 >= zero) // V0 { t0 = zero; } else // E01 { t0 = -b0 / a00; } } } else // region 1 { numer = a11 + b1 - a01 - b0; if (numer <= zero) // V2 { t0 = zero; t1 = one; } else { denom = a00 - 2 * a01 + a11; if (numer >= denom) // V1 { t0 = one; t1 = zero; } else // 12 { t0 = numer / denom; t1 = one - t0; } } } } result.x = p1.x + t0 * e0x + t1 * e1x; result.y = p1.y + t0 * e0y + t1 * e1y; result.z = p1.z + t0 * e0z + t1 * e1z; } /** * Calculates the area of a triangle. */ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float TriangleArea(Vector3 p1, Vector3 p2, Vector3 p3) { return Mathf.Sqrt(Vector3.Cross(p2 - p1, p3 - p1).sqrMagnitude) / 2f; } // Volume of a tetrahedron, assumes one of the corners is at zero. [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float TetraVolume(Vector3 p1, Vector3 p2, Vector3 p3) { return Vector3.Dot(Vector3.Cross(p1, p2), p3) / 6.0f; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Vector3 TriangleNormal(Vector3 p1, Vector3 p2, Vector3 p3) { return Vector3.Cross(p2 - p1, p3 - p1).normalized; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float TriangleAspectRatio(float a, float b, float c) { float s = (a + b + c) / 2.0f; float den = 8.0f * (s - a) * (s - b) * (s - c); if (den > epsilon) return (a * b * c) / den; // a triangle with zero area has zero aspect ratio: return 0; } public static void BestTriangleAxisProjection(Vector3 p1, Vector3 p2, Vector3 p3, out Vector2 r1, out Vector2 r2, out Vector2 r3) { float areaX = TriangleArea(new Vector3(0, p1.y, p1.z), new Vector3(0, p2.y, p2.z), new Vector3(0, p3.y, p3.z)); float areaY = TriangleArea(new Vector3(p1.x, 0, p1.z), new Vector3(p2.x, 0, p2.z), new Vector3(p3.x, 0, p3.z)); float areaZ = TriangleArea(new Vector3(p1.x, p1.y, 0), new Vector3(p2.x, p2.y, 0), new Vector3(p3.x, p3.y, 0)); if (areaX > areaY && areaX > areaZ) { r1 = new Vector2(p1.y, p1.z); r2 = new Vector2(p2.y, p2.z); r3 = new Vector2(p3.y, p3.z); } else if (areaY > areaX && areaY > areaZ) { r1 = new Vector2(p1.x, p1.z); r2 = new Vector2(p2.x, p2.z); r3 = new Vector2(p3.x, p3.z); } else { r1 = new Vector2(p1.x, p1.y); r2 = new Vector2(p2.x, p2.y); r3 = new Vector2(p3.x, p3.y); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float EllipsoidVolume(Vector3 principalRadii) { return 4.0f / 3.0f * Mathf.PI * principalRadii.x * principalRadii.y * principalRadii.z; } public static Quaternion RestDarboux(Quaternion q1, Quaternion q2) { Quaternion darboux = Quaternion.Inverse(q1) * q2; Vector4 omega_plus, omega_minus; omega_plus = new Vector4(darboux.x, darboux.y, darboux.z, darboux.w + 1); omega_minus = new Vector4(darboux.x, darboux.y, darboux.z, darboux.w - 1); if (omega_minus.sqrMagnitude > omega_plus.sqrMagnitude) darboux = new Quaternion(darboux.x * -1, darboux.y * -1, darboux.z * -1, darboux.w * -1); return darboux; } public static Vector4 AsVector4(this Quaternion q) { - Debug.DrawLine(pos - Vector3.right * size, pos + Vector3.right * size, color); - Debug.DrawLine(pos - Vector3.up * size, pos + Vector3.up * size, color); - Debug.DrawLine(pos - Vector3.forward * size, pos + Vector3.forward * size, color); - } + return new Vector4(q.x,q.y,q.z,q.w); + } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float RestBendingConstraint(Vector3 positionA, Vector3 positionB, Vector3 positionC) { Vector3 center = (positionA + positionB + positionC) / 3; return (positionC - center).magnitude; } public static System.Collections.IEnumerable BilateralInterleaved(int count) { for (int i = 0; i < count; ++i) { if (i % 2 != 0) yield return count - (count % 2) - i; else yield return i; } } public static void BarycentricCoordinates(in Vector3 A, in Vector3 B, in Vector3 C, in Vector3 P, ref Vector3 bary) { // Compute vectors Vector3 v0 = C - A; Vector3 v1 = B - A; Vector3 v2 = P - A; // Compute dot products float dot00 = Vector3.Dot(v0,v0); float dot01 = Vector3.Dot(v0,v1); float dot02 = Vector3.Dot(v0,v2); float dot11 = Vector3.Dot(v1,v1); float dot12 = Vector3.Dot(v1,v2); // Compute barycentric coordinates float det = dot00 * dot11 - dot01 * dot01; if (Math.Abs(det) > 1E-38) { float u = (dot11 * dot02 - dot01 * dot12) / det; float v = (dot00 * dot12 - dot01 * dot02) / det; bary = new Vector3(1-u-v,v,u); } } public static void BarycentricInterpolation(in Vector3 p1, in Vector3 p2, in Vector3 p3, in Vector3 coords, out Vector3 result) { result.x = coords.x * p1.x + coords.y * p2.x + coords.z * p3.x; result.y = coords.x * p1.y + coords.y * p2.y + coords.z * p3.y; result.z = coords.x * p1.z + coords.y * p2.z + coords.z * p3.z; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float BarycentricInterpolation(float p1, float p2, float p3, Vector3 coords) { return coords[0] * p1 + coords[1] * p2 + coords[2] * p3; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float BarycentricExtrapolationScale(Vector3 coords) { return 1.0f / (coords[0] * coords[0] + coords[1] * coords[1] + coords[2] * coords[2]); } public static Vector3[] CalculateAngleWeightedNormals(Vector3[] vertices, int[] triangles) { Vector3[] normals = new Vector3[vertices.Length]; var normalBuffer = new Dictionary(); Vector3 v1, v2, v3, e1, e2; for (int i = 0; i < triangles.Length; i += 3) { v1 = vertices[triangles[i]]; v2 = vertices[triangles[i + 1]]; v3 = vertices[triangles[i + 2]]; if (!normalBuffer.ContainsKey(v1)) normalBuffer[v1] = Vector3.zero; if (!normalBuffer.ContainsKey(v2)) normalBuffer[v2] = Vector3.zero; if (!normalBuffer.ContainsKey(v3)) normalBuffer[v3] = Vector3.zero; e1 = v2 - v1; e2 = v3 - v1; normalBuffer[v1] += Vector3.Cross(e1,e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); e1 = v3 - v2; e2 = v1 - v2; normalBuffer[v2] += Vector3.Cross(e1, e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); e1 = v1 - v3; e2 = v2 - v3; normalBuffer[v3] += Vector3.Cross(e1, e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); } for (int i = 0; i < vertices.Length; ++i) normals[i] = normalBuffer[vertices[i]].normalized; return normals; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int MakePhase(int group, ParticleFlags flags) { return (group & ParticleGroupBitmask) | (int)flags; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetGroupFromPhase(int phase) { return phase & ParticleGroupBitmask; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ParticleFlags GetFlagsFromPhase(int phase) { return (ParticleFlags)(phase & ~ParticleGroupBitmask); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int MakeFilter(int mask, int category) { return (mask << 16) | (1 << category); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetCategoryFromFilter(int filter) { return CountTrailingZeroes(filter & FilterCategoryBitmask); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetMaskFromFilter(int filter) { return (filter & FilterMaskBitmask) >> 16; } public static void EigenSolve(Matrix4x4 D, out Vector3 S, out Matrix4x4 V) { // D is symmetric // S is a vector whose elements are eigenvalues // V is a matrix whose columns are eigenvectors S = EigenValues(D); Vector3 V0, V1, V2; if (S[0] - S[1] > S[1] - S[2]) { V0 = EigenVector(D, S[0]); if (S[1] - S[2] < epsilon) { V2 = V0.unitOrthogonal(); } else { V2 = EigenVector(D, S[2]); V2 -= V0 * Vector3.Dot(V0, V2); V2 = Vector3.Normalize(V2); } V1 = Vector3.Cross(V2, V0); } else { V2 = EigenVector(D, S[2]); if (S[0] - S[1] < epsilon) { V1 = V2.unitOrthogonal(); } else { V1 = EigenVector(D, S[1]); V1 -= V2 * Vector3.Dot(V2, V1); V1 = Vector3.Normalize(V1); } V0 = Vector3.Cross(V1, V2); } V = Matrix4x4.identity; V.SetColumn(0,V0); V.SetColumn(1,V1); V.SetColumn(2,V2); } static Vector3 unitOrthogonal(this Vector3 input) { // Find a vector to cross() the input with. if (!(input.x < input.z * epsilon) || !(input.y < input.z * epsilon)) { float invnm = 1 / Vector3.Magnitude(new Vector2(input.x,input.y)); return new Vector3(-input.y * invnm, input.x * invnm, 0); } else { float invnm = 1 / Vector3.Magnitude(new Vector2(input.y,input.z)); return new Vector3(0, -input.z * invnm, input.y * invnm); } } // D is symmetric, S is an eigen value static Vector3 EigenVector(Matrix4x4 D, float S) { // Compute a cofactor matrix of D - sI. Vector4 c0 = D.GetColumn(0); c0[0] -= S; Vector4 c1 = D.GetColumn(1); c1[1] -= S; Vector4 c2 = D.GetColumn(2); c2[2] -= S; // Use an upper triangle Vector3 c0p = new Vector3(c1[1] * c2[2] - c2[1] * c2[1], 0, 0); Vector3 c1p = new Vector3(c2[1] * c2[0] - c1[0] * c2[2], c0[0] * c2[2] - c2[0] * c2[0], 0); Vector3 c2p = new Vector3(c1[0] * c2[1] - c1[1] * c2[0], c1[0] * c2[0] - c0[0] * c2[1], c0[0] * c1[1] - c1[0] * c1[0]); // Get a column vector with a largest norm (non-zero). float C01s = c1p[0] * c1p[0]; float C02s = c2p[0] * c2p[0]; float C12s = c2p[1] * c2p[1]; Vector3 norm = new Vector3(c0p[0] * c0p[0] + C01s + C02s, C01s + c1p[1] * c1p[1] + C12s, C02s + C12s + c2p[2] * c2p[2]); // index of largest: int index = 0; if (norm[0] > norm[1] && norm[0] > norm[2]) index = 0; else if (norm[1] > norm[0] && norm[1] > norm[2]) index = 1; else index = 2; Vector3 V = Vector3.zero; // special case if (norm[index] < epsilon) { V[0] = 1; return V; } else if (index == 0) { V[0] = c0p[0]; V[1] = c1p[0]; V[2] = c2p[0]; } else if (index == 1) { V[0] = c1p[0]; V[1] = c1p[1]; V[2] = c2p[1]; } else { V = c2p; } return Vector3.Normalize(V); } static Vector3 EigenValues(Matrix4x4 D) { float one_third = 1 / 3.0f; float one_sixth = 1 / 6.0f; float three_sqrt = Mathf.Sqrt(3.0f); Vector3 c0 = D.GetColumn(0); Vector3 c1 = D.GetColumn(1); Vector3 c2 = D.GetColumn(2); float m = one_third * (c0[0] + c1[1] + c2[2]); // K is D - I*diag(S) float K00 = c0[0] - m; float K11 = c1[1] - m; float K22 = c2[2] - m; float K01s = c1[0] * c1[0]; float K02s = c2[0] * c2[0]; float K12s = c2[1] * c2[1]; float q = 0.5f * (K00 * (K11 * K22 - K12s) - K22 * K01s - K11 * K02s) + c1[0] * c2[1] * c0[2]; float p = one_sixth * (K00 * K00 + K11 * K11 + K22 * K22 + 2 * (K01s + K02s + K12s)); float p_sqrt = Mathf.Sqrt(p); float tmp = p * p * p - q * q; float phi = one_third * Mathf.Atan2(Mathf.Sqrt(Mathf.Max(0, tmp)), q); float phi_c = Mathf.Cos(phi); float phi_s = Mathf.Sin(phi); float sqrt_p_c_phi = p_sqrt * phi_c; float sqrt_p_3_s_phi = p_sqrt * three_sqrt * phi_s; float e0 = m + 2 * sqrt_p_c_phi; float e1 = m - sqrt_p_c_phi - sqrt_p_3_s_phi; float e2 = m - sqrt_p_c_phi + sqrt_p_3_s_phi; float aux; if (e0 > e1) { aux = e0; e0 = e1; e1 = aux; } if (e0 > e2) { aux = e0; e0 = e2; e2 = aux; } if (e1 > e2) { aux = e1; e1 = e2; e2 = aux; } return new Vector3(e2, e1, e0); } public static Vector3 GetPointCloudCentroid(List points) { Vector3 centroid = Vector3.zero; for (int i = 0; i < points.Count; ++i) centroid += points[i]; return centroid / points.Count; } public static void GetPointCloudAnisotropy(List points, float max_anisotropy, float radius, in Vector3 hint_normal, ref Vector3 centroid, ref Quaternion orientation, ref Vector3 principal_radii) { int count = points.Count; if (count < 2 || radius <= 0 || max_anisotropy <= 0) { principal_radii = Vector3.one * radius; orientation = Quaternion.identity; return; } centroid = GetPointCloudCentroid(points); // three columns of a 3x3 anisotropy matrix: Vector4 c0 = Vector4.zero, c1 = Vector4.zero, c2 = Vector4.zero; Matrix4x4 anisotropy = Matrix4x4.zero; // multiply offset by offset transposed, and add to matrix: for (int i = 0; i < count; i++) { Vector4 offset = points[i] - centroid; c0 += offset * offset[0]; c1 += offset * offset[1]; c2 += offset * offset[2]; } // calculate maximum absolute value: float max0 = Mathf.Max(Mathf.Max(Mathf.Abs(c0.x), Mathf.Abs(c0.y)), Mathf.Abs(c0.z)); float max1 = Mathf.Max(Mathf.Max(Mathf.Abs(c1.x), Mathf.Abs(c1.y)), Mathf.Abs(c1.z)); float max2 = Mathf.Max(Mathf.Max(Mathf.Abs(c2.x), Mathf.Abs(c2.y)), Mathf.Abs(c2.z)); float max = Mathf.Max(Mathf.Max(max0,max1), max2); // normalize matrix: if (max > epsilon) { c0 /= max; c1 /= max; c2 /= max; } anisotropy.SetColumn(0, c0); anisotropy.SetColumn(1, c1); anisotropy.SetColumn(2, c2); Matrix4x4 orientMat; EigenSolve(anisotropy, out principal_radii, out orientMat); // flip orientation if it is not in the same side as the hint normal: if (Vector3.Dot(orientMat.GetColumn(2),hint_normal) < 0) { orientMat.SetColumn(2,orientMat.GetColumn(2) * -1); orientMat.SetColumn(1,orientMat.GetColumn(1) * -1); } max = principal_radii[0]; principal_radii = Vector3.Max(principal_radii,Vector3.one * max/max_anisotropy) / max * radius; orientation = orientMat.rotation; } public static int MergeBatches(List batches, int count, bool trimExcess) where T : IRenderBatch { // merge batches (using a method similar to std::unique): int current = 0; for (int i = 1; i < count; ++i) { var resultBatch = batches[current]; // see if we can merge this batch: if (current != i) { + // if we can't merge with the current batch, + // advance to the next one. + if (!resultBatch.TryMergeWith(batches[i])) batches.Swap(++current, i); } } current++; // get rid of excess batches: if (trimExcess && current < batches.Count) batches.RemoveRange(current, batches.Count - current); return current; } public static int MergeBatches(List batches) where T : IRenderBatch { + return MergeBatches(batches, batches.Count, true); } public static void Concatenate(this MemoryStream ms, Vector3 v) { for (int i = 0; i < 3; ++i) { var b = BitConverter.GetBytes(v[i]); ms.Write(b, 0, b.Length); } } public static void Concatenate(this MemoryStream ms, Quaternion q) { for (int i = 0; i < 4; ++i) { var b = BitConverter.GetBytes(q[i]); ms.Write(b, 0, b.Length); } } public static void Concatenate(this MemoryStream ms, float f) { var b = BitConverter.GetBytes(f); ms.Write(b, 0, b.Length); } public static void Concatenate(this MemoryStream ms, int f) { var b = BitConverter.GetBytes(f); ms.Write(b, 0, b.Length); } public static uint Adler32(byte[] bytes) { const int mod = 65521; uint a = 1, b = 0; foreach (byte c in bytes) { a = (a + c) % mod; b = (b + a) % mod; } return (b << 16) | a; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Swap(ref T lhs, ref T rhs) + public unsafe static Vector3 OctDecode(float k) { - T temp = lhs; - lhs = rhs; - rhs = temp; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Swap(this T[] source, int index1, int index2) - { - if (source != null && index1 >= 0 && index2 != 0 && index1 < source.Length && index2 < source.Length) - { - T temp = source[index1]; - source[index1] = source[index2]; - source[index2] = temp; - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Swap(this IList list, int index1, int index2) - { - if (list != null && index1 >= 0 && index2 != 0 && index1 < list.Count && index2 < list.Count) - { - T temp = list[index1]; - list[index1] = list[index2]; - list[index2] = temp; - } - } - - public static void ShiftLeft(this T[] source, int index, int count, int positions) - { - for (int j = 0; j < positions; ++j) - { - for (int i = index; i < index + count; ++i) - source.Swap(i, i - 1); - index--; - } - } - - public static void ShiftRight(this T[] source, int index, int count, int positions) - { - for (int j = 0; j < positions; ++j) - { - for (int i = index + count - 1; i >= index; --i) - source.Swap(i, i + 1); - index++; - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool AreValid(this Bounds bounds) - { - return !(float.IsNaN(bounds.center.x) || float.IsInfinity(bounds.center.x) || - float.IsNaN(bounds.center.y) || float.IsInfinity(bounds.center.y) || - float.IsNaN(bounds.center.z) || float.IsInfinity(bounds.center.z)); - } - - public static Bounds Transform(this Bounds b, Matrix4x4 m) - { - var xa = m.GetColumn(0) * b.min.x; - var xb = m.GetColumn(0) * b.max.x; - - var ya = m.GetColumn(1) * b.min.y; - var yb = m.GetColumn(1) * b.max.y; - - var za = m.GetColumn(2) * b.min.z; - var zb = m.GetColumn(2) * b.max.z; - - Bounds result = new Bounds(); - Vector3 pos = m.GetColumn(3); - result.SetMinMax(Vector3.Min(xa, xb) + Vector3.Min(ya, yb) + Vector3.Min(za, zb) + pos, - Vector3.Max(xa, xb) + Vector3.Max(ya, yb) + Vector3.Max(za, zb) + pos); - - - return result; - } - - public static int CountTrailingZeroes(int x) - { - int mask = 1; - for (int i = 0; i < 32; i++, mask <<= 1) - if ((x & mask) != 0) - return i; - - return 32; - } - - public static void Add(Vector3 a, Vector3 b, ref Vector3 result) - { - result.x = a.x + b.x; - result.y = a.y + b.y; - result.z = a.z + b.z; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Remap(this float value, float from1, float to1, float from2, float to2) - { - return (value - from1) / (to1 - from1) * (to2 - from2) + from2; - } - - /** - * Modulo operator that also follows intuition for negative arguments. That is , -1 mod 3 = 2, not -1. - */ - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float Mod(float a, float b) - { - return a - b * Mathf.Floor(a / b); - } - - public static Matrix4x4 Add(this Matrix4x4 a, Matrix4x4 other) - { - for (int i = 0; i < 16; ++i) - a[i] += other[i]; - return a; - } - - public static float FrobeniusNorm(this Matrix4x4 a) - { - float norm = 0; - for (int i = 0; i < 16; ++i) - norm += a[i] * a[i]; - - return Mathf.Sqrt(norm); - } - - public static Matrix4x4 ScalarMultiply(this Matrix4x4 a, float s) - { - for (int i = 0; i < 16; ++i) - a[i] *= s; - return a; - } - - public static Vector3 ProjectPointLine(Vector3 point, Vector3 lineStart, Vector3 lineEnd, out float mu, bool clampToSegment = true) - { - Vector3 ap = point - lineStart; - Vector3 ab = lineEnd - lineStart; - - mu = Vector3.Dot(ap, ab) / Vector3.Dot(ab, ab); - - if (clampToSegment) - mu = Mathf.Clamp01(mu); - - return lineStart + ab * mu; - } - - public static bool LinePlaneIntersection(Vector3 planePoint, Vector3 planeNormal, Vector3 linePoint, Vector3 lineDirection, out Vector3 point) - { - point = linePoint; - Vector3 lineNormal = lineDirection.normalized; - float denom = Vector3.Dot(planeNormal, lineNormal); - - if (Mathf.Approximately(denom, 0)) - return false; - - float t = (Vector3.Dot(planeNormal,planePoint) - Vector3.Dot(planeNormal,linePoint)) / denom; - point = linePoint + lineNormal * t; - return true; - } - - public static float RaySphereIntersection(Vector3 rayOrigin, Vector3 rayDirection, Vector3 center, float radius) - { - Vector3 oc = rayOrigin - center; - - float a = Vector3.Dot(rayDirection, rayDirection); - float b = 2.0f * Vector3.Dot(oc, rayDirection); - float c = Vector3.Dot(oc, oc) - radius * radius; - float discriminant = b * b - 4 * a * c; - if(discriminant < 0){ - return -1.0f; - } - else{ - return (-b - Mathf.Sqrt(discriminant)) / (2.0f * a); - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float InvMassToMass(float invMass) - { - return 1.0f / invMass; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float MassToInvMass(float mass) - { - return 1.0f / Mathf.Max(mass, 0.00001f); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int PureSign(this float val) - { - return ((0 <= val)?1:0) - ((val < 0)?1:0); - } - - public static void NearestPointOnTri(in Vector3 p1, - in Vector3 p2, - in Vector3 p3, - in Vector3 p, - out Vector3 result) - { - float e0x = p2.x - p1.x; - float e0y = p2.y - p1.y; - float e0z = p2.z - p1.z; - - float e1x = p3.x - p1.x; - float e1y = p3.y - p1.y; - float e1z = p3.z - p1.z; - - float v0x = p1.x - p.x; - float v0y = p1.y - p.y; - float v0z = p1.z - p.z; - - float a00 = e0x * e0x + e0y * e0y + e0z * e0z; - float a01 = e0x * e1x + e0y * e1y + e0z * e1z; - float a11 = e1x * e1x + e1y * e1y + e1z * e1z; - float b0 = e0x * v0x + e0y * v0y + e0z * v0z; - float b1 = e1x * v0x + e1y * v0y + e1z * v0z; - - const float zero = 0; - const float one = 1; - - float det = a00 * a11 - a01 * a01; - float t0 = a01 * b1 - a11 * b0; - float t1 = a01 * b0 - a00 * b1; - - if (t0 + t1 <= det) - { - if (t0 < zero) - { - if (t1 < zero) // region 4 - { - if (b0 < zero) - { - t1 = zero; - if (-b0 >= a00) // V0 - { - t0 = one; - } - else // E01 - { - t0 = -b0 / a00; - } - } - else - { - t0 = zero; - if (b1 >= zero) // V0 - { - t1 = zero; - } - else if (-b1 >= a11) // V2 - { - t1 = one; - } - else // E20 - { - t1 = -b1 / a11; - } - } - } - else // region 3 - { - t0 = zero; - if (b1 >= zero) // V0 - { - t1 = zero; - } - else if (-b1 >= a11) // V2 - { - t1 = one; - } - else // E20 - { - t1 = -b1 / a11; - } - } - } - else if (t1 < zero) // region 5 - { - t1 = zero; - if (b0 >= zero) // V0 - { - t0 = zero; - } - else if (-b0 >= a00) // V1 - { - t0 = one; - } - else // E01 - { - t0 = -b0 / a00; - } - } - else // region 0, interior - { - float invDet = one / det; - t0 *= invDet; - t1 *= invDet; - } - } - else - { - float tmp0, tmp1, numer, denom; - - if (t0 < zero) // region 2 - { - tmp0 = a01 + b0; - tmp1 = a11 + b1; - if (tmp1 > tmp0) - { - numer = tmp1 - tmp0; - denom = a00 - 2 * a01 + a11; - if (numer >= denom) // V1 - { - t0 = one; - t1 = zero; - } - else // E12 - { - t0 = numer / denom; - t1 = one - t0; - } - } - else - { - t0 = zero; - if (tmp1 <= zero) // V2 - { - t1 = one; - } - else if (b1 >= zero) // V0 - { - t1 = zero; - } - else // E20 - { - t1 = -b1 / a11; - } - } - } - else if (t1 < zero) // region 6 - { - tmp0 = a01 + b1; - tmp1 = a00 + b0; - if (tmp1 > tmp0) - { - numer = tmp1 - tmp0; - denom = a00 - 2 * a01 + a11; - if (numer >= denom) // V2 - { - t1 = one; - t0 = zero; - } - else // E12 - { - t1 = numer / denom; - t0 = one - t1; - } - } - else - { - t1 = zero; - if (tmp1 <= zero) // V1 - { - t0 = one; - } - else if (b0 >= zero) // V0 - { - t0 = zero; - } - else // E01 - { - t0 = -b0 / a00; - } - } - } - else // region 1 - { - numer = a11 + b1 - a01 - b0; - if (numer <= zero) // V2 - { - t0 = zero; - t1 = one; - } - else - { - denom = a00 - 2 * a01 + a11; - if (numer >= denom) // V1 - { - t0 = one; - t1 = zero; - } - else // 12 - { - t0 = numer / denom; - t1 = one - t0; - } - } - } - } - - result.x = p1.x + t0 * e0x + t1 * e1x; - result.y = p1.y + t0 * e0y + t1 * e1y; - result.z = p1.z + t0 * e0z + t1 * e1z; - } - - /** - * Calculates the area of a triangle. - */ - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float TriangleArea(Vector3 p1, Vector3 p2, Vector3 p3) - { - return Mathf.Sqrt(Vector3.Cross(p2 - p1, p3 - p1).sqrMagnitude) / 2f; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float EllipsoidVolume(Vector3 principalRadii) - { - return 4.0f / 3.0f * Mathf.PI * principalRadii.x * principalRadii.y * principalRadii.z; - } - - public static Quaternion RestDarboux(Quaternion q1, Quaternion q2) - { - Quaternion darboux = Quaternion.Inverse(q1) * q2; - - Vector4 omega_plus, omega_minus; - omega_plus = new Vector4(darboux.x, darboux.y, darboux.z, darboux.w + 1); - omega_minus = new Vector4(darboux.x, darboux.y, darboux.z, darboux.w - 1); - - if (omega_minus.sqrMagnitude > omega_plus.sqrMagnitude) - darboux = new Quaternion(darboux.x * -1, darboux.y * -1, darboux.z * -1, darboux.w * -1); - - return darboux; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float RestBendingConstraint(Vector3 positionA, Vector3 positionB, Vector3 positionC) - { - Vector3 center = (positionA + positionB + positionC) / 3; - return (positionC - center).magnitude; - } - - public static System.Collections.IEnumerable BilateralInterleaved(int count) - { - for (int i = 0; i < count; ++i) - { - if (i % 2 != 0) - yield return count - (count % 2) - i; - else yield return i; - } - } - - public static void BarycentricCoordinates(in Vector3 A, - in Vector3 B, - in Vector3 C, - in Vector3 P, - ref Vector3 bary) - { - - // Compute vectors - Vector3 v0 = C - A; - Vector3 v1 = B - A; - Vector3 v2 = P - A; - - // Compute dot products - float dot00 = Vector3.Dot(v0,v0); - float dot01 = Vector3.Dot(v0,v1); - float dot02 = Vector3.Dot(v0,v2); - float dot11 = Vector3.Dot(v1,v1); - float dot12 = Vector3.Dot(v1,v2); - - // Compute barycentric coordinates - float det = dot00 * dot11 - dot01 * dot01; - if (Math.Abs(det) > 1E-38) - { - float u = (dot11 * dot02 - dot01 * dot12) / det; - float v = (dot00 * dot12 - dot01 * dot02) / det; - bary = new Vector3(1-u-v,v,u); - } - - } - - public static void BarycentricInterpolation(in Vector3 p1, in Vector3 p2, in Vector3 p3, in Vector3 coords, out Vector3 result) - { - result.x = coords.x * p1.x + coords.y * p2.x + coords.z * p3.x; - result.y = coords.x * p1.y + coords.y * p2.y + coords.z * p3.y; - result.z = coords.x * p1.z + coords.y * p2.z + coords.z * p3.z; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float BarycentricInterpolation(float p1, float p2, float p3, Vector3 coords) - { - return coords[0] * p1 + coords[1] * p2 + coords[2] * p3; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float BarycentricExtrapolationScale(Vector3 coords) - { - - return 1.0f / (coords[0] * coords[0] + - coords[1] * coords[1] + - coords[2] * coords[2]); - - } - - public static Vector3[] CalculateAngleWeightedNormals(Vector3[] vertices, int[] triangles) - { - Vector3[] normals = new Vector3[vertices.Length]; - var normalBuffer = new Dictionary(); - - Vector3 v1, v2, v3, e1, e2; - for (int i = 0; i < triangles.Length; i += 3) - { - v1 = vertices[triangles[i]]; - v2 = vertices[triangles[i + 1]]; - v3 = vertices[triangles[i + 2]]; - - if (!normalBuffer.ContainsKey(v1)) - normalBuffer[v1] = Vector3.zero; - if (!normalBuffer.ContainsKey(v2)) - normalBuffer[v2] = Vector3.zero; - if (!normalBuffer.ContainsKey(v3)) - normalBuffer[v3] = Vector3.zero; - - e1 = v2 - v1; - e2 = v3 - v1; - normalBuffer[v1] += Vector3.Cross(e1,e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); - - e1 = v3 - v2; - e2 = v1 - v2; - normalBuffer[v2] += Vector3.Cross(e1, e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); - - e1 = v1 - v3; - e2 = v2 - v3; - normalBuffer[v3] += Vector3.Cross(e1, e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); - } - - for (int i = 0; i < vertices.Length; ++i) - normals[i] = normalBuffer[vertices[i]].normalized; - - return normals; - } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int MakePhase(int group, ParticleFlags flags) - { - return (group & ParticleGroupBitmask) | (int)flags; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int GetGroupFromPhase(int phase) - { - return phase & ParticleGroupBitmask; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ParticleFlags GetFlagsFromPhase(int phase) - { - return (ParticleFlags)(phase & ~ParticleGroupBitmask); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int MakeFilter(int mask, int category) - { - return (mask << 16) | (1 << category); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int GetCategoryFromFilter(int filter) - { - return CountTrailingZeroes(filter & FilterCategoryBitmask); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int GetMaskFromFilter(int filter) - { - return (filter & FilterMaskBitmask) >> 16; - } - - public static void EigenSolve(Matrix4x4 D, out Vector3 S, out Matrix4x4 V) - { - // D is symmetric - // S is a vector whose elements are eigenvalues - // V is a matrix whose columns are eigenvectors - S = EigenValues(D); - Vector3 V0, V1, V2; - - if (S[0] - S[1] > S[1] - S[2]) - { - V0 = EigenVector(D, S[0]); - if (S[1] - S[2] < epsilon) - { - V2 = V0.unitOrthogonal(); - } - else - { - V2 = EigenVector(D, S[2]); V2 -= V0 * Vector3.Dot(V0, V2); V2 = Vector3.Normalize(V2); - } - V1 = Vector3.Cross(V2, V0); - } - else - { - V2 = EigenVector(D, S[2]); - if (S[0] - S[1] < epsilon) - { - V1 = V2.unitOrthogonal(); - } - else - { - V1 = EigenVector(D, S[1]); V1 -= V2 * Vector3.Dot(V2, V1); V1 = Vector3.Normalize(V1); - } - V0 = Vector3.Cross(V1, V2); - } - - V = Matrix4x4.identity; - V.SetColumn(0,V0); - V.SetColumn(1,V1); - V.SetColumn(2,V2); + uint d = *(uint*)&k; + Vector2 f = new Vector2((d >> 16) / 65535f, (d & 0xffff) / 65535f); + f.x = f.x * 2 - 1; + f.y = f.y * 2 - 1; + + Vector3 n = new Vector3(f.x, f.y, 1.0f - Mathf.Abs(f.x) - Mathf.Abs(f.y)); + float t = Mathf.Max(-n.z, 0); + n.x += n.x >= 0.0f ? -t : t; + n.y += n.y >= 0.0f ? -t : t; + return Vector3.Normalize(n); } - static Vector3 unitOrthogonal(this Vector3 input) + public unsafe static Vector4 UnpackFloatRGBA(float v) { - // Find a vector to cross() the input with. - if (!(input.x < input.z * epsilon) - || !(input.y < input.z * epsilon)) - { - float invnm = 1 / Vector3.Magnitude(new Vector2(input.x,input.y)); - return new Vector3(-input.y * invnm, input.x * invnm, 0); - } - else - { - float invnm = 1 / Vector3.Magnitude(new Vector2(input.y,input.z)); - return new Vector3(0, -input.z * invnm, input.y * invnm); - } - } - - // D is symmetric, S is an eigen value - static Vector3 EigenVector(Matrix4x4 D, float S) - { - // Compute a cofactor matrix of D - sI. - Vector4 c0 = D.GetColumn(0); c0[0] -= S; - Vector4 c1 = D.GetColumn(1); c1[1] -= S; - Vector4 c2 = D.GetColumn(2); c2[2] -= S; - - // Use an upper triangle - Vector3 c0p = new Vector3(c1[1] * c2[2] - c2[1] * c2[1], 0, 0); - Vector3 c1p = new Vector3(c2[1] * c2[0] - c1[0] * c2[2], c0[0] * c2[2] - c2[0] * c2[0], 0); - Vector3 c2p = new Vector3(c1[0] * c2[1] - c1[1] * c2[0], c1[0] * c2[0] - c0[0] * c2[1], c0[0] * c1[1] - c1[0] * c1[0]); - - // Get a column vector with a largest norm (non-zero). - float C01s = c1p[0] * c1p[0]; - float C02s = c2p[0] * c2p[0]; - float C12s = c2p[1] * c2p[1]; - Vector3 norm = new Vector3(c0p[0] * c0p[0] + C01s + C02s, - C01s + c1p[1] * c1p[1] + C12s, - C02s + C12s + c2p[2] * c2p[2]); - - // index of largest: - int index = 0; - if (norm[0] > norm[1] && norm[0] > norm[2]) - index = 0; - else if (norm[1] > norm[0] && norm[1] > norm[2]) - index = 1; - else - index = 2; - - Vector3 V = Vector3.zero; - - // special case - if (norm[index] < epsilon) - { - V[0] = 1; return V; - } - else if (index == 0) - { - V[0] = c0p[0]; V[1] = c1p[0]; V[2] = c2p[0]; - } - else if (index == 1) - { - V[0] = c1p[0]; V[1] = c1p[1]; V[2] = c2p[1]; - } - else - { - V = c2p; - } - return Vector3.Normalize(V); - } - - static Vector3 EigenValues(Matrix4x4 D) - { - float one_third = 1 / 3.0f; - float one_sixth = 1 / 6.0f; - float three_sqrt = Mathf.Sqrt(3.0f); - - Vector3 c0 = D.GetColumn(0); - Vector3 c1 = D.GetColumn(1); - Vector3 c2 = D.GetColumn(2); - - float m = one_third * (c0[0] + c1[1] + c2[2]); - - // K is D - I*diag(S) - float K00 = c0[0] - m; - float K11 = c1[1] - m; - float K22 = c2[2] - m; - - float K01s = c1[0] * c1[0]; - float K02s = c2[0] * c2[0]; - float K12s = c2[1] * c2[1]; - - float q = 0.5f * (K00 * (K11 * K22 - K12s) - K22 * K01s - K11 * K02s) + c1[0] * c2[1] * c0[2]; - float p = one_sixth * (K00 * K00 + K11 * K11 + K22 * K22 + 2 * (K01s + K02s + K12s)); - - float p_sqrt = Mathf.Sqrt(p); - - float tmp = p * p * p - q * q; - float phi = one_third * Mathf.Atan2(Mathf.Sqrt(Mathf.Max(0, tmp)), q); - float phi_c = Mathf.Cos(phi); - float phi_s = Mathf.Sin(phi); - float sqrt_p_c_phi = p_sqrt * phi_c; - float sqrt_p_3_s_phi = p_sqrt * three_sqrt * phi_s; - - float e0 = m + 2 * sqrt_p_c_phi; - float e1 = m - sqrt_p_c_phi - sqrt_p_3_s_phi; - float e2 = m - sqrt_p_c_phi + sqrt_p_3_s_phi; - - float aux; - if (e0 > e1) - { - aux = e0; - e0 = e1; - e1 = aux; - } - if (e0 > e2) - { - aux = e0; - e0 = e2; - e2 = aux; - } - if (e1 > e2) - { - aux = e1; - e1 = e2; - e2 = aux; - } - - return new Vector3(e2, e1, e0); + uint rgba = *(uint*)&v; + float r = ((rgba & 0xff000000) >> 24) / 255f; + float g = ((rgba & 0x00ff0000) >> 16) / 255f; + float b = ((rgba & 0x0000ff00) >> 8) / 255f; + float a = (rgba & 0x000000ff) / 255f; + return new Vector4(r, g, b, a); } - public static Vector3 GetPointCloudCentroid(List points) + public unsafe static float PackFloatRGBA(Vector4 enc) { - Vector3 centroid = Vector3.zero; - for (int i = 0; i < points.Count; ++i) - centroid += points[i]; - return centroid / points.Count; + uint rgba = ((uint)(enc.x * 255f) << 24) + + ((uint)(enc.y * 255f) << 16) + + ((uint)(enc.z * 255f) << 8) + + (uint)(enc.w * 255f); + return *(float*)&rgba; } - public static void GetPointCloudAnisotropy(List points, float max_anisotropy, float radius, in Vector3 hint_normal, ref Vector3 centroid, ref Quaternion orientation, ref Vector3 principal_radii) + public unsafe static Vector2 UnpackFloatRG(float v) { - int count = points.Count; if (count < 2 || radius <= 0 || max_anisotropy <= 0) { principal_radii = Vector3.one * radius; orientation = Quaternion.identity; return; } centroid = GetPointCloudCentroid(points); - - // three columns of a 3x3 anisotropy matrix: - Vector4 c0 = Vector4.zero, - c1 = Vector4.zero, - c2 = Vector4.zero; Matrix4x4 anisotropy = Matrix4x4.zero; - - // multiply offset by offset transposed, and add to matrix: - for (int i = 0; i < count; i++) { Vector4 offset = points[i] - centroid; c0 += offset * offset[0]; c1 += offset * offset[1]; c2 += offset * offset[2]; } - - // calculate maximum absolute value: - float max0 = Mathf.Max(Mathf.Max(Mathf.Abs(c0.x), Mathf.Abs(c0.y)), Mathf.Abs(c0.z)); float max1 = Mathf.Max(Mathf.Max(Mathf.Abs(c1.x), Mathf.Abs(c1.y)), Mathf.Abs(c1.z)); float max2 = Mathf.Max(Mathf.Max(Mathf.Abs(c2.x), Mathf.Abs(c2.y)), Mathf.Abs(c2.z)); float max = Mathf.Max(Mathf.Max(max0, max1), max2); - - // normalize matrix: - if (max > epsilon) - { - c0 /= max; - c1 /= max; - c2 /= max; - } anisotropy.SetColumn(0, c0); - anisotropy.SetColumn(1, c1); - anisotropy.SetColumn(2, c2); - - Matrix4x4 orientMat; EigenSolve(anisotropy, out principal_radii, out orientMat); - - // flip orientation if it is not in the same side as the hint normal: - if (Vector3.Dot(orientMat.GetColumn(2), hint_normal) < 0) { orientMat.SetColumn(2, orientMat.GetColumn(2) * -1); orientMat.SetColumn(1, orientMat.GetColumn(1) * -1); } max = principal_radii[0]; principal_radii = Vector3.Max(principal_radii, Vector3.one * max / max_anisotropy) / max * radius; orientation = orientMat.rotation; + uint rgba = *(uint*)&v; + float r = ((rgba & 0xffff0000) >> 16) / 65535f; + float g = (rgba & 0x0000ffff) / 65535f; + return new Vector2(r, g); } - } -} + public unsafe static float PackFloatRG(Vector2 enc) + { + uint rgba = ((uint)(enc.x * 65535f) << 16) + + (uint)(enc.y * 65535f); + return *(float*)&rgba; + } } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Oni.cs b/Assets/ThirdParty/Obi/Scripts/Oni.cs index 43c01674d..b65575d0e 100644 --- a/Assets/ThirdParty/Obi/Scripts/Oni.cs +++ b/Assets/ThirdParty/Obi/Scripts/Oni.cs @@ -4,33 +4,67 @@ using System.Collections; using System.Runtime.InteropServices; using Obi; -/** - * Interface for the Oni particle physics library. - */ -public static class Oni -{ - public const int ConstraintTypeCount = 17; +public static class Oni +{ + public const int ConstraintTypeCount = 18; + public const int ColliderShapeTypeCount = 7; + public const int QueryTypeCount = 3; public enum ConstraintType { Tether = 0, Volume = 1, Chain = 2, - Bending = 3, - Distance = 4, - ShapeMatching = 5, - BendTwist = 6, - StretchShear = 7, - Pin = 8, - ParticleCollision = 9, - Density = 10, - Collision = 11, - Skin = 12, - Aerodynamics = 13, - Stitch = 14, - ParticleFriction = 15, - Friction = 16 + Pinhole = 3, + Bending = 4, + Distance = 5, + ShapeMatching = 6, + BendTwist = 7, + StretchShear = 8, + Pin = 9, + ParticleCollision = 10, + Density = 11, + Collision = 12, + Skin = 13, + Aerodynamics = 14, + Stitch = 15, + ParticleFriction = 16, + Friction = 17, + }; + + [Flags] + public enum RenderingSystemType + { + None = 0, + PathSmoother = 1 << 0, + ExtrudedRope = 1 << 1, + ChainRope = 1 << 2, + LineRope = 1 << 3, + MeshRope = 1 << 4, + Cloth = 1 << 5, + SkinnedCloth = 1 << 6, + TearableCloth = 1 << 7, + Softbody = 1 << 8, + Fluid = 1 << 9, + Particles = 1 << 10, + InstancedParticles = 1 << 11, + FoamParticles = 1 << 12, + + AllSmoothedRopes = PathSmoother | ExtrudedRope | LineRope | MeshRope, + AllRopes = PathSmoother | ExtrudedRope | ChainRope | LineRope | MeshRope | Particles | InstancedParticles, + AllClothes = Cloth | SkinnedCloth | TearableCloth | Particles | InstancedParticles, + AllParticles = Fluid | Particles | InstancedParticles | FoamParticles + }; + + [Flags] + public enum SimplexType + { + None = 0, + Point = 1 << 0, + Edge = 1 << 1, + Triangle = 1 << 2, + All = ~0 }; public enum ShapeType @@ -52,31 +86,8 @@ public static class Oni Maximum = 3 } - public enum ProfileMask : uint - { - ThreadIdMask = 0xffff0000, - TypeMask = 0x000000ff, - StackLevelMask = 0x0000ff00 - } - - public struct ProfileInfo - { - public double start; - public double end; - public uint info; - public int pad; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] - public string name; - } - - public struct GridCell - { - public Vector3 center; - public Vector3 size; - public int count; - } - [Serializable] + [StructLayout(LayoutKind.Sequential)] public struct SolverParameters { @@ -84,6 +95,7 @@ public static class Oni { None, Interpolate, + Extrapolate }; public enum Mode @@ -101,6 +113,13 @@ public static class Oni [Tooltip("Simulation gravity expressed in local space.")] public Vector3 gravity; + [Tooltip("Simulation wind expressed in local space.")] + public Vector3 ambientWind; + + [Tooltip("Foam gravity scale.")] + [Range(-1, 3)] + public float foamGravityScale; + [Tooltip("Percentage of velocity lost per second, between 0% (0) and 100% (1).")] [Range(0, 1)] public float damping; @@ -112,15 +131,25 @@ public static class Oni [Tooltip("Mass-normalized kinetic energy threshold below which particle positions aren't updated.")] public float sleepThreshold; + [Tooltip("Maximum particle linear velocity.")] + public float maxVelocity; + + [Tooltip("Maximum particle angular velocity.")] + public float maxAngularVelocity; + [Tooltip("Maximum distance between elements (simplices/colliders) for a contact to be generated.")] public float collisionMargin; [Tooltip("Maximum depenetration velocity applied to particles that start a frame inside an object. Low values ensure no 'explosive' collision resolution. Should be > 0 unless looking for non-physical effects.")] public float maxDepenetration; + [Tooltip("Percentage of collider velocities used for continuous collision detection. Set to 0 for purely static collisions, set to 1 for pure continuous collisions.")] + [Range(0, 1)] + public float colliderCCD; + [Tooltip("Percentage of particle velocities used for continuous collision detection. Set to 0 for purely static collisions, set to 1 for pure continuous collisions.")] [Range(0, 1)] - public float continuousCollisionDetection; + public float particleCCD; [Tooltip("Percentage of shock propagation applied to particle-particle collisions. Useful for particle stacking.")] [Range(0, 1)] @@ -133,12 +162,16 @@ public static class Oni [Tooltip("Error threshold at which to stop convex optimization for surface collisions.")] public float surfaceCollisionTolerance; + [Tooltip("Scales user data diffusion speed between nearby particles, for each of the 4 user data channels.")] + public Vector4 diffusionMask; public SolverParameters(Interpolation interpolation, Vector4 gravity) { this.mode = Mode.Mode3D; this.gravity = gravity; + this.ambientWind = Vector3.zero; this.interpolation = interpolation; + foamGravityScale = 1; damping = 0; shockPropagation = 0; surfaceCollisionIterations = 8; @@ -146,8 +179,12 @@ public static class Oni maxAnisotropy = 3; maxDepenetration = 10; sleepThreshold = 0.0005f; + maxVelocity = 50.0f; + maxAngularVelocity = 20.0f; collisionMargin = 0.02f; - continuousCollisionDetection = 1; + colliderCCD = 1; + particleCCD = 0; + diffusionMask = Vector4.one; } } @@ -186,15 +223,20 @@ public static class Oni } - // In this particular case, size is forced to 144 bytes to ensure 16 byte memory alignment needed by Oni. - [StructLayout(LayoutKind.Sequential, Size = 144)] + [StructLayout(LayoutKind.Sequential)] + public struct ContactPair + { + public int bodyA; /** simplex index*/ + public int bodyB; /** simplex or rigidbody index*/ + } + + [StructLayout(LayoutKind.Sequential)] public struct Contact { public Vector4 pointA; public Vector4 pointB; /**< Speculative point of contact. */ public Vector4 normal; /**< Normal direction. */ public Vector4 tangent; /**< Tangent direction. */ - public Vector4 bitangent; /**< Bitangent direction. */ public float distance; /** distance between both colliding entities at the beginning of the timestep.*/ @@ -207,447 +249,4 @@ public static class Oni public int bodyA; /** simplex index*/ public int bodyB; /** simplex or rigidbody index*/ } - - public static GCHandle PinMemory(object data) - { - return GCHandle.Alloc(data, GCHandleType.Pinned); - } - - public static void UnpinMemory(GCHandle handle) - { - if (handle.IsAllocated) - handle.Free(); - } - -#if (UNITY_IOS && !UNITY_EDITOR) - const string LIBNAME = "__Internal"; -#elif ((UNITY_ANDROID || UNITY_STANDALONE_LINUX) && !UNITY_EDITOR) - const string LIBNAME = "Oni"; -#else - const string LIBNAME = "libOni"; -#endif - -// platform custom define (https://docs.unity3d.com/Manual/PlatformDependentCompilation.html) -#if (OBI_ONI_SUPPORTED) - - [DllImport(LIBNAME)] - public static extern void UpdateColliderGrid(float dt); - - [DllImport(LIBNAME)] - public static extern void SetColliders(IntPtr shapes, IntPtr bounds, IntPtr transforms, int count); - - [DllImport(LIBNAME)] - public static extern void SetRigidbodies(IntPtr rigidbodies); - - [DllImport(LIBNAME)] - public static extern void SetCollisionMaterials(IntPtr materials); - - [DllImport(LIBNAME)] - public static extern void SetTriangleMeshData(IntPtr headers, IntPtr nodes, IntPtr triangles, IntPtr vertices); - - [DllImport(LIBNAME)] - public static extern void SetEdgeMeshData(IntPtr headers, IntPtr nodes, IntPtr edges, IntPtr vertices); - - [DllImport(LIBNAME)] - public static extern void SetDistanceFieldData(IntPtr headers, IntPtr nodes); - - [DllImport(LIBNAME)] - public static extern void SetHeightFieldData(IntPtr headers, IntPtr samples); - - [DllImport(LIBNAME)] - public static extern IntPtr CreateSolver(int capacity); - - [DllImport(LIBNAME)] - public static extern void DestroySolver(IntPtr solver); - - [DllImport(LIBNAME)] - public static extern void SetCapacity(IntPtr solver, int capacity); - - [DllImport(LIBNAME)] - public static extern void InitializeFrame(IntPtr solver, ref Vector4 translation, ref Vector4 scale, ref Quaternion rotation); - - [DllImport(LIBNAME)] - public static extern void UpdateFrame(IntPtr solver, ref Vector4 translation, ref Vector4 scale, ref Quaternion rotation, float dt); - - [DllImport(LIBNAME)] - public static extern void ApplyFrame(IntPtr solver, float linearVelocityScale, float angularVelocityScale, float linearInertiaScale, float angularInertiaScale, float dt); - - [DllImport(LIBNAME)] - public static extern void RecalculateInertiaTensors(IntPtr solver); - - [DllImport(LIBNAME)] - public static extern void ResetForces(IntPtr solver); - - [DllImport(LIBNAME)] - public static extern void SetRigidbodyLinearDeltas(IntPtr solver, IntPtr linearDeltas); - - [DllImport(LIBNAME)] - public static extern void SetRigidbodyAngularDeltas(IntPtr solver, IntPtr angularDeltas); - - [DllImport(LIBNAME)] - public static extern void GetBounds(IntPtr solver, ref Vector3 min, ref Vector3 max); - - [DllImport(LIBNAME)] - public static extern int GetParticleGridSize(IntPtr solver); - - [DllImport(LIBNAME)] - public static extern void GetParticleGrid(IntPtr solver, GridCell[] cells); - - [DllImport(LIBNAME)] - public static extern int SpatialQuery(IntPtr solver, IntPtr shapes, IntPtr transforms, int count); - - [DllImport(LIBNAME)] - public static extern void GetQueryResults(IntPtr solver, IntPtr results, int num); - - [DllImport(LIBNAME)] - public static extern void SetSolverParameters(IntPtr solver, ref SolverParameters parameters); - - [DllImport(LIBNAME)] - public static extern void GetSolverParameters(IntPtr solver, ref SolverParameters parameters); - - [DllImport(LIBNAME)] - public static extern int SetActiveParticles(IntPtr solver, int[] active, int num); - - [DllImport(LIBNAME)] - public static extern IntPtr CollisionDetection(IntPtr solver, float delta_time); - - [DllImport(LIBNAME)] - public static extern IntPtr Step(IntPtr solver, float step_time, float substep_time, int substeps); - - [DllImport(LIBNAME)] - public static extern void ApplyPositionInterpolation(IntPtr solver, IntPtr draw_positions, IntPtr draw_orientations, float delta_seconds, float unsimulated_time); - - [DllImport(LIBNAME)] - public static extern void UpdateSkeletalAnimation(IntPtr solver); - - [DllImport(LIBNAME)] - public static extern int GetConstraintCount(IntPtr solver, int type); - - [DllImport(LIBNAME)] - public static extern void SetRenderableParticlePositions(IntPtr solver, IntPtr positions); - - [DllImport(LIBNAME)] - public static extern void SetParticlePhases(IntPtr solver, IntPtr phases); - - [DllImport(LIBNAME)] - public static extern void SetParticleFilters(IntPtr solver, IntPtr filters); - - [DllImport(LIBNAME)] - public static extern void SetParticleCollisionMaterials(IntPtr solver, IntPtr materialIndices); - - [DllImport(LIBNAME)] - public static extern void SetParticlePositions(IntPtr solver, IntPtr positions); - - [DllImport(LIBNAME)] - public static extern void SetParticlePreviousPositions(IntPtr solver, IntPtr prevPositions); - - [DllImport(LIBNAME)] - public static extern void SetParticleOrientations(IntPtr solver, IntPtr orientations); - - [DllImport(LIBNAME)] - public static extern void SetParticlePreviousOrientations(IntPtr solver, IntPtr prevOrientations); - - [DllImport(LIBNAME)] - public static extern void SetRenderableParticleOrientations(IntPtr solver, IntPtr orientations); - - [DllImport(LIBNAME)] - public static extern void SetParticleInverseMasses(IntPtr solver, IntPtr invMasses); - - [DllImport(LIBNAME)] - public static extern void SetParticleInverseRotationalMasses(IntPtr solver, IntPtr invRotMasses); - - [DllImport(LIBNAME)] - public static extern void SetParticlePrincipalRadii(IntPtr solver, IntPtr principalRadii); - - [DllImport(LIBNAME)] - public static extern void SetParticleVelocities(IntPtr solver, IntPtr velocities); - - [DllImport(LIBNAME)] - public static extern void SetParticleAngularVelocities(IntPtr solver, IntPtr angularVelocities); - - [DllImport(LIBNAME)] - public static extern void SetParticleExternalForces(IntPtr solver, IntPtr forces); - - [DllImport(LIBNAME)] - public static extern void SetParticleExternalTorques(IntPtr solver, IntPtr torques); - - [DllImport(LIBNAME)] - public static extern void SetParticleWinds(IntPtr solver, IntPtr winds); - - [DllImport(LIBNAME)] - public static extern void SetParticlePositionDeltas(IntPtr solver, IntPtr deltas); - - [DllImport(LIBNAME)] - public static extern void SetParticleOrientationDeltas(IntPtr solver, IntPtr deltas); - - [DllImport(LIBNAME)] - public static extern void SetParticlePositionConstraintCounts(IntPtr solver, IntPtr counts); - - [DllImport(LIBNAME)] - public static extern void SetParticleOrientationConstraintCounts(IntPtr solver, IntPtr counts); - - [DllImport(LIBNAME)] - public static extern void SetParticleNormals(IntPtr solver, IntPtr normals); - - [DllImport(LIBNAME)] - public static extern void SetParticleInverseInertiaTensors(IntPtr solver, IntPtr tensors); - - - [DllImport(LIBNAME)] - public static extern void SetParticleSmoothingRadii(IntPtr solver, IntPtr radii); - - [DllImport(LIBNAME)] - public static extern void SetParticleBuoyancy(IntPtr solver, IntPtr buoyancy); - - [DllImport(LIBNAME)] - public static extern void SetParticleRestDensities(IntPtr solver, IntPtr rest_densities); - - [DllImport(LIBNAME)] - public static extern void SetParticleViscosities(IntPtr solver, IntPtr viscosities); - - [DllImport(LIBNAME)] - public static extern void SetParticleSurfaceTension(IntPtr solver, IntPtr surface_tension); - - [DllImport(LIBNAME)] - public static extern void SetParticleVorticityConfinement(IntPtr solver, IntPtr vort_confinement); - - [DllImport(LIBNAME)] - public static extern void SetParticleAtmosphericDragPressure(IntPtr solver, IntPtr atmospheric_drag, IntPtr atmospheric_pressure); - - [DllImport(LIBNAME)] - public static extern void SetParticleDiffusion(IntPtr solver, IntPtr diffusion); - - - - [DllImport(LIBNAME)] - public static extern void SetParticleVorticities(IntPtr solver, IntPtr vorticities); - - [DllImport(LIBNAME)] - public static extern void SetParticleFluidData(IntPtr solver, IntPtr fluidData); - - [DllImport(LIBNAME)] - public static extern void SetParticleUserData(IntPtr solver, IntPtr userData); - - [DllImport(LIBNAME)] - public static extern void SetParticleAnisotropies(IntPtr solver, IntPtr anisotropies); - - [DllImport(LIBNAME)] - public static extern void SetSimplices(IntPtr solver, int[] indices, int pointCount, int edgeCount, int triangleCount); - - [DllImport(LIBNAME)] - public static extern int GetDeformableTriangleCount(IntPtr solver); - - [DllImport(LIBNAME)] - public static extern void SetDeformableTriangles(IntPtr solver, int[] indices, int num, int destOffset); - - [DllImport(LIBNAME)] - public static extern int RemoveDeformableTriangles(IntPtr solver, int num, int sourceOffset); - - [DllImport(LIBNAME)] - public static extern void SetConstraintGroupParameters(IntPtr solver, int type, ref ConstraintParameters parameters); - - [DllImport(LIBNAME)] - public static extern void GetConstraintGroupParameters(IntPtr solver, int type, ref ConstraintParameters parameters); - - [DllImport(LIBNAME)] - public static extern void SetRestPositions(IntPtr solver, IntPtr restPositions); - - [DllImport(LIBNAME)] - public static extern void SetRestOrientations(IntPtr solver, IntPtr restOrientations); - - [DllImport(LIBNAME)] - public static extern IntPtr CreateBatch(int type); - - [DllImport(LIBNAME)] - public static extern void DestroyBatch(IntPtr batch); - - [DllImport(LIBNAME)] - public static extern IntPtr AddBatch(IntPtr solver, IntPtr batch); - - [DllImport(LIBNAME)] - public static extern void RemoveBatch(IntPtr solver, IntPtr batch); - - [DllImport(LIBNAME)] - public static extern bool EnableBatch(IntPtr batch, [MarshalAs(UnmanagedType.I1)]bool enabled); - - [DllImport(LIBNAME)] - public static extern int GetBatchConstraintForces(IntPtr batch, float[] forces, int num, int destOffset); - - - - [DllImport(LIBNAME)] - public static extern void SetBatchConstraintCount(IntPtr batch, int num); - - [DllImport(LIBNAME)] - public static extern int GetBatchConstraintCount(IntPtr batch); - - [DllImport(LIBNAME)] - public static extern void SetDistanceConstraints(IntPtr batch, IntPtr indices, - IntPtr restLengths, - IntPtr stiffnesses, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetBendingConstraints(IntPtr batch, IntPtr indices, - IntPtr restBends, - IntPtr bendingStiffnesses, - IntPtr plasticity, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetSkinConstraints(IntPtr batch, - IntPtr indices, - IntPtr points, - IntPtr normals, - IntPtr radiiBackstops, - IntPtr stiffnesses, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetAerodynamicConstraints(IntPtr batch, - IntPtr particleIndices, - IntPtr aerodynamicCoeffs, - int num); - - [DllImport(LIBNAME)] - public static extern void SetVolumeConstraints(IntPtr batch, - IntPtr triangleIndices, - IntPtr firstTriangle, - IntPtr numTriangles, - IntPtr restVolumes, - IntPtr pressureStiffnesses, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetShapeMatchingConstraints(IntPtr batch, - IntPtr shapeIndices, - IntPtr firstIndex, - IntPtr numIndices, - IntPtr explicitGroup, - IntPtr materialParameters, - IntPtr restComs, - IntPtr coms, - IntPtr orientations, - IntPtr linearTransforms, - IntPtr plasticDeformations, - int num); - - [DllImport(LIBNAME)] - public static extern void CalculateRestShapeMatching(IntPtr solver, IntPtr batch); - - - [DllImport(LIBNAME)] - public static extern void SetStretchShearConstraints(IntPtr batch, - IntPtr particleIndices, - IntPtr orientationIndices, - IntPtr restLengths, - IntPtr restOrientations, - IntPtr stiffnesses, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetBendTwistConstraints(IntPtr batch, - IntPtr orientationIndices, - IntPtr restDarboux, - IntPtr stiffnesses, - IntPtr plasticity, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetTetherConstraints(IntPtr batch, - IntPtr indices, - IntPtr maxLenghtsScales, - IntPtr stiffnesses, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetPinConstraints(IntPtr batch, - IntPtr indices, - IntPtr pinOffsets, - IntPtr restDarboux, - IntPtr colliders, - IntPtr stiffnesses, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetStitchConstraints(IntPtr batch, - IntPtr indices, - IntPtr stiffnesses, - IntPtr lambdas, - int num); - - [DllImport(LIBNAME)] - public static extern void SetChainConstraints(IntPtr batch, - IntPtr indices, - IntPtr lengths, - IntPtr firstIndex, - IntPtr numIndex, - int num); - - [DllImport(LIBNAME)] - public static extern void GetCollisionContacts(IntPtr solver, Contact[] contacts, int n); - - [DllImport(LIBNAME)] - public static extern void GetParticleCollisionContacts(IntPtr solver, Contact[] contacts, int n); - - [DllImport(LIBNAME)] - public static extern int InterpolateDiffuseParticles(IntPtr solver, IntPtr properties, IntPtr diffusePositions, IntPtr diffuseProperties, IntPtr neighbourCount, int n); - - [DllImport(LIBNAME)] - public static extern int MakePhase(int group, ObiUtils.ParticleFlags flags); - - [DllImport(LIBNAME)] - public static extern int GetGroupFromPhase(int phase); - - [DllImport(LIBNAME)] - public static extern int GetFlagsFromPhase(int phase); - - [DllImport(LIBNAME)] - public static extern float BendingConstraintRest(float[] constraintCoordinates); - - [DllImport(LIBNAME)] - public static extern void CompleteAll(); - - [DllImport(LIBNAME)] - public static extern void Complete(IntPtr task); - - [DllImport(LIBNAME)] - public static extern IntPtr CreateEmpty(); - - [DllImport(LIBNAME)] - public static extern void Schedule(IntPtr task); - - [DllImport(LIBNAME)] - public static extern void AddChild(IntPtr task, IntPtr child); - - [DllImport(LIBNAME)] - public static extern int GetMaxSystemConcurrency(); - - [DllImport(LIBNAME)] - public static extern void ClearProfiler(); - - [DllImport(LIBNAME)] - public static extern void EnableProfiler([MarshalAs(UnmanagedType.I1)]bool cooked); - - [DllImport(LIBNAME)] - public static extern void BeginSample(string name, byte type); - - [DllImport(LIBNAME)] - public static extern void EndSample(); - - [DllImport(LIBNAME)] - public static extern int GetProfilingInfoCount(); - - [DllImport(LIBNAME)] - public static extern void GetProfilingInfo([Out] ProfileInfo[] info, int num); - -#endif } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs index 1f87271a1..83d722604 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs @@ -7,7 +7,8 @@ namespace Obi [AddComponentMenu("Physics/Obi/Obi Bone", 882)] [ExecuteInEditMode] [DisallowMultipleComponent] - public class ObiBone : ObiActor, IStretchShearConstraintsUser, IBendTwistConstraintsUser, ISkinConstraintsUser + [DefaultExecutionOrder(100)] // make sure ObiBone's LateUpdate is updated after ObiSolver's. + public class ObiBone : ObiActor, IStretchShearConstraintsUser, IBendTwistConstraintsUser, ISkinConstraintsUser, IAerodynamicConstraintsUser { [Serializable] public class BonePropertyCurve @@ -31,7 +32,7 @@ namespace Obi [Serializable] public class IgnoredBone { - public Transform bone; + public Transform bone; public bool ignoreChildren; } @@ -39,9 +40,9 @@ namespace Obi [SerializeField] protected bool m_SelfCollisions = false; - [SerializeField] protected BonePropertyCurve _radius = new BonePropertyCurve(0.1f,1); - [SerializeField] protected BonePropertyCurve _mass = new BonePropertyCurve(0.1f,1); - [SerializeField] protected BonePropertyCurve _rotationalMass = new BonePropertyCurve(0.1f,1); + [SerializeField] protected BonePropertyCurve _radius = new BonePropertyCurve(0.1f, 1); + [SerializeField] protected BonePropertyCurve _mass = new BonePropertyCurve(0.1f, 1); + [SerializeField] protected BonePropertyCurve _rotationalMass = new BonePropertyCurve(0.1f, 1); // skin constraints: [SerializeField] protected bool _skinConstraintsEnabled = true; @@ -62,6 +63,11 @@ namespace Obi [SerializeField] protected BonePropertyCurve _plasticYield = new BonePropertyCurve(0, 1); [SerializeField] protected BonePropertyCurve _plasticCreep = new BonePropertyCurve(0, 1); + // aerodynamics + [SerializeField] protected bool _aerodynamicsEnabled = true; + [SerializeField] protected BonePropertyCurve _drag = new BonePropertyCurve(0.05f, 1); + [SerializeField] protected BonePropertyCurve _lift = new BonePropertyCurve(0.02f, 1); + [Tooltip("Filter used for collision detection.")] [SerializeField] private int filter = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 1); @@ -236,7 +242,34 @@ namespace Obi public BonePropertyCurve plasticCreep { get { return _plasticCreep; } - set { _plasticCreep = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + set { _plasticCreep = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Whether this actor's aerodynamic constraints are enabled. + /// + public bool aerodynamicsEnabled + { + get { return _aerodynamicsEnabled; } + set { if (value != _aerodynamicsEnabled) { _aerodynamicsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } } + } + + /// + /// Aerodynamic drag value. + /// + public BonePropertyCurve drag + { + get { return _drag; } + set { _drag = value; SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } + } + + /// + /// Aerodynamic lift value. + /// + public BonePropertyCurve lift + { + get { return _lift; } + set { _lift = value; SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } } @@ -262,6 +295,7 @@ namespace Obi protected override void Awake() { + // TODO: guard against having another ObiBone above it in hierarchy. m_BoneBlueprint = ScriptableObject.CreateInstance(); UpdateBlueprint(); base.Awake(); @@ -297,18 +331,45 @@ namespace Obi } } - public override void LoadBlueprint(ObiSolver solver) + internal override void LoadBlueprint() { - base.LoadBlueprint(solver); + base.LoadBlueprint(); + + // synchronously read required data from GPU: + solver.renderablePositions.Readback(false); + solver.renderableOrientations.Readback(false); + solver.orientations.Readback(false); + solver.angularVelocities.Readback(false); + SetupRuntimeConstraints(); ResetToCurrentShape(); } - public override void UnloadBlueprint(ObiSolver solver) + internal override void UnloadBlueprint() { ResetParticles(); CopyParticleDataToTransforms(); - base.UnloadBlueprint(solver); + base.UnloadBlueprint(); + } + + public override void RequestReadback() + { + base.RequestReadback(); + + solver.orientations.Readback(); + solver.angularVelocities.Readback(); + solver.renderablePositions.Readback(); + solver.renderableOrientations.Readback(); + } + + public override void SimulationEnd(float simulatedTime, float substepTime) + { + base.SimulationEnd(simulatedTime, substepTime); + + solver.orientations.WaitForReadback(); + solver.angularVelocities.WaitForReadback(); + solver.renderablePositions.WaitForReadback(); + solver.renderableOrientations.WaitForReadback(); } private void SetupRuntimeConstraints() @@ -316,10 +377,21 @@ namespace Obi SetConstraintsDirty(Oni.ConstraintType.Skin); SetConstraintsDirty(Oni.ConstraintType.StretchShear); SetConstraintsDirty(Oni.ConstraintType.BendTwist); + SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); SetSelfCollisions(selfCollisions); SetSimplicesDirty(); UpdateFilter(); - UpdateCollisionMaterials(); + } + + public override void ProvideDeformableEdges(ObiNativeIntList deformableEdges) + { + var boneBprint = sharedBlueprint as ObiBoneBlueprint; + if (boneBprint != null && boneBprint.deformableEdges != null) + { + // Send deformable edge indices to the solver: + for (int i = 0; i < boneBprint.deformableEdges.Length; ++i) + deformableEdges.Add(solverIndices[boneBprint.deformableEdges[i]]); + } } private void FixRoot() @@ -337,10 +409,10 @@ namespace Obi solver.angularVelocities[rootIndex] = Vector4.zero; // take particle rest position in actor space (which is always zero), converts to solver space: - solver.renderablePositions[rootIndex] = solver.positions[rootIndex] = actor2Solver.MultiplyPoint3x4(Vector3.zero); + solver.startPositions[rootIndex] = solver.endPositions[rootIndex] = solver.positions[rootIndex] = actor2Solver.MultiplyPoint3x4(Vector3.zero); // take particle rest orientation in actor space, and convert to solver space: - solver.renderableOrientations[rootIndex] = solver.orientations[rootIndex] = actor2SolverR * boneBlueprint.orientations[0]; + solver.startOrientations[rootIndex] = solver.endOrientations[rootIndex] = solver.orientations[rootIndex] = actor2SolverR * boneBlueprint.orientations[0]; } } @@ -358,8 +430,8 @@ namespace Obi { for (int i = 0; i < particleCount; ++i) { - var normalizedCoord = boneBlueprint.normalizedLengths[i]; - var radii = Vector3.one * radius.Evaluate(normalizedCoord); + var boneOverride = boneBlueprint.GetOverride(i, out float normalizedCoord); + var radii = Vector3.one * (boneOverride != null ? boneOverride.radius.Evaluate(normalizedCoord) : radius.Evaluate(normalizedCoord)); boneBlueprint.principalRadii[i] = radii; if (isLoaded) @@ -371,9 +443,9 @@ namespace Obi { for (int i = 0; i < particleCount; ++i) { - var normalizedCoord = boneBlueprint.normalizedLengths[i]; - var invMass = ObiUtils.MassToInvMass(mass.Evaluate(normalizedCoord)); - var invRotMass = ObiUtils.MassToInvMass(rotationalMass.Evaluate(normalizedCoord)); + var boneOverride = boneBlueprint.GetOverride(i, out float normalizedCoord); + var invMass = ObiUtils.MassToInvMass(boneOverride != null ? boneOverride .mass.Evaluate(normalizedCoord) : mass.Evaluate(normalizedCoord)); + var invRotMass = ObiUtils.MassToInvMass(boneOverride != null ? boneOverride.rotationalMass.Evaluate(normalizedCoord) : rotationalMass.Evaluate(normalizedCoord)); boneBlueprint.invMasses[i] = invMass; boneBlueprint.invRotationalMasses[i] = invRotMass; @@ -388,20 +460,24 @@ namespace Obi public Vector3 GetSkinRadiiBackstop(ObiSkinConstraintsBatch batch, int constraintIndex) { - float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex]]; - return new Vector3(skinRadius.Evaluate(normalizedCoord),0,0); + var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex], out float normalizedCoord); + return new Vector3(boneOverride != null ? boneOverride.skinRadius.Evaluate(normalizedCoord) : skinRadius.Evaluate(normalizedCoord), 0, 0); } public float GetSkinCompliance(ObiSkinConstraintsBatch batch, int constraintIndex) { - float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex]]; - return skinCompliance.Evaluate(normalizedCoord); + var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex], out float normalizedCoord); + return boneOverride != null ? boneOverride.skinCompliance.Evaluate(normalizedCoord) : skinCompliance.Evaluate(normalizedCoord); } - public Vector3 GetBendTwistCompliance(ObiBendTwistConstraintsBatch batch, int constraintIndex) { - float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex * 2]]; + var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex * 2], out float normalizedCoord); + + if (boneOverride != null) + return new Vector3(boneOverride.bend1Compliance.Evaluate(normalizedCoord), + boneOverride.bend2Compliance.Evaluate(normalizedCoord), + boneOverride.torsionCompliance.Evaluate(normalizedCoord)); return new Vector3(bend1Compliance.Evaluate(normalizedCoord), bend2Compliance.Evaluate(normalizedCoord), torsionCompliance.Evaluate(normalizedCoord)); @@ -409,22 +485,51 @@ namespace Obi public Vector2 GetBendTwistPlasticity(ObiBendTwistConstraintsBatch batch, int constraintIndex) { - float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex * 2]]; + var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex * 2], out float normalizedCoord); + + if (boneOverride != null) + return new Vector2(boneOverride.plasticYield.Evaluate(normalizedCoord), + boneOverride.plasticCreep.Evaluate(normalizedCoord)); return new Vector2(plasticYield.Evaluate(normalizedCoord), plasticCreep.Evaluate(normalizedCoord)); + } public Vector3 GetStretchShearCompliance(ObiStretchShearConstraintsBatch batch, int constraintIndex) { - float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex * 2]]; + var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex * 2], out float normalizedCoord); + + if (boneOverride != null) + return new Vector3(boneOverride.shear1Compliance.Evaluate(normalizedCoord), + boneOverride.shear2Compliance.Evaluate(normalizedCoord), + boneOverride.stretchCompliance.Evaluate(normalizedCoord)); return new Vector3(shear1Compliance.Evaluate(normalizedCoord), shear2Compliance.Evaluate(normalizedCoord), stretchCompliance.Evaluate(normalizedCoord)); } - public override void BeginStep(float stepTime) + public float GetDrag(ObiAerodynamicConstraintsBatch batch, int constraintIndex) { - base.BeginStep(stepTime); + var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex], out float normalizedCoord); + return boneOverride != null ? boneOverride.drag.Evaluate(normalizedCoord) : drag.Evaluate(normalizedCoord); + } + + public float GetLift(ObiAerodynamicConstraintsBatch batch, int constraintIndex) + { + var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex], out float normalizedCoord); + return boneOverride != null ? boneOverride.lift.Evaluate(normalizedCoord) : lift.Evaluate(normalizedCoord); + } + + public void FixedUpdate() + { + // This resets all bones not affected by animation, + // needs to happen once per frame at the very start before Animators are updated. + ResetReferenceOrientations(); + } + + public override void SimulationStart(float timeToSimulate, float substepTime) + { + base.SimulationStart(timeToSimulate, substepTime); if (fixRoot) FixRoot(); @@ -432,18 +537,10 @@ namespace Obi UpdateRestShape(); } - public override void PrepareFrame() - { - ResetReferenceOrientations(); - base.PrepareFrame(); - } - - public override void Interpolate() + public void LateUpdate() { if (Application.isPlaying && isActiveAndEnabled) CopyParticleDataToTransforms(); - - base.Interpolate(); } /// @@ -463,11 +560,49 @@ namespace Obi solver.velocities[solverIndex] = Vector4.zero; solver.angularVelocities[solverIndex] = Vector4.zero; - solver.renderablePositions[solverIndex] = solver.positions[solverIndex] = world2Solver.MultiplyPoint3x4(trfm.position); + solver.startPositions[solverIndex] = solver.endPositions[solverIndex] = solver.positions[solverIndex] = world2Solver.MultiplyPoint3x4(trfm.position); var boneDeltaAWS = trfm.rotation * Quaternion.Inverse(boneBlueprint.restOrientations[i]); - solver.renderableOrientations[solverIndex] = solver.orientations[solverIndex] = world2Solver.rotation * boneDeltaAWS * boneBlueprint.root2WorldR * boneBlueprint.orientations[i]; + solver.startOrientations[solverIndex] = solver.endOrientations[solverIndex] = solver.orientations[solverIndex] = world2Solver.rotation * boneDeltaAWS * boneBlueprint.root2WorldR * boneBlueprint.orientations[i]; } + + // Update constraint data in the blueprint, since StartSimulation won't be called until next frame. + var bc = GetConstraintsByType(Oni.ConstraintType.BendTwist) as ObiConstraints; + + if (bc != null) + for (int j = 0; j < bc.batchCount; ++j) + { + var batch = bc.GetBatch(j) as ObiBendTwistConstraintsBatch; + + for (int i = 0; i < batch.activeConstraintCount; i++) + { + int indexA = batch.particleIndices[i * 2]; + int indexB = batch.particleIndices[i * 2 + 1]; + + // calculate bone rotation delta in world space: + var boneDeltaAWS = boneBlueprint.transforms[indexA].rotation * Quaternion.Inverse(boneBlueprint.restOrientations[indexA]); + var boneDeltaBWS = boneBlueprint.transforms[indexB].rotation * Quaternion.Inverse(boneBlueprint.restOrientations[indexB]); + + // apply delta to rest particle orientation: + var orientationA = boneDeltaAWS * boneBlueprint.root2WorldR * boneBlueprint.orientations[indexA]; + var orientationB = boneDeltaBWS * boneBlueprint.root2WorldR * boneBlueprint.orientations[indexB]; + + batch.restDarbouxVectors[i] = ObiUtils.RestDarboux(orientationA, orientationB); + } + } + + var sc = GetConstraintsByType(Oni.ConstraintType.Skin) as ObiConstraints; + + if (sc != null) + for (int j = 0; j < sc.batchCount; ++j) + { + var batch = sc.GetBatch(j) as ObiSkinConstraintsBatch; + for (int i = 0; i < batch.activeConstraintCount; i++) + { + int index = batch.particleIndices[i]; + batch.skinPoints[i] = solver.transform.worldToLocalMatrix.MultiplyPoint3x4(boneBlueprint.transforms[index].position); + } + } } private void ResetReferenceOrientations() @@ -484,14 +619,20 @@ namespace Obi var sbc = solver.GetConstraintsByType(Oni.ConstraintType.BendTwist) as ObiConstraints; if (bendTwistConstraintsEnabled && bc != null && sbc != null) - for (int j = 0; j < bc.GetBatchCount(); ++j) + { + // iterate up to the amount of entries in solverBatchOffsets, insteaf of bc.batchCount. This ensures + // the batches we access have been added to the solver, as solver.UpdateConstraints() could have not been called yet on a newly added actor. + for (int j = 0; j < solverBatchOffsets[(int)Oni.ConstraintType.BendTwist].Count; ++j) { var batch = bc.GetBatch(j) as ObiBendTwistConstraintsBatch; var solverBatch = sbc.batches[j] as ObiBendTwistConstraintsBatch; - int offset = solverBatchOffsets[(int)solverBatch.constraintType][j]; + int offset = solverBatchOffsets[(int)Oni.ConstraintType.BendTwist][j]; if (solverBatch.restDarbouxVectors.isCreated) { + if (solverBatch.restDarbouxVectors.computeBuffer == null) + solverBatch.restDarbouxVectors.SafeAsComputeBuffer(); + for (int i = 0; i < batch.activeConstraintCount; i++) { int indexA = batch.particleIndices[i * 2]; @@ -507,34 +648,45 @@ namespace Obi solverBatch.restDarbouxVectors[offset + i] = ObiUtils.RestDarboux(orientationA, orientationB); } + + solverBatch.restDarbouxVectors.Upload(); } } + } var sc = GetConstraintsByType(Oni.ConstraintType.Skin) as ObiConstraints; var ssc = solver.GetConstraintsByType(Oni.ConstraintType.Skin) as ObiConstraints; if (skinConstraintsEnabled && sc != null && ssc != null) - for (int j = 0; j < sc.GetBatchCount(); ++j) + { + // iterate up to the amount of entries in solverBatchOffsets, insteaf of sc.batchCount. This ensures + // the batches we access have been added to the solver, as solver.UpdateConstraints() could have not been called yet on a newly added actor. + for (int j = 0; j < solverBatchOffsets[(int)Oni.ConstraintType.Skin].Count; ++j) { var batch = sc.GetBatch(j) as ObiSkinConstraintsBatch; var solverBatch = ssc.batches[j] as ObiSkinConstraintsBatch; - int offset = solverBatchOffsets[(int)solverBatch.constraintType][j]; + int offset = solverBatchOffsets[(int)Oni.ConstraintType.Skin][j]; if (solverBatch.skinPoints.isCreated) { + if (solverBatch.skinPoints.computeBuffer == null) + solverBatch.skinPoints.SafeAsComputeBuffer(); + for (int i = 0; i < batch.activeConstraintCount; i++) { int index = batch.particleIndices[i]; solverBatch.skinPoints[offset + i] = solver.transform.worldToLocalMatrix.MultiplyPoint3x4(boneBlueprint.transforms[index].position); } + + solverBatch.skinPoints.Upload(); } } + } } private void CopyParticleDataToTransforms() { - - if (boneBlueprint != null) + if (isLoaded && boneBlueprint != null) { // copy current particle transforms to bones: for (int i = 1; i < particleCount; ++i) diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs new file mode 100644 index 000000000..f4a20adcd --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs @@ -0,0 +1,192 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Bone Override", 882)] + [ExecuteInEditMode] + [DisallowMultipleComponent] + public class ObiBoneOverride : MonoBehaviour + { + [SerializeField] protected ObiBone.BonePropertyCurve _radius = new ObiBone.BonePropertyCurve(0.1f, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _mass = new ObiBone.BonePropertyCurve(0.1f, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _rotationalMass = new ObiBone.BonePropertyCurve(0.1f, 1); + + // skin constraints: + [SerializeField] protected ObiBone.BonePropertyCurve _skinCompliance = new ObiBone.BonePropertyCurve(0.01f, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _skinRadius = new ObiBone.BonePropertyCurve(0.1f, 1); + + // distance constraints: + [SerializeField] protected ObiBone.BonePropertyCurve _stretchCompliance = new ObiBone.BonePropertyCurve(0, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _shear1Compliance = new ObiBone.BonePropertyCurve(0, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _shear2Compliance = new ObiBone.BonePropertyCurve(0, 1); + + // bend constraints: + [SerializeField] protected ObiBone.BonePropertyCurve _torsionCompliance = new ObiBone.BonePropertyCurve(0, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _bend1Compliance = new ObiBone.BonePropertyCurve(0, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _bend2Compliance = new ObiBone.BonePropertyCurve(0, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _plasticYield = new ObiBone.BonePropertyCurve(0, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _plasticCreep = new ObiBone.BonePropertyCurve(0, 1); + + // aerodynamics + [SerializeField] protected ObiBone.BonePropertyCurve _drag = new ObiBone.BonePropertyCurve(0.05f, 1); + [SerializeField] protected ObiBone.BonePropertyCurve _lift = new ObiBone.BonePropertyCurve(0.02f, 1); + + /// + /// Particle radius distribution over this bone hierarchy length. + /// + public ObiBone.BonePropertyCurve radius + { + get { return _radius; } + set { _radius = value; bone.UpdateRadius(); } + } + + /// + /// Mass distribution over this bone hierarchy length. + /// + public ObiBone.BonePropertyCurve mass + { + get { return _mass; } + set { _mass = value; bone.UpdateMasses(); } + } + + /// + /// Rotational mass distribution over this bone hierarchy length. + /// + public ObiBone.BonePropertyCurve rotationalMass + { + get { return _rotationalMass; } + set { _rotationalMass = value; bone.UpdateMasses(); } + } + + /// + /// Compliance of this actor's skin constraints. + /// + public ObiBone.BonePropertyCurve skinCompliance + { + get { return _skinCompliance; } + set { _skinCompliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.Skin); } + } + + /// + /// Compliance of this actor's skin radius + /// + public ObiBone.BonePropertyCurve skinRadius + { + get { return _skinRadius; } + set { _skinRadius = value; bone.SetConstraintsDirty(Oni.ConstraintType.Skin); } + } + + /// + /// Compliance of this actor's stretch/shear constraints, along their length. + /// + public ObiBone.BonePropertyCurve stretchCompliance + { + get { return _stretchCompliance; } + set { _stretchCompliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Shearing compliance of this actor's stretch/shear constraints, along the first axis orthogonal to their length. + /// + public ObiBone.BonePropertyCurve shear1Compliance + { + get { return _shear1Compliance; } + set { _shear1Compliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Shearing compliance of this actor's stretch/shear constraints, along the second axis orthogonal to their length. + /// + public ObiBone.BonePropertyCurve shear2Compliance + { + get { return _shear2Compliance; } + set { _shear2Compliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Torsional compliance of this actor's bend/twist constraints along their length. + /// + public ObiBone.BonePropertyCurve torsionCompliance + { + get { return _torsionCompliance; } + set { _torsionCompliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Bending compliance of this actor's bend/twist constraints along the first axis orthogonal to their length. + /// + public ObiBone.BonePropertyCurve bend1Compliance + { + get { return _bend1Compliance; } + set { _bend1Compliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Bending compliance of this actor's bend/twist constraints along the second axis orthogonal to their length. + /// + public ObiBone.BonePropertyCurve bend2Compliance + { + get { return _bend2Compliance; } + set { _bend2Compliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Threshold for plastic behavior. + /// + /// Once bending goes above this value, a percentage of the deformation (determined by ) will be permanently absorbed into the rod's rest shape. + public ObiBone.BonePropertyCurve plasticYield + { + get { return _plasticYield; } + set { _plasticYield = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Percentage of deformation that gets absorbed into the rest shape per second, once deformation goes above the threshold. + /// + public ObiBone.BonePropertyCurve plasticCreep + { + get { return _plasticCreep; } + set { _plasticCreep = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Aerodynamic drag value. + /// + public ObiBone.BonePropertyCurve drag + { + get { return _drag; } + set { _drag = value; bone.SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } + } + + /// + /// Aerodynamic lift value. + /// + public ObiBone.BonePropertyCurve lift + { + get { return _lift; } + set { _lift = value; bone.SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } + } + + private ObiBone bone; + + public void Awake() + { + bone = GetComponentInParent(); + } + + protected void OnValidate() + { + if (bone != null) + { + bone.UpdateRadius(); + bone.UpdateMasses(); + bone.SetConstraintsDirty(Oni.ConstraintType.Skin); + bone.SetConstraintsDirty(Oni.ConstraintType.StretchShear); + bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); + bone.SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); + } + } + } +} diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateUpdater.cs.meta b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs.meta similarity index 64% rename from Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateUpdater.cs.meta rename to Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs.meta index 41bbce652..31a7fae95 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Updaters/ObiLateUpdater.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs.meta @@ -1,11 +1,11 @@ fileFormatVersion: 2 -guid: 434d88f9b3534406382ff56c0e74bd9a +guid: eed7ac246d14742e5a77c218f4e491ec MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: 4e2c952f509ae40bdaf836136058d487, type: 3} + icon: {fileID: 2800000, guid: 0a18e0376cc184a9b96ebb3bf0175cc2, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs index fec820e8c..5521ac86c 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs @@ -183,22 +183,35 @@ namespace Obi SetupRuntimeConstraints(); } - public override void LoadBlueprint(ObiSolver solver) + internal override void LoadBlueprint() { - base.LoadBlueprint(solver); + base.LoadBlueprint(); RebuildElementsFromConstraints(); SetupRuntimeConstraints(); } + public override void RequestReadback() + { + base.RequestReadback(); + solver.orientations.Readback(); + } + + public override void SimulationEnd(float simulatedTime, float substepTime) + { + base.SimulationEnd(simulatedTime, substepTime); + solver.orientations.WaitForReadback(); + } + private void SetupRuntimeConstraints() { SetConstraintsDirty(Oni.ConstraintType.StretchShear); - //SetConstraintsDirty(Oni.ConstraintType.BendTwist); + SetConstraintsDirty(Oni.ConstraintType.BendTwist); SetConstraintsDirty(Oni.ConstraintType.Chain); + SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); SetSelfCollisions(selfCollisions); + SetMassScale(m_MassScale); RecalculateRestLength(); SetSimplicesDirty(); - UpdateCollisionMaterials(); } public Vector3 GetBendTwistCompliance(ObiBendTwistConstraintsBatch batch, int constraintIndex) @@ -219,7 +232,7 @@ namespace Obi protected override void RebuildElementsFromConstraintsInternal() { var dc = GetConstraintsByType(Oni.ConstraintType.StretchShear) as ObiConstraints; - if (dc == null || dc.GetBatchCount() < 2) + if (dc == null || dc.batchCount < 2) return; int constraintCount = dc.batches[0].activeConstraintCount + dc.batches[1].activeConstraintCount; diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs index 50be7dc5a..60d42359a 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs @@ -178,20 +178,20 @@ namespace Obi SetupRuntimeConstraints(); } - public override void LoadBlueprint(ObiSolver solver) + internal override void LoadBlueprint() { // create a copy of the blueprint for this cloth: if (Application.isPlaying) m_RopeBlueprintInstance = this.blueprint as ObiRopeBlueprint; - base.LoadBlueprint(solver); + base.LoadBlueprint(); RebuildElementsFromConstraints(); SetupRuntimeConstraints(); } - public override void UnloadBlueprint(ObiSolver solver) + internal override void UnloadBlueprint() { - base.UnloadBlueprint(solver); + base.UnloadBlueprint(); // delete the blueprint instance: if (m_RopeBlueprintInstance != null) @@ -202,26 +202,25 @@ namespace Obi { SetConstraintsDirty(Oni.ConstraintType.Distance); SetConstraintsDirty(Oni.ConstraintType.Bending); + SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); SetSelfCollisions(selfCollisions); + SetMassScale(m_MassScale); RecalculateRestLength(); SetSimplicesDirty(); - UpdateCollisionMaterials(); } - public override void Substep(float substepTime) + // Tearing must be done at the end of each step instead of substep, to give a chance to solver constraints to be rebuilt. + public override void SimulationStart(float timeToSimulate, float substepTime) { - base.Substep(substepTime); + base.SimulationStart(timeToSimulate, substepTime); - if (isActiveAndEnabled) + if (isActiveAndEnabled && tearingEnabled) ApplyTearing(substepTime); } protected void ApplyTearing(float substepTime) { - if (!tearingEnabled) - return; - float sqrTime = substepTime * substepTime; tornElements.Clear(); @@ -230,24 +229,28 @@ namespace Obi var sc = this.solver.GetConstraintsByType(Oni.ConstraintType.Distance) as ObiConstraints; if (dc != null && sc != null) - for (int j = 0; j < dc.GetBatchCount(); ++j) { - var batch = dc.GetBatch(j) as ObiDistanceConstraintsBatch; - var solverBatch = sc.batches[j] as ObiDistanceConstraintsBatch; - - for (int i = 0; i < batch.activeConstraintCount; i++) + // iterate up to the amount of entries in solverBatchOffsets, insteaf of dc.batchCount. This ensures + // the batches we access have been added to the solver, as solver.UpdateConstraints() could have not been called yet on a newly added actor. + for (int j = 0; j < solverBatchOffsets[(int)Oni.ConstraintType.Distance].Count; ++j) { - int elementIndex = j + 2 * i; + var batch = dc.GetBatch(j) as ObiDistanceConstraintsBatch; + var solverBatch = sc.batches[j] as ObiDistanceConstraintsBatch; - // divide lambda by squared delta time to get force in newtons: - int offset = solverBatchOffsets[(int)Oni.ConstraintType.Distance][j]; - float force = solverBatch.lambdas[offset + i] / sqrTime; - - elements[elementIndex].constraintForce = force; - - if (-force > tearResistanceMultiplier) + for (int i = 0; i < batch.activeConstraintCount; i++) { - tornElements.Add(elements[elementIndex]); + int elementIndex = j + 2 * i; + + // divide lambda by squared delta time to get force in newtons: + int offset = solverBatchOffsets[(int)Oni.ConstraintType.Distance][j]; + float force = solverBatch.lambdas[offset + i] / sqrTime; + + elements[elementIndex].constraintForce = force; + + if (-force > tearResistanceMultiplier) + { + tornElements.Add(elements[elementIndex]); + } } } } @@ -282,7 +285,8 @@ namespace Obi m_Solver.invMasses[splitIndex] *= 2; CopyParticle(solver.particleToActor[splitIndex].indexInActor, activeParticleCount); - ActivateParticle(activeParticleCount); + ActivateParticle(); + SetRenderingDirty(Oni.RenderingSystemType.AllRopes); return solverIndices[activeParticleCount - 1]; } @@ -309,8 +313,7 @@ namespace Obi element.particle1 = SplitParticle(element.particle1); - if (OnRopeTorn != null) - OnRopeTorn(this, new ObiRopeTornEventArgs(element, element.particle1)); + OnRopeTorn?.Invoke(this, new ObiRopeTornEventArgs(element, element.particle1)); return true; } @@ -318,7 +321,7 @@ namespace Obi protected override void RebuildElementsFromConstraintsInternal() { var dc = GetConstraintsByType(Oni.ConstraintType.Distance) as ObiConstraints; - if (dc == null || dc.GetBatchCount() < 2) + if (dc == null || dc.batchCount < 2) return; int constraintCount = dc.batches[0].activeConstraintCount + dc.batches[1].activeConstraintCount; @@ -356,13 +359,26 @@ namespace Obi // regenerate constraints from elements: var dc = GetConstraintsByType(Oni.ConstraintType.Distance) as ObiConstraints; var bc = GetConstraintsByType(Oni.ConstraintType.Bending) as ObiConstraints; + var ac = GetConstraintsByType(Oni.ConstraintType.Aerodynamics) as ObiConstraints; dc.DeactivateAllConstraints(); bc.DeactivateAllConstraints(); + ac.DeactivateAllConstraints(); + + for (int i = 0; i < activeParticleCount; ++i) + { + // aerodynamic constraints: + var ab = ac.batches[0] as ObiAerodynamicConstraintsBatch; + int constraint = ab.activeConstraintCount; + ab.particleIndices[constraint] = i; + ab.aerodynamicCoeffs[constraint * 3] = 2 * solver.principalRadii[solverIndices[i]].x; + ab.ActivateConstraint(constraint); + } int elementsCount = elements.Count - (ropeBlueprint.path.Closed ? 1 : 0); for (int i = 0; i < elementsCount; ++i) { + // distance constraints var db = dc.batches[i % 2] as ObiDistanceConstraintsBatch; int constraint = db.activeConstraintCount; @@ -372,6 +388,7 @@ namespace Obi db.stiffnesses[constraint] = new Vector2(_stretchCompliance, _maxCompression * db.restLengths[constraint]); db.ActivateConstraint(constraint); + // bend constraints if (i < elementsCount - 1) { var bb = bc.batches[i % 3] as ObiBendConstraintsBatch; @@ -384,7 +401,7 @@ namespace Obi int indexA = elements[i].particle1; int indexB = elements[i + 1].particle2; int indexC = elements[i].particle2; - float restBend = ObiUtils.RestBendingConstraint(solver.restPositions[indexA], solver.restPositions[indexB], solver.restPositions[indexC]); + float restBend = 0;//ObiUtils.RestBendingConstraint(solver.restPositions[indexA], solver.restPositions[indexB], solver.restPositions[indexC]); bb.particleIndices[constraint * 3] = solver.particleToActor[indexA].indexInActor; bb.particleIndices[constraint * 3 + 1] = solver.particleToActor[indexB].indexInActor; @@ -430,16 +447,21 @@ namespace Obi loopClosingBatch.ActivateConstraint(0); } - // edge simplices: - sharedBlueprint.edges = new int[elements.Count*2]; + // edge simplices and deformable edges + var rb = sharedBlueprint as ObiRopeBlueprint; + rb.edges = new int[elements.Count * 2]; + rb.deformableEdges = new int[elements.Count * 2]; for (int i = 0; i < elements.Count; ++i) { - sharedBlueprint.edges[i * 2] = solver.particleToActor[elements[i].particle1].indexInActor; - sharedBlueprint.edges[i * 2 + 1] = solver.particleToActor[elements[i].particle2].indexInActor; + rb.deformableEdges[i * 2] = rb.edges[i * 2] = solver.particleToActor[elements[i].particle1].indexInActor; + rb.deformableEdges[i * 2 + 1] = rb.edges[i * 2 + 1] = solver.particleToActor[elements[i].particle2].indexInActor; } SetConstraintsDirty(Oni.ConstraintType.Distance); SetConstraintsDirty(Oni.ConstraintType.Bending); + SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); + + solver.dirtyDeformableEdges = true; SetSimplicesDirty(); } } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs index 1fae42696..0b2080748 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; namespace Obi { - public abstract class ObiRopeBase : ObiActor + public abstract class ObiRopeBase : ObiActor, IAerodynamicConstraintsUser { [SerializeField] protected bool m_SelfCollisions = false; @@ -12,11 +12,44 @@ namespace Obi [HideInInspector] public List elements = new List(); /**< Elements.*/ public event ActorCallback OnElementsGenerated; + // aerodynamics + [SerializeField] protected bool _aerodynamicsEnabled = true; + [SerializeField] protected float _drag = 0.05f; + [SerializeField] protected float _lift = 0.02f; + + /// + /// Whether this actor's aerodynamic constraints are enabled. + /// + public bool aerodynamicsEnabled + { + get { return _aerodynamicsEnabled; } + set { if (value != _aerodynamicsEnabled) { _aerodynamicsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } } + } + + /// + /// Aerodynamic drag value. + /// + public float drag + { + get { return _drag; } + set { _drag = value; SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } + } + + /// + /// Aerodynamic lift value. + /// + public float lift + { + get { return _lift; } + set { _lift = value; SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } + } + public float restLength { get { return restLength_; } } + public ObiPath path { get { @@ -25,6 +58,37 @@ namespace Obi } } + public float GetDrag(ObiAerodynamicConstraintsBatch batch, int constraintIndex) + { + return drag; + } + + public float GetLift(ObiAerodynamicConstraintsBatch batch, int constraintIndex) + { + return lift; + } + + public override void ProvideDeformableEdges(ObiNativeIntList deformableEdges) + { + deformableEdgesOffset = deformableEdges.count / 2; + + var ropeBlueprint = sharedBlueprint as ObiRopeBlueprintBase; + if (ropeBlueprint != null && ropeBlueprint.deformableEdges != null) + { + // Send deformable edge indices to the solver: + for (int i = 0; i < ropeBlueprint.deformableEdges.Length; ++i) + deformableEdges.Add(solverIndices[ropeBlueprint.deformableEdges[i]]); + } + } + + public override int GetDeformableEdgeCount() + { + var ropeBlueprint = sharedBlueprint as ObiRopeBlueprintBase; + if (ropeBlueprint != null && ropeBlueprint.deformableEdges != null) + return ropeBlueprint.deformableEdges.Length / 2; + return 0; + } + /// /// Calculates and returns current rope length, including stretching/compression. /// @@ -105,5 +169,25 @@ namespace Obi return null; } + /// + /// Returns index of the edge that contains a length-normalized coordinate. It will also return the length-normalized coordinate within the edge. + /// + public int GetEdgeAt(float mu, out float elementMu) + { + elementMu = -1; + var ropeBlueprint = sharedBlueprint as ObiRopeBlueprintBase; + if (ropeBlueprint != null && ropeBlueprint.deformableEdges != null) + { + float edgeMu = ropeBlueprint.deformableEdges.Length/2 * Mathf.Clamp(mu, 0, 0.99999f); + + int index = (int)edgeMu; + elementMu = edgeMu - index; + + if (index < ropeBlueprint.deformableEdges.Length/2) + return index; + } + return -1; + } + } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs index f360aa2bb..bf2456a9a 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs @@ -20,6 +20,7 @@ namespace Obi ObiStructuralElement m_CursorElement = null; private int m_SourceIndex = -1; + private float lengthChange = 0; public float cursorMu { @@ -66,6 +67,7 @@ namespace Obi rope = GetComponent(); rope.OnElementsGenerated += Actor_OnElementsGenerated; + rope.OnSimulationStart += Rope_OnSimulate; if (rope.elements != null && rope.elements.Count > 0) Actor_OnElementsGenerated(rope); } @@ -73,6 +75,7 @@ namespace Obi private void OnDisable() { rope.OnElementsGenerated -= Actor_OnElementsGenerated; + rope.OnSimulationStart -= Rope_OnSimulate; } private void Actor_OnElementsGenerated(ObiActor actor) @@ -81,64 +84,13 @@ namespace Obi UpdateSource(); } - public void UpdateCursor() + private void Rope_OnSimulate(ObiActor actor, float simulatedTime, float substepTime) { - rope = GetComponent(); - m_CursorElement = null; - if (rope.isLoaded) - { - float elmMu; - m_CursorElement = rope.GetElementAt(cursorMu, out elmMu); - } - } - - public void UpdateSource() - { - rope = GetComponent(); - m_SourceIndex = -1; - if (rope.isLoaded) - { - float elmMu; - var elm = rope.GetElementAt(sourceMu, out elmMu); - if (elm != null && rope.solver != null) - { - m_SourceIndex = elmMu < 0.5f ? elm.particle1 : elm.particle2; - } - } - } - - private int AddParticleAt(int index) - { - // Copy data from the particle where we will insert new particles, to the particles we will insert: - int targetIndex = rope.activeParticleCount; - rope.CopyParticle(rope.solver.particleToActor[m_SourceIndex].indexInActor, targetIndex); - - // Move the new particle to the one at the place where we will insert it: - rope.TeleportParticle(targetIndex, rope.solver.positions[rope.solverIndices[index]]); - - // Activate the particle: - rope.ActivateParticle(targetIndex); - return rope.solverIndices[targetIndex]; - } - - private void RemoveParticleAt(int index) - { - rope.DeactivateParticle(index); - } - - public void ChangeLength(float newLength) - { - if (!rope.isLoaded) + if (!rope.isLoaded || Mathf.Abs(lengthChange) < ObiUtils.epsilon) return; var solver = rope.solver; - // clamp new length to sane limits: - newLength = Mathf.Clamp(newLength, 0, (rope.sourceBlueprint.particleCount - 1) * rope.ropeBlueprint.interParticleDistance); - - // calculate the change in rope length: - float lengthChange = newLength - rope.restLength; - // remove: if (lengthChange < 0) { @@ -148,6 +100,10 @@ namespace Obi { lengthChange -= m_CursorElement.restLength; + // if we subtracted the length of the last element, break out of the loop. + if (rope.elements.Count == 1) + break; + int index = rope.elements.IndexOf(m_CursorElement); if (index >= 0) @@ -165,8 +121,8 @@ namespace Obi m_CursorElement = rope.elements[index]; } - else - m_CursorElement = rope.elements[Mathf.Max(0,index - 1)]; + else + m_CursorElement = rope.elements[Mathf.Max(0, index - 1)]; } else // negative direction: { @@ -264,6 +220,69 @@ namespace Obi // rebuild constraints: rope.RebuildConstraintsFromElements(); + + lengthChange = 0; + } + + public void UpdateCursor() + { + rope = GetComponent(); + m_CursorElement = null; + if (rope.isLoaded) + { + float elmMu; + m_CursorElement = rope.GetElementAt(cursorMu, out elmMu); + } + } + + public void UpdateSource() + { + rope = GetComponent(); + m_SourceIndex = -1; + if (rope.isLoaded) + { + float elmMu; + var elm = rope.GetElementAt(sourceMu, out elmMu); + if (elm != null && rope.solver != null) + { + m_SourceIndex = elmMu < 0.5f ? elm.particle1 : elm.particle2; + } + } + } + + private int AddParticleAt(int index) + { + int targetIndex = rope.activeParticleCount; + + // Copy data from the particle where we will insert new particles, to the particles we will insert: + rope.CopyParticle(rope.solver.particleToActor[m_SourceIndex].indexInActor, targetIndex); + + // Move the new particle to the one at the place where we will insert it: + rope.TeleportParticle(targetIndex, rope.solver.positions[rope.solverIndices[index]]); + + // Activate the particle: + rope.ActivateParticle(); + rope.SetRenderingDirty(Oni.RenderingSystemType.AllRopes); + + return rope.solverIndices[targetIndex]; + } + + private void RemoveParticleAt(int index) + { + rope.DeactivateParticle(index); + rope.SetRenderingDirty(Oni.RenderingSystemType.AllRopes); + } + + public float ChangeLength(float lengthChange) + { + // clamp new length to sane limits: + //newLength = Mathf.Clamp(newLength, 0, (rope.sourceBlueprint.particleCount - 1) * rope.ropeBlueprint.interParticleDistance); + + // accumulate length change, we'll reset it to zero after it has been applied. + this.lengthChange += lengthChange; + + // return new length: + return this.lengthChange + rope.restLength; } } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs index 04a51e6d0..f2f71727e 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs @@ -20,6 +20,8 @@ namespace Obi [HideInInspector] public List parentIndices = new List(); [HideInInspector] public List normalizedLengths = new List(); + [HideInInspector] public int[] deformableEdges = null; /**< Indices of deformable edges (2 per edge)*/ + [HideInInspector] [NonSerialized] public List ignored; [HideInInspector] [NonSerialized] public ObiBone.BonePropertyCurve mass; [HideInInspector] [NonSerialized] public ObiBone.BonePropertyCurve rotationalMass; @@ -38,6 +40,24 @@ namespace Obi return null; } + public ObiBoneOverride GetOverride(int particleIndex, out float normalizedLength) + { + int overrideIndex = particleIndex; + normalizedLength = normalizedLengths[overrideIndex]; + + while (overrideIndex >= 0) + { + if (transforms[overrideIndex].TryGetComponent(out ObiBoneOverride over)) + { + normalizedLength = 1 - (1 - normalizedLengths[particleIndex]) / Mathf.Max(ObiUtils.epsilon,1 - normalizedLengths[overrideIndex]); + return over; + } + + overrideIndex = parentIndices[overrideIndex]; + } + return null; + } + protected override IEnumerator Initialize() { ClearParticleGroups(); @@ -164,12 +184,21 @@ namespace Obi filters[i] = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 0); colors[i] = Color.white; + var group = ScriptableObject.CreateInstance(); + group.SetSourceBlueprint(this); + group.name = transforms[i].name; + group.particleIndices.Add(i); + groups.Add(group); + if (i % 100 == 0) yield return new CoroutineJob.ProgressInfo("ObiRod: generating particles...", i / (float)m_ActiveParticleCount); } colorizer = new GraphColoring(m_ActiveParticleCount); + // Deformable edges: + CreateDeformableEdges(); + // Create edge simplices: CreateSimplices(); @@ -185,9 +214,23 @@ namespace Obi IEnumerator sc = CreateSkinConstraints(particlePositions); while (sc.MoveNext()) yield return sc.Current; + // Create aerodynamic constraints: + IEnumerator ac = CreateAerodynamicConstraints(); + while (ac.MoveNext()) yield return ac.Current; + yield return new CoroutineJob.ProgressInfo("ObiBone: complete", 1); } + protected void CreateDeformableEdges() + { + deformableEdges = new int[(parentIndices.Count - 1) * 2]; + for (int i = 0; i < parentIndices.Count - 1; ++i) + { + deformableEdges[i * 2] = i + 1; + deformableEdges[i * 2 + 1] = parentIndices[i + 1]; + } + } + protected void CreateSimplices() { edges = new int[(parentIndices.Count - 1) * 2]; @@ -198,9 +241,29 @@ namespace Obi } } + protected virtual IEnumerator CreateAerodynamicConstraints() + { + aerodynamicConstraintsData = new ObiAerodynamicConstraintsData(); + var aeroBatch = new ObiAerodynamicConstraintsBatch(); + aerodynamicConstraintsData.AddBatch(aeroBatch); + + for (int i = 0; i < m_ActiveParticleCount; i++) + { + aeroBatch.AddConstraint(i, 2 * principalRadii[i].x, 1, 1); + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRope generating aerodynamic constraints...", i / (float)m_ActiveParticleCount); + } + + // Set initial amount of active constraints: + for (int i = 0; i < aerodynamicConstraintsData.batches.Count; ++i) + { + aerodynamicConstraintsData.batches[i].activeConstraintCount = m_ActiveParticleCount; + } + } + protected virtual IEnumerator CreateStretchShearConstraints(List particlePositions) { - colorizer.Clear(); for (int i = 1; i < particlePositions.Count; ++i) @@ -228,7 +291,7 @@ namespace Obi int cIndex = constraintIndices[i]; // Add a new batch if needed: - if (color >= stretchShearConstraintsData.GetBatchCount()) + if (color >= stretchShearConstraintsData.batchCount) stretchShearConstraintsData.AddBatch(new ObiStretchShearConstraintsBatch()); int index1 = particleIndices[cIndex]; @@ -274,7 +337,7 @@ namespace Obi int cIndex = constraintIndices[i]; // Add a new batch if needed: - if (color >= bendTwistConstraintsData.GetBatchCount()) + if (color >= bendTwistConstraintsData.batchCount) bendTwistConstraintsData.AddBatch(new ObiBendTwistConstraintsBatch()); int index1 = particleIndices[cIndex]; diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs index 0e41b1ef2..e17ce9c15 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs @@ -127,6 +127,9 @@ namespace Obi yield return new CoroutineJob.ProgressInfo("ObiRod: generating particles...", i / (float)m_ActiveParticleCount); } + // Deformable edges: + CreateDeformableEdges(numSegments); + // Create edge simplices: CreateSimplices(numSegments); @@ -142,6 +145,12 @@ namespace Obi while (bc.MoveNext()) yield return bc.Current; + // Create aerodynamic constraints: + IEnumerator ac = CreateAerodynamicConstraints(); + + while (ac.MoveNext()) + yield return ac.Current; + // Create chain constraints: IEnumerator cc = CreateChainConstraints(); @@ -150,7 +159,6 @@ namespace Obi } - protected virtual IEnumerator CreateStretchShearConstraints(List particleNormals) { stretchShearConstraintsData = new ObiStretchShearConstraintsData(); @@ -159,8 +167,7 @@ namespace Obi stretchShearConstraintsData.AddBatch(new ObiStretchShearConstraintsBatch()); // rotation minimizing frame: - ObiPathFrame frame = new ObiPathFrame(); - frame.Reset(); + ObiPathFrame frame = ObiPathFrame.Identity; for (int i = 0; i < totalParticles - 1; i++) { diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs index 4448ae3f8..ce89d4028 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs @@ -10,7 +10,6 @@ namespace Obi [CreateAssetMenu(fileName = "rope blueprint", menuName = "Obi/Rope Blueprint", order = 140)] public class ObiRopeBlueprint : ObiRopeBlueprintBase { - public int pooledParticles = 100; public const float DEFAULT_PARTICLE_MASS = 0.1f; @@ -113,6 +112,9 @@ namespace Obi yield return new CoroutineJob.ProgressInfo("ObiRope: generating particles...", i / (float)m_ActiveParticleCount); } + // Deformable edges: + CreateDeformableEdges(numSegments); + // Create edge simplices: CreateSimplices(numSegments); @@ -128,6 +130,12 @@ namespace Obi while (bc.MoveNext()) yield return bc.Current; + // Create aerodynamic constraints: + IEnumerator ac = CreateAerodynamicConstraints(); + + while (ac.MoveNext()) + yield return ac.Current; + // Recalculate rest length: m_RestLength = 0; foreach (float length in restLengths) @@ -193,7 +201,7 @@ namespace Obi var batch = bendConstraintsData.batches[i % 3] as ObiBendConstraintsBatch; Vector3Int indices = new Vector3Int(i, i + 2, i + 1); - float restBend = ObiUtils.RestBendingConstraint(restPositions[indices[0]], restPositions[indices[1]], restPositions[indices[2]]); + float restBend = 0;//ObiUtils.RestBendingConstraint(restPositions[indices[0]], restPositions[indices[1]], restPositions[indices[2]]); batch.AddConstraint(indices, restBend); if (i < m_ActiveParticleCount - 2) diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs index 189a09441..36f2ac9d9 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs @@ -19,6 +19,7 @@ namespace Obi [HideInInspector] [SerializeField] protected int totalParticles; [HideInInspector] [SerializeField] protected float m_RestLength; + [HideInInspector] public int[] deformableEdges = null; /**< Indices of deformable edges (2 per edge)*/ [HideInInspector] public float[] restLengths; public float interParticleDistance @@ -62,13 +63,44 @@ namespace Obi RemoveParticleGroupAt(index); } + protected virtual IEnumerator CreateAerodynamicConstraints() + { + aerodynamicConstraintsData = new ObiAerodynamicConstraintsData(); + var aeroBatch = new ObiAerodynamicConstraintsBatch(); + aerodynamicConstraintsData.AddBatch(aeroBatch); + + for (int i = 0; i < totalParticles; i++) + { + aeroBatch.AddConstraint(i, 2 * principalRadii[i].x, 1, 1); + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRope generating aerodynamic constraints...", i / (float)totalParticles); + } + + // Set initial amount of active constraints: + for (int i = 0; i < aerodynamicConstraintsData.batches.Count; ++i) + { + aerodynamicConstraintsData.batches[i].activeConstraintCount = m_ActiveParticleCount; + } + } + + protected void CreateDeformableEdges(int numSegments) + { + deformableEdges = new int[numSegments * 2]; + for (int i = 0; i < numSegments; ++i) + { + deformableEdges[i * 2] = i % activeParticleCount; + deformableEdges[i * 2 + 1] = (i + 1) % activeParticleCount; + } + } + protected void CreateSimplices(int numSegments) { edges = new int[numSegments * 2]; for (int i = 0; i < numSegments; ++i) { - edges[i * 2] = i % totalParticles; - edges[i * 2 + 1] = (i + 1) % totalParticles; + edges[i * 2] = i % activeParticleCount; + edges[i * 2 + 1] = (i + 1) % activeParticleCount; } } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs index c096d5554..be0c8eecb 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections; -using System.Collections.Generic; +using System.Collections.Generic; using UnityEngine; namespace Obi diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs index 2f07a22bd..1aba7db14 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs @@ -63,7 +63,6 @@ namespace Obi { throw new InvalidOperationException("Cannot get position in path because it has zero control points."); } - } /** diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs index 11f390881..38377d460 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs @@ -12,7 +12,9 @@ namespace Obi Z = 2 } - public Vector3 position; + public static ObiPathFrame Identity => new ObiPathFrame(Vector3.zero, Vector3.forward, Vector3.up, Vector3.right, Color.white, 0); + + public Vector3 position; public Vector3 tangent; public Vector3 normal; @@ -28,7 +30,7 @@ namespace Obi this.binormal = binormal; this.color = color; this.thickness = thickness; - } + } public void Reset() { @@ -50,7 +52,7 @@ namespace Obi return new ObiPathFrame(c.position * f, c.tangent * f, c.normal * f, c.binormal * f,c.color * f, c.thickness * f); } - public static void WeightedSum(float w1, float w2, float w3, ref ObiPathFrame c1, ref ObiPathFrame c2, ref ObiPathFrame c3, ref ObiPathFrame sum) + public static void WeightedSum(float w1, float w2, float w3, in ObiPathFrame c1, in ObiPathFrame c2, in ObiPathFrame c3, ref ObiPathFrame sum) { sum.position.x = c1.position.x * w1 + c2.position.x * w2 + c3.position.x * w3; sum.position.y = c1.position.y * w1 + c2.position.y * w2 + c3.position.y * w3; diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs index 4ddee1215..1251981a6 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs @@ -1,21 +1,12 @@ using UnityEngine; -using Unity.Profiling; using System; -using System.Collections; -using System.Collections.Generic; namespace Obi { [ExecuteInEditMode] [RequireComponent(typeof(ObiRopeBase))] - public class ObiPathSmoother : MonoBehaviour + public class ObiPathSmoother : MonoBehaviour, ObiActorRenderer { - static ProfilerMarker m_AllocateRawChunksPerfMarker = new ProfilerMarker("AllocateRawChunks"); - static ProfilerMarker m_GenerateSmoothChunksPerfMarker = new ProfilerMarker("GenerateSmoothChunks"); - - private Matrix4x4 w2l; - private Quaternion w2lRotation; - [Range(0, 1)] [Tooltip("Curvature threshold below which the path will be decimated. A value of 0 won't apply any decimation. As you increase the value, decimation will become more aggresive.")] public float decimation = 0; @@ -27,353 +18,84 @@ namespace Obi [Tooltip("Twist in degrees applied to each sucessive path section.")] public float twist = 0; - public event ObiActor.ActorCallback OnCurveGenerated; + public ObiActor actor { get; private set; } - protected float smoothLength = 0; - protected int smoothSections = 0; - - [HideInInspector] public ObiList> rawChunks = new ObiList>(); - [HideInInspector] public ObiList> smoothChunks = new ObiList>(); - private Stack stack = new Stack(); - private BitArray decimateBitArray = new BitArray(0); + [HideInInspector] public int indexInSystem = 0; public float SmoothLength { - get { return smoothLength; } + get + { + if (actor.isLoaded) + { + var system = actor.solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + + if (system != null) + return system.GetSmoothLength(indexInSystem); + } + return 0; + } } public float SmoothSections { - get { return smoothSections; } + get { + if (actor.isLoaded) + { + var system = actor.solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + + if (system != null) + return system.GetSmoothFrameCount(indexInSystem); + } + return 0; + } } - private void OnEnable() + public void OnEnable() { - GetComponent().OnInterpolate += Actor_OnInterpolate; + actor = GetComponent(); + ((ObiActorRenderer)this).EnableRenderer(); } private void OnDisable() { - GetComponent().OnInterpolate -= Actor_OnInterpolate; + ((ObiActorRenderer)this).DisableRenderer(); } - void Actor_OnInterpolate(ObiActor actor) + private void OnValidate() { - GenerateSmoothChunks(((ObiRopeBase)actor), smoothing); - - if (OnCurveGenerated != null) - OnCurveGenerated(actor); - } - - private void AllocateChunk(int sections) - { - if (sections > 1) - { - - if (rawChunks.Data[rawChunks.Count] == null) - { - rawChunks.Data[rawChunks.Count] = new ObiList(); - smoothChunks.Data[smoothChunks.Count] = new ObiList(); - } - - rawChunks.Data[rawChunks.Count].SetCount(sections); - - rawChunks.SetCount(rawChunks.Count + 1); - smoothChunks.SetCount(smoothChunks.Count + 1); - } - } - - private float CalculateChunkLength(ObiList chunk) - { - float length = 0; - for (int i = 1; i < chunk.Count; ++i) - length += Vector3.Distance(chunk[i].position, chunk[i - 1].position); - return length; - } - - /** - * Generates raw curve chunks from the rope description. - */ - private void AllocateRawChunks(ObiRopeBase actor) - { - using (m_AllocateRawChunksPerfMarker.Auto()) - { - rawChunks.Clear(); - - if (actor.path == null) - return; - - // Count particles for each chunk. - int particles = 0; - for (int i = 0; i < actor.elements.Count; ++i) - { - particles++; - // At discontinuities, start a new chunk. - if (i < actor.elements.Count - 1 && actor.elements[i].particle2 != actor.elements[i + 1].particle1) - { - AllocateChunk(++particles); - particles = 0; - } - } - AllocateChunk(++particles); - } - } - - private void PathFrameFromParticle(ObiRopeBase actor, ref ObiPathFrame frame, int particleIndex, bool interpolateOrientation = true) - { - // Update current frame values from particles: - frame.position = w2l.MultiplyPoint3x4(actor.GetParticlePosition(particleIndex)); - frame.thickness = actor.GetParticleMaxRadius(particleIndex); - frame.color = actor.GetParticleColor(particleIndex); - - // Use particle orientation if possible: - if (actor.usesOrientedParticles) - { - Quaternion current = actor.GetParticleOrientation(particleIndex); - Quaternion previous = actor.GetParticleOrientation(Mathf.Max(0, particleIndex - 1)); - Quaternion average = w2lRotation * (interpolateOrientation ? Quaternion.SlerpUnclamped(current, previous, 0.5f) : current); - frame.normal = average * Vector3.up; - frame.binormal = average * Vector3.right; - frame.tangent = average * Vector3.forward; - } - } - - /** - * Generates smooth curve chunks. - */ - public void GenerateSmoothChunks(ObiRopeBase actor, uint smoothingLevels) - { - using (m_GenerateSmoothChunksPerfMarker.Auto()) - { - smoothChunks.Clear(); - smoothSections = 0; - smoothLength = 0; - - if (!Application.isPlaying) - actor.RebuildElementsFromConstraints(); - - AllocateRawChunks(actor); - - w2l = actor.transform.worldToLocalMatrix; - w2lRotation = w2l.rotation; - - // keep track of the first element of each chunk - int chunkStart = 0; - - ObiPathFrame frame_0 = new ObiPathFrame(); // "next" frame - ObiPathFrame frame_1 = new ObiPathFrame(); // current frame - ObiPathFrame frame_2 = new ObiPathFrame(); // previous frame - - // generate curve for each rope chunk: - for (int i = 0; i < rawChunks.Count; ++i) - { - int elementCount = rawChunks[i].Count - 1; - - // Initialize frames: - frame_0.Reset(); - frame_1.Reset(); - frame_2.Reset(); - - PathFrameFromParticle(actor, ref frame_1, actor.elements[chunkStart].particle1, false); - - frame_2 = frame_1; - - for (int m = 1; m <= rawChunks[i].Count; ++m) - { - - int index; - if (m >= elementCount) - // second particle of last element in the chunk. - index = actor.elements[chunkStart + elementCount - 1].particle2; - else - //first particle of current element. - index = actor.elements[chunkStart + m].particle1; - - // generate curve frame from particle: - PathFrameFromParticle(actor, ref frame_0, index); - - if (actor.usesOrientedParticles) - { - // copy frame directly. - frame_2 = frame_1; - } - else - { - // perform parallel transport, using forward / backward average to calculate tangent. - frame_1.tangent = ((frame_1.position - frame_2.position) + (frame_0.position - frame_1.position)).normalized; - frame_2.Transport(frame_1, twist); - } - - // in case we wrapped around the rope, average first and last frames: - if (chunkStart + m > actor.activeParticleCount) - { - frame_2 = rawChunks[0][0] = 0.5f * frame_2 + 0.5f * rawChunks[0][0]; - } - - frame_1 = frame_0; - - rawChunks[i][m - 1] = frame_2; - } - - // increment chunkStart by the amount of elements in this chunk: - chunkStart += elementCount; - - // adaptive curvature-based decimation: - if (Decimate(rawChunks[i], smoothChunks[i], decimation)) - { - // if any decimation took place, swap raw and smooth chunks: - var aux = rawChunks[i]; - rawChunks[i] = smoothChunks[i]; - smoothChunks[i] = aux; - } - - // get smooth curve points: - Chaikin(rawChunks[i], smoothChunks[i], smoothingLevels); - - // count total curve sections and total curve length: - smoothSections += smoothChunks[i].Count; - smoothLength += CalculateChunkLength(smoothChunks[i]); - } - } + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.AllSmoothedRopes); } public ObiPathFrame GetSectionAt(float mu) { - float edgeMu = smoothSections * Mathf.Clamp(mu,0,0.9999f); - int index = (int)edgeMu; - float sectionMu = edgeMu - index; - - int counter = 0; - int chunkIndex = -1; - int indexInChunk = -1; - for (int i = 0; i < smoothChunks.Count; ++i) + if (actor.isLoaded) { - if (counter + smoothChunks[i].Count > index) - { - chunkIndex = i; - indexInChunk = index - counter; - break; - } - counter += smoothChunks[i].Count; + var system = actor.solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + + if (system != null) + return system.GetFrameAt(indexInSystem, mu); } - ObiList chunk = smoothChunks[chunkIndex]; - ObiPathFrame s1 = chunk[indexInChunk]; - ObiPathFrame s2 = chunk[Mathf.Min(indexInChunk + 1, chunk.Count - 1)]; - - return (1 - sectionMu) * s1 + sectionMu * s2; + return ObiPathFrame.Identity; } - /** - * Iterative version of the Ramer-Douglas-Peucker path decimation algorithm. - */ - private bool Decimate(ObiList input, ObiList output, float threshold) + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) { - // no decimation, no work to do, just return: - if (threshold < 0.00001f || input.Count < 3) - return false; - - float scaledThreshold = threshold * threshold * 0.01f; - - stack.Push(new Vector2Int(0, input.Count - 1)); - - decimateBitArray.Length = Mathf.Max(decimateBitArray.Length, input.Count); - decimateBitArray.SetAll(true); - - while (stack.Count > 0) + switch (solver.backendType) { - var range = stack.Pop(); - float dmax = 0; - int index = range.x; - float mu; +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstPathSmootherRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: - for (int i = index + 1; i < range.y; ++i) - { - if (decimateBitArray[i]) - { - float d = Vector3.SqrMagnitude(ObiUtils.ProjectPointLine(input[i].position, input[range.x].position, input[range.y].position, out mu) - input[i].position); + if (SystemInfo.supportsComputeShaders) + return new ComputePathSmootherRenderSystem(solver); + return null; - if (d > dmax) - { - index = i; - dmax = d; - } - } - } - - if (dmax > scaledThreshold) - { - stack.Push(new Vector2Int(range.x, index)); - stack.Push(new Vector2Int(index, range.y)); - } - else - { - for (int i = range.x + 1; i < range.y; ++i) - decimateBitArray[i] = false; - } } - - output.Clear(); - for (int i = 0; i < input.Count; ++i) - if (decimateBitArray[i]) - output.Add(input[i]); - - return true; } - - /** - * This method uses a variant of Chainkin's algorithm to produce a smooth curve from a set of control points. It is specially fast - * because it directly calculates subdivision level k, instead of recursively calculating levels 1..k. - */ - private void Chaikin(ObiList input, ObiList output, uint k) - { - // no subdivision levels, no work to do. just copy the input to the output: - if (k == 0 || input.Count < 3) - { - output.SetCount(input.Count); - for (int i = 0; i < input.Count; ++i) - output[i] = input[i]; - return; - } - - // calculate amount of new points generated by each inner control point: - int pCount = (int)Mathf.Pow(2, k); - - // precalculate some quantities: - int n0 = input.Count - 1; - float twoRaisedToMinusKPlus1 = Mathf.Pow(2, -(k + 1)); - float twoRaisedToMinusK = Mathf.Pow(2, -k); - float twoRaisedToMinus2K = Mathf.Pow(2, -2 * k); - float twoRaisedToMinus2KMinus1 = Mathf.Pow(2, -2 * k - 1); - - // allocate ouput: - output.SetCount((n0 - 1) * pCount + 2); - - // calculate initial curve points: - output[0] = (0.5f + twoRaisedToMinusKPlus1) * input[0] + (0.5f - twoRaisedToMinusKPlus1) * input[1]; - output[pCount * n0 - pCount + 1] = (0.5f - twoRaisedToMinusKPlus1) * input[n0 - 1] + (0.5f + twoRaisedToMinusKPlus1) * input[n0]; - - // calculate internal points: - for (int j = 1; j <= pCount; ++j) - { - // precalculate coefficients: - float F = 0.5f - twoRaisedToMinusKPlus1 - (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2KMinus1); - float G = 0.5f + twoRaisedToMinusKPlus1 + (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2K); - float H = (j - 1) * j * twoRaisedToMinus2KMinus1; - - for (int i = 1; i < n0; ++i) - ObiPathFrame.WeightedSum(F, G, H, - ref input.Data[i - 1], - ref input.Data[i], - ref input.Data[i + 1], - ref output.Data[(i - 1) * pCount + j]); - } - - // make first and last curve points coincide with original points: - output[0] = input[0]; - output[output.Count - 1] = input[input.Count - 1]; - } - } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta index 3bc0efb08..bbfec3dfc 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 8791eecf125744cbeadea65319c29d5a, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs new file mode 100644 index 000000000..eb6d1bf8e --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs @@ -0,0 +1,216 @@ + +using System.Runtime.InteropServices; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +using Unity.Profiling; + +namespace Obi +{ + + [StructLayout(LayoutKind.Sequential)] + public struct ChainRendererData + { + public int modifierOffset; + public float twistAnchor; + public float twist; + public uint usesOrientedParticles; + + public Vector4 scale; + + public ChainRendererData(int modifierOffset, float twistAnchor, float twist, Vector3 scale, bool usesOrientedParticles) + { + this.modifierOffset = modifierOffset; + this.twistAnchor = twistAnchor; + this.twist = twist; + this.usesOrientedParticles = (uint)(usesOrientedParticles ? 1 : 0); + this.scale = scale; + } + } + + public abstract class ObiChainRopeRenderSystem : RenderSystem + { + public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.ChainRope; } + + public RendererSet renderers { get; } = new RendererSet(); + + // specify vertex count and layout + protected VertexAttributeDescriptor[] layout = + { + new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), + new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), + new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2), + }; + + static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupChainRopeRendering"); + static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ChainRopeRendering"); + + protected ObiSolver m_Solver; + protected List batchList = new List(); + + protected ObiNativeList rendererData; + protected ObiNativeList chunkData; + protected ObiNativeList modifiers; + + protected ObiNativeList elements; + protected ObiNativeList instanceTransforms; + protected ObiNativeList invInstanceTransforms; + protected ObiNativeList instanceColors; + + public ObiChainRopeRenderSystem(ObiSolver solver) + { + m_Solver = solver; + } + + public virtual void Dispose() + { + CleanupBatches(); + DestroyLists(); + } + + private void DestroyLists() + { + if (instanceTransforms != null) + instanceTransforms.Dispose(); + if (invInstanceTransforms != null) + invInstanceTransforms.Dispose(); + if (instanceColors != null) + instanceColors.Dispose(); + + if (elements != null) + elements.Dispose(); + if (chunkData != null) + chunkData.Dispose(); + if (rendererData != null) + rendererData.Dispose(); + if (modifiers != null) + modifiers.Dispose(); + } + + private void CreateListsIfNecessary() + { + DestroyLists(); + + instanceTransforms = new ObiNativeList(); + invInstanceTransforms = new ObiNativeList(); + instanceColors = new ObiNativeList(); + elements = new ObiNativeList(); + chunkData = new ObiNativeList(); + rendererData = new ObiNativeList(); + modifiers = new ObiNativeList(); + } + + private void CleanupBatches() + { + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + } + + private void GenerateBatches() + { + instanceTransforms.Clear(); + invInstanceTransforms.Clear(); + instanceColors.Clear(); + elements.Clear(); + rendererData.Clear(); + chunkData.Clear(); + modifiers.Clear(); + + // generate batches: + for (int i = 0; i < renderers.Count; ++i) + { + var renderer = renderers[i]; + if (renderer.linkMesh != null && renderer.linkMaterial != null) + { + renderer.renderParameters.layer = renderer.gameObject.layer; + batchList.Add(new InstancedRenderBatch(i, renderer.linkMesh, renderer.linkMaterial, renderer.renderParameters)); + } + + } + + // sort batches: + batchList.Sort(); + + // append elements: + for (int i = 0; i < batchList.Count; ++i) + { + var renderer = renderers[batchList[i].firstRenderer]; + var rope = renderer.actor as ObiRopeBase; + + modifiers.AddRange(renderer.linkModifiers); + + rendererData.Add(new ChainRendererData(modifiers.count, renderer.twistAnchor, renderer.linkTwist, renderer.linkScale, rope.usesOrientedParticles)); + + batchList[i].firstInstance = elements.count; + batchList[i].instanceCount = rope.elements.Count; + + // iterate trough elements, finding discontinuities as we go: + for (int e = 0; e < rope.elements.Count; ++e) + { + elements.Add(new Vector2Int(rope.elements[e].particle1, rope.elements[e].particle2)); + + // At discontinuities, start a new chunk. + if (e < rope.elements.Count - 1 && rope.elements[e].particle2 != rope.elements[e + 1].particle1) + { + chunkData.Add(new ChunkData(rendererData.count - 1, elements.count)); + } + } + chunkData.Add(new ChunkData(rendererData.count - 1, elements.count)); + } + + instanceTransforms.ResizeUninitialized(elements.count); + invInstanceTransforms.ResizeUninitialized(elements.count); + instanceColors.ResizeUninitialized(elements.count); + } + + protected virtual void CloseBatches() + { + // Initialize each batch: + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Initialize(); + } + + public virtual void Setup() + { + using (m_SetupRenderMarker.Auto()) + { + CreateListsIfNecessary(); + + CleanupBatches(); + + GenerateBatches(); + + ObiUtils.MergeBatches(batchList); + + CloseBatches(); + } + } + + public abstract void Render(); + + public void Step() + { + } + + public void BakeMesh(ObiRopeChainRenderer renderer, ref Mesh mesh, bool transformToActorLocalSpace = false) + { + int index = renderers.IndexOf(renderer); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + if (index >= batch.firstRenderer && index < batch.firstRenderer + batch.rendererCount) + { + batch.BakeMesh(renderers, renderer, chunkData, instanceTransforms, + renderer.actor.actorSolverToLocalMatrix, ref mesh, transformToActorLocalSpace); + return; + } + } + } + } +} + + diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs.meta new file mode 100644 index 000000000..276835a70 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a4cb8b10f8b049c2ae0a97c50c9b33c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs new file mode 100644 index 000000000..a34d3e0ab --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs @@ -0,0 +1,279 @@ + +using System.Runtime.InteropServices; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +using Unity.Profiling; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct BurstExtrudedMeshData + { + public int sectionVertexCount; + public float thicknessScale; + public float uvAnchor; + public uint normalizeV; + + public Vector2 uvScale; + + public BurstExtrudedMeshData(ObiRopeExtrudedRenderer renderer) + { + sectionVertexCount = renderer.section.vertices.Count; + uvAnchor = renderer.uvAnchor; + thicknessScale = renderer.thicknessScale; + uvScale = renderer.uvScale; + normalizeV = (uint)(renderer.normalizeV ? 1 : 0); + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct ProceduralRopeVertex + { + public Vector3 pos; + public Vector3 normal; + public Vector4 tangent; + public Vector4 color; + public Vector2 uv; + } + + public abstract class ObiExtrudedRopeRenderSystem : RenderSystem + { + public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.ExtrudedRope; } + + public RendererSet renderers { get; } = new RendererSet(); + protected List sortedRenderers = new List(); /**< temp list used to store renderers sorted by batch.*/ + + // specify vertex count and layout + protected VertexAttributeDescriptor[] layout = + { + new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), + new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), + new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2), + }; + + static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupExtrudedRopeRendering"); + static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ExtrudedRopeRendering"); + + protected ObiSolver m_Solver; + protected SubMeshDescriptor subMeshDescriptor = new SubMeshDescriptor(0, 0); + + protected List> batchList = new List>(); + + protected ObiNativeList rendererData; /**< for each renderer, data about smoother.*/ + protected ObiNativeList pathSmootherIndices; /**< renderer indices, sorted by batch */ + + protected Dictionary sectionToIndex = new Dictionary(); + protected ObiNativeVector2List sectionData; + protected ObiNativeList sectionOffsets; /**< for each section, offset of its first entry in the sectionData array.*/ + protected ObiNativeList sectionIndices; /**< for each renderer, index of the section used.*/ + + protected ObiNativeList vertexOffsets; /**< for each renderer, vertex offset in its batch mesh data.*/ + protected ObiNativeList triangleOffsets; /**< for each renderer, triangle offset in its batch mesh data.*/ + + protected ObiNativeList vertexCounts; /**< for each renderer, vertex count.*/ + protected ObiNativeList triangleCounts; /**< for each renderer, triangle count.*/ + + protected ObiPathSmootherRenderSystem pathSmootherSystem; + + public ObiExtrudedRopeRenderSystem(ObiSolver solver) + { + m_Solver = solver; + + rendererData = new ObiNativeList(); + pathSmootherIndices = new ObiNativeList(); + + sectionData = new ObiNativeVector2List(); + sectionOffsets = new ObiNativeList(); + sectionIndices = new ObiNativeList(); + + vertexOffsets = new ObiNativeList(); + triangleOffsets = new ObiNativeList(); + + vertexCounts = new ObiNativeList(); + triangleCounts = new ObiNativeList(); + } + + public void Dispose() + { + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + + if (rendererData != null) + rendererData.Dispose(); + if (pathSmootherIndices != null) + pathSmootherIndices.Dispose(); + + if (sectionData != null) + sectionData.Dispose(); + if (sectionOffsets != null) + sectionOffsets.Dispose(); + if (sectionIndices != null) + sectionIndices.Dispose(); + + if (vertexOffsets != null) + vertexOffsets.Dispose(); + if (triangleOffsets != null) + triangleOffsets.Dispose(); + + if (vertexCounts != null) + vertexCounts.Dispose(); + if (triangleCounts != null) + triangleCounts.Dispose(); + } + + private void Clear() + { + rendererData.Clear(); + pathSmootherIndices.Clear(); + + sectionData.Clear(); + sectionToIndex.Clear(); + sectionOffsets.Clear(); + sectionIndices.Clear(); + + vertexOffsets.Clear(); + triangleOffsets.Clear(); + + vertexCounts.Clear(); + triangleCounts.Clear(); + + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + } + + private void CreateBatches() + { + // generate batches: + sortedRenderers.Clear(); + for (int i = 0; i < renderers.Count; ++i) + { + if (renderers[i].section != null && renderers[i].TryGetComponent(out ObiPathSmoother smoother) && smoother.enabled) + { + renderers[i].renderParameters.layer = renderers[i].gameObject.layer; + batchList.Add(new ProceduralRenderBatch(i, renderers[i].material, renderers[i].renderParameters)); + sortedRenderers.Add(renderers[i]); + } + } + + vertexOffsets.ResizeUninitialized(sortedRenderers.Count); + triangleOffsets.ResizeUninitialized(sortedRenderers.Count); + + // sort batches: + batchList.Sort(); + + // reorder renderers based on sorted batches: + sortedRenderers.Clear(); + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + sortedRenderers.Add(renderers[batch.firstRenderer]); + batch.firstRenderer = i; + + int pathIndex = sortedRenderers[i].GetComponent().indexInSystem; + pathSmootherIndices.Add(pathIndex); + + // get or create extruded section: + if (!sectionToIndex.TryGetValue(sortedRenderers[i].section, out int sectionIndex)) + { + sectionIndex = sectionOffsets.count; + sectionToIndex[sortedRenderers[i].section] = sectionIndex; + sectionOffsets.Add(sectionData.count); + sectionData.AddRange(sortedRenderers[i].section.vertices); + } + + sectionIndices.Add(sectionIndex); + + // calculate vertex and triangle counts for each renderer: + int chunkStart = pathSmootherSystem.chunkOffsets[pathIndex]; + int chunkAmount = pathSmootherSystem.chunkOffsets[pathIndex + 1] - chunkStart; + + for (int k = chunkStart; k < chunkStart + chunkAmount; ++k) + { + int frameCount = pathSmootherSystem.smoothFrameCounts[k]; + batch.vertexCount += frameCount * sortedRenderers[i].section.vertices.Count; + batch.triangleCount += (frameCount - 1) * (sortedRenderers[i].section.vertices.Count - 1) * 2; + } + + vertexCounts.Add(batch.vertexCount); + triangleCounts.Add(batch.triangleCount); + + rendererData.Add(new BurstExtrudedMeshData(sortedRenderers[i])); + } + + // add last entry to section offsets: + sectionOffsets.Add(sectionData.count); + + } + + private void CalculateMeshOffsets() + { + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + int vtxCount = 0; + int triCount = 0; + + // Calculate vertex and triangle offsets for each renderer in the batch: + for (int j = 0; j < batch.rendererCount; ++j) + { + int r = batch.firstRenderer + j; + + vertexOffsets[r] = vtxCount; + triangleOffsets[r] = triCount; + + vtxCount += vertexCounts[r]; + triCount += triangleCounts[r]; + } + } + } + + public virtual void Setup() + { + pathSmootherSystem = m_Solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + if (pathSmootherSystem == null) + return; + + using (m_SetupRenderMarker.Auto()) + { + Clear(); + + CreateBatches(); + + ObiUtils.MergeBatches(batchList); + + CalculateMeshOffsets(); + } + } + + public abstract void Render(); + + public void Step() + { + } + + public void BakeMesh(ObiRopeExtrudedRenderer renderer, ref Mesh mesh, bool transformToActorLocalSpace = false) + { + int index = sortedRenderers.IndexOf(renderer); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + if (index >= batch.firstRenderer && index < batch.firstRenderer + batch.rendererCount) + { + batch.BakeMesh(vertexOffsets[index], vertexCounts[index], triangleOffsets[index], triangleCounts[index], + renderer.actor.actorSolverToLocalMatrix, ref mesh, transformToActorLocalSpace); + return; + } + } + } + } +} + + diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs.meta new file mode 100644 index 000000000..3b5bd971b --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e19ecda6559144921868e71085db8408 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs new file mode 100644 index 000000000..dbb068e67 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs @@ -0,0 +1,230 @@ + +using System.Runtime.InteropServices; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +using Unity.Profiling; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct BurstLineMeshData + { + public Vector2 uvScale; + public float thicknessScale; + public float uvAnchor; + public uint normalizeV; + + public BurstLineMeshData(ObiRopeLineRenderer renderer) + { + uvAnchor = renderer.uvAnchor; + thicknessScale = renderer.thicknessScale; + uvScale = renderer.uvScale; + normalizeV = (uint)(renderer.normalizeV ? 1 : 0); + } + } + + public abstract class ObiLineRopeRenderSystem : RenderSystem + { + public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.LineRope; } + + public RendererSet renderers { get; } = new RendererSet(); + protected List sortedRenderers = new List(); + + // specify vertex count and layout + protected VertexAttributeDescriptor[] layout = + { + new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), + new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), + new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), + new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2), + }; + + static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupExtrudedRopeRendering"); + static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ExtrudedRopeRendering"); + + protected ObiSolver m_Solver; + protected SubMeshDescriptor subMeshDescriptor = new SubMeshDescriptor(0, 0); + + protected List> batchList = new List>(); + + protected ObiNativeList pathSmootherIndices; + protected ObiNativeList rendererData; /**< for each renderer, data about smoother.*/ + + protected ObiNativeList vertexOffsets; /**< for each renderer, vertex offset in its batch mesh data.*/ + protected ObiNativeList triangleOffsets; /**< for each renderer, triangle offset in its batch mesh data.*/ + + protected ObiNativeList vertexCounts; /**< for each renderer, vertex count.*/ + protected ObiNativeList triangleCounts; /**< for each renderer, triangle count.*/ + + protected ObiPathSmootherRenderSystem pathSmootherSystem; + +#if (UNITY_2019_1_OR_NEWER) + System.Action renderCallback; +#endif + + public ObiLineRopeRenderSystem(ObiSolver solver) + { +#if (UNITY_2019_1_OR_NEWER) + renderCallback = new System.Action((cntxt, cam) => { RenderFromCamera(cam); }); + RenderPipelineManager.beginCameraRendering += renderCallback; +#endif + Camera.onPreCull += RenderFromCamera; + + m_Solver = solver; + + pathSmootherIndices = new ObiNativeList(); + rendererData = new ObiNativeList(); + + vertexOffsets = new ObiNativeList(); + triangleOffsets = new ObiNativeList(); + + vertexCounts = new ObiNativeList(); + triangleCounts = new ObiNativeList(); + } + + public void Dispose() + { +#if (UNITY_2019_1_OR_NEWER) + RenderPipelineManager.beginCameraRendering -= renderCallback; +#endif + Camera.onPreCull -= RenderFromCamera; + + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + + if (pathSmootherIndices != null) + pathSmootherIndices.Dispose(); + if (rendererData != null) + rendererData.Dispose(); + + if (vertexOffsets != null) + vertexOffsets.Dispose(); + if (triangleOffsets != null) + triangleOffsets.Dispose(); + + if (vertexCounts != null) + vertexCounts.Dispose(); + if (triangleCounts != null) + triangleCounts.Dispose(); + } + + private void Clear() + { + pathSmootherIndices.Clear(); + rendererData.Clear(); + + vertexOffsets.Clear(); + vertexCounts.Clear(); + + triangleCounts.Clear(); + + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + } + + private void CreateBatches() + { + // generate batches: + sortedRenderers.Clear(); + for (int i = 0; i < renderers.Count; ++i) + { + if (renderers[i].TryGetComponent(out ObiPathSmoother smoother) && smoother.enabled) + { + renderers[i].renderParams.layer = renderers[i].gameObject.layer; + batchList.Add(new ProceduralRenderBatch(i, renderers[i].material, renderers[i].renderParams)); + sortedRenderers.Add(renderers[i]); + } + } + + vertexOffsets.ResizeUninitialized(sortedRenderers.Count); + triangleOffsets.ResizeUninitialized(sortedRenderers.Count); + + // sort batches: + batchList.Sort(); + + // reorder renderers based on sorted batches: + sortedRenderers.Clear(); + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + sortedRenderers.Add(renderers[batch.firstRenderer]); + batch.firstRenderer = i; + + int pathIndex = sortedRenderers[i].GetComponent().indexInSystem; + pathSmootherIndices.Add(pathIndex); + + // calculate vertex and triangle counts for each renderer: + int chunkStart = pathSmootherSystem.chunkOffsets[pathIndex]; + int chunkAmount = pathSmootherSystem.chunkOffsets[pathIndex + 1] - chunkStart; + + for (int k = chunkStart; k < chunkStart + chunkAmount; ++k) + { + int frameCount = pathSmootherSystem.smoothFrameCounts[k]; + batch.vertexCount += frameCount * 2; // in a triangle strip, there's 2 vertices per frame. + batch.triangleCount += (frameCount - 1) * 2; // and 2 triangles per frame (except for the last one) + } + + vertexCounts.Add(batch.vertexCount); + triangleCounts.Add(batch.triangleCount); + + rendererData.Add(new BurstLineMeshData(sortedRenderers[i])); + } + } + + private void CalculateMeshOffsets() + { + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + int vtxCount = 0; + int triCount = 0; + + // Calculate vertex and triangle offsets for each renderer in the batch: + for (int j = 0; j < batch.rendererCount; ++j) + { + int r = batch.firstRenderer + j; + + vertexOffsets[r] = vtxCount; + triangleOffsets[r] = triCount; + + vtxCount += vertexCounts[r]; + triCount += triangleCounts[r]; + } + } + } + + public virtual void Setup() + { + pathSmootherSystem = m_Solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + if (pathSmootherSystem == null) + return; + + using (m_SetupRenderMarker.Auto()) + { + Clear(); + + CreateBatches(); + + ObiUtils.MergeBatches(batchList); + + CalculateMeshOffsets(); + } + } + + public abstract void RenderFromCamera(Camera camera); + + public abstract void Render(); + + public void Step() + { + } + } +} + + diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs.meta new file mode 100644 index 000000000..1a6ddf1bf --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: feb78fd6bed7a49979dee4205d74deaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs new file mode 100644 index 000000000..1f0e8ff9a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs @@ -0,0 +1,296 @@ + +using System.Runtime.InteropServices; +using UnityEngine; + +using Unity.Profiling; +using UnityEngine.Rendering; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct BurstMeshData + { + public uint axis; + public float volumeScaling; + public uint stretchWithRope; + public uint spanEntireLength; + + public uint instances; + public float instanceSpacing; + public float offset; + public float meshSizeAlongAxis; + + public Vector4 scale; + + public BurstMeshData(ObiRopeMeshRenderer renderer) + { + axis = (uint)renderer.axis; + volumeScaling = renderer.volumeScaling; + stretchWithRope = (uint)(renderer.stretchWithRope ? 1 : 0); + spanEntireLength = (uint)(renderer.spanEntireLength ? 1 : 0); + instances = renderer.instances; + instanceSpacing = renderer.instanceSpacing; + offset = renderer.offset; + meshSizeAlongAxis = renderer.sourceMesh != null ? renderer.sourceMesh.bounds.size[(int)renderer.axis] : 0; + scale = renderer.scale; + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct RopeMeshVertex + { + public Vector3 pos; + public Vector3 normal; + public Vector4 tangent; + public Vector4 color; + } + + public abstract class ObiMeshRopeRenderSystem : RenderSystem + { + public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.MeshRope; } + + public RendererSet renderers { get; } = new RendererSet(); + protected List sortedRenderers = new List(); /**< temp list used to store renderers sorted by batch.*/ + + static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupMeshRopeRendering"); + static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("MeshRopeRendering"); + + // specify vertex count and layout + protected VertexAttributeDescriptor[] layout = + { + new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3,0), + new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3,0), + new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.Float32, 4,0), + new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4,0), + new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2,1), + new VertexAttributeDescriptor(VertexAttribute.TexCoord1, VertexAttributeFormat.Float32, 2,1), + new VertexAttributeDescriptor(VertexAttribute.TexCoord2, VertexAttributeFormat.Float32, 2,1), + new VertexAttributeDescriptor(VertexAttribute.TexCoord3, VertexAttributeFormat.Float32, 2,1), + }; + + protected ObiSolver m_Solver; + protected List> batchList = new List>(); + + + protected MeshDataBatch meshData; + protected ObiNativeList meshIndices; // for each renderer, its mesh index. + + protected ObiNativeList pathSmootherIndices; /**< for each renderer, index of its path smoother in the path smoother system.*/ + protected ObiNativeList rendererData; + + protected ObiNativeList sortedIndices; /**< axis-sorted vertex indices. */ + protected ObiNativeList sortedOffsets; /**< for each renderer, offset in the sortedIndices array.*/ + + protected ObiNativeList vertexOffsets; /**< for each renderer, vertex offset in its batch mesh data.*/ + protected ObiNativeList vertexCounts; /**< for each renderer, vertex count.*/ + + protected ObiPathSmootherRenderSystem pathSmootherSystem; + + public ObiMeshRopeRenderSystem(ObiSolver solver) + { + m_Solver = solver; + + meshData = new MeshDataBatch(); + meshIndices = new ObiNativeList(); + + pathSmootherIndices = new ObiNativeList(); + rendererData = new ObiNativeList(); + + sortedIndices = new ObiNativeList(); + sortedOffsets = new ObiNativeList(); + + vertexOffsets = new ObiNativeList(); + vertexCounts = new ObiNativeList(); + } + + public void Dispose() + { + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + + meshData.Dispose(); + + if (pathSmootherIndices != null) + pathSmootherIndices.Dispose(); + if (meshIndices != null) + meshIndices.Dispose(); + + if (sortedIndices != null) + sortedIndices.Dispose(); + if (sortedOffsets != null) + sortedOffsets.Dispose(); + + if (vertexOffsets != null) + vertexOffsets.Dispose(); + if (vertexCounts != null) + vertexCounts.Dispose(); + + if (rendererData != null) + rendererData.Dispose(); + } + + private void Clear() + { + meshData.Clear(); + meshIndices.Clear(); + + pathSmootherIndices.Clear(); + rendererData.Clear(); + + vertexOffsets.Clear(); + vertexCounts.Clear(); + + sortedIndices.Clear(); + sortedOffsets.Clear(); + + for (int i = 0; i < batchList.Count; ++i) + batchList[i].Dispose(); + batchList.Clear(); + + meshData.InitializeStaticData(); + meshData.InitializeTempData(); + } + + private void CreateBatches() + { + // generate batches: + sortedRenderers.Clear(); + for (int i = 0; i < renderers.Count; ++i) + { + if (renderers[i].sourceMesh != null && renderers[i].TryGetComponent(out ObiPathSmoother smoother) && smoother.enabled) + { + int vertexCount = renderers[i].vertexCount * (int)renderers[i].meshInstances; + renderers[i].renderParameters.layer = renderers[i].gameObject.layer; + batchList.Add(new DynamicRenderBatch(i, vertexCount, renderers[i].materials, renderers[i].renderParameters)); + sortedRenderers.Add(renderers[i]); + } + } + + vertexOffsets.ResizeUninitialized(sortedRenderers.Count); + + // sort batches: + batchList.Sort(); + + // reorder renderers based on sorted batches: + sortedRenderers.Clear(); + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + // store amount of vertices in this batch, prior to merging: + vertexCounts.Add(batch.vertexCount); + + // write renderers in the order dictated by the sorted batch: + sortedRenderers.Add(renderers[batch.firstRenderer]); + batch.firstRenderer = i; + + pathSmootherIndices.Add(sortedRenderers[i].GetComponent().indexInSystem); + + rendererData.Add(new BurstMeshData(sortedRenderers[i])); + } + } + + protected virtual void PopulateBatches() + { + List verts = new List(); + + // store per-mesh data + for (int i = 0; i < sortedRenderers.Count; ++i) + { + // sort vertices along curve axis: + sortedRenderers[i].GetVertices(verts); + float[] keys = new float[sortedRenderers[i].vertexCount]; + var orderedVertices = new int[sortedRenderers[i].vertexCount]; + + for (int j = 0; j < keys.Length; ++j) + { + keys[j] = verts[j][(int)sortedRenderers[i].axis]; + orderedVertices[j] = j; + } + + Array.Sort(keys, orderedVertices); + + sortedOffsets.Add(sortedIndices.count); + sortedIndices.AddRange(orderedVertices); + + // add mesh index + meshIndices.Add(meshData.AddMesh(sortedRenderers[i])); + } + } + + private void CalculateMeshOffsets() + { + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + + int vtxCount = 0; + + // Calculate vertex and triangle offsets for each renderer in the batch: + for (int j = 0; j < batch.rendererCount; ++j) + { + int r = batch.firstRenderer + j; + + vertexOffsets[r] = vtxCount; + vtxCount += vertexCounts[r]; + } + } + } + + protected virtual void CloseBatches() + { + meshData.DisposeOfStaticData(); + meshData.DisposeOfTempData(); + } + + public void Setup() + { + pathSmootherSystem = m_Solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + if (pathSmootherSystem == null) + return; + + using (m_SetupRenderMarker.Auto()) + { + Clear(); + + CreateBatches(); + + PopulateBatches(); + + ObiUtils.MergeBatches(batchList); + + CalculateMeshOffsets(); + + CloseBatches(); + } + } + + public void Step() + { + } + + public virtual void Render() + { + } + + public void BakeMesh(ObiRopeMeshRenderer renderer, ref Mesh mesh, bool transformToActorLocalSpace = false) + { + int index = sortedRenderers.IndexOf(renderer); + + for (int i = 0; i < batchList.Count; ++i) + { + var batch = batchList[i]; + if (index >= batch.firstRenderer && index < batch.firstRenderer + batch.rendererCount) + { + batch.BakeMesh(sortedRenderers, renderer, ref mesh, transformToActorLocalSpace); + return; + } + } + } + } +} + + diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs.meta new file mode 100644 index 000000000..f739eb97a --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad311e324f23a480d867e8e9b7f89cfe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs new file mode 100644 index 000000000..e6ad64565 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs @@ -0,0 +1,325 @@ +using System.Runtime.InteropServices; +using UnityEngine; +using Unity.Profiling; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct BurstPathSmootherData + { + public uint smoothing; + public float decimation; + public float twist; + public float restLength; + public float smoothLength; + public uint usesOrientedParticles; + + public BurstPathSmootherData(ObiRopeBase rope, ObiPathSmoother smoother) + { + smoothing = smoother.smoothing; + decimation = smoother.decimation; + twist = smoother.twist; + usesOrientedParticles = (uint)(rope.usesOrientedParticles ? 1 : 0); + restLength = rope.restLength; + smoothLength = 0; + } + } + + public abstract class ObiPathSmootherRenderSystem : RenderSystem + { + public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.AllSmoothedRopes; } + + public RendererSet renderers { get; } = new RendererSet(); + + static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupSmoothPathRendering"); + static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("SmoothPathRendering"); + + protected ObiSolver m_Solver; + + public ObiNativeList particleIndices; + public ObiNativeList chunkOffsets; /**< for each actor, index of the first chunk */ + + public ObiNativeList pathData; /**< for each chunk, smoother params/data.*/ + + public ObiNativeList rawFrames; + public ObiNativeList rawFrameOffsets; /**< index of the first frame for each chunk.*/ + public ObiNativeList decimatedFrameCounts; /**< amount of frames in each chunk, after decimation.*/ + + public ObiNativeList smoothFrames; + public ObiNativeList smoothFrameOffsets; /**< index of the first frame for each chunk.*/ + public ObiNativeList smoothFrameCounts; /**< amount of smooth frames for each chunk.*/ + + // path smoothing must be done before all other rope render systems, which are on a higher tier. + public uint tier + { + get { return 0; } + } + + public ObiPathSmootherRenderSystem(ObiSolver solver) + { + m_Solver = solver; + + pathData = new ObiNativeList(); + particleIndices = new ObiNativeList(); + chunkOffsets = new ObiNativeList(); + + rawFrames = new ObiNativeList(); + rawFrameOffsets = new ObiNativeList(); + + decimatedFrameCounts = new ObiNativeList(); + + smoothFrames = new ObiNativeList(); + smoothFrameOffsets = new ObiNativeList(); + smoothFrameCounts = new ObiNativeList(); + } + + public void Dispose() + { + if (particleIndices != null) + particleIndices.Dispose(); + if (chunkOffsets != null) + chunkOffsets.Dispose(); + + if (pathData != null) + pathData.Dispose(); + + if (rawFrames != null) + rawFrames.Dispose(); + if (rawFrameOffsets != null) + rawFrameOffsets.Dispose(); + if (decimatedFrameCounts != null) + decimatedFrameCounts.Dispose(); + + if (smoothFrames != null) + smoothFrames.Dispose(); + if (smoothFrameOffsets != null) + smoothFrameOffsets.Dispose(); + if (smoothFrameCounts != null) + smoothFrameCounts.Dispose(); + } + + private void Clear() + { + pathData.Clear(); + particleIndices.Clear(); + chunkOffsets.Clear(); + + rawFrames.Clear(); + rawFrameOffsets.Clear(); + decimatedFrameCounts.Clear(); + + smoothFrames.Clear(); + smoothFrameOffsets.Clear(); + smoothFrameCounts.Clear(); + } + + private int GetChaikinCount(int initialPoints, uint recursionLevel) + { + if (recursionLevel <= 0 || initialPoints < 3) + return initialPoints; + + // calculate amount of new points generated by each inner control point: + int pCount = (int)Mathf.Pow(2, recursionLevel); + return (initialPoints - 2) * pCount + 2; + } + + public virtual void Setup() + { + using (m_SetupRenderMarker.Auto()) + { + Clear(); + + int actorCount = 0; + int chunkCount = 0; + int rawFrameCount = 0; + + for (int i = 0; i < renderers.Count; ++i) + { + var renderer = renderers[i]; + + var rope = renderer.actor as ObiRopeBase; + var data = new BurstPathSmootherData(rope, renderer); + + chunkOffsets.Add(chunkCount); + + // iterate trough elements, finding discontinuities as we go: + for (int e = 0; e < rope.elements.Count; ++e) + { + rawFrameCount++; + particleIndices.Add(rope.elements[e].particle1); + + // At discontinuities, start a new chunk. + if (e < rope.elements.Count - 1 && rope.elements[e].particle2 != rope.elements[e + 1].particle1) + { + rawFrameOffsets.Add(++rawFrameCount); + particleIndices.Add(rope.elements[e].particle2); + pathData.Add(data); + chunkCount++; + } + } + + chunkCount++; + rawFrameOffsets.Add(++rawFrameCount); + particleIndices.Add(rope.elements[rope.elements.Count - 1].particle2); + pathData.Add(data); + + // store the index in this system, so that other render systems + // in higher tiers can easily access smooth path data: + renderer.indexInSystem = actorCount++; + } + + // Add last entry (total amount of chunks): + chunkOffsets.Add(chunkCount); + + // resize storage: + rawFrames.ResizeUninitialized(rawFrameCount); + decimatedFrameCounts.ResizeUninitialized(rawFrameOffsets.count); + smoothFrameOffsets.ResizeUninitialized(rawFrameOffsets.count); + smoothFrameCounts.ResizeUninitialized(rawFrameOffsets.count); + + // calculate smooth chunk counts: + int smoothFrameCount = 0; + for (int i = 0; i < rawFrameOffsets.count; ++i) + { + int frameCount = rawFrameOffsets[i] - (i > 0 ? rawFrameOffsets[i - 1] : 0); + + int smoothCount = GetChaikinCount(frameCount, pathData[i].smoothing); + + smoothFrameOffsets[i] = smoothFrameCount; + smoothFrameCounts[i] = smoothCount; + smoothFrameCount += smoothCount; + } + + smoothFrames.ResizeUninitialized(smoothFrameCount); + } + } + + public int GetChunkCount(int rendererIndex) + { + rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); + + if (rendererIndex >= chunkOffsets.count) + return 0; + + return chunkOffsets[rendererIndex + 1] - chunkOffsets[rendererIndex]; + } + + + public int GetSmoothFrameCount(int rendererIndex) + { + rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); + + int frameCount = 0; + + if (rendererIndex >= chunkOffsets.count) + return frameCount; + + for (int i = chunkOffsets[rendererIndex]; i < chunkOffsets[rendererIndex + 1]; ++i) + frameCount += smoothFrameCounts[i]; + + return frameCount; + } + + public int GetSmoothFrameCount(int rendererIndex, int chunkIndex) + { + rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); + + if (rendererIndex >= chunkOffsets.count) + return 0; + + int chunkCount = chunkOffsets[rendererIndex + 1] - chunkOffsets[rendererIndex]; + int chunk = chunkOffsets[rendererIndex] + Mathf.Clamp(chunkIndex, 0, chunkCount); + + return smoothFrameCounts[chunk]; + } + + public float GetSmoothLength(int rendererIndex) + { + rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); + + float smoothLength = 0; + + if (rendererIndex >= chunkOffsets.count) + return smoothLength; + + for (int i = chunkOffsets[rendererIndex]; i < chunkOffsets[rendererIndex + 1]; ++i) + smoothLength += pathData[i].smoothLength; + + return smoothLength; + } + + public ObiPathFrame GetFrameAt(int rendererIndex, int chunkIndex, int frameIndex) + { + rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); + + if (rendererIndex >= chunkOffsets.count) + return ObiPathFrame.Identity; + + int chunkCount = chunkOffsets[rendererIndex + 1] - chunkOffsets[rendererIndex]; + int chunk = chunkOffsets[rendererIndex] + Mathf.Clamp(chunkIndex, 0, chunkCount); + + return smoothFrames[smoothFrameOffsets[chunk] + Mathf.Clamp(frameIndex, 0, smoothFrameCounts[chunk])]; + } + + public ObiPathFrame GetFrameAt(int rendererIndex, float mu) + { + rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); + + if (rendererIndex >= chunkOffsets.count) + return ObiPathFrame.Identity; + + float length = 0; + for (int i = chunkOffsets[rendererIndex]; i < chunkOffsets[rendererIndex + 1]; ++i) + length += pathData[i].smoothLength; + + length *= mu; + + // iterate trough all chunks: + float lerp = 0; + int frame = 0; + for (int i = chunkOffsets[rendererIndex]; i < chunkOffsets[rendererIndex + 1]; ++i) + { + int firstFrame = smoothFrameOffsets[i]; + int frameCount = smoothFrameCounts[i]; + + // iterate trough all frames in this chunk, accumulating distance: + for (int j = firstFrame + 1; j < firstFrame + frameCount; ++j) + { + float frameDistance = Vector3.Distance(smoothFrames[j - 1].position, + smoothFrames[j].position); + + lerp = length / frameDistance; + length -= frameDistance; + frame = j; + + if (length <= 0) + return (1 - lerp) * smoothFrames[j - 1] + lerp * smoothFrames[j]; + } + } + + // if no chunks/no frames, return default frame. + return (1 - lerp) * smoothFrames[frame - 1] + lerp * smoothFrames[frame]; + } + + public void Step() + { + } + + public virtual void Render() + { + // Update rest lengths, in case they've changed due to cursors: + for (int i = 0; i < renderers.Count; ++i) + { + var rope = renderers[i].actor as ObiRopeBase; + + for (int j = chunkOffsets[i]; j < chunkOffsets[i + 1]; ++j) + { + var data = pathData[j]; + data.restLength = rope.restLength; + pathData[j] = data; + } + } + } + } +} + diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs.meta b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs.meta new file mode 100644 index 000000000..3fb94beb0 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fab1fee6e450d4e28a7a2770af3c94d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs index 7bbb1a5ae..361d445ce 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs @@ -7,163 +7,71 @@ namespace Obi { [AddComponentMenu("Physics/Obi/Obi Rope Chain Renderer", 885)] [ExecuteInEditMode] - public class ObiRopeChainRenderer : MonoBehaviour + public class ObiRopeChainRenderer : MonoBehaviour, ObiActorRenderer { - static ProfilerMarker m_UpdateChainRopeRendererChunksPerfMarker = new ProfilerMarker("UpdateChainRopeRenderer"); + [Serializable] + public struct LinkModifier + { + public Vector3 translation; + public Vector3 scale; + public Vector3 rotation; - [HideInInspector] [SerializeField] public List linkInstances = new List(); - - [SerializeProperty("RandomizeLinks")] - [SerializeField] private bool randomizeLinks = false; + public void Clear() + { + translation = Vector3.zero; + scale = Vector3.one; + rotation = Vector3.zero; + } + } + public Mesh linkMesh; + public Material linkMaterial; public Vector3 linkScale = Vector3.one; /**< Scale of chain links.*/ - public List linkPrefabs = new List(); [Range(0, 1)] public float twistAnchor = 0; /**< Normalized position of twisting origin along rope.*/ + public float linkTwist = 0; /**< Amount of twist applied to each section, in degrees.*/ - public float sectionTwist = 0; /**< Amount of twist applied to each section, in degrees.*/ + public List linkModifiers = new List(); - ObiPathFrame frame = new ObiPathFrame(); + public RenderBatchParams renderParameters = new RenderBatchParams(true); + + public ObiActor actor { get; private set; } void Awake() { - ClearChainLinkInstances(); + actor = GetComponent(); } - public bool RandomizeLinks + public void OnEnable() { - get { return randomizeLinks; } - set - { - if (value != randomizeLinks) - { - randomizeLinks = value; - CreateChainLinkInstances(GetComponent()); - } - } + ((ObiActorRenderer)this).EnableRenderer(); } - void OnEnable() + public void OnDisable() { - GetComponent().OnInterpolate += UpdateRenderer; + ((ObiActorRenderer)this).DisableRenderer(); } - void OnDisable() + public void OnValidate() { - GetComponent().OnInterpolate -= UpdateRenderer; - ClearChainLinkInstances(); + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.ChainRope); } - /** - * Destroys all chain link instances. Used when the chain must be re-created from scratch, and when the actor is disabled/destroyed. - */ - public void ClearChainLinkInstances() + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) { - - if (linkInstances == null) - return; - - for (int i = 0; i < linkInstances.Count; ++i) - { - if (linkInstances[i] != null) - GameObject.DestroyImmediate(linkInstances[i]); - } - linkInstances.Clear(); - } - - public void CreateChainLinkInstances(ObiRopeBase rope) - { - - ClearChainLinkInstances(); - - if (linkPrefabs.Count > 0) + switch (solver.backendType) { - for (int i = 0; i < rope.particleCount; ++i) - { +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstChainRopeRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: - int index = randomizeLinks ? UnityEngine.Random.Range(0, linkPrefabs.Count) : i % linkPrefabs.Count; - - GameObject linkInstance = null; - - if (linkPrefabs[index] != null) - { - linkInstance = GameObject.Instantiate(linkPrefabs[index]); - linkInstance.transform.SetParent(rope.transform, false); - linkInstance.hideFlags = HideFlags.HideAndDontSave; - linkInstance.SetActive(false); - } - - linkInstances.Add(linkInstance); - } - } - } - - public void UpdateRenderer(ObiActor actor) - { - using (m_UpdateChainRopeRendererChunksPerfMarker.Auto()) - { - var rope = actor as ObiRopeBase; - - // In case there are no link prefabs to instantiate: - if (linkPrefabs.Count == 0) - return; - - // Regenerate instances if needed: - if (linkInstances == null || linkInstances.Count < rope.particleCount) - { - CreateChainLinkInstances(rope); - } - - var blueprint = rope.sourceBlueprint; - int elementCount = rope.elements.Count; - - float twist = -sectionTwist * elementCount * twistAnchor; - - //we will define and transport a reference frame along the curve using parallel transport method: - frame.Reset(); - frame.SetTwist(twist); - - int lastParticle = -1; - - for (int i = 0; i < elementCount; ++i) - { - ObiStructuralElement elm = rope.elements[i]; - - Vector3 pos = rope.GetParticlePosition(elm.particle1); - Vector3 nextPos = rope.GetParticlePosition(elm.particle2); - Vector3 linkVector = nextPos - pos; - Vector3 tangent = linkVector.normalized; - - if (rope.sourceBlueprint.usesOrientedParticles) - { - frame.Transport(nextPos, tangent, rope.GetParticleOrientation(elm.particle1) * Vector3.up, twist); - twist += sectionTwist; - } - else - { - frame.Transport(nextPos, tangent, sectionTwist); - } - - if (linkInstances[i] != null) - { - linkInstances[i].SetActive(true); - Transform linkTransform = linkInstances[i].transform; - linkTransform.position = pos + linkVector * 0.5f; - linkTransform.localScale = rope.GetParticleMaxRadius(elm.particle1) * 2 * linkScale; - linkTransform.rotation = Quaternion.LookRotation(tangent, frame.normal); - } - - lastParticle = elm.particle2; - - } - - for (int i = elementCount; i < linkInstances.Count; ++i) - { - if (linkInstances[i] != null) - linkInstances[i].SetActive(false); - } + if (SystemInfo.supportsComputeShaders) + return new ComputeChainRopeRenderSystem(solver); + return null; } } } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs index 02b526b6a..bac5b6877 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs @@ -7,23 +7,14 @@ namespace Obi { [AddComponentMenu("Physics/Obi/Obi Rope Extruded Renderer", 883)] [ExecuteInEditMode] - [RequireComponent(typeof(MeshRenderer))] - [RequireComponent(typeof(MeshFilter))] [RequireComponent(typeof(ObiPathSmoother))] - public class ObiRopeExtrudedRenderer : MonoBehaviour + public class ObiRopeExtrudedRenderer : MonoBehaviour, ObiActorRenderer { - static ProfilerMarker m_UpdateExtrudedRopeRendererChunksPerfMarker = new ProfilerMarker("UpdateExtrudedRopeRenderer"); + public ObiPathSmoother smoother { get; private set; } // Each renderer should have its own smoother. The renderer then has a method to get position and orientation at a point. - private List vertices = new List(); - private List normals = new List(); - private List tangents = new List(); - private List uvs = new List(); - private List vertColors = new List(); - private List tris = new List(); + public Material material; - ObiPathSmoother smoother; // Each renderer should have its own smoother. The renderer then has a method to get position and orientation at a point. - - [HideInInspector] [NonSerialized] public Mesh extrudedMesh; + public RenderBatchParams renderParameters = new RenderBatchParams(true); [Range(0, 1)] public float uvAnchor = 0; /**< Normalized position of texture coordinate origin along rope.*/ @@ -36,140 +27,47 @@ namespace Obi public float thicknessScale = 0.8f; /**< Scales section thickness.*/ - void OnEnable() + public ObiActor actor { get; private set; } + + public void Awake() + { + actor = GetComponent(); + } + + public void OnEnable() { smoother = GetComponent(); - smoother.OnCurveGenerated += UpdateRenderer; - CreateMeshIfNeeded(); + ((ObiActorRenderer)this).EnableRenderer(); + } - void OnDisable() + public void OnDisable() { - smoother.OnCurveGenerated -= UpdateRenderer; - GameObject.DestroyImmediate(extrudedMesh); + ((ObiActorRenderer)this).DisableRenderer(); } - private void CreateMeshIfNeeded() + public void OnValidate() { - if (extrudedMesh == null) + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.AllSmoothedRopes); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) { - extrudedMesh = new Mesh(); - extrudedMesh.name = "extrudedMesh"; - extrudedMesh.MarkDynamic(); - GetComponent().mesh = extrudedMesh; + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstExtrudedRopeRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: + + if (SystemInfo.supportsComputeShaders) + return new ComputeExtrudedRopeRenderSystem(solver); + return null; } } - public void UpdateRenderer(ObiActor actor) - { - using (m_UpdateExtrudedRopeRendererChunksPerfMarker.Auto()) - { - if (section == null) - return; - - var rope = actor as ObiRopeBase; - - CreateMeshIfNeeded(); - ClearMeshData(); - - int sectionIndex = 0; - int sectionSegments = section.Segments; - int verticesPerSection = sectionSegments + 1; // the last vertex in each section must be duplicated, due to uv wraparound. - float vCoord = -uvScale.y * rope.restLength * uvAnchor; // v texture coordinate. - float actualToRestLengthRatio = smoother.SmoothLength / rope.restLength; - - Vector3 vertex = Vector3.zero, normal = Vector3.zero; - Vector4 texTangent = Vector4.zero; - Vector2 uv = Vector2.zero; - - for (int c = 0; c < smoother.smoothChunks.Count; ++c) - { - ObiList curve = smoother.smoothChunks[c]; - - for (int i = 0; i < curve.Count; ++i) - { - // Calculate previous and next curve indices: - int prevIndex = Mathf.Max(i - 1, 0); - - // advance v texcoord: - vCoord += uvScale.y * (Vector3.Distance(curve.Data[i].position, curve.Data[prevIndex].position) / - (normalizeV ? smoother.SmoothLength : actualToRestLengthRatio)); - - // calculate section thickness and scale the basis vectors by it: - float sectionThickness = curve.Data[i].thickness * thicknessScale; - - // Loop around each segment: - int nextSectionIndex = sectionIndex + 1; - for (int j = 0; j <= sectionSegments; ++j) - { - // make just one copy of the section vertex: - Vector2 sectionVertex = section.vertices[j]; - - // calculate normal using section vertex, curve normal and binormal: - normal.x = (sectionVertex.x * curve.Data[i].normal.x + sectionVertex.y * curve.Data[i].binormal.x) * sectionThickness; - normal.y = (sectionVertex.x * curve.Data[i].normal.y + sectionVertex.y * curve.Data[i].binormal.y) * sectionThickness; - normal.z = (sectionVertex.x * curve.Data[i].normal.z + sectionVertex.y * curve.Data[i].binormal.z) * sectionThickness; - - // offset curve position by normal: - vertex.x = curve.Data[i].position.x + normal.x; - vertex.y = curve.Data[i].position.y + normal.y; - vertex.z = curve.Data[i].position.z + normal.z; - - // cross(normal, curve tangent) - texTangent.x = normal.y * curve.Data[i].tangent.z - normal.z * curve.Data[i].tangent.y; - texTangent.y = normal.z * curve.Data[i].tangent.x - normal.x * curve.Data[i].tangent.z; - texTangent.z = normal.x * curve.Data[i].tangent.y - normal.y * curve.Data[i].tangent.x; - texTangent.w = -1; - - uv.x = (j / (float)sectionSegments) * uvScale.x; - uv.y = vCoord; - - vertices.Add(vertex); - normals.Add(normal); - tangents.Add(texTangent); - vertColors.Add(curve.Data[i].color); - uvs.Add(uv); - - if (j < sectionSegments && i < curve.Count - 1) - { - tris.Add(sectionIndex * verticesPerSection + j); - tris.Add(nextSectionIndex * verticesPerSection + j); - tris.Add(sectionIndex * verticesPerSection + (j + 1)); - - tris.Add(sectionIndex * verticesPerSection + (j + 1)); - tris.Add(nextSectionIndex * verticesPerSection + j); - tris.Add(nextSectionIndex * verticesPerSection + (j + 1)); - } - } - sectionIndex++; - } - - } - - CommitMeshData(); - } - } - - private void ClearMeshData() - { - extrudedMesh.Clear(); - vertices.Clear(); - normals.Clear(); - tangents.Clear(); - uvs.Clear(); - vertColors.Clear(); - tris.Clear(); - } - - private void CommitMeshData() - { - extrudedMesh.SetVertices(vertices); - extrudedMesh.SetNormals(normals); - extrudedMesh.SetTangents(tangents); - extrudedMesh.SetColors(vertColors); - extrudedMesh.SetUVs(0, uvs); - extrudedMesh.SetTriangles(tris, 0, true); - } } } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs index e340a7b9d..83a537ee9 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs @@ -8,28 +8,14 @@ namespace Obi { [AddComponentMenu("Physics/Obi/Obi Rope Line Renderer", 884)] [ExecuteInEditMode] - [RequireComponent(typeof(MeshRenderer))] - [RequireComponent(typeof(MeshFilter))] - [RequireComponent(typeof(ObiPathSmoother))] - public class ObiRopeLineRenderer : MonoBehaviour + [RequireComponent(typeof(ObiPathSmoother))] + public class ObiRopeLineRenderer : MonoBehaviour, ObiActorRenderer { - static ProfilerMarker m_UpdateLineRopeRendererChunksPerfMarker = new ProfilerMarker("UpdateLineRopeRenderer"); + public ObiActor actor { get; private set; } - private List vertices = new List(); - private List normals = new List(); - private List tangents = new List(); - private List uvs = new List(); - private List vertColors = new List(); - private List tris = new List(); + public Material material; - ObiRopeBase rope; - ObiPathSmoother smoother; - -#if (UNITY_2019_1_OR_NEWER) - System.Action renderCallback; -#endif - - [HideInInspector] [NonSerialized] public Mesh lineMesh; + public RenderBatchParams renderParams = new RenderBatchParams(true); [Range(0, 1)] public float uvAnchor = 0; /**< Normalized position of texture coordinate origin along rope.*/ @@ -40,159 +26,42 @@ namespace Obi public float thicknessScale = 0.8f; /**< Scales section thickness.*/ + public void Awake() + { + actor = GetComponent(); + } + void OnEnable() { - - CreateMeshIfNeeded(); - -#if (UNITY_2019_1_OR_NEWER) - renderCallback = new System.Action((cntxt, cam) => { UpdateRenderer(cam); }); - RenderPipelineManager.beginCameraRendering += renderCallback; -#endif - Camera.onPreCull += UpdateRenderer; - - rope = GetComponent(); - smoother = GetComponent(); + ((ObiActorRenderer)this).EnableRenderer(); } void OnDisable() { + ((ObiActorRenderer)this).DisableRenderer(); + } -#if (UNITY_2019_1_OR_NEWER) - RenderPipelineManager.beginCameraRendering -= renderCallback; + public void OnValidate() + { + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.LineRope); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) + { + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstLineRopeRenderSystem(solver); #endif - Camera.onPreCull -= UpdateRenderer; + case ObiSolver.BackendType.Compute: + default: - GameObject.DestroyImmediate(lineMesh); - } - - private void CreateMeshIfNeeded() - { - if (lineMesh == null) - { - lineMesh = new Mesh(); - lineMesh.name = "extrudedMesh"; - lineMesh.MarkDynamic(); - GetComponent().mesh = lineMesh; + if (SystemInfo.supportsComputeShaders) + return new ComputeLineRopeRenderSystem(solver); + return null; } } - - public void UpdateRenderer(Camera camera) - { - using (m_UpdateLineRopeRendererChunksPerfMarker.Auto()) - { - - if (camera == null || !rope.gameObject.activeInHierarchy) - return; - - CreateMeshIfNeeded(); - ClearMeshData(); - - float actualToRestLengthRatio = smoother.SmoothLength / rope.restLength; - - float vCoord = -uvScale.y * rope.restLength * uvAnchor; // v texture coordinate. - int sectionIndex = 0; - - Vector3 localSpaceCamera = rope.transform.InverseTransformPoint(camera.transform.position); - Vector3 vertex = Vector3.zero, normal = Vector3.zero; - Vector4 bitangent = Vector4.zero; - Vector2 uv = Vector2.zero; - - for (int c = 0; c < smoother.smoothChunks.Count; ++c) - { - - ObiList curve = smoother.smoothChunks[c]; - - for (int i = 0; i < curve.Count; ++i) - { - - // Calculate previous and next curve indices: - int prevIndex = Mathf.Max(i - 1, 0); - - // advance v texcoord: - vCoord += uvScale.y * (Vector3.Distance(curve.Data[i].position, curve.Data[prevIndex].position) / - (normalizeV ? smoother.SmoothLength : actualToRestLengthRatio)); - - // calculate section thickness (either constant, or particle radius based): - float sectionThickness = curve.Data[i].thickness * thicknessScale; - - - normal.x = curve.Data[i].position.x - localSpaceCamera.x; - normal.y = curve.Data[i].position.y - localSpaceCamera.y; - normal.z = curve.Data[i].position.z - localSpaceCamera.z; - normal.Normalize(); - - bitangent.x = -(normal.y * curve.Data[i].tangent.z - normal.z * curve.Data[i].tangent.y); - bitangent.y = -(normal.z * curve.Data[i].tangent.x - normal.x * curve.Data[i].tangent.z); - bitangent.z = -(normal.x * curve.Data[i].tangent.y - normal.y * curve.Data[i].tangent.x); - bitangent.w = 0; - bitangent.Normalize(); - - vertex.x = curve.Data[i].position.x - bitangent.x * sectionThickness; - vertex.y = curve.Data[i].position.y - bitangent.y * sectionThickness; - vertex.z = curve.Data[i].position.z - bitangent.z * sectionThickness; - vertices.Add(vertex); - - vertex.x = curve.Data[i].position.x + bitangent.x * sectionThickness; - vertex.y = curve.Data[i].position.y + bitangent.y * sectionThickness; - vertex.z = curve.Data[i].position.z + bitangent.z * sectionThickness; - vertices.Add(vertex); - - normals.Add(-normal); - normals.Add(-normal); - - bitangent.w = 1; - tangents.Add(bitangent); - tangents.Add(bitangent); - - vertColors.Add(curve.Data[i].color); - vertColors.Add(curve.Data[i].color); - - uv.x = 0; uv.y = vCoord; - uvs.Add(uv); - uv.x = 1; - uvs.Add(uv); - - if (i < curve.Count - 1) - { - tris.Add(sectionIndex * 2); - tris.Add((sectionIndex + 1) * 2); - tris.Add(sectionIndex * 2 + 1); - - tris.Add(sectionIndex * 2 + 1); - tris.Add((sectionIndex + 1) * 2); - tris.Add((sectionIndex + 1) * 2 + 1); - } - - sectionIndex++; - } - - } - - CommitMeshData(); - } - } - - private void ClearMeshData() - { - lineMesh.Clear(); - vertices.Clear(); - normals.Clear(); - tangents.Clear(); - uvs.Clear(); - vertColors.Clear(); - tris.Clear(); - } - - private void CommitMeshData() - { - lineMesh.SetVertices(vertices); - lineMesh.SetNormals(normals); - lineMesh.SetTangents(tangents); - lineMesh.SetColors(vertColors); - lineMesh.SetUVs(0, uvs); - lineMesh.SetTriangles(tris, 0, true); - } } } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs index 32837e564..c18e3de74 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs @@ -1,259 +1,85 @@ -using System; using System.Collections.Generic; using UnityEngine; -using Unity.Profiling; namespace Obi { [AddComponentMenu("Physics/Obi/Obi Rope Mesh Renderer", 886)] [ExecuteInEditMode] - [RequireComponent(typeof(MeshRenderer))] - [RequireComponent(typeof(MeshFilter))] [RequireComponent(typeof(ObiPathSmoother))] - public class ObiRopeMeshRenderer : MonoBehaviour + public class ObiRopeMeshRenderer : MonoBehaviour, ObiActorRenderer, IMeshDataProvider { - static ProfilerMarker m_UpdateMeshRopeRendererChunksPerfMarker = new ProfilerMarker("UpdateMeshRopeRenderer"); + public Renderer sourceRenderer { get; protected set; } + public ObiActor actor { get; private set; } + public uint meshInstances { get {return instances;} } - [SerializeProperty("SourceMesh")] - [SerializeField] private Mesh mesh; + [field: SerializeField] + public Mesh sourceMesh { get; set; } - [SerializeProperty("SweepAxis")] - [SerializeField] private ObiPathFrame.Axis axis; + [field: SerializeField] + public Material[] materials { get; set; } + + public virtual int vertexCount { get { return sourceMesh ? sourceMesh.vertexCount : 0; } } + public virtual int triangleCount { get { return sourceMesh ? sourceMesh.triangles.Length / 3 : 0; } } + + public RenderBatchParams renderParameters = new RenderBatchParams(true); + + public ObiPathFrame.Axis axis; public float volumeScaling = 0; public bool stretchWithRope = true; public bool spanEntireLength = true; - [SerializeProperty("Instances")] - [SerializeField] private int instances = 1; - - [SerializeProperty("InstanceSpacing")] - [SerializeField] private float instanceSpacing = 1; + public uint instances = 1; + public float instanceSpacing = 0; public float offset = 0; public Vector3 scale = Vector3.one; - [HideInInspector] [SerializeField] private float meshSizeAlongAxis = 1; - - private Vector3[] inputVertices; - private Vector3[] inputNormals; - private Vector4[] inputTangents; - - private Vector3[] vertices; - private Vector3[] normals; - private Vector4[] tangents; - - private int[] orderedVertices = new int[0]; - - private ObiPathSmoother smoother; - - public Mesh SourceMesh + public void Awake() { - set { mesh = value; PreprocessInputMesh(); } - get { return mesh; } + actor = GetComponent(); + sourceRenderer = GetComponent(); } - public ObiPathFrame.Axis SweepAxis + public void OnEnable() { - set { axis = value; PreprocessInputMesh(); } - get { return axis; } + ((ObiActorRenderer)this).EnableRenderer(); } - public int Instances + public void OnDisable() { - set { instances = value; PreprocessInputMesh(); } - get { return instances; } + ((ObiActorRenderer)this).DisableRenderer(); } - public float InstanceSpacing + public void OnValidate() { - set { instanceSpacing = value; PreprocessInputMesh(); } - get { return instanceSpacing; } + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.MeshRope); } - [HideInInspector] [NonSerialized] public Mesh deformedMesh; - - void OnEnable() + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) { - smoother = GetComponent(); - smoother.OnCurveGenerated += UpdateRenderer; - PreprocessInputMesh(); - } - - void OnDisable() - { - smoother.OnCurveGenerated -= UpdateRenderer; - GameObject.DestroyImmediate(deformedMesh); - } - - private void PreprocessInputMesh() - { - - if (deformedMesh == null) - { - deformedMesh = new Mesh(); - deformedMesh.name = "deformedMesh"; - deformedMesh.MarkDynamic(); - GetComponent().mesh = deformedMesh; - } - - deformedMesh.Clear(); - - if (mesh == null) - { - orderedVertices = new int[0]; - return; - } - - // Clamp instance count to a positive value. - instances = Mathf.Max(0, instances); - - // combine all mesh instances into a single mesh: - Mesh combinedMesh = new Mesh(); - CombineInstance[] meshInstances = new CombineInstance[instances]; - Vector3 pos = Vector3.zero; - - // initial offset for the combined mesh is half the size of its bounding box in the swept axis: - pos[(int)axis] = mesh.bounds.extents[(int)axis]; - - for (int i = 0; i < instances; ++i) - { - meshInstances[i].mesh = mesh; - meshInstances[i].transform = Matrix4x4.TRS(pos, Quaternion.identity, Vector3.one); - pos[(int)axis] = mesh.bounds.extents[(int)axis] + (i + 1) * mesh.bounds.size[(int)axis] * instanceSpacing; - } - combinedMesh.CombineMeshes(meshInstances, true, true); - - // get combined mesh data: - inputVertices = combinedMesh.vertices; - inputNormals = combinedMesh.normals; - inputTangents = combinedMesh.tangents; - - // sort vertices along curve axis: - float[] keys = new float[inputVertices.Length]; - orderedVertices = new int[inputVertices.Length]; - - for (int i = 0; i < keys.Length; ++i) - { - keys[i] = inputVertices[i][(int)axis]; - orderedVertices[i] = i; - } - - Array.Sort(keys, orderedVertices); - - // Copy the combined mesh data to deform it: - deformedMesh.vertices = combinedMesh.vertices; - deformedMesh.normals = combinedMesh.normals; - deformedMesh.tangents = combinedMesh.tangents; - deformedMesh.uv = combinedMesh.uv; - deformedMesh.uv2 = combinedMesh.uv2; - deformedMesh.uv3 = combinedMesh.uv3; - deformedMesh.uv4 = combinedMesh.uv4; - deformedMesh.colors = combinedMesh.colors; - deformedMesh.triangles = combinedMesh.triangles; - - vertices = deformedMesh.vertices; - normals = deformedMesh.normals; - tangents = deformedMesh.tangents; - - // Calculate scale along swept axis so that the mesh spans the entire lenght of the rope if required. - meshSizeAlongAxis = combinedMesh.bounds.size[(int)axis]; - - // destroy combined mesh: - GameObject.DestroyImmediate(combinedMesh); - - } - - public void UpdateRenderer(ObiActor actor) - { - using (m_UpdateMeshRopeRendererChunksPerfMarker.Auto()) + switch (solver.backendType) { - if (mesh == null) - return; +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstMeshRopeRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: - if (smoother.smoothChunks.Count == 0) - return; - - ObiList curve = smoother.smoothChunks[0]; - - if (curve.Count < 2) - return; - - var rope = actor as ObiRopeBase; - - float actualToRestLengthRatio = stretchWithRope ? smoother.SmoothLength / rope.restLength : 1; - - // squashing factor, makes mesh thinner when stretched and thicker when compresssed. - float squashing = Mathf.Clamp(1 + volumeScaling * (1 / Mathf.Max(actualToRestLengthRatio, 0.01f) - 1), 0.01f, 2); - - // Calculate scale along swept axis so that the mesh spans the entire lenght of the rope if required. - Vector3 actualScale = scale; - if (spanEntireLength) - actualScale[(int)axis] = rope.restLength / meshSizeAlongAxis; - - float previousVertexValue = 0; - float meshLength = 0; - int index = 0; - int nextIndex = 1; - int prevIndex = 0; - float sectionMagnitude = Vector3.Distance(curve[index].position, curve[nextIndex].position); - - // basis matrix for deforming the mesh: - Matrix4x4 basis = curve[0].ToMatrix(axis); - - for (int i = 0; i < orderedVertices.Length; ++i) - { - - int vIndex = orderedVertices[i]; - float vertexValue = inputVertices[vIndex][(int)axis] * actualScale[(int)axis] + offset; - - // Calculate how much we've advanced in the sort axis since the last vertex: - meshLength += (vertexValue - previousVertexValue) * actualToRestLengthRatio; - previousVertexValue = vertexValue; - - // If we have advanced to the next section of the curve: - while (meshLength > sectionMagnitude && sectionMagnitude > Mathf.Epsilon) - { - - meshLength -= sectionMagnitude; - index = Mathf.Min(index + 1, curve.Count - 1); - - // Calculate previous and next curve indices: - nextIndex = Mathf.Min(index + 1, curve.Count - 1); - prevIndex = Mathf.Max(index - 1, 0); - - // Calculate current tangent as the vector between previous and next curve points: - sectionMagnitude = Vector3.Distance(curve[index].position, curve[nextIndex].position); - - // Update basis matrix: - basis = curve[index].ToMatrix(axis); - - } - - float sectionThickness = curve[index].thickness; - - // calculate deformed vertex position: - Vector3 offsetFromCurve = Vector3.Scale(inputVertices[vIndex], actualScale * sectionThickness * squashing); - offsetFromCurve[(int)axis] = meshLength; - - vertices[vIndex] = curve[index].position + basis.MultiplyVector(offsetFromCurve); - normals[vIndex] = basis.MultiplyVector(inputNormals[vIndex]); - tangents[vIndex] = basis * inputTangents[vIndex]; // avoids expensive implicit conversion from Vector4 to Vector3. - tangents[vIndex].w = inputTangents[vIndex].w; - } - - CommitMeshData(); + if (SystemInfo.supportsComputeShaders) + return new ComputeMeshRopeRenderSystem(solver); + return null; } } - private void CommitMeshData() - { - deformedMesh.vertices = vertices; - deformedMesh.normals = normals; - deformedMesh.tangents = tangents; - deformedMesh.RecalculateBounds(); - } + public virtual void GetVertices(List vertices) { sourceMesh.GetVertices(vertices); } + public virtual void GetNormals(List normals) { sourceMesh.GetNormals(normals); } + public virtual void GetTangents(List tangents) { sourceMesh.GetTangents(tangents); } + public virtual void GetColors(List colors) { sourceMesh.GetColors(colors); } + public virtual void GetUVs(int channel, List uvs) { sourceMesh.GetUVs(channel, uvs); } + + public virtual void GetTriangles(List triangles) { triangles.Clear(); triangles.AddRange(sourceMesh.triangles); } } } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs new file mode 100644 index 000000000..827462c95 --- /dev/null +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs @@ -0,0 +1,337 @@ +using System; using UnityEngine; namespace Obi { [AddComponentMenu("Physics/Obi/Obi Pinhole", 820)] [RequireComponent(typeof(ObiRopeBase))] [ExecuteInEditMode] public class ObiPinhole : MonoBehaviour { [SerializeField] [HideInInspector] private ObiRopeBase m_Rope; [SerializeField] [HideInInspector] private Transform m_Target; [Range(0, 1)] [SerializeField] [HideInInspector] private float m_Position = 0; + + [SerializeField] [HideInInspector] private bool m_LimitRange = false; [MinMax(0, 1)] [SerializeField] [HideInInspector] private Vector2 m_Range = new Vector2(0, 1); [Range(0, 1)] [SerializeField] [HideInInspector] private float m_Friction = 0; [SerializeField] [HideInInspector] private float m_MotorSpeed = 0; [SerializeField] [HideInInspector] private float m_MotorForce = 0; + [SerializeField] [HideInInspector] private float m_Compliance = 0; [SerializeField] [HideInInspector] private bool m_ClampAtEnds = true; + + [SerializeField] [HideInInspector] private ObiPinholeConstraintsBatch.PinholeEdge currentEdge; + [SerializeField] [HideInInspector] public ObiPinholeConstraintsBatch.PinholeEdge firstEdge; + [SerializeField] [HideInInspector] public ObiPinholeConstraintsBatch.PinholeEdge lastEdge; + + // private variables are serialized during script reloading, to keep their value. Must mark them explicitly as non-serialized. + [NonSerialized] private ObiPinholeConstraintsBatch pinBatch; [NonSerialized] private ObiColliderBase attachedCollider; [NonSerialized] private int attachedColliderHandleIndex; + + [NonSerialized] private Vector3 m_PositionOffset; + [NonSerialized] private bool m_ParametersDirty = true; + [NonSerialized] private bool m_PositionDirty = false; + [NonSerialized] private bool m_RangeDirty = false; + + /// /// The rope this attachment is added to. /// public ObiActor rope { get { return m_Rope; } } + + public float edgeCoordinate + { + get { return currentEdge.coordinate; } + } + + public int edgeIndex + { + get { return currentEdge.edgeIndex; } + } + + /// /// The target transform that the pinhole should be attached to. /// public Transform target { get { return m_Target; } set { if (value != m_Target) { m_Target = value; Bind(); } } } + + /// /// Normalized coordinate of the point along the rope where the pinhole is positioned. /// + public float position + { + get { return m_Position; } + set + { + if (!Mathf.Approximately(value, m_Position)) { m_Position = value; CalculateMu(); } + } + } + + public bool limitRange + { + get { return m_LimitRange; } + set + { if (m_LimitRange != value) + { + m_LimitRange = value; + CalculateRange(); + } } + } + + /// /// Normalized coordinate of the point along the rope where the pinhole is positioned. /// + public Vector2 range + { + get { return m_Range; } + set + { m_Range = value; CalculateRange(); } + } + + /// /// Whether this pinhole is currently bound or not. /// public bool isBound { get { return m_Target != null && currentEdge.edgeIndex >= 0; } } + + /// /// Constraint compliance. /// /// High compliance values will increase the pinhole's elasticity. public float compliance { get { return m_Compliance; } set { if (!Mathf.Approximately(value, m_Compliance)) { m_Compliance = value; m_ParametersDirty = true; } } } + + public float friction { get { return m_Friction; } set { if (!Mathf.Approximately(value, m_Friction)) { m_Friction = value; m_ParametersDirty = true; + } } } + + public float motorSpeed { get { return m_MotorSpeed; } set { if (!Mathf.Approximately(value, m_MotorSpeed)) { m_MotorSpeed = value; m_ParametersDirty = true; } } } + + public float motorForce { get { return m_MotorForce; } set { if (!Mathf.Approximately(value, m_MotorForce)) { m_MotorForce = value; m_ParametersDirty = true; } } } + + public bool clampAtEnds { get { return m_ClampAtEnds; } set { if (m_ClampAtEnds != value) { m_ClampAtEnds = value; m_ParametersDirty = true; } } } + + /// /// Force threshold above which the pinhole should break. /// [Delayed] public float breakThreshold = float.PositiveInfinity; public float relativeVelocity { get; private set; } private void OnEnable() { m_Rope = GetComponent(); m_Rope.OnBlueprintLoaded += Actor_OnBlueprintLoaded; m_Rope.OnSimulationStart += Actor_OnSimulationStart; m_Rope.OnRequestReadback += Actor_OnRequestReadback; if (m_Rope.solver != null) Actor_OnBlueprintLoaded(m_Rope, m_Rope.sourceBlueprint); EnablePinhole(); } + + private void OnDisable() { DisablePinhole(); m_Rope.OnBlueprintLoaded -= Actor_OnBlueprintLoaded; m_Rope.OnSimulationStart -= Actor_OnSimulationStart; m_Rope.OnRequestReadback -= Actor_OnRequestReadback; } private void OnValidate() { m_Rope = GetComponent(); + m_ParametersDirty = true; m_PositionDirty = true; m_RangeDirty = true; } private void Actor_OnBlueprintLoaded(ObiActor act, ObiActorBlueprint blueprint) { Bind(); } private void Actor_OnSimulationStart(ObiActor act, float stepTime, float substepTime) { + // Attachments must be updated at the start of the step, before performing any simulation. + UpdatePinhole(); + + // if there's any broken constraint, flag pinhole constraints as dirty for remerging at the start of the next step. + BreakPinhole(substepTime); } + + private void Actor_OnRequestReadback(ObiActor actor) + { + if (enabled && m_Rope.isLoaded && isBound) { + var solver = m_Rope.solver; + + var actorConstraints = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; + var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; + + if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) + { + int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); + if (pinBatchIndex >= 0 && pinBatchIndex < rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole].Count) + { + var solverBatch = solverConstraints.batches[pinBatchIndex]; + + solverBatch.particleIndices.Readback(); + solverBatch.edgeMus.Readback(); + solverBatch.relativeVelocities.Readback(); + } + } + } + } + + private void ClampMuToRange() + { + if (m_LimitRange) + { + float maxCoord = lastEdge.GetRopeCoordinate(m_Rope); + float minCoord = firstEdge.GetRopeCoordinate(m_Rope); + + if (m_Position > maxCoord) + { + m_Position = maxCoord; + currentEdge.edgeIndex = m_Rope.GetEdgeAt(m_Position, out currentEdge.coordinate); + m_PositionDirty = true; + } + else if (m_Position < minCoord) + { + m_Position = minCoord; + currentEdge.edgeIndex = m_Rope.GetEdgeAt(m_Position, out currentEdge.coordinate); + m_PositionDirty = true; + } + } + } + + public void CalculateMu() + { + currentEdge.edgeIndex = m_Rope.GetEdgeAt(m_Position, out currentEdge.coordinate); + ClampMuToRange(); + + m_PositionDirty = true; + } public void CalculateRange() + { + if (m_LimitRange) + { + firstEdge.edgeIndex = m_Rope.GetEdgeAt(m_Range.x, out firstEdge.coordinate); + lastEdge.edgeIndex = m_Rope.GetEdgeAt(m_Range.y, out lastEdge.coordinate); + } + else + { + firstEdge.edgeIndex = m_Rope.GetEdgeAt(0, out firstEdge.coordinate); + lastEdge.edgeIndex = m_Rope.GetEdgeAt(1, out lastEdge.coordinate); + firstEdge.coordinate = -float.MaxValue; + lastEdge.coordinate = float.MaxValue; + } + + ClampMuToRange(); + + m_RangeDirty = true; + } public void Bind() { + // Disable pinhole. + DisablePinhole(); if (m_Target != null && m_Rope.isLoaded) { Matrix4x4 bindMatrix = m_Target.worldToLocalMatrix * m_Rope.solver.transform.localToWorldMatrix; + + var ropeBlueprint = m_Rope.sharedBlueprint as ObiRopeBlueprintBase; + if (ropeBlueprint != null && ropeBlueprint.deformableEdges != null) + { + currentEdge.edgeIndex = m_Rope.GetEdgeAt(m_Position, out currentEdge.coordinate); + + if (currentEdge.edgeIndex >= 0) + { + CalculateRange(); + m_RangeDirty = false; + m_PositionDirty = false; + + int p1 = ropeBlueprint.deformableEdges[currentEdge.edgeIndex * 2]; + int p2 = ropeBlueprint.deformableEdges[currentEdge.edgeIndex * 2+1]; + Vector4 pos = Vector4.Lerp(m_Rope.solver.positions[m_Rope.solverIndices[p1]], m_Rope.solver.positions[m_Rope.solverIndices[p2]], currentEdge.coordinate); + m_PositionOffset = bindMatrix.MultiplyPoint3x4(pos); + } } } else { currentEdge.edgeIndex = -1; } // Re-enable pinhole. EnablePinhole(); } private void EnablePinhole() { if (enabled && m_Rope.isLoaded && isBound) { var pins = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiPinholeConstraintsData; + attachedCollider = m_Target.GetComponent(); + + if (pins != null && attachedCollider != null && pinBatch == null) + { + // create a new data batch with all our pin constraints: + pinBatch = new ObiPinholeConstraintsBatch(pins); + pinBatch.AddConstraint(currentEdge, + firstEdge, + lastEdge, + m_Rope, + attachedCollider, + m_PositionOffset, + m_Compliance, + m_Friction, + m_MotorSpeed, + m_MotorForce, + m_ClampAtEnds); + + pinBatch.activeConstraintCount++; + + // add the batch to the actor: + pins.AddBatch(pinBatch); + + // store the attached collider's handle: + attachedColliderHandleIndex = -1; + if (attachedCollider.Handle != null) + attachedColliderHandleIndex = attachedCollider.Handle.index; + + m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); + } } } private void DisablePinhole() { if (isBound) { if (pinBatch != null) + { + var pins = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; + if (pins != null) + { + pins.RemoveBatch(pinBatch); + if (rope.isLoaded) + m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); + } + + attachedCollider = null; + pinBatch = null; + attachedColliderHandleIndex = -1; + } } } private void UpdatePinhole() { if (enabled && m_Rope.isLoaded && isBound) { + UpdateEdgeCoordinate(); + UpdateParameters(); + + // in case the handle has been updated/invalidated (for instance, when disabling the target) rebuild constraints: + if (attachedCollider != null && + attachedCollider.Handle != null && + attachedCollider.Handle.index != attachedColliderHandleIndex) + { + attachedColliderHandleIndex = attachedCollider.Handle.index; + m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); + } } else if (!isBound && attachedColliderHandleIndex >= 0) + { + attachedColliderHandleIndex = -1; + m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); + } } + + private void UpdateParameters() + { + if (enabled && m_Rope.isLoaded && isBound && m_ParametersDirty) { + var solver = m_Rope.solver; + + var actorConstraints = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; + var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; + + if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) + { + int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); + if (pinBatchIndex >= 0 && pinBatchIndex < rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole].Count) + { + int offset = rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole][pinBatchIndex]; + var solverBatch = solverConstraints.batches[pinBatchIndex]; + + for (int i = 0; i < pinBatch.activeConstraintCount; i++) + { + solverBatch.parameters[(offset + i) * 5] = m_Compliance; + solverBatch.parameters[(offset + i) * 5+1] = m_Friction; + solverBatch.parameters[(offset + i) * 5+2] = m_MotorSpeed; + solverBatch.parameters[(offset + i) * 5+3] = m_MotorForce; + solverBatch.parameters[(offset + i) * 5+4] = m_ClampAtEnds ? 1 : 0; + } + solverBatch.parameters.Upload(); + + m_ParametersDirty = false; + } + } + } + } private void UpdateEdgeCoordinate() + { + if (enabled && m_Rope.isLoaded && isBound) { + var solver = m_Rope.solver; + + var actorConstraints = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; + var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; + + if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) + { + int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); + if (pinBatchIndex >= 0 && pinBatchIndex < rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole].Count) + { + int offset = rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole][pinBatchIndex]; + var solverBatch = solverConstraints.batches[pinBatchIndex]; + + solverBatch.particleIndices.WaitForReadback(); + solverBatch.edgeMus.WaitForReadback(); + solverBatch.relativeVelocities.WaitForReadback(); + + if (m_RangeDirty) + { + // update edge index and coordinate, then upload them. + for (int i = 0; i < pinBatch.activeConstraintCount; i++) + { + solverBatch.edgeRanges[(offset + i) * 2] = m_Rope.deformableEdgesOffset + firstEdge.edgeIndex; + solverBatch.edgeRanges[(offset + i) * 2 + 1] = m_Rope.deformableEdgesOffset + lastEdge.edgeIndex; + solverBatch.edgeRangeMus[(offset + i) * 2] = firstEdge.coordinate; + solverBatch.edgeRangeMus[(offset + i) * 2 + 1] = lastEdge.coordinate; + } + solverBatch.edgeRanges.Upload(); + solverBatch.edgeRangeMus.Upload(); + + m_RangeDirty = false; + } + + if (m_PositionDirty) + { + // update edge index and coordinate, then upload them. + for (int i = 0; i < pinBatch.activeConstraintCount; i++) + { + solverBatch.particleIndices[offset + i] = m_Rope.deformableEdgesOffset + currentEdge.edgeIndex; + solverBatch.edgeMus[offset + i] = currentEdge.coordinate; + } + solverBatch.particleIndices.Upload(); + solverBatch.edgeMus.Upload(); + + m_PositionDirty = false; + } + else + { + // read edge index and coordinate: + for (int i = 0; i < pinBatch.activeConstraintCount; i++) + { + currentEdge.coordinate = solverBatch.edgeMus[offset + i]; + currentEdge.edgeIndex = solverBatch.particleIndices[offset + i] - m_Rope.deformableEdgesOffset; + m_Position = currentEdge.GetRopeCoordinate(m_Rope); + } + } + + for (int i = 0; i < pinBatch.activeConstraintCount; i++) + { + relativeVelocity = solverBatch.relativeVelocities[offset + i]; + } + } + } + } + } private void BreakPinhole(float substepTime) { if (enabled && m_Rope.isLoaded && isBound) { var solver = m_Rope.solver; var actorConstraints = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; bool dirty = false; if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) { int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); if (pinBatchIndex >= 0 && pinBatchIndex < rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole].Count) { int offset = rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole][pinBatchIndex]; var solverBatch = solverConstraints.batches[pinBatchIndex]; float sqrTime = substepTime * substepTime; for (int i = 0; i < pinBatch.activeConstraintCount; i++) { + // In case the handle has been created/destroyed. + if (pinBatch.pinBodies[i] != attachedCollider.Handle) { pinBatch.pinBodies[i] = attachedCollider.Handle; dirty = true; } + + // in case the constraint has been broken: + if (-solverBatch.lambdas[offset + i] / sqrTime > breakThreshold) { pinBatch.DeactivateConstraint(i); dirty = true; } } } } + + // constraints are recreated at the start of a step. + if (dirty) m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); } } } } \ No newline at end of file diff --git a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiAmbientForceZone.cs.meta b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs.meta similarity index 64% rename from Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiAmbientForceZone.cs.meta rename to Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs.meta index 32645ed8d..bec258d4c 100644 --- a/Assets/ThirdParty/Obi/Scripts/Common/Utils/Forces/ObiAmbientForceZone.cs.meta +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs.meta @@ -1,11 +1,11 @@ fileFormatVersion: 2 -guid: 8f33b658b41e945e0bae1d3f0af0830e +guid: 2aadf7c5471054b0db8c70bd317bc272 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: 092f06332c018434b8c8ea86164ef4fd, type: 3} + icon: {fileID: 2800000, guid: 214df93f7c2ed4c1094bb6105c050575, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs index 63fc3b315..7a108393c 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs @@ -8,13 +8,14 @@ namespace Obi [Range(0,1)] public float m; - public void LateUpdate() + public void LateUpdate() { - if (smoother != null) + if (smoother != null && smoother.actor.isLoaded) { + var trfm = smoother.actor.solver.transform; ObiPathFrame section = smoother.GetSectionAt(m); - transform.position = smoother.transform.TransformPoint(section.position); - transform.rotation = smoother.transform.rotation * (Quaternion.LookRotation(section.tangent, section.binormal)); + transform.position = trfm.TransformPoint(section.position); + transform.rotation = trfm.rotation * Quaternion.LookRotation(section.tangent, section.binormal); } } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs index 045b3d99d..9697db2e0 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs @@ -8,7 +8,6 @@ namespace Obi /** * This component plugs a prefab instance at each cut in the rope. Optionally, it will also place a couple instances at the start/end of an open rope. */ - [RequireComponent(typeof(ObiRope))] [RequireComponent(typeof(ObiPathSmoother))] public class ObiRopePrefabPlugger : MonoBehaviour { @@ -25,12 +24,12 @@ namespace Obi { instances = new List(); smoother = GetComponent(); - smoother.OnCurveGenerated += UpdatePlugs; + GetComponent().OnInterpolate += UpdatePlugs; } void OnDisable() { - smoother.OnCurveGenerated -= UpdatePlugs; + GetComponent().OnInterpolate -= UpdatePlugs; ClearPrefabInstances(); } @@ -54,43 +53,46 @@ namespace Obi } // Update is called once per frame - void UpdatePlugs(ObiActor actor) + void UpdatePlugs(ObiActor actor, float simulatedTime, float substepTime) { - var rope = actor as ObiRopeBase; + if (!actor.isLoaded) + return; // cache the rope's transform matrix/quaternion: - Matrix4x4 l2w = rope.transform.localToWorldMatrix; + Matrix4x4 l2w = smoother.actor.solver.transform.localToWorldMatrix; Quaternion l2wRot = l2w.rotation; int instanceIndex = 0; - // place prefabs at the start/end of each curve: - for (int c = 0; c < smoother.smoothChunks.Count; ++c) - { - ObiList curve = smoother.smoothChunks[c]; + var system = actor.solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + int chunkCount = system.GetChunkCount(smoother.indexInSystem); + // place prefabs at the start/end of each curve: + for (int c = 0; c < chunkCount; ++c) + { if ((plugTears && c > 0) || (plugStart && c == 0)) { var instance = GetOrCreatePrefabInstance(instanceIndex++); instance.SetActive(true); - ObiPathFrame frame = curve[0]; + ObiPathFrame frame = system.GetFrameAt(smoother.indexInSystem, c, 0); instance.transform.position = l2w.MultiplyPoint3x4(frame.position); instance.transform.rotation = l2wRot * (Quaternion.LookRotation(-frame.tangent, frame.binormal)); instance.transform.localScale = instanceScale; } - if ((plugTears && c < smoother.smoothChunks.Count - 1) || - (plugEnd && c == smoother.smoothChunks.Count - 1)) - { + if ((plugTears && c < chunkCount - 1) || + (plugEnd && c == chunkCount - 1)) + { var instance = GetOrCreatePrefabInstance(instanceIndex++); instance.SetActive(true); - ObiPathFrame frame = curve[curve.Count - 1]; + int frameCount = system.GetSmoothFrameCount(smoother.indexInSystem, c); + ObiPathFrame frame = system.GetFrameAt(smoother.indexInSystem, c, frameCount-1); instance.transform.position = l2w.MultiplyPoint3x4(frame.position); - instance.transform.rotation = l2wRot * (Quaternion.LookRotation(frame.tangent, frame.binormal)); + instance.transform.rotation = l2wRot * Quaternion.LookRotation(frame.tangent, frame.binormal); instance.transform.localScale = instanceScale; } diff --git a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs index be1c694b7..58dfb54f4 100644 --- a/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs +++ b/Assets/ThirdParty/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs @@ -13,14 +13,19 @@ namespace Obi public float inThreshold = 0.4f; [Header("Roll out/in speeds")] - public float outSpeed = 0.05f; - public float inSpeed = 0.15f; + public float outSpeed = 4; + public float inSpeed = 2; - public void Awake() + public float maxLength = 10; + + private float restLength; + + public void Awake() { cursor = GetComponent(); rope = GetComponent(); - } + restLength = rope.restLength; + } public void OnValidate() { @@ -33,21 +38,25 @@ namespace Obi { // get current and rest lengths: float length = rope.CalculateLength(); - float restLength = rope.restLength; // calculate difference between current length and rest length: float diff = Mathf.Max(0, length - restLength); + float lengthChange = 0; + // if the rope has been stretched beyond the reel out threshold, increase its rest length: if (diff > outThreshold) - restLength += diff * outSpeed; + lengthChange = outSpeed * Time.deltaTime; // if the rope is not stretched past the reel in threshold, decrease its rest length: if (diff < inThreshold) - restLength -= diff * inSpeed; + lengthChange = -inSpeed * Time.deltaTime; - // set the new rest length: - cursor.ChangeLength(restLength); + // make sure not to exceed maxLength: + lengthChange -= Mathf.Max(0, restLength + lengthChange - maxLength); + + // set the new rest length: + restLength = cursor.ChangeLength(lengthChange); } } } diff --git a/Packages/manifest.json b/Packages/manifest.json index 049fe1f03..bc73693ca 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -2,10 +2,14 @@ "dependencies": { "com.unity.2d.sprite": "1.0.0", "com.unity.ai.navigation": "2.0.8", + "com.unity.burst": "1.8.24", "com.unity.collab-proxy": "2.8.2", + "com.unity.collections": "2.5.7", "com.unity.ide.rider": "3.0.36", "com.unity.ide.visualstudio": "2.0.23", "com.unity.inputsystem": "1.14.2", + "com.unity.jobs": "0.70.0-preview.7", + "com.unity.mathematics": "1.3.2", "com.unity.multiplayer.center": "1.0.0", "com.unity.nuget.newtonsoft-json": "3.2.1", "com.unity.postprocessing": "3.5.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 7c29c4c17..7522788da 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -216,7 +216,7 @@ }, "com.unity.burst": { "version": "1.8.24", - "depth": 1, + "depth": 0, "source": "registry", "dependencies": { "com.unity.mathematics": "1.2.1", @@ -233,7 +233,7 @@ }, "com.unity.collections": { "version": "2.5.7", - "depth": 1, + "depth": 0, "source": "registry", "dependencies": { "com.unity.burst": "1.8.19", @@ -277,9 +277,18 @@ }, "url": "https://packages.unity.com" }, + "com.unity.jobs": { + "version": "0.70.0-preview.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.collections": "1.4.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.mathematics": { "version": "1.3.2", - "depth": 1, + "depth": 0, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" @@ -294,7 +303,7 @@ }, "com.unity.nuget.mono-cecil": { "version": "1.11.5", - "depth": 2, + "depth": 1, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" @@ -436,7 +445,7 @@ }, "com.unity.test-framework.performance": { "version": "3.1.0", - "depth": 2, + "depth": 1, "source": "registry", "dependencies": { "com.unity.test-framework": "1.1.33", diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index 128827578..b41b48b7d 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -9,34 +9,34 @@ EditorUserSettings: value: 18134705175a055722080a3115371d4a0d55006876786860616b0471b8b07a68ffab74f9ee2a3a30300cea1a11320d0beb1a0c25f7060f494b4cc80018eb09361fc211cb1f862d19c51d19dcc413d6ade0d8ddfcddf9f4d9d29195fcfde6ebeae6f0a9c9afa6f8c5b89ff7a1aacececac4eba4d7c9d28bda flags: 0 RecentlyUsedSceneGuid-0: - value: 51500d5451575a5a545655754173594415164f727b2a7e67797c1b6bb4e2303e + value: 5409035450035e0e0c5d5a7a13770a40454e4f722f7f24347e2d1f30b0b76360 flags: 0 RecentlyUsedSceneGuid-1: - value: 52550d0256025d0c08595f2347735c4417154078747172642f784f66b4b8366c + value: 525255535d0c500f5f0b587115775c1440161b732d7c2060747f1936e6b06639 flags: 0 RecentlyUsedSceneGuid-2: - value: 005752035c000a090b5a0d711376074443151b282e297f32742f4564b5b63660 + value: 5b08515306560a0a0b0b542449770715474e4d7d7b7f7769792b1863e6b7313d flags: 0 RecentlyUsedSceneGuid-3: - value: 50035657070c0b0c55565d7b427a0c44154e4c2e7b7d75627f2c1c32e3b46639 + value: 5705040755540d0b5c5f547b417707134216487d7b707e6529714c6be6e33169 flags: 0 RecentlyUsedSceneGuid-4: - value: 5300575451055d580b585f20457a5944134e197d7b2e22617e7a1e66bae1313a + value: 00080756500d0d0355580a7049770a44454e19732f7b7f3575794566b2b6376a flags: 0 RecentlyUsedSceneGuid-5: - value: 5301015556035e585c57082643210e4410164b7d2a2923327a791e35e3b3636f + value: 5702075052030b0e5458087142770745104f4a7d747d72667e2d4d36b2b8676f flags: 0 RecentlyUsedSceneGuid-6: - value: 0652525055575c5d5c0f5c7a1477094440151a2b2f2a2434747d4835e1e46661 + value: 5a520c0256040b0b0f5d5a7643775914474e412e2f70243678704c6ae0e16c6d flags: 0 RecentlyUsedSceneGuid-7: - value: 5505015f5c515a085f5b092149760f441716407a787d7564287b1b36e7e1366e + value: 535552075c510a595b5f557040770e484e164d792d7d75657d791e62b4e4366b flags: 0 RecentlyUsedSceneGuid-8: - value: 0707515e03070c585e5f0f7513770f444f154f28747b2060747f1e35bae26d6c + value: 0503575f5c57085954560d2447775e4513151e7c292c2035787f4b60b4e23760 flags: 0 RecentlyUsedSceneGuid-9: - value: 0007065353055f0c0c0b5f2347725c44474f402e7878756629711f62e6b6606b + value: 02550255060d590c0c0b097016770b12444f1e2b7e2a2534797f4b60b6e46c60 flags: 0 UnityEditor.ShaderGraph.Blackboard: value: 18135939215a0a5004000b0e15254b524c030a3f2964643d120d1230e9e93a3fd6e826abbd2e2d293c4ead313b08042de6030a0afa240c0d020be94c4ba75e435d8715fa32c70d15d11612dacc11fee5d3c5d1fe9ab1bf968e93e2ffcbc3e7e2f0b3ffe0e8b0be9afeffa9ffff8e85dd8390e2969e8899daa7